2006年4月全國計(jì)算機(jī)等級考試二級C語言筆試試卷含答案

字號:

一、選擇題((1)一(10)每題2分,(11)一(50)每題1分,共60分)
    下列各題A)、B)、C)、D)四個選項(xiàng)中,只有一個選項(xiàng)是正確的,請將正確選項(xiàng)涂寫在答題卡相應(yīng)位置上,答在試卷上不得分。
    (1)下列選項(xiàng)中不屬于結(jié)構(gòu)化程序設(shè)計(jì)方法的是
    A)自頂向下B)逐步求精
    C)模塊化 D)可復(fù)用
    (2)兩個或兩個以上模塊之間關(guān)聯(lián)的緊密程度稱為
    A)耦合度B)內(nèi)聚度
    C)復(fù)雜度 D)數(shù)據(jù)傳輸特性
    (3)下列敘述中正確的是
    A)軟件測試應(yīng)該由程序開發(fā)者來完成
    B)程序經(jīng)調(diào)試后一般不需要再測試
    C)軟件維護(hù)只包括對程序代碼的維護(hù)
    D)以上三種說法都不對
    (4)按照“后進(jìn)先出”原則組織數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)是
    A)隊(duì)列B)棧
    C)雙向鏈表D)二叉樹
    (5)下列敘述中正確的是
    A)線性鏈表是線性表的鏈?zhǔn)酱鎯Y(jié)構(gòu)
    B)棧與隊(duì)列是非線性結(jié)構(gòu)
    C)雙向鏈表是非線性結(jié)構(gòu)
    D)只有根結(jié)點(diǎn)的二叉樹是線性結(jié)構(gòu)
    (6)對如下二叉樹
    ABDECF
    進(jìn)行后序遍歷的結(jié)果為
    A)ABCDEFB)DBEAFC
    C)ABDECFD)DEBFCA
    (7)在深度為7的滿二叉樹中,葉子結(jié)點(diǎn)的個數(shù)為
    A)32B)31
     C)64D)63
    (8)“商品”與“顧客”兩個實(shí)體集之間的聯(lián)系一般是
    A)一對一B)一對多
    C)多對一D)多對多
    (9)在E-R圖中,用來表示實(shí)體的圖形是
    A)矩形B)橢圓形
    C)菱形D)三角形
    (10)數(shù)據(jù)庫DB、數(shù)據(jù)庫系統(tǒng)DBS、數(shù)據(jù)庫管理系統(tǒng)DBMS之間的關(guān)系是
    A)DB包含DBS和DBMS
    B)DBMS包含DB和DBS
    C)DBS包含DB和DBMS
    D)沒有任何關(guān)系
    (11)以下不合法的用戶標(biāo)識符是
    A)j2_KEYB)Double
    C)4dD)_8_
    (12)以下不合法的數(shù)值常量是
    A)011B)1e1
    C)8.0E0.5D)0xabcd
    (13)以下不合法的字符常量是
    A)′\018′B)′\"′
     C)′\\′D)′\xcc′
    (14)表達(dá)式3.6-5/2+1.2+5%2的值是
    A)4.3B)4.8
    C)3.3 D)3.8
     (15)以下能正確定義字符串的語句是
    A)char str[]={′\064′};B)char str="kx43";
    C)char str="; D)char str[]="\0";
     (16)以下數(shù)組定義中錯誤的是
    A)int x[][3]={0};
    B)int x[2][3]={{l,2},{3,4},{5,6}};
    C)int x[][3]={{l,2,3},{4,5,6}};
    D)int x[2][3]={l,2,3,4,5,6};
     (17)若要求從鍵盤讀入含有空格字符的字符串,應(yīng)使用函數(shù)
    A)getc()B)gets()
    C)getchar()D)scanf()
     (18)以下四個程序中,完全正確的是
    A)#include B)#include
    main();main()
    {/*programming*/{/*/ programming /*/
    printf("programming!\n");} printf("programming!\n");}
    C) #include D) include
    main()main()
    {/*/*programming*/*/{/*programming*/
    printf("programming!\n");} printf("programming!\n");}
     (19)若有定義:float x=1.5;int a=1,b=3,c=2;則正確的switch語句是
    A)switch(x)B)switch((int)x);
    {case 1.0:printf("*\n"); {case 1:printf("*\n");
    case 2.0:printf("**\n");} case 2:printf("**\n");}
    C)switch(a+b) D)switch(a+b)
    {case 1:printf("*\n");{case 1:printf("*\n");
     case 2+1:printf("**\n");}case c:printf("**\n");}
    (20)若各選項(xiàng)中所用變量已正確定義,函數(shù)fun中通過return語句返回一個函數(shù)值,以下選項(xiàng)中錯誤的程序是
    A)main()B)float fun(int a,int b){……}
    {……x=fun(2,10);……}main()
    float fun(int a,int b){……} {……x=fun(i,j);……}
    C)float fun(int,int); D)main()
     main() {float fun(int i,int j);
    {……x=fun(2,10);……} ……x=fun(i,j); ……}
    float fun(int a,int b){……}float fun(int a,int b){……}
    (21)在以下給出的表達(dá)式中,與while(E)中的(E)不等價的表達(dá)式是
    A)(!E==0)B)(E>0‖E<0)
    C)(E==0)D)(E!=0)
    (22)要求通過while循環(huán)不斷讀入字符,當(dāng)讀入字母N時結(jié)束循環(huán)。若變量已正確定義,
     以下正確的程序段是
    A)while((ch=getchar())!=′N′)printf("%c",ch);
    B)while(ch=getchar()!=′N′)printf("%c",ch);
    C)while(ch=getchar()==′N′)printf("%c",ch);
    D)while((ch=getchar())==′N′)printf("%c",ch);
    (23)已定義以下函數(shù)
     int fun(int *p)
     {return *p;)
     fun函數(shù)返回值是
    A)不確定的值
    B)一個整數(shù)
    C)形參P中存放的值
    D)形參P的地址值
    (24)若有說明語句:double *p,a;則能通過scanf語句正確給輸入項(xiàng)讀入數(shù)據(jù)的程序段是
    A)*p=&a; scanf("%1f",p);
    B)*p=&a; scanf("%f",p);
    C)p=&a; scanf("%1f",*p);
    D)p=&a; scanf("%1f",p);
    (25)現(xiàn)有以下結(jié)構(gòu)體說明和變量定義,如圖所示,指針p、q、r分別指向一個鏈表中連
    續(xù)的三個結(jié)點(diǎn)。
     struct node
     {char data;
    struct node *next; }*p,*q,*r;
    現(xiàn)要將q和r所指結(jié)點(diǎn)交換前后位置,同時要保持鏈表的連續(xù),以下不能完成此操作的語句是
    A)q->next=r->next;p->next=r;r->next=q;
    B)p->next=r;q->next=r->next;r->next=q;
    C)q->next=r->next;r->next=q;p->next=r;
    D)r->next=q;p->next=r;q->next=r->next;
    (26)有以下程序段
    struct st
    {int x;int *y;)*pt;
    int a[]={l,2},b[]={3,4};
    struct st c[2]={10,a,20,b};
    pt=c;
    以下選項(xiàng)中表達(dá)式的值為11的是
    A)*pt->yB)pt->x
    C)++pt->x D)(pt++)->x
    (27)設(shè)fp為指向某二進(jìn)制文件的指針,且已讀到此文件末尾,則函數(shù)feof(fp)的返回值為
    A)EOFB)非0值
    C)0 D)NULL
    (28)設(shè)有以下語句
    int a=1,b=2,c;
    c=a^(b<<2);
    執(zhí)行后,C的值為
    A)6B)7
    C)8D)9
    (29)有以下程序
    #include
    main()
    {char c1,c2,c3,c4,c5,c6;
    scanf("%c%c%c%c",&c1,&c2,&c3,&c4);
    c5=getchar(); c6=getchar();
    putchar(c1);putchar(c2);
    printf("%c%c\n",c5,c6);
    }
    程序運(yùn)行后,若從鍵盤輸入(從第1列開始)
    123<回車>
    45678<回車>
    則輸出結(jié)果是
    A)1267B)1256
    C)1278D)1245
    (30)有以下程序
    main()
    {int y=10;
    while(y--);printf("y=%d\n",y);
    }
    程序執(zhí)行后的輸出結(jié)果是
    A)y=0B)y=-1
    C)y=1D)while構(gòu)成無限循環(huán)
    (31)有以下程序
    main()
    {int a=0,b=0,c=0,d=0;
    if(a=1) b=1;c=2;
    else d=3;
    printf("%d,%d,%d,%d\n",a,b,c,d);
    }
    程序輸出
    A)0,1,2,0B)0,0,0,3
    C)1,1,2,0D)編譯有錯
    (32)有以下程序
    main()
    {int i,j,x=0;
    for(i=0;i<2;i++)
    {x++;
    for(j=0;j<=3;j++)
    {if(j%2)continue;
    x++;
    }
    x++;
    }
    printf("x=%d\n",x);
    }
     程序執(zhí)行后的輸出結(jié)果是
    A)x=4B)x=8
    C)x=6D)x=12
    (33)有以下程序
    int fun1(double a){return a*=a;}
    int fun2(double x,double y)
    {double a=0,b=0;
    a=fun1(x);b=fun1(y);return(int)(a+b);
    }
    main()
    {double w;w=fun2(1.1,2.0);……}
    程序執(zhí)行后變量w中的值是
    A)5.21B)5
    C)5.0D)0.0
    (34)有以下程序
     main()
     {int i,t[][3]={9,8,7,6,5,4,3,2,1};
    for(i=0;i<3;i++) printf("%d",t[2-i][i]);
    }
    程序執(zhí)行后的輸出結(jié)果是
    A)7 5 3B)3 5 7
    C)3 6 9D)7 5 1
    (35)有以下程序
     fun(char p[][10])
     {int n=0,i;
    for(i=0;i<7;i++)
    if(p[i][0]==′T′)n++;
    return n;
    }
    main()
    {char str[][10]={"Mon","Tue","Wed","Thu","Fri","Sat","Sun"};
     printf("%d\n",fun(str));
    }
    程序執(zhí)行后的輸出結(jié)果是
    A)1B)2
    C)3D)0
    (36)有以下程序
    main()
    {int i,s=0,t[]={l,2,3,4,5,6,7,8,9};
    for(i=0;i<9;i+=2)s+=*(t+i);
    printf("%d\n",s);
    }
    程序執(zhí)行后的輸出結(jié)果是
    A)45B)20
     C)25 D)36
    (37)有以下程序
     void fun1(char *p)
     {char *q;
    q=p;
    while(*q!=′\0′)
    { (*q)++; q++; )
    }
    main()
    {char a[]={"Program"), *p;
    p=&a[3];fun1(p);printf("%s\n",a);
    }
    程序執(zhí)行后的輸出結(jié)果是
    A)ProhsbnB)Prphsbn
    C)ProgsbnD)Program
    (38)有以下程序
     void swap(char *x,char *y)
     {char t;
    t=*x; *x=*y; *y=t;
    }
    main()
    {char *s1="abc",*s2="123";
    swap(s1,s2);printf("%s,%s\n",s1,s2);
    }
    程序執(zhí)行后的輸出結(jié)果是
    A)123,abcB)abc,123
     C)1bc,a23D)321,cba
    (39)有以下程序
     int fun(int n)
     {if(n==1)return 1;
    else
    return(n+fun(n-1));
    }
    main()
    {int x;
    scanf("%d",&x); x=fun(x);printf("%d\n",x);
    }
    執(zhí)行程序時,給變量X輸入10,程序的輸出結(jié)果是
    A)55B)54
    C)65D)45
    (40)有以下程序
    int fun(int x[],int n)
    {static int sum=0,i;
    for(i=0;i     return sum;
    }
    main()
    {int a[]={1,2,3,4,5},b[]={6,7,8,9},s=0;
    s=fun(a,5)+fun(b,4);printf("%d\n",s);
    }
    程序執(zhí)行后的輸出結(jié)果是
    A)45B)50
    C)60D)55
    (41)有以下程序
    main()
    {union
    {char ch[2];
    int d;
    }s;
    s.d=0x4321;
    printf("%x,%x\n",s.ch[0],s.ch[1]);
    }
    在16位編譯系統(tǒng)上,程序執(zhí)行后的輸出結(jié)果是
    A)21,43B)43,21
    C)43,00D)21,00
     (42)有以下程序
    main()
    {char *p[]={"3697","2584"};
    int i,j;long num=0;
    for(i=0;i<2;i++)
    {j=0;
    while(p[i][j]!=′\0′)
    {if((p[i][j]-′0′)%2)num=10*num+p[i][j]-′0′;
    j+=2;
    }
    }
    printf("%d\n",num);
    }
    程序執(zhí)行后的輸出結(jié)果是
    A)35B)37
    C)39D)3975
    (43)執(zhí)行以下程序后,test.txt文件的內(nèi)容是(若文件能正常打開)
    #include
    main()
    {FILE *fp;
    char *s1="Fortran",*s2="Basic";
    if((fp=fopen("test.txt","wb”))==NULL)
    {printf("Can′t open test.txt file\n");exit(1);}
    fwrite(s1,7,1,fp); /*把從地址s1開始的7個字符寫到fp所指文件中*/
    fseek(fp,0L,SEEK_SET); /*文件位置指針移到文件開頭*/
    fwrite(s2,5,1,fp);
    fclose(fp);
    }
    A)BasicanB)BasicFortran
    C)Basic D)FortranBasic
    (44)以下敘述中錯誤的是
    A)C語言源程序經(jīng)編譯后生成后綴為.obj的目標(biāo)程序
    B)C程序經(jīng)過編譯、連接步驟之后才能形成一個真正可執(zhí)行的二進(jìn)制機(jī)器指令文件
    C)用C語言編寫的程序稱為源程序,它以ASCII代碼形式存放在一個文本文件中
    D)C語言中的每條可執(zhí)行語句和非執(zhí)行語句最終都將被轉(zhuǎn)換成二進(jìn)制的機(jī)器指令
     (45)以下敘述中錯誤的是
    A)算法正確的程序最終一定會結(jié)束
    B)算法正確的程序可以有零個輸出
    C)算法正確的程序可以有零個輸入
    D)算法正確的程序?qū)τ谙嗤妮斎胍欢ㄓ邢嗤慕Y(jié)果
     (46)以下敘述中錯誤的是
    A)C程序必須由一個或一個以上的函數(shù)組成
    B)函數(shù)調(diào)用可以作為一個獨(dú)立的語句存在
    C)若函數(shù)有返回值,必須通過return語句返回
    D)函數(shù)形參的值也可以傳回給對應(yīng)的實(shí)參
     (47)設(shè)有以下定義和語句
    char str[20]="Program",*p;
    p=str;
    則以下敘述中正確的是
    A)*p與str[0]的值相等
    B)str與p的類型完全相同
    C)str數(shù)組長度和p所指向的字符串長度相等
    D)數(shù)組str中存放的內(nèi)容和指針變量p中存放的內(nèi)容相同
    (48)以下敘述中錯誤的是
    A)C程序中的#include和#define行均不是C語句
    B)除逗號運(yùn)算符外,賦值運(yùn)算符的優(yōu)先級最低
    C)C程序中,j++;是賦值語句
    D)C程序中,+、-、*、/、%號是算術(shù)運(yùn)算符,可用于整型和實(shí)型數(shù)的運(yùn)算
    (49)以下敘述中正確的是
    A)預(yù)處理命令行必須位于C源程序的起始位置
    B)在C語言中,預(yù)處理命令行都以"#"開頭
    C)每個C程序必須在開頭包含預(yù)處理命令行:#include
    D)C語言的預(yù)處理不能實(shí)現(xiàn)宏定義和條件編譯的功能
    (50)以下敘述中錯誤的是
    A)可以通過typedef增加新的類型
    B)可以用typedef將已存在的類型用一個新的名字來代表
    C)用typedef定義新的類型名后,原有類型名仍有效
    D)用typedef可以為各種類型起別名,但不能為變量起別名
    二、填空題(每空2分,共40分)
    請將每一個空的正確答案寫在答題卡【1】至【20】序號的橫線上,答在試卷上不得分。
    (1)對長度為10的線性表進(jìn)行冒泡排序,最壞情況下需要比較的次數(shù)為【1】。
    (2)在面向?qū)ο蠓椒ㄖ?,?】描述的是具有相似屬性與操作的一組對象。
    (3)在關(guān)系模型中,把數(shù)據(jù)看成是二維表,每一個二維表稱為一個【3】。
    (4)程序測試分為靜態(tài)分析和動態(tài)測試。其中【4】是指不執(zhí)行程序,而只是對程序文本進(jìn)行檢查,通過閱讀和討論,分析和發(fā)現(xiàn)程序中的錯誤。
    (5)數(shù)據(jù)獨(dú)立性分為邏輯獨(dú)立性與物理獨(dú)立性。當(dāng)數(shù)據(jù)的存儲結(jié)構(gòu)改變時,其邏輯結(jié)構(gòu)可以不變,因此,基于邏輯結(jié)構(gòu)的應(yīng)用程序不必修改,稱為【5】。
     (6)若變量a,b已定義為int類型并賦值21和55,要求用printf函數(shù)以a=21,b=55的形式輸出,請寫出完整的的輸出語句【6】。
     (7)以下程序用于判斷a、b、c能否構(gòu)成三角形,若能,輸出YES,否則輸出NO。當(dāng)給a、b、c輸入三角形三條邊長時,確定a、b、c能構(gòu)成三角形的條件是需同時滿足三個條件:a+b>c,a+c>b,b+c>a。請?zhí)羁铡?BR>    main()
    {float a,b,c;
    scanf("%f%f%f",&a,&b,&c);
    if(【7】)printf("YES\n");/*a、b、c能構(gòu)成三角形*/
    else printf("NO\n");/*a、b、c不能構(gòu)成三角形*/
    }
    (8)以下程序的輸出結(jié)果是【8】 。
    main()
    {int a[3][3]={{1,2,9},{3,4,8},{5,6,7}},i,s=0;
    for(i=0;i<3;i++) s+=a[i][i]+a[i][3-i-1];
    printf("%d\n",s);
    }
    (9)當(dāng)運(yùn)行以下程序時,輸入abcd,程序的輸出結(jié)果是:【9】。
     insert(char str[])
     {int i;
    i=strlen(str);
    while(i>0)
    {str[2*i]=str[i];str[2*i-1]=′*′;i--;}
    printf("%s\n",str);
    }
    main()
    {char str[40];
    scanf("%s",str);insert(str);
    }
    (10)下面程序的運(yùn)行結(jié)果是:【10】。
     fun(int t[],int n)
     {int i,m;
    if(n==1)return t[0];
    else
    if(n>=2){m=fun(t,n-1); return m; }
    }
    main()
    {int a[]={11,4,6,3,8,2,3,5,9,2};
    printf("%d\n",fun(a,10));
    }
    (11)現(xiàn)有兩個C程序文件T18.c和myfun.c同在TC系統(tǒng)目錄(文件夾)下,其中T18.c文件如下:
     #include
     #include "myfun.c"
     main()
     {fun();printf("\n");}
    myfun.c文件如下:
     void fun()
     {char s[80],c; int n=0;
    while((c=getchar())!=′\n′) s[n++]=c;
    n--;
    while(n>=0) printf("%c",s[n--]);
    }
    當(dāng)編譯連接通過后,運(yùn)行程序T18時,輸入Thank!則輸出結(jié)果是:【11】。
    (12)以下函數(shù)fun的功能是返回str所指字符串中以形參c中字符開頭的后續(xù)字符串的首
    地址,例如:str所指字符串為:Hello!,c中的字符為e,則函數(shù)返回字符串:ello!的首
    地址。若str所指字符串為空串或不包含c中的字符,則函數(shù)返回NULL。請?zhí)羁铡?BR>    char *fun(char *str,char c)
    { int n=0; char *p=str;
    if(p!=NULL)
    while(p[n]!=c&&p[n]!=′\0′)n++;
    if(p[n]==′\0′) return NULL;
    return(【12】);
    }
    (13)以下程序的功能是:輸出100以內(nèi)(不含100)能被3整除且個位數(shù)為6的
    所有整數(shù),請?zhí)羁铡?BR>    main()
    (int i,j;
    for(i=0;【13】;i++)
    {j=i*10+6;
    if(【14】)continue;
    printf("%d",j);
    }
    }
    (14)以下isprime函數(shù)的功能是判斷形參a是否為素數(shù),是素數(shù),函數(shù)返回1,
    否則返回0。請?zhí)羁?BR>    int isprime(int a)
    {int i;
    for(i=2;i<=a/2;i++)
    if(a%i==0)【15】;
     【16】;
    }
    (15)以下程序的功能是輸入任意整數(shù)給n后,輸出n行由大寫字母A開始構(gòu)成的三角形
    字符陣列圖形。例如,輸入整數(shù)5時(注意:n不得大于10),程序運(yùn)行結(jié)果如下:
    A B C D E
    F G H I
    J K L
    M N
    O
     請?zhí)羁胀瓿稍摮绦颉?BR>    main()
    {int i,j,n; char ch=′A′;
    scanf("%d",&n);
    if(n<11)
    {for(i=1;i<=n;i++)
    {for(j=1; j<=n-i+1;j++)
    {printf("%2c",ch);
    【17】;
    }
    【18】;
    }
    }
    else printf("n is too large!\n")
    printf("\n");
    }
     (16)以下程序中函數(shù)fun的功能是:構(gòu)成一個如圖所示的帶頭結(jié)點(diǎn)的單向鏈表,在結(jié)點(diǎn)的數(shù)據(jù)域中放入了具有兩個字符的字符串。函數(shù)disp的功能是顯示輸出該單鏈表中所有結(jié)點(diǎn)中的字符串。請?zhí)羁胀瓿珊瘮?shù)disp。
    #include
    typedef struct node/*鏈表結(jié)點(diǎn)結(jié)構(gòu)*/
    {char sub[3];
    struct node *next;
    }Node;
    Node fun(char s) /*建立鏈表*/
    {…… }
    void disp(Node *h)
    {Node *p;
    p=h->next;
    while(【19】)
    {printf("%s\n",P->sub); p=【20】; }
    }
    main()
    {Node *hd;
    hd=fun();disp(hd);printf("\n");
    }
    2006年4月全國計(jì)算機(jī)等級考試二級C語言筆試試卷答案
    一、 選擇題
      ?。?)【答案】D)
      ?。?)【答案】A)
      ?。?)【答案】D)
      ?。?)【答案】B)
      ?。?)【答案】A)
       (6)【答案】D)
      ?。?)【答案】C)
       (8)【答案】D)
      ?。?)【答案】A)
       (10)【答案】C)
      ?。?1)【答案】C
       (12)【答案】C
      ?。?3)【答案】A
      ?。?4)【答案】D
      ?。?5)【答案】D
      ?。?6)【答案】B
      ?。?7)【答案】B
      ?。?8)【答案】B
       (19)【答案】C
      ?。?0)【答案】A
      ?。?1)【答案】C
      ?。?2)【答案】A
      ?。?3)【答案】B
      ?。?4)【答案D
      ?。?5)【答案】D
      ?。?6)【答案】C
       (27)【答案】B
      ?。?8)【答案】D
      ?。?9)【答案】D
      ?。?1)【答案】D
       (32)【答案】B
      ?。?3)【答案】C
      ?。?4)【答案】B
      ?。?5)【答案】B
      ?。?6)【答案】C
      ?。?7)【答案】A
      ?。?8)【答案】C
      ?。?9)【答案】A
       (40)【答案】C
      ?。?1)【答案】A
      ?。?2)【答案】C
      ?。?3)【答案】A
       (44)【答案】D
      ?。?5)【答案】B
      ?。?6)【答案】D
      ?。?7)【答案】A
      ?。?8)【答案】D
      ?。?9)【答案】B
      ?。?0)【答案】A
       二、 填空
       (1)【答案】【1】45
      ?。?)【答案】【2】類
       (3)【答案】【3】關(guān)系
      ?。?)【答案】【4】靜態(tài)分析(靜態(tài)測試)
       (5)【答案】【5】物理獨(dú)立性
      ?。?)【答案】printf("a=%d,b=%d",a,b);
       (7)【答案】(a+b>c)&&(a+c>b)&&(b+c>a)
      ?。?)【答案】30
       (9)【答案】a*b*c*d*
      ?。?0)【答案】11
      ?。?1)【答案】!knahT
       (12)【答案】p+n
      ?。?3)【答案】i<10
      ?。?4)【答案】j%3!=0
       (15)【答案】return 0
      ?。?6)【答案】return 1
      ?。?7)【答案】ch++
       (18)【答案】printf(“\n”);
      ?。?9)【答案】p!=NULL
      ?。?0)【答案】p->next