07年9月全國(guó)計(jì)算機(jī)二級(jí)C筆試含答案

字號(hào):

一、選擇題((1)-(10)每題2分,(11)-(50)每題1分.共60分))
    下列各題A)、B)、C)、D)四個(gè)選項(xiàng)中,只有一個(gè)是正確的,請(qǐng)將正確選項(xiàng)涂寫在答題卡上,答在試卷上不得分。
    (1)軟件是指
    A)程序 B)程序和文檔
    C)算法加數(shù)據(jù)結(jié)構(gòu) D)程序、數(shù)據(jù)和相關(guān)文檔的集合
    (2)軟件調(diào)試的目的是
    A)發(fā)現(xiàn)錯(cuò)誤 B)改正錯(cuò)誤
    C)改善軟件的性能 D)驗(yàn)證軟件的正確性
    (3)在面向?qū)ο蠓椒ㄖ?,?shí)現(xiàn)信息隱蔽是依靠
    A)對(duì)象的繼承 B)對(duì)象的多態(tài)
    C)對(duì)象的封裝 D)對(duì)象的分類
    (4)下列敘述中,不符合良好程序設(shè)計(jì)風(fēng)格的是
    A)程序的效率第一,清晰第二 B)程序的可讀性好
    C)程序中有必要的注釋 D)輸入數(shù)據(jù)前要有提示信息
    (5)下列敘述中正確的是
    A)程序執(zhí)行的效率與數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)密切相關(guān)
    B)程序執(zhí)行的效率只取決于程序的控制結(jié)構(gòu)
    C)程序執(zhí)行的效率只取決于所處理的數(shù)據(jù)量
    D)以上三種說法都不對(duì)
    (6)下列敘述中正確的是
    A)數(shù)據(jù)的邏輯結(jié)構(gòu)與存儲(chǔ)結(jié)構(gòu)必定是一一對(duì)應(yīng)的
    B)由于計(jì)算機(jī)存儲(chǔ)空間是向量式的存儲(chǔ)結(jié)構(gòu),因此,數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)一定是線性結(jié)構(gòu)
    C)程序設(shè)計(jì)語(yǔ)言中的數(shù)組一般是順序存儲(chǔ)結(jié)構(gòu),因此,利用數(shù)組只能處理線線結(jié)構(gòu)
    D)以上三種說法都不對(duì)
    (7)冒泡排序在最壞情況下的比較次數(shù)是
    A)n(n+1)/2 B)nlog2n C)n(n-1)/2 D)n/2
    (8)一棵二叉樹中共有70個(gè)葉子結(jié)點(diǎn)與80個(gè)度為1的結(jié)點(diǎn),則該二叉樹中的總結(jié)點(diǎn)數(shù)為
    A)219 B)221 C)229 D)231
    (9)下列敘述中正確的是
    A)數(shù)據(jù)庫(kù)系統(tǒng)是一個(gè)獨(dú)立的系統(tǒng),不需要操作系統(tǒng)的支持
    B)數(shù)據(jù)庫(kù)技術(shù)的根本目標(biāo)是要解決數(shù)據(jù)的共享問題
    C)數(shù)據(jù)庫(kù)管理系統(tǒng)就是數(shù)據(jù)庫(kù)系統(tǒng)
    D)以上三種說法都不對(duì)
    (10)下列敘述中正確的是
    A)為了建立一個(gè)關(guān)系,首先要構(gòu)造數(shù)據(jù)的邏輯關(guān)系
    B)表示關(guān)系的二維表中各元組的每一個(gè)分量還可以分成若干數(shù)據(jù)項(xiàng)
    C)一個(gè)關(guān)系的屬性名表稱為關(guān)系模式
    D)一個(gè)關(guān)系可以包括多個(gè)二維表
    (11)C語(yǔ)言源程序名的后綴是
    A).exe B).C C).obj D).cp
    (12)可在C程序中用做用戶標(biāo)識(shí)符的一組標(biāo)識(shí)符是
    A)and B)Date C)Hi D)case
     _2007 y-m-d Dr.Tom Bigl
    (13)以下選項(xiàng)中,合法的一組C語(yǔ)言數(shù)值常量是
    A)028 B)12. C).177 D)0x8A
     . 5e-3 OXa23 4c1.5 10,000
     -0xf 4.5e0 Oabc 3.e5
    (14)以下敘述中正確的是
    A)C語(yǔ)言程序?qū)脑闯绦蛑械谝粋€(gè)函數(shù)開始執(zhí)行
    B)可以在程序中由用戶指定任意一個(gè)函數(shù)作為主函數(shù),程序?qū)拇碎_始執(zhí)行
    C)C語(yǔ)言規(guī)定必須用main作為主函數(shù)名,程序?qū)拇碎_始執(zhí)行,在此結(jié)束
    D)main可作為用戶標(biāo)識(shí)符,用以命名任意一個(gè)函數(shù)作為主函數(shù)
    (15)若在定義語(yǔ)句:int a,b,c,*p=&c;之后,接著執(zhí)行以下選項(xiàng)中的語(yǔ)句,則能正確執(zhí)行的語(yǔ)句是
    A)scanf("%d",a,b,c); B)scanf("%d%d%d",a,b,c);
    C)scanf("%d",p); D)scanf("%d",&p);
    (16)以下關(guān)于long、int和short類型數(shù)據(jù)占用內(nèi)存大小的敘述中正確的是
    A)均占4個(gè)字節(jié) B)根據(jù)數(shù)據(jù)的大小來決定所占內(nèi)存的字節(jié)數(shù)
    C)由用戶自己定義 D)由C語(yǔ)言編譯系統(tǒng)決定
     (17)若變量均已正確定義并賦值,以下合法的C語(yǔ)言賦值語(yǔ)句是
    A)x=y==5; B)x=n%2.5; C)x+n=I; D)x=5=4+1;
    (18)有以下程序段
     int j; float y; char name[50];
     scanf("%2d%f%s",&j,&y,name);
     當(dāng)執(zhí)行上述程序段,從鍵盤上輸入55566 7777abc后,y的值為
    A)55566.0 B)566.0 C)7777.0 D)566777.0
    (19)若變量已正確定義,有以下程序段
     i=0;
    do printf("%d,",i);while(i++);
    printf("%d\n",i)
    其輸出結(jié)果是
    A)0,0 B)0,1 C)1,1 D)程序進(jìn)入無限循環(huán)
    (20)有以下計(jì)算公式
    若程序前面已在命令中包含math.h文件,不能夠正確計(jì)算上述公式的程序段是
     A)if(x>=0) y=sqrt(x); B)y=sqrt(x)
    else y=sqrt(-x); if(x<0) y=sqrt(-x);
    C)if(x>=0)y=sqrt(x); D)y=sqrt(x>=0?x:-x);
     If(x<0)y=sqrt(-x);
    (21)設(shè)有條件表達(dá)式:(EXP)?i++;j--,則以下表達(dá)式中(EXP)完全等價(jià)的是
     A)(EXP= =0) B)(EXP!=0) C)(EXP= =1) D)(EXP!=1)
    (22)有以下程序
    #include
    main()
    {int y=9;
    for( y>0;y--)
    if(y%3= =0) printf("%d",--y);
    }
    程序的運(yùn)行結(jié)果是
    A)741 B)963 C)852 D)875421
    (23)已有定義:char c; ,程序前面已在命令行中包含ctype.h文件,不能用于判斷c中的字符是否為大寫字母的表達(dá)式是
     A)isupper(c) B)’A’<=c<=’Z’
    C)’A’<=c&&c<=’Z’ D)c<=(‘2’-32)&&(‘a(chǎn)’-32)<=c
    (24)有以下程序
     #include
     main()
     {int i,j,m=55;
    for(i=1;i<=3;i++)
    for(j=3;j<=i;j++) m=m%j;
    printf("%d\n",m);
    }
    程序的運(yùn)行結(jié)果是
    A)0 B)1 C)2 D)3
    (25)若函數(shù)調(diào)用時(shí)的實(shí)參為變量時(shí),以下關(guān)于函數(shù)形參和實(shí)參的敘述中正確的是
     A)函數(shù)的實(shí)參和其對(duì)應(yīng)的形參共占同一存儲(chǔ)單元
    B)形參只是形式上的存在,不占用具體存儲(chǔ)單元
    C)同名的實(shí)參和形參占同一存儲(chǔ)單元
    D)函數(shù)的形參和實(shí)參分別占用不同的存儲(chǔ)單元
    (26)已知字符’A’的ASCⅡ代碼值是65,字符變量c1的值是’A’,c2的值是’D’。執(zhí)行語(yǔ)句printf("%d,%d",c1,c2-2);后,輸出結(jié)果是
    A)A,B B)A,68 C)65,66 D)65,68
    (27)以下敘述中錯(cuò)誤的是
    A)改變函數(shù)形參的值,不會(huì)改變對(duì)應(yīng)實(shí)參的值
    B)函數(shù)可以返回地址值
    C)可以給指針變量賦一個(gè)整數(shù)作為地址值
    D)當(dāng)在程序的開頭包含文件stdio.h時(shí),可以給指針變量賦NULL
    (28)以下正確的字符串常量是
    A)"\\\" B)’abc’ C)OlympicGames D)""
    (29)設(shè)有定義:char p[]={’1’,’2’,’3’},*q=p; ,以下不能計(jì)算出一個(gè)char型數(shù)據(jù)所占字節(jié)數(shù)的表達(dá)式是
    A)sizeof(p) B)sizeof(char) C) sizeof(*q) D)sizeof(p[0])
    (30)有以下函數(shù)
     int aaa(char *s)
     {char *t=s;
    while(*t++);
    t--;
    return(t-s);
    }
    以下關(guān)于aaa函數(shù)的功能敘述正確的是
    A)求字符串s的長(zhǎng)度 B)比較兩個(gè)串的大小
    C)將串s復(fù)制到串t D)求字符串s所占字節(jié)數(shù)
    (31)若有定義語(yǔ)句:int a[3][6]; ,按在內(nèi)存中的存放順序,a數(shù)組的第10個(gè)元素是
    A)a[0][4] B)a[1][3] C)a[0][3] D)a[1][4]
    (32)有以下程序
    #include
    void fun(char **p)
    {++p; printf("%s\n",*p);}
    main()
    {char *a[]={"Morning","Afternoon","Evening","Night"};
    fun(a);
    }
    程序的運(yùn)行結(jié)果是
    A)Afternoon B)fternoon C)Morning D)orning
    (33)若有定義語(yǔ)句:int a[2][3],*p[3]; ,則以下語(yǔ)句中正確的是
    A)p=a; B)p[0]=a; C) p[0]=&a[1][2]; D)p[1]=&a;
    (34)有以下程序
     #include
     void fun(int *a,int n)/*fun函數(shù)的功能是將a所指數(shù)組元素從大到小排序*/
     {int t,i,j;
    for(i=0;i    for(j=i+1;j    if (a}
    main()
    {int c[10]={1,2,3,4,5,6,7,8,9,0},i;
    fun(c+4,6);
    for (i=0;i<10;i++) printf("%d,",c);
    printf("\n");
    }
    程序運(yùn)行的結(jié)果是
    A)1,2,3,4,5,6,7,8,9,0, B)0,9,8,7,6,5,1,2,3,4,
    C) 0,9,8,7,6,5,4,3,2,1, D)1,2,3,4,9,8,7,6,5,0,
    (35)有以下程序
     #include
     int fun(char s[])
    {int n=0;
    while(*s<=’9’&&*s>=’0’) {n=10*n+*s-’0’;s++;}
    return(n);
    }
    main()
    {char s[10]={’6’,’1’,’*’,’4’,’*’,’9’,’*’,’0’,’*’};
    printf("%d\n",fun(s));
    }
    程序運(yùn)行的結(jié)果是
    A)9 B)61490 C)61 D)5
    (36)當(dāng)用戶要求輸入的字符串中含有空格時(shí),應(yīng)使用的輸入函數(shù)是
     A)scanf() B)getchar() C)gets() D)getc()
    (37)以下關(guān)于字符串的敘述中正確的是
    A)C語(yǔ)言中有字符串類型的常量和變量
    B)兩個(gè)字符串中的字符個(gè)數(shù)相同時(shí)才能進(jìn)行字符串大小的比較
    C)可以用關(guān)系運(yùn)算符對(duì)字符串的大小進(jìn)行比較
    D)空串一定比空格打頭的字符串小
    (38)有以下程序:
    #include
    void fun(char *t,char *s)
    {
    while(*t!=0)t++;
    while((*t++=*s++)!=0);
    }
    main()
    {
    char ss[10]=”acc”,aa[10]=”bbxxyy”;
    fun(ss,aa);
    printf(“%s,%s\n”,ss,aa);
    }
    程序運(yùn)行結(jié)果是
    A) accxyy , bbxxyy B) acc, bbxxyy
    C) accxxyy,bbxxyy D) accbbxxyy,bbxxyy
    (39)有以下程序
    #include
    #include
    void fun(char s[][10],int n)
    {
    char t;int i,j;
    for(i=0;i    for(j=i+1,j    /*比較字符串的首字符大小,并交換字符串的首字符 */
    if(s[0])>s[j][0]{t=s[0];s[0]=s[j][0];s[j][0]=t;}
    }
    main()
    {
    char ss[5][10]={“bcc”,”bbcc”,”xy”,”aaaacc””aabcc”}
    fun(ss,5); printf(“%s,%s\n”,ss[0],ss[4]);
    }
    程序運(yùn)行結(jié)果是
    A) xy,aaaacc B) aaaacc,xy
    C) xcc,aabcc D) acc,xabcc
    (40) 在一個(gè)C語(yǔ)言源程序文件中所定義的全局變量,其作用域?yàn)椋?BR>    A) 所在文件的全部范圍 B) 所在程序的全部范圍
    C) 所在函數(shù)的全部范圍 D) 由具體定義位置和extern 說明來決定范圍
    (41)有以下程序
    #include
    int a=1;
    int f(int c)
    {static int a=2;
    c=c+1;
    return (a++)+c;}
    main()
    { int i,k=0;
    for(i=0;i<2;i++){int a=3;k+=f(a);}
    k+=a;
    printf(“%d\n”,k);
    }
    程序運(yùn)行結(jié)果是
    A) 14 B) 15
    C) 16 D) 17
    (42)有以下程序
    #include
    void fun(int n,int *p)
    { int f1,f2;
    if(n==1||n==2) *p=1;
    else
    { fun(n-1,&f1); fun(n-2,&f2);
     *p=f1+f2;
    }
    }
    main()
    { int s;
     fun(3,&s); printf("%d\n",s);
    }
    程序的運(yùn)行結(jié)果是
    A)2 B)3 C)4 D)5
    (43)若程序中有宏定義行:#define N 100 則以下敘述中正確的是
    A)宏定義行中定義了標(biāo)識(shí)符N的值為整數(shù)100
    B)在編譯程序?qū)源程序進(jìn)行預(yù)處理時(shí)用100替換標(biāo)識(shí)符N
    C) 對(duì)C源程序進(jìn)行編譯時(shí)用100替換標(biāo)識(shí)符N
    D)在運(yùn)行時(shí)用100替換標(biāo)識(shí)符N
    (44)以下關(guān)于typedef的敘述錯(cuò)誤的是
    A)用typedef可以增加新類型
    B)typedef只是將已存在的類型用一個(gè)新的名字來代表
    C)用typedef可以為各種類型說明一個(gè)新名,但不能用來為變量說明一個(gè)新名
    D)用typedef為類型說明一個(gè)新名,通常可以增加程序的可讀性
    (45)有以下程序
    #include
    struct tt
    {int x;struct tt *y;} *p;
    struct tt a[4]={20,a+1,15,a+2,30,a+3,17,a};
    main()
    { int i;
     p=a;
     for(i=1;i<=2;i++) {printf("%d,",p->x); p=p->y;}
    }
    程序的運(yùn)行結(jié)果是
    A)20,30, B)30,17 C)15,30, D)20,15,
    (46)有以下程序
    #include
    #include
    typedef struct{ char name[9];char sex; float score[2]; } STU;
    STU f(STU a)
    { STU b={"Zhao",'m',85.0,90.0}; int i;
    strcpy(a.name,b.name);
    a. sex=b.sex;
    for(i=0;i<2;i++) a.score=b.score;
    return a;
    }
    main()
    {STU c={"Qian",'f',95.0,92.0},d;
    d=f(c); printf("%s,%c,%2.0f,%2.0f\n",d.name,d.sex,d.score[0],d.score[1]);
    }
    程序的運(yùn)行結(jié)果是
    A)Qian,f,95,92 B)Qian,m,85,90 C)Zhao,m,85,90 D)Zhao,f,95,92
    (47)設(shè)有以下定義
    union data
    { int d1; float d2; }demo;
    則下面敘述中錯(cuò)誤的是
    A)變量demo與成員d2所占的內(nèi)存字節(jié)數(shù)相同
    B)變量demo中各成員的地址相同
    C)變量demo和各成員的地址相同
    D)若給demo.d1賦99后, demo.d2中的值是99.0
    (48)有以下程序
    #include
    main()
    { int a=1,b=2,c=3,x;
     x=(a^b)&c; printf("%d\n",x);
    }
    程序的運(yùn)行結(jié)果是
    A)0 B)1 C)2 D)3
    (49)讀取二進(jìn)制文件的函數(shù)調(diào)用形式為:fread(buffer,size,count,fp); ,其中buffer代表的是
    A)一個(gè)文件指針,指向待讀取的文件
    B)一個(gè)整型變量,代表待讀取的數(shù)據(jù)的字節(jié)數(shù)
    C)一個(gè)內(nèi)存塊的首地址,代表讀入數(shù)據(jù)存放的地址
    D)一個(gè)內(nèi)存塊的字節(jié)數(shù)
    (50)有以下程序
    #include
    main()
    {FILE *fp; int a[10]={1,2,3,0,0},i;
    fp=fopen("d2.dat,"wb");
    fwrite(a,sizeof(int),5,fp);
    fwrite(a,sizeof(int),5,fp);
    fclose(fp);
    fp=fopen("d2.dat","rb");
    fread(a,sizeof(int),10,fp);
    fclose(fp);
    for(i=0;i<10;i++) printf("%d",a);
    }
    程序的運(yùn)行結(jié)果是
    A)1,2,3,0,0,0,0,0,0,0, B)1,2,3,1,2,3,0,0,0,0,
    C)123,0,0,0,0,123,0,0,0,0, D)1,2,3,0,0,1,2,3,0,0,
    二、填空題(每空2分,共40分)
    請(qǐng)將每一個(gè)空的正確答案寫在答題卡[1]至[20]序號(hào)的橫線上,答在試卷上不得分.
    (1) 軟件需求規(guī)格說明書應(yīng)具有完整性、無歧義性、正確性、可驗(yàn)證性、可修改性等特性,其中最重要的_[1]_______.
    (2) 在兩種基本測(cè)試方法中, _[2]_______測(cè)試的原則之一是保證所測(cè)模塊中每一個(gè)獨(dú)立路徑至少要執(zhí)行一次.
    (3) 線性表的存儲(chǔ)結(jié)構(gòu)主要分為順序存儲(chǔ)結(jié)構(gòu)和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu).隊(duì)列是一種特殊的線性表,循環(huán)隊(duì)列是隊(duì)列的_[3]_______存儲(chǔ)結(jié)構(gòu).
    (4) 對(duì)下列二叉樹進(jìn)行中序遍歷的結(jié)果為_[4]_______
     F
     / \
     C E
     / \ \
     A D G
     / / \
     B H P
    (5) 在E-R圖中距形表示_[5]_______
    (6) 執(zhí)行以下程序時(shí)輸入1234567,則輸出結(jié)果是_[6]_______.
    #include
    main()
    { int a=1,b;
    scanf("%2d%2d",&a&b);printf("%d %d\n",a,b);
    }
    (7) 以下程序的功能是:輸出a、b、c三個(gè)變量中的最小值.請(qǐng)?zhí)羁铡?BR>    #include
    main()
    { int a,b,c,t1,t2;
    scanf("%d%d%d",&a,&b,&c);
    t1=a    t2=c    printf("%d\n",t2);
    }
    (8) 以下程序的輸出結(jié)果是_[9]_______.
    #include
    main()
    { int n=12345,d;
     while(n!=0){ d=n%10; printf("%d",d); n/=10;}
    }
    (9) 有以下程序段,且變量已正確定義和賦值
    for(s=1.0,k=1;k<=n;k++) s=s+1.0/(k*(k+1));
    printf("s=%f\n\n",s);
    請(qǐng)?zhí)羁?使下面程序段的功能為完全相同
    s=1.0;k=1;
    while(_[10]_______){ s=s+1.0/(k*(k+1)); _[11]_______;}
    printf("s=%f\n\n",s);
    (10) 以下程序的輸出結(jié)果是_[12]_______.
    #include
    main()
    { int i;
     for(i='a';i<'f';i++,i++) printf("%c",i-'a'+'A');
     printf("\n");
    }
    (11) 以下程序的輸出結(jié)果是_[13]_______.
    #include
    #include
    char *fun(char *t)
    { char *p=t;
     return(p+strlen(t)/2);
    }
    main()
    { char *str="abcdefgh";
     str=fun(str);
     puts(str);
    }
    (12)以下程序中函數(shù)f的功能是在數(shù)組x的n個(gè)數(shù)(假定n個(gè)數(shù)互不相同)中找出最小數(shù),將其中最小的數(shù)與第一個(gè)數(shù)對(duì)換,把的數(shù)與最后一個(gè)數(shù)對(duì)換.請(qǐng)?zhí)羁?
    #include
    viod f(int x[],int n)
    { int p0,p1,i,j,t,m;
     i=j=x[0]; p0=p1=0;
     for(m=0;m    { if(x[m]>i) {i=x[m]; p0=m;}
     else if(x[m]    }
    t=x[p0]; x[p0]=x[n-1]; x[n-1]=t;
    t=x[p1];x[p1]= _[14]_______; _[15]_______=t;
    }
    main()
    { int a[10],u;
     for(u=0;u<10;u++) scanf("%d",&a);
    f(a,10);
    for(u=0;u<10;u++) printf("%d",a);
    printf("\n");
    }
    (13)以下程序統(tǒng)計(jì)從終端輸入的字符中大寫字母的個(gè)數(shù),num[0]中統(tǒng)計(jì)字母A的個(gè)數(shù),num[1]中統(tǒng)計(jì)字母B的個(gè)數(shù),其它依次類推.用#號(hào)結(jié)束輸入,請(qǐng)?zhí)羁?
    #include
    #include
    main()
    { int num[26]={0},i; char c;
     while((_[16]_______)!='#')
     if(isupper(c)) num[c-‘A’]+= _[17]_______;
     for(i=0;i<26;i++)
     Printf("%c:%d\n",i+'A',num);
     }
    (14)執(zhí)行以下程序的輸出結(jié)果是_[18]_______.
    #include
    main()
    { int i,n[4]={1};
     for(i=1;i<=3;i++)
     { n=n[i-1]*2+1; printf("%d",n); }
    }
    (15) 以下程序的輸出結(jié)果是_[19]_______.
    #include
    #define M 5
    #define N M+M
    main()
    { int k;
     k=N*N*5; printf("%d\n",k);
    }
    (16)函數(shù)main()的功能是:在帶頭結(jié)點(diǎn)的單鏈表中查找數(shù)據(jù)域中值最小的結(jié)點(diǎn).請(qǐng)?zhí)羁?BR>    #include
    struct node
    { int data;
    struct node *next;
    };
    int min(struct node *first)/*指針first為鏈表頭指針*/
    { strct node *p; int m;
     p=first->next; m=p->data;p=p->next;
     for(;p!=NULL;p=_[20]_______)
     if(p->datadata;
     return m;
    }
    2007年9月全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)C語(yǔ)言參考答案
    一、選擇題
    1-5 DBCAA
    6-10 CCABA
    11-15 BABCC
    16-20 DABBB
    21-25 BCBBD
    26-30 CCDAA
    31-35 BACDC
    36-37 CDDBC
    42-45 AABAD
    46-50 CDDCD
    二、填空題
    1、無歧義性
    2、白盒測(cè)試
    3、順序
    4、ACBDFEHGP
    5、實(shí)體集
    6、12 34
    7、a:b
    8、c:t1
    9、54321
    10、k<=n
    11、k++