2007年4月全國計算機考試二級C語言筆試試卷及參考答案

字號:

一選擇題
    (1)下列敘述中正確的是
    A)算法的效率只與問題的規(guī)模有關(guān),而與數(shù)據(jù)的存儲結(jié)構(gòu)無關(guān)
    B)算法的時間復(fù)雜度是指執(zhí)行算法所需要的計算工作量
    C)數(shù)據(jù)的邏輯結(jié)構(gòu)與存儲結(jié)構(gòu)是一一對應(yīng)的
    D)算法的時間復(fù)雜度與空間復(fù)雜度一定相關(guān)
    (2)在結(jié)構(gòu)化程序設(shè)計中,模塊劃分的原則是
    A)各模塊應(yīng)包括盡量多的功能
    B)各模塊的規(guī)模應(yīng)盡量大
    C)各模塊之間的聯(lián)系應(yīng)盡量緊密
    D)模塊內(nèi)具有高內(nèi)聚度、模塊間具有低耦合度
    (3)下列敘述中正確的是
    A)軟件測試的主要目的是發(fā)現(xiàn)程序中的錯誤
    B)軟件測試的主要目的是確定程序中錯誤的位置
    C)為了提高軟件測試的效率,由程序編制者自己來完成軟件測試的工作
    D)軟件測試是證明軟件沒有錯誤
    (4)下面選項中不屬于面向?qū)ο蟪绦蛟O(shè)計特征的是
    A)繼承性 B)多態(tài)性 C)類比性 D)封閉性
    (5)下列對列的敘述正確的是
    A)隊列屬于非線性表
    B)隊列按“先進后出”原則組織數(shù)據(jù)
    C)隊列在隊尾刪除數(shù)據(jù)
    D)隊列按“先進先出”原則組織數(shù)據(jù)
    (6)對下列二叉樹
    進行前序遍歷的結(jié)果為
    A) DYBEAFCZX B) YDEBFZXCA
    C) ABDYECFXZ D) ABCDEFXYZ
    (7) 某二叉樹中有n個度為2的結(jié)點,則該二叉樹中的葉子結(jié)點為
    A) n+1 B) n-1 C) 2n D) n/2
    (8) 在下列關(guān)系運算中,不改變關(guān)系表中的屬性個數(shù)但能減少元組個數(shù)的是
    A) 并 B)交 C)投影 D)笛卡兒乘積
    (9) 在E-R圖中,用來表示實體之間聯(lián)系的圖形是
    A) 矩形 B)橢圓形 C)菱形 D)平行四邊形
    (10)下列敘述中錯誤的是
    A) 在數(shù)據(jù)庫系統(tǒng)中,數(shù)據(jù)的物理結(jié)構(gòu)必須與邏輯結(jié)構(gòu)一致
    B)數(shù)據(jù)庫技術(shù)的根本目標(biāo)是要解決數(shù)據(jù)的共享問題
    C)數(shù)據(jù)庫設(shè)計是指在已有數(shù)據(jù)庫管理系統(tǒng)的基礎(chǔ)上建立數(shù)據(jù)庫
    D)數(shù)據(jù)庫系統(tǒng)需要操作系統(tǒng)的支持
    (11)算法中,對需要執(zhí)行的每一步操作,必須給出清楚、嚴格的規(guī)定,這屬于算法的
    A)正當(dāng)性 B)可行性 C)確定性 D)有窮性
     (12)下列敘述中錯誤的是
    A)計算機不能直接執(zhí)行用C語言編寫的源程序
    B)C程序經(jīng)C編譯后,生成后綴為.obj的文件是一個二進制文件
    C)后綴為.obj的文件,經(jīng)連接程序生成后綴為.exe的文件是一個二進制文件
    D)后綴為.obj和.exe的二進制文件都可以直接運行
    (13)按照C語言規(guī)定的用戶標(biāo)識符命名規(guī)則,不能出現(xiàn)在標(biāo)識符中的是
    A)大寫字母 B)連接符 C)數(shù)字字符 D)下劃線
    (14)以下敘述中錯誤的是
     A)C語言是一種結(jié)構(gòu)化程序設(shè)計語言
    B)結(jié)構(gòu)化程序有順序、分支、循環(huán)三種基本結(jié)構(gòu)組成
    C)使用三種基本結(jié)構(gòu)構(gòu)成的程序只能解決簡單問題
    D)結(jié)構(gòu)化程序設(shè)計提倡模塊化的設(shè)計方法
    (15)對于一個正常運行的C程序,以下敘述中正確的是
    A)程序的執(zhí)行總是從main函數(shù)開始,在main函數(shù)結(jié)束
    B)程序的執(zhí)行總是從程序的第一個函數(shù)開始,在main函數(shù)結(jié)束
    C)程序的執(zhí)行總是從main函數(shù)開始,在程序的最后一個函數(shù)中結(jié)束
    D)程序的執(zhí)行總是從程序的第一個函數(shù)開始,在程序的最后一個函數(shù)中結(jié)束
    (16)設(shè)變量均已正確定義,若要通過scanf(“%d%c%d%c”,&a1,&c1,&a2,&c2);語句為變量a1和a2賦數(shù)值10和20,為變量c1和c2賦字符X和Y。以下所示的輸入形式正確的是(注:□代表空格字符)
    A)10□X□20□Y〈回車〉 B)10□X20□Y〈回車〉
     C)10□X〈回車〉 D)10X〈回車〉
     20□Y〈回車〉 20Y〈回車〉
    (17)若有代數(shù)式(其中e僅代表自然對數(shù)的底數(shù),不是變量),則以下能夠正確表示該代數(shù)式的C語言表達式是
    A)sqrt(abs(n^x+e^x)) B) sqrt(fabs(pow(n,x)+pow(x,e)))
    C)sqrt(fabs(pow(n,x)+exp(x,e))) D) sqrt(fabs(pow(x,n)+exp(x)))
    (18)設(shè)有定義:int k=0;,以下選項的四個表達式中與其他三個表達式的值不相同的是
    A)k++ B)k+=1 C)++k DD)k+1
    (19)有以下程序,其中%u表示按無呼號整數(shù)輸出
    Main()
    {unsigned int x=0xFFFF;/* x的初值為十六進制數(shù) */
     Printf(“%u\n”,x);
    }
    程序運行后的輸出結(jié)果是
    A)-1 B)65535 C)32767 D)0XFFFF
    (20)設(shè)變量x和y均已正確定義并賦值,以下if語句中,在編譯時將產(chǎn)生錯誤信息的是
    A)if(x++) B)if(x>y&y!=0);
    C)if(x>y)x- - D)if(y<0) {;}
     else y++: else x++;
     (21)以下選項中,當(dāng)x為大于1的奇數(shù)時,值為0的表達式
    A)x%2==1 B)x/2 C)x%2!=0 D)x%2==0
    (22)以下敘述中正確的是
    A)break語句只能用于switch語句題中
    B)continue語句的作用是:使程序的執(zhí)行流程跳出包含它的所有循環(huán)
    C)break 語句只能用在循環(huán)體內(nèi)和switch語句體內(nèi)
    D)在循環(huán)體內(nèi)使用break語句和continue語句的作用相同
    (23)有以下程序
    Main()
    {int k=5,n=0;
     do
     {switch(k)
     {case1: case3:n+=1; break;
    Default;n=0;k--;
    Case2: case4:n+=2;k--;break;
    }
    Printf(“%d”,n);
    }while(k>0&&n<5);
    }
    程序運行后的輸出結(jié)果是
    A)235 B)0235 C)02356 D)2356
    (24)有以下程序
    mian()
    {int i,j;
     for(i=1;i<4;i++)
    {for(j=i;j<4;j++) printf(“%d*%d=%d “,i,j,i*j);
    Printf(“\n”);
    }
    }
    程序運行后的輸出結(jié)果是
    *p=&n;
    Printf(“Input n:”); scanf(“%d”,&p); printf(“output n:”); printf(“%d\n”,p);
    }
    該程序試圖通過指針p為變量n讀入數(shù)據(jù)并輸出,但程序有多處錯誤,以下語句正確的是
    A)int n,*p=NULL; B)*p=&n; C)scanf(“%d”,&p) D)printf(“%d\n”,p);
    (31)以下程序中函數(shù)f的功能是:當(dāng)flag為4時,進行有小到大排序;當(dāng)flag為0時,進行由大到小排序。
     void f(int b[],int n,int flag)
     {int i,j,t;
    for(i=0;i     for (j=i+1;j     if(flag?b[ i ]>b[j]:b[ i ]    }
    main()
    {int a[10]={5,4,3,2,1,6,7,8,9,10},I;
     f(&a[2],5,0); f(a,5,1);
     for(i=0;i<10;i++) printf(“%d,”a[ i ]);
    }
    程序運行后的輸出結(jié)果是
    A)1,2,3,4,5,6,7,8,9,10, B)3,4,5,6,7,2,1,8,9,10,
    C)5,4,3,2,1,6,7,8,9,10, D)10,9,8,7,6,5,4,3,2,1,
    (32)有以下程序
    void f(int b[])
    {int I;
     for(i=2;i<6;i++) b[ i ]*=2;
    }
     main()
    {int a[10]={1,2,3,4,5,6,7,8,9,10},i;
    f
    for(i=0;i<10;i++) printf(“%d,”,a[ i ]);
    }
    程序運行后的輸出結(jié)果是
    A)1,2,3,4,5,6,7,8,9,10, B)1,2,6,8,10,12,7,8,9,10
    C)1,2,3,4,10,12,14,16,9,10, D)1,2,6,8,10,12,14,16,9,10,
    (33)有以下程序
     typedef struct{int b,p;}A;
     void f(A c) /*注意:c是結(jié)構(gòu)變量名 */
     {int j;
    c.b+=1; c.p+=2;
    }
    main(){int i;
    A a={1,2};
    f
    printf(“%d,%d\n”,a.b,a.p);
    }
    程序運行后的輸出結(jié)果是
     A)2,3 B)2,4 C)1,4 D)1,2
    (34)有以下程序
    main()
    {int a[4][4]={{1,4,3,2,},{8,6,5,7,},{3,7,2,5,},{4,8,6,1,}},i,j,k,t;
    for(i=0;i<4;i++)
     for(j=0;j<3;j++)
     for(k=j+1;k<4;k++)
     if(a[j][ i]>a[k][ i]){t=a[j][ i];a[j][ i ]=a[k][ i ];a[k][ i]=t;}/*按列排序*/
     for(i=0;i<4;i++)printf(“%d,”,a[ i ][j]);
    }
    程序運行后的輸出結(jié)果是
     A)1,6,5,7, B)8,7,3,1, C)4,7,5,2, D)1,6,2,1,
    (35) 有以下程序
    main()
    {int a[4][4]={{1,4,3,2,},{8,6,5,7,},{3,7,2,5,},{4,8,6,1,}},i,k,t;
    for(i=0;i<3;i++)
     for(k=i+i;k<4;k++) if(a[ i ][ i ]for(i=0;i<4;i++)printf(“%d,”,a[0][ i ]);
    }
    程序運行后的輸出結(jié)果是
    A)6,2,1,1, B)6,4,3,2, C)1,1,2,6, D)2,3,4,6,
    (36) 有以下程序
    void f(int *q)
    {int i=0;
    for( i<5;i++)(*q)++;
    }
    main()
    {int a[5]={1,2,3,4,5},i;
    f
    for(i=0;i<5;i++)printf(“%d,”,a[ i ]);
    }
    程序運行后的輸出結(jié)果是
    A)2,2,3,4,5, B)6,2,3,4,5, C)2,3,4,5,6,
    (37) 有以下程序
    #include
    main()
    {char p[20]={‘a(chǎn)’,’b’,’c’,’d’},q[]=”abc”, r[]=”abcde”;
    Strcpy(p+strlen(q),r); strcat(p,q);
    Printf(“%d%d\n”,sizeof(p),strlen(p));
    }
    程序運行后的輸出結(jié)果是
    A)20 9 B)9 9 C)20 11 D)11 11
    (38) 有以下程序
     #include
    main()
    {char p[20]={‘a(chǎn)’,’b’,’c’,’d’},q[]=”abc”, r[]=”abcde”
    strcat(p,r); Strcpy(p+strlen(q),q);
    Printf(“%d \n”,sizeof(p));
    }
    程序運行后的輸出結(jié)果是
    A)9 B)6 C)11 D)7
    (39) 有以下程序
    #include
    main()
    { char p[20]={‘a(chǎn)’,’b’,’c’,’d’}, q[]=”abc”, r[]=”abcde”;
    Strcat(p,r); strcpy(p+strlen(q),q);
    Printf(“%d\n”,strlen(p));
    }
    程序運行后的輸出結(jié)果是
    A) 9 B) 6 C) 11 D) 7
    else {int a=7 ;t+=a++;}
    return t+a++;
    }
    main()
    {int s=a,i=0;
    for(;i〈2;i++ 〉 s+=f(i);
    printf (“%d\n”,s);
    }
    程序運行后的輸出結(jié)果是
    A)24 B)28 C)32 D)36
    (43) 有一個名為init.txt的文件,內(nèi)容如下:
    #define HDY(A,B) A/B
    # define PRINT(Y) Printf(“y=%d\n.,Y)
    有以下程序
    #include “init.txt”
    main()
    {int a=1,b=2,c=3,d=4,k;
    K=HDY(a+c,b+d);
    PRINT(K);
    }
    下面針對該程序的敘述正確的是
    A)編譯有錯 B)運行出錯
    C)運行結(jié)果為 y=0 D) 運行結(jié)果為 y=6
    (44) 有以下程序
    Main()
    {char ch[]=“uvwxyz”,*pc;
     Pc=ch; printf(“%c\n”,*(pc+5));
    }
    程序運行后的輸出結(jié)果是
    A)z B)0 C)元素ch[5]地址 D)字符y的地址
    (45) 有以下程序
    struct S {int n; int a[20];};
    void f(struct S *P)
    {int i,j,t;
    for(i=0;in-1;i++)
    for(j=j+1;jn-1;j++)
    程序運行后的輸出結(jié)果是
    A)3 B)4 C)5 D)6
    (49)有以下程序
    #include
    Main()
    {FILE *fp; int I,a[6]={1,2,3,4,5,6};
    fp=fopen(“d2.dat”,”w”);
    fprintf(fp,”%d%d\n”,a[0],a[1],a[2]); fprintf(fp, “%d%d\n”,a[3],a[4],a[5]);
    fclose(fp);
    fp=fopen(“d2.dat”,”r”);
    fscanf(fp,” “%d%d\n”,&k,&n); printf(“%d%d\n”,k,n);
    fclose(fp);
    }
    程序運行后的輸出結(jié)果是
    A)1 2 B)1 4 C)123 4 D) 123 456
    (50)有以下程序
    #include
    main ()
    {fILE *fp; int I,a[6]={1,2,3,4,5,6k};
    fp=fopen(“d3.dat”,”w+b”);
    fwrite(a,size(int),6,fp);
    fseek(fp,sizeof(int)*3,SEEK SET);/*該語句使讀文件的位置指針從文件頭向后移動3個int型數(shù)據(jù)*/
    fread(a,sizeof(int),3,fp); fclose(fp);
    for(i=0;i<6;i++) printf(“%d,”,a[ i]);
    }
    程序運行后的輸出結(jié)果是
    A)4,5,6,4,5,6, B)1,2,3,4,5,6, C)4,5,6,1,2,3, D)6,5,4,3,2,1,
    二.填空題(每空2分,共40分)
    請將每一個空的正確答案寫在答題卡[1]至[20]序號的橫線上,答在試卷上不得分。
     注意:以命令關(guān)鍵字填空的必須寫完整
    (1) 在深度為7的滿二叉樹中,度為2的結(jié)點個數(shù)為_________。
    (2) 軟件測試分為白箱(盒)測試和黑箱(盒)測試,等價類劃分法屬于__________ 測試。
    (3) 在數(shù)據(jù)庫系統(tǒng)中,實現(xiàn)各種數(shù)據(jù)管理功能的核心軟件稱為 數(shù)據(jù)庫管理系統(tǒng)______。
    (4) 軟件生命周期可分為多個階段,一般分為定義階段、開發(fā)階段和維護階段。編碼和測試屬于 _______階段。
    (5)在結(jié)構(gòu)化分析使用的數(shù)據(jù)流圖(DFD)中,利用 _________ 對其中的圖形元素進行確切解釋。
    (6)執(zhí)行以下程序后的輸出結(jié)果是 __________ 。
    main()
    {int a=10;
     a=(3*5,a+4); printf(“a=%d\n”,a);
    }
    (7) 當(dāng)執(zhí)行以下程序時,輸入1234567890<回車>,則其中while循環(huán)體將執(zhí)行
     ___________次。
    #include
    main()
    {char ch;
     While((ch=getchar())==’0’) printf(“#”);
    }
     (8) 以下程序的運行結(jié)果是 _________ 。
    int k=0;
    void fun(int m)
    { m+=k; k+=m; printf(“m=%d\n k=%d ”,m,k++);}
     main()
    { int i=4;
     fun(i++); printf(“i=%d k=%d\n”,i,k);
    }
     (9) 以下程序的運行結(jié)果是__________ 。
     main()
     {int a=2,b=7,c=5;
     Switch(a>0)
    {case 1:switch(b<0)
     {case 1:switch(“@”); break;
     Case 2: printf(“!”); break;
    }
    Case 0: switch(c==5)
    { case 0: printf(“*”); break;
     Case 1: printf(“#”); break;
     Case 2: printf(“$”); break;
     }
    default : printf(“&”);
    }
    Printf(“\n”);
    }
    (10)以下程序的輸出結(jié)果是 ____________
    # include
    main()
    { printf(“%d\n”,strlen(“IBM\n012\1\\”));
    }
    (11)已定義char ch=”$”;int i=1,j;執(zhí)行j=!ch&&i++以后,i的值為 ___________
    (12)以下程序的輸出結(jié)果是 ________
    # include
    main()
    { char a[]={‘\1’,’\2’,’\3’,’\4’,’\0’};
    Printf(“%d %d\n”,sizeof ,srelen );
    }
    (13)設(shè)有定義語句:int a[][3]={{0},{1},{2}};,則數(shù)組元素a[1][2]的值為 ________
    (14)以下程序的功能是:求出數(shù)組x中各相鄰兩個元素的和,依次存放到a數(shù)組中,然后輸出,請?zhí)羁铡?BR>    Main()
    {int x[10],a[9],I;
    For (i=0;i<10;i++)
    Scanf(“%d”,&x[ i]);
    For( _________ i<10;i++)
    A[i-1]=x[ i]+ _____________
    For(i=0;i<9;i++)
    Printf(“%d”,a[ i]);
    Printf(“\n”);
    (15) 以下程序的功能是:利用指針指向三個整型變量,并通過指針運算找出三個數(shù)中的值,輸出到屏幕上,請?zhí)羁眨?BR>    Main()
    {int x,y,z,max,*px,*py,*pz,*pmax;
    Scanf(“%d%d%d”,&x,&y,&z);
    Px=&x;
    Py=&y;
    Pz=&z;
    Pmax=&max;
     __________________
    If(*pmax<*py)*pmax=*py;
    If(*pmax<*pz)*pmax=*pz;
    Printf(“max=%d\n”,max);
    }
    (16)以下程序的輸出結(jié)果是 ____________
    Int fun(int*x,int n)
    {if(n==0)
    Return x[0];
    Else return x[0]+fun(x+1,n-1);
    }
    Main()
    {int a[]={1,2,3,4,5,6,7};
    Printf(“%d\n”,fun(a,3));
    }
    (17)以下程序的輸出結(jié)果是 ______________
    # include
    Main()
    {char *s1,*s2,m;
    S1=s2=(char*)malloc(sizeof(char));
    *s1=15;
    *s2=20;
    M=*s1+*s2;
    Printf(“%d\n”,m);
    }
    (18)設(shè)有說明
    Struct DATE{int year;int month; int day;};
    請寫出一條定義語句,該語句定義d為上述結(jié)構(gòu)體變量,并同時為其成員year、month、day 依次賦初值2006、10、1: ____________;
    (19) 設(shè)有定義:FILE*fw;,請將以下打開文件的語句補充完整,以便可以向文本文件readme.txt的最后續(xù)寫內(nèi)容。
    fw=fopen(“readme.txt”, “________” )
    2007年4月二級C語言筆試答案
    選擇題
    1-5: BDACD
    6-10: CABCA
    11-15: CDBCA
    16-20: DCABC
    21-25: DCABA
    26-30: ADCDA
    31-35: BBDDB
    36-40: DCACA
    41-45: DADAA
    46-50: ACBDA
    填空題
    1、63
    2、黑盒
    3、數(shù)據(jù)庫管理系統(tǒng)
    4、開發(fā)
    5、數(shù)據(jù)字典
    6、a=14
    7、0
    8、m=4 k=4 i=5 k=5
    9、#&
    10、9
    11、1
    12、5 4
    13、0
    14、i=1
    15、x[i-1]
    16、*pmax=*px
    17、10
    18、40
    19、struct DATE d={2006,10,1}
    20、a