2006年9月全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)C語(yǔ)言筆試試題及答案

字號(hào):

為大家收集整理了《2006年9月全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)C語(yǔ)言筆試試題及答案》供大家參考,希望對(duì)大家有所幫助?。。?BR>    一、選擇題((1)一(10)每題2分,(11)一(50)每題1分,共60分)
    下列各題A)、B)、C)、D)四個(gè)選項(xiàng)中,只有一個(gè)選項(xiàng)是正確的,請(qǐng)將正確選項(xiàng)涂寫在答題卡相應(yīng)位置上,答在試卷上不得分。
    (1)下列選項(xiàng)中不屬于結(jié)構(gòu)化程序設(shè)計(jì)方法的是
    A.自頂向下
    B.逐步求精
    C.模塊化
    D.可復(fù)用
    (2)兩個(gè)或兩個(gè)以上模塊之間關(guān)聯(lián)的緊密程度稱為
    A.耦合度
    B.內(nèi)聚度
    C.復(fù)雜度
    D.?dāng)?shù)據(jù)傳輸特性
    (3)下列敘述中正確的是
    A.軟件測(cè)試應(yīng)該由程序開發(fā)者來(lái)完成
    B.程序經(jīng)調(diào)試后一般不需要再測(cè)試
    C.軟件維護(hù)只包括對(duì)程序代碼的維護(hù)
    D.以上三種說(shuō)法都不對(duì)
    (4)按照“后進(jìn)先出”原則組織數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)是
    A.隊(duì)列
    B.棧
    C.雙向鏈表
    D.二叉樹
    (5)下列敘述中正確的是
    A.線性鏈表是線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)
    B.棧與隊(duì)列是非線性結(jié)構(gòu)
    C.雙向鏈表是非線性結(jié)構(gòu)
    D.只有根結(jié)點(diǎn)的二叉樹是線性結(jié)構(gòu)
    (6)對(duì)如下二叉樹
    ABDECF
    進(jìn)行后序遍歷的結(jié)果為
    A.ABCDEF
    B.DBEAFC
    C.ABDECF
    D.DEBFCA
    (7)在深度為7的滿二叉樹中,葉子結(jié)點(diǎn)的個(gè)數(shù)為
    A.32
    B.31
    C.64
    D.63
    (8)“商品”與“顧客”兩個(gè)實(shí)體集之間的聯(lián)系一般是
    A.一對(duì)一
    B.一對(duì)多
    C.多對(duì)一
    D.多對(duì)多
    (9)在E-R圖中,用來(lái)表示實(shí)體的圖形是
    A.矩形
    B.橢圓形
    C.菱形
    D.三角形
    (10)數(shù)據(jù)庫(kù)DB、數(shù)據(jù)庫(kù)系統(tǒng)DBS、數(shù)據(jù)庫(kù)管理系統(tǒng)DBMS之間的關(guān)系是
    A.DB包含DBS和DBMS
    B.DBMS包含DB和DBS
    C.DBS包含DB和DBMS
    D.沒有任何關(guān)系
    (11)以下不合法的用戶標(biāo)識(shí)符是
    A.j2_KEY
    B.Double
    C.4d
    D._8_
    (12)以下不合法的數(shù)值常量是
    A.011
    B.1e1
    C.8.0E0.5
    D.0xabcd
    (13)以下不合法的字符常量是
    A.′\018′
    B.′\"′
    C.′\\′
    D.′\xcc′
    (14)表達(dá)式3.6-5/2+1.2+5%2的值是
    A.4.3
    B.4.8
    C.3.3
    D.3.8
    (15)以下能正確定義字符串的語(yǔ)句是
    A.char str[]={′\064′};
    B.char str="kx43";
    C.char str=";
    D.char str[]="\0";
    (16)以下數(shù)組定義中錯(cuò)誤的是
    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)以下四個(gè)程序中,完全正確的是
    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語(yǔ)句是
    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中通過(guò)return語(yǔ)句返回一個(gè)函數(shù)值,以下選項(xiàng)中錯(cuò)誤的程序是
    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)不等價(jià)的表達(dá)式是
    A.(!E==0)
    B.(E>0‖E<0)
    C.(E==0)
    D.(E!=0)
    (22)要求通過(guò)while循環(huán)不斷讀入字符,當(dāng)讀入字母N時(shí)結(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.一個(gè)整數(shù)
    C.形參P中存放的值
    D.形參P的地址值
    (24)若有說(shuō)明語(yǔ)句:double *p,a;則能通過(guò)scanf語(yǔ)句正確給輸入項(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)體說(shuō)明和變量定義,如圖所示,指針p、q、r分別指向一個(gè)鏈表中連續(xù)的三個(gè)結(jié)點(diǎn)。
    struct node
    {char data;
    struct node *next; }*p,*q,*r;
    現(xiàn)要將q和r所指結(jié)點(diǎn)交換前后位置,同時(shí)要保持鏈表的連續(xù),以下不能完成此操作的語(yǔ)句是
    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->y
    B.pt->x
    C.++pt->x
    D.(pt++)->x
    (27)設(shè)fp為指向某二進(jìn)制文件的指針,且已讀到此文件末尾,則函數(shù)feof(fp)的返回值為
    A.EOF
    B.非0值
    C.0
    D.NULL
    (28)設(shè)有以下語(yǔ)句
    int a=1,b=2,c;
    c=a^(b<<2);
    執(zhí)行后,C的值為
    A.6
    B.7
    C.8
    D.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.1267
    B.1256
    C.1278
    D.1245
    (30)有以下程序
    main()
    {int y=10;
    while(y--);printf("y=%d\n",y);
    }
    程序執(zhí)行后的輸出結(jié)果是
    A.y=0
    B.y=-1
    C.y=1
    D.while構(gòu)成無(wú)限循環(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,0
    B.0,0,0,3
    C.1,1,2,0
    D.編譯有錯(cuò)
    (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=4
    B.x=8
    C.x=6
    D.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.21
    B.5
    C.5.0
    D.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 3
    B.3 5 7
    C.3 6 9
    D.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.1
    B.2
    C.3
    D.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.45
    B.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.Prohsbn
    B.Prphsbn
    C.Progsbn
    D.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,abc
    B.a(chǎn)bc,123
    C.1bc,a23
    D.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í)行程序時(shí),給變量X輸入10,程序的輸出結(jié)果是
    A.55
    B.54
    C.65
    D.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.45
    B.50
    C.60
    D.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,43
    B.43,21
    C.43,00
    D.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.35
    B.37
    C.39
    D.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個(gè)字符寫到fp所指文件中*/
    fseek(fp,0L,SEEK_SET); /*文件位置指針移到文件開頭*/
    fwrite(s2,5,1,fp);
    fclose(fp);
    }
    A.Basican
    B.BasicFortran
    C.Basic
    D.FortranBasic
    (44)以下敘述中錯(cuò)誤的是
    A.C語(yǔ)言源程序經(jīng)編譯后生成后綴為.obj的目標(biāo)程序
    B.C程序經(jīng)過(guò)編譯、連接步驟之后才能形成一個(gè)真正可執(zhí)行的二進(jìn)制機(jī)器指令文件
    C.用C語(yǔ)言編寫的程序稱為源程序,它以ASCII代碼形式存放在一個(gè)文本文件中
    D.C語(yǔ)言中的每條可執(zhí)行語(yǔ)句和非執(zhí)行語(yǔ)句最終都將被轉(zhuǎn)換成二進(jìn)制的機(jī)器指令
    (45)以下敘述中錯(cuò)誤的是
    A.算法正確的程序最終一定會(huì)結(jié)束
    B.算法正確的程序可以有零個(gè)輸出
    C.算法正確的程序可以有零個(gè)輸入
    D.算法正確的程序?qū)τ谙嗤妮斎胍欢ㄓ邢嗤慕Y(jié)果
    (46)以下敘述中錯(cuò)誤的是
    A.C程序必須由一個(gè)或一個(gè)以上的函數(shù)組成
    B.函數(shù)調(diào)用可以作為一個(gè)獨(dú)立的語(yǔ)句存在
    C.若函數(shù)有返回值,必須通過(guò)return語(yǔ)句返回
    D.函數(shù)形參的值也可以傳回給對(duì)應(yīng)的實(shí)參
    (47)設(shè)有以下定義和語(yǔ)句
    char str[20]="Program",*p;
    p=str;
    則以下敘述中正確的是
    A.*p與str[0]的值相等
    B.str與p的類型完全相同
    C.str數(shù)組長(zhǎng)度和p所指向的字符串長(zhǎng)度相等
    D.?dāng)?shù)組str中存放的內(nèi)容和指針變量p中存放的內(nèi)容相同
    (48)以下敘述中錯(cuò)誤的是
    A.C程序中的#include和#define行均不是C語(yǔ)句
    B.除逗號(hào)運(yùn)算符外,賦值運(yùn)算符的優(yōu)先級(jí)最低
    C.C程序中,j++;是賦值語(yǔ)句
    D.C程序中,+、-、*、/、%號(hào)是算術(shù)運(yùn)算符,可用于整型和實(shí)型數(shù)的運(yùn)算
    (49)以下敘述中正確的是
    A.預(yù)處理命令行必須位于C源程序的起始位置
    B.在C語(yǔ)言中,預(yù)處理命令行都以"#"開頭
    C.每個(gè)C程序必須在開頭包含預(yù)處理命令行:#include
    D.C語(yǔ)言的預(yù)處理不能實(shí)現(xiàn)宏定義和條件編譯的功能
    (50)以下敘述中錯(cuò)誤的是
    A.可以通過(guò)typedef增加新的類型
    B.可以用typedef將已存在的類型用一個(gè)新的名字來(lái)代表
    C.用typedef定義新的類型名后,原有類型名仍有效
    D.用typedef可以為各種類型起別名,但不能為變量起別名
    二、填空題(每空2分,共40分)
    請(qǐng)將每一個(gè)空的正確答案寫在答題卡【1】至【20】序號(hào)的橫線上,答在試卷上不得分。
    (1)對(duì)長(zhǎng)度為10的線性表進(jìn)行冒泡排序,最壞情況下需要比較的次數(shù)為【1】。
    (2)在面向?qū)ο蠓椒ㄖ?,?】描述的是具有相似屬性與操作的一組對(duì)象。
    (3)在關(guān)系模型中,把數(shù)據(jù)看成是二維表,每一個(gè)二維表稱為一個(gè)【3】。
    (4)程序測(cè)試分為靜態(tài)分析和動(dòng)態(tài)測(cè)試。其中【4】是指不執(zhí)行程序,而只是對(duì)程序文本進(jìn)行檢查,通過(guò)閱讀和討論,分析和發(fā)現(xiàn)程序中的錯(cuò)誤。
    (5)數(shù)據(jù)獨(dú)立性分為邏輯獨(dú)立性與物理獨(dú)立性。當(dāng)數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)改變時(shí),其邏輯結(jié)構(gòu)可以不變,因此,基于邏輯結(jié)構(gòu)的應(yīng)用程序不必修改,稱為【5】。
    (6)若變量a,b已定義為int類型并賦值21和55,要求用printf函數(shù)以a=21,b=55的形式輸出,請(qǐng)寫出完整的的輸出語(yǔ)句【6】。
    (7)以下程序用于判斷a、b、c能否構(gòu)成三角形,若能,輸出YES,否則輸出NO。當(dāng)給a、b、c輸入三角形三條邊長(zhǎng)時(shí),確定a、b、c能構(gòu)成三角形的條件是需同時(shí)滿足三個(gè)條件:a+b>c,a+c>b,b+c>a。請(qǐng)?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)行以下程序時(shí),輸入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)有兩個(gè)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)編譯連接通過(guò)后,運(yùn)行程序T18時(shí),輸入Thank!則輸出結(jié)果是:【11】。
    (12)以下函數(shù)fun的功能是返回str所指字符串中以形參c中字符開頭的后續(xù)字符串的首地址,例如:str所指字符串為:Hello!,c中的字符為e,則函數(shù)返回字符串:ello!的首地址。若str所指字符串為空串或不包含c中的字符,則函數(shù)返回NULL。請(qǐng)?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整除且個(gè)位數(shù)為6的所有整數(shù),請(qǐng)?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是否為素?cái)?shù),是素?cái)?shù),函數(shù)返回1,
    否則返回0。請(qǐng)?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時(shí)(注意:n不得大于10),程序運(yùn)行結(jié)果如下:
    A B C D E
    F G H I
    J K L
    M N
    O
    請(qǐng)?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)成一個(gè)如圖所示的帶頭結(jié)點(diǎn)的單向鏈表,在結(jié)點(diǎn)的數(shù)據(jù)域中放入了具有兩個(gè)字符的字符串。函數(shù)disp的功能是顯示輸出該單鏈表中所有結(jié)點(diǎn)中的字符串。請(qǐng)?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->su
    B.; p=【20】; }
    }
    main()
    {Node *hd;
    hd=fun();disp(h
    D.;printf("\n");
    }