2011計算機等級考試二級C語言試卷

字號:

(1)棧和隊列的共同特點是
     A)都是先進先出
     B)都是先進后出
     C)只允許在端點處插入和刪除元素
     D)沒有共同點
    (2)已知二叉樹后序遍歷序列是dabec,中序遍歷序列是debac,它的前序遍歷序列是
     A)acbed
     B)decab
     C)deabc
     D)cedba
    (3)鏈表不具有的特點是
     A)不必事先估計存儲空間
     B)可隨機訪問任一元素
     C)插入刪除不需要移動元素
     D)所需空間與線性表長度成正比
    (4)結構化程序設計的3種結構是
     A)順序結構、選擇結構、轉移結構
     B)分支結構、等價結構、循環(huán)結構
     C)多分支結構、賦值結構、等價結構
     D)順序結構、選擇結構、循環(huán)結構
    (5)為了提高測試的效率,應該
     A)隨機選取測試數據
     B)取一切可能的輸入數據作為測試數據
     C)在完成編碼以后制定軟件的測試計劃
     D)集中對付那些錯誤群集的程序
    (6)算法的時間復雜度是指
     A)執(zhí)行算法程序所需要的時間
     B)算法程序的長度
     C)算法執(zhí)行過程中所需要的基本運算次數
     D)算法程序中的指令條數
    (7)軟件生命周期中所花費用最多的階段是
     A)詳細設計
     B)軟件編碼
     C)軟件測試
     D)軟件維護
    (8)數據庫管理系統(tǒng)DBMS中用來定義模式、內模式和外模式的語言為
     A)C
     B)Basic
     C)DDL
     D)DML
    (9)下列有關數據庫的描述,正確的是
     A)數據庫是一個DBF文件
     B)數據庫是一個關系
     C)數據庫是一個結構化的數據集合
     D)數據庫是一組文件
    (10)下列有關數據庫的描述,正確的是
     A)數據處理是將信息轉化為數據的過程
     B)數據的物理獨立性是指當數據的邏輯結構改變時,數據的存儲結構不變
     C)關系中的每一列稱為元組,一個元組就是一個字段
     D)如果一個關系中的屬性或屬性組并非該關系的關鍵字,但它是另一個關系的關鍵字,則稱其為本關系的外關鍵字
    (11)以下敘述中正確的是
     A)C語言比其他語言高級
     B)C語言可以不用編譯就能被計算機識別執(zhí)行
     C)C語言以接近英語國家的自然語言和數學語言作為語言的表達形式
     D)C語言出現的最晚,具有其他語言的一切優(yōu)點
    (12)C語言中用于結構化程序設計的3種基本結構是
     A)順序結構、選擇結構、循環(huán)結構
     B)if,switch,break
     C)for,while,do-while
     D)if,for,continue
    (13)C語言中最簡單的數據類型包括
     A)整型、實型、邏輯型
     B)整型、實型、字符型
     C)整型、字符型、邏輯型
     D)字符型、實型、邏輯型
    (14)若變量已正確定義并賦值,以下符合C語言語法的表達式是
     A)a:=b+1
     B)a=b=c+2
     C)int 18.5%3
     D)a=a+7=c+b
    (15)下列可用于C語言用戶標識符的一組是
     A)void, define, WORD
     B)a3_b3, _123,Car
     C)For, -abc, IF Case
     D)2a, DO, sizeof
    (16)C語言中運算對象必須是整型的運算符是
     A)%=
     B)/
     C)=
     D)<=
    (17)若變量a,i已正確定義,且i已正確賦值,合法的語句是
     A)a= =1
     B)++i;
     C)a=a++=5;
     D)a=int(i);
    (18)已知
     int t=0;
     while (t=1)
     {...}
     則以下敘述正確的是
     A)循環(huán)控制表達式的值為0
     B)循環(huán)控制表達式的值為1
     C)循環(huán)控制表達式不合法
     D)以上說法都不對
    (19)若變量已正確說明為float型,要通過語句scanf("%f%f%f",&a,&b,&c);給a賦予10.0,b賦予22.0,c賦予33.0,下列不正確的輸入形式是
     A)10<回車>22<回車>33<回車>
     B)10.0,22.0,33.0<回車>
     C)10.0<回車>22.033.0<回車>
     D)10 22<回車>33<回車>
    (20)有如下程序:
     main()
     {
     int x=1,a=0,b=0;
     switch(x)
     {
     case 0: b++;
     case 1: a++;
     case 2: a++;b++;
     }
     printf("a=%d,b=%d\n",a,b);}
     該程序的輸出結果是
     A)a=2,b=1
     B)a=1,b=1
     C)a=1,b=0
     D)a=2,b=2
    (21)有以下程序
     main()
     {int i=1,j=1,k=2;
     if((j++||k++)&&i++)
     printf("%d,%d,%d\n",i,j,k);
     }
     執(zhí)行后輸出結果是
     A)1,1,2
     B)2,2,1
     C)2,2,2
     D)2,2,3
    (22)有如下程序
     main()
     {float x=2.0,y;
     if(x<0.0)y=0.0;
     else if(x<10.0)y=1.0/x;
     else y=1.0;
     printf("%f\n",y);}
     該程序的輸出結果是
     A)0.000000
     B)0.250000
     C)0.500000
     D)1.000000
     (23)有如下程序:
     main()
     {int n=9;
     while(n>6){n--; printf("%d",n);}
     }
     該程序的輸出結果是
     A)987
     B)876
     C)8765
     D)9876
    (24)在下列選項中,沒有構成死循環(huán)的是
     A)int i=100;
     while(1)
     {i=i%100+1;
     if(i>100)break;
     }
     B)for(;;);
     C)int k=10000;
     do{k++;}while(k>10000);
     D)int s=36;
     while(s)--s;
    (25)設int x=1,y=1;表達式(!x||y--)的值是
     A)0
     B)1
     C)2
     D)-1
    (26)若已定義的函數有返回值,則以下關于該函數調用的敘述中錯誤的是
     A)函數調用可以作為獨立的語句存在
     B)函數調用可以作為一個函數的實參
     C)函數調用可以出現在表達式中
     D)函數調用可以作為一個函數的形參
    (27)有以下程序
     float fun(int x,int y)
     {return(x+y);}
     main()
     {int a=2,b=5,c=8;
     printf("%3.0f\n",fun((int)fun(a+c,b),a-c));
     }
     程序運行后的輸出結果是
     A)編譯出錯
     B)9
     C)21
     D)9.0
    (28)若有以下調用語句,則不正確的fun函數的首部是
     main()
     { …
     int a[50],n;
     …
     fun(n, &a[9]);
     …
     }
     A)void fun(int m, int x[])
     B)void fun(int s, int h[41])
     C)void fun(int p, int *s)
     D)void fun(int n, int a)
    (29)fseek函數的正確調用形式是
     A)fseek(文件指針,起始點,位移量)
     B)fseek(文件指針,位移量,起始點)
     C)fseek(位移量,起始點,文件指針)
     D)fseek(起始點,位移量,文件指針)
    (30)若fp是指向某文件的指針,且已讀到文件末尾,則函數feof(fp)的返回值是
     A)EOF
     B)-1
     C)1
     D)NULL
    (31)若有說明語句:char c='\72';則變量c
     A)包含1個字符
     B)包含2個字符
     C)包含3個字符
     D)說明不合法,c的值不確定
    (32)若有說明 int a[3][4];則a數組元素的非法引用是
     A)a[0][2*1]
     B)a[1][3]
     C)a[4-2][0
     ]
     D)a[0][4](33)設有以下說明語句
     struct stu
     {int a;
     float b;
     } stutype;
     則下面的敘述不正確的是
     A)struct是結構體類型的關鍵字
     B)struct stu是用戶定義的結構體類型
     C)stutype是用戶定義的結構體類型名
     D)a和b都是結構體成員名
    (34)在C語言中,引用數組元素時,其數組下標的數據類型允許是
     A)整型常量
     B)整型表達式
     C)整型常量或整型表達式
     D)任何類型的表達式
    (35)若運行時給變量x輸入12,則以下程序的運行結果是
     main()
     {int x,y;
     scanf("%d",&x);
     y=x>12?x+10:x-12;
     printf("%d\n",y);
     }
     A)0
     B)22
     C)12
     D)10(
    (36)以下說法正確的是
     A)C語言程序總是從第一個的函數開始執(zhí)行
     B)在C語言程序中,要調用函數必須在main()函數中定義
     C)C語言程序總是從main()函數開始執(zhí)行
     D)C語言程序中的main()函數必須放在程序的開始部分
    (37)表達式0x13^0x17的值是
     A)0x04
     B)0x13
     C)0xE8
     D)0x17
    (38)有以下程序
     #define F(X,Y)(X)*(Y)
     main()
     {int a=3, b=4;
     printf("%d\n", F(a++, b++));
     }
     程序運行后的輸出結果是
     A)12
     B)15
     C)16
     D)20
    (39)下列程序執(zhí)行后的輸出結果是
     void func(int *a,int b[])
     { b[0]=*a+6; }
     main()
     {int a,b[5];
     a=0; b[0]=3;
     func(&a,b); printf("%d\n",b[0]);
     }
     A)6
     B)7
     C)8
     D)9
    (40)若有下面的程序段:
     char s[]="china";char *p; p=s;
     則下列敘述正確的是
     A)s和p完全相同
     B)數組s中的內容和指針變量p中的內容相等
     C)s數組長度和p所指向的字符串長度相等
     D)*p與s[0]相等
    (41) 以下程序中函數sort的功能是對a數組中的數據進行由大到小的排序
     void sort(int a[],int n)
     {int i,j,t;
     for(i=0;i     for(j=i+1;j     if(a[i] }
     main()
     {int aa[10]={1,2,3,4,5,6,7,8,9,10},i;
     sort(&aa[3],5);
     for(i=0;i<10;i++)printf("%d,",aa[i]);
     printf("\n");
     }
     程序運行后的輸出結果是
     A)1,2,3,4,5,6,7,8,9,10,
     B)10,9,8,7,6,5,4,3,2,1,
     C)1,2,3,8,7,6,5,4,9,10,
     D)1,2,10,9,8,7,6,5,4,3,
    (42) 以下程序的運行結果是
     #include "stdio.h"
     main()
     {struct date
     {int year,month,day;}today;
     printf("%d\n",sizeof(struct date));
     }
     A)6
     B)8
     C)10
     D)12
    (43)若有語句int *point,a=4;和 point=&a;下面均代表地址的一組選項是
     A)a,point,*&a
     B)&*a,&a,*point
     C)*&point,*point,&a
     D)&a,&*point,point
    (44)在調用函數時,如果實參是簡單的變量,它與對應形參之間的數據傳遞方式是
     A)地址傳遞
     B)單向值傳遞
     C)由實參傳形參,再由形參傳實參
     D)傳遞方式由用戶指定
    (45)已定義以下函數
     fun(char *p2, char *p1)
     {
     while((*p2=*p1)!='\0'){p1++;p2++;}
     }
     函數的功能是
     A)將p1所指字符串復制到p2所指內存空間
     B)將p1所指字符串的地址賦給指針p2
     C)對p1和p2兩個指針所指字符串進行比較
     D)檢查p1和p2兩個指針所指字符串中是否有'\0'
    (46)若執(zhí)行下述程序時,若從鍵盤輸入6和8時,結果為
     main()
     {int a,b,s;
     scanf("%d%d",&a,&b);
     s=a
     if(a     s=b;
     s*=s;
     printf("%d",s);
     }
     A)36
     B)64
     C)48
     D)以上都不對
    (47)fscanf函數的正確調用形式是
     A)fscanf(fp,格式字符串,輸出表列);
     B)fscanf(格式字符串,輸出表列,fp);
     C)fscanf(格式字符串,文件指針,輸出表列);
     D)fscanf(文件指針,格式字符串,輸入表列);
    (48)下列關于C語言數據文件的敘述中正確的是
     A)文件由ASCII碼字符序列組成,C語言只能讀寫文本文件
     B)文件由二進制數據序列組成,C語言只能讀寫二進制文件
     C)文件由記錄序列組成,可按數據的存放形式分為二進制文件和文本文件
     D)文件由數據流形式組成,可按數據的存放形式分為二進制文件和文本文件
    (49)有以下程序
     void ss(char *s,char t)
     {while(*s)
     {if(*s= =t)*s=t-'a'+'A';
     s++;
     }
     }
     main()
     {char str1[100]="abcddfefdbd",c='d';
     ss(str1,c); printf("%s\n",str1);
     }
     程序運行后的輸出結果是
     A)ABCDDEFEDBD
     B)abcDDfefDbD
     C)abcAAfefAbA
     D)Abcddfefdbd
    (50)若以下定義:
     struct link
     {int data;
     struct link *next;
     } a,b,c,*p,*q;
     且變量a和b之間已有如下圖所示的鏈表結構:
     指針p指向變量a,q指向變量c。則能夠把c插入到a和b 之間并形成新的鏈表的語句組是:
     A)a.next=c; c.next=b;
     B)p.next=q; q.next=p.next;
     C)p->next=&c; q->next=p->next;
     D)(*p).next=q; (*q).next=&b;
    二、填空題
    (1)算法的基本特征是可行性、確定性、 【1】 和擁有足夠的情報。
    解析: 算法是指解題方案的準確而完整的描述。它有4個基本特征,分別是可行性、確定性、有窮性和擁有足夠的情報。
    (2)在長度為n的有序線性表中進行二分查找。最壞的情況下,需要的比較次數為 【2】 。
    解析: 對于長度為n的有序線性表,在最壞情況下,二分查找只需要比較log2n次,而順序查找需要比較n次。
    (3)在面向對象的程序設計中,類描述的是具有相似性質的一組 【3】 。
    解析: 將屬性、操作相似的對象歸為類,也就是說,類是具有共同屬性、共同方法的對象的集合。
    (4)通常,將軟件產品從提出、實現、使用維護到停止使用退役的過程稱為 【4】 。
    解析: 軟件產品從考慮其概念開始,到該軟件產品不能使用為止的整個時期都屬于軟件生命周期。一般包括可行性研究與需求分析、設計、實現、測試、交付使用以及維護等活動。
    (5)數據庫管理系統(tǒng)常見的數據模型有層次模型、網狀模型和 【5】 3種。
    解析: 數據庫管理系統(tǒng)是位于用戶與操作系統(tǒng)之間的一層系統(tǒng)管理軟件,是一種系統(tǒng)軟件,是用戶與數據庫之間的一個標準接口。其總是基于某種數據模型,可以分為層次模型、網狀模型和關系模型。
    (6)設y是int型,請寫出y為奇數的關系表達式 【6】 。
    答案(y%2)==1
    (7)設int a=5,b=6,表達式(++a==b--)?++a:--b的值是【7】 。
    解析: 此表達式為三目運算符,++a的值為6,b--的值為6,則整個表達式的值為++a的值,++a的值為7。請注意前綴++,--和后綴++,--的區(qū)別。
    (8)下列程序的輸出結果是【8】。
    maim ()
    {char b []="Hello you";
    b[5]=0;
    printf ("%s\n",b);}
    解析: 語句b[5]=0;相當于語句b[5]=′\0′,且′\0′為字符串結束標志,輸出時遇到′\0′就停止輸出。
    (9)當調用函數時,實參是一個數組名,則向函數傳遞的是【9】。
    解析: 在函數中,可以通過指針變量來引用調用函數中對應的數組元素,此操作是通過傳遞數組的首地址來實現。
    (10)以下程序的輸出結果是【10】。
    int a=1234;
    printf ("%2d\n",a);
    解析: 在%與格式符之間插入一個整形數來指這輸出寬度,并不影響數據的完整性,當插入的寬度小于實際的寬度時,則實際的寬度輸出。
    (11) 用高級語言編寫的程序稱為【11】程序,它可以通過解釋程序翻譯一句執(zhí)行一句的方式執(zhí)行,也可以通過編譯程序一次翻譯產生目標程序,然后執(zhí)行。
    解析: 用高級語言編寫的程序稱為源程序,源程序不能在計算機上直接運行,運行源程序有兩種方式:一種是通過解釋程序,對源程序逐句解釋執(zhí)行;另一種是先讓編譯程序將源程序一次翻譯產生目標程序(目標程序是計算機可直接執(zhí)行的機器語言程序,它是一種二進制代碼程序),然后執(zhí)行目標程序。
    (12) 以下程序的輸出結果是【12】。
    main()
    {int a=0;
    a+=(a=8);
    printf("%d\n",a);}
    解析: 賦值表達式的值就是所賦值變量的值,本題中a+=8相當于a=a+8,對表達式逐步進行求解:
    a+=(a=8)此時,a的值由于賦值為8,而不是0
    a+=8
    a=a+8
    a=16
     (13)函數 void fun(float *sn, int n)的功能是:根據以下公式計算S,計算結果通過形參指針sn傳回;n通過形參傳入,n的值大于等于0。請?zhí)羁铡?BR>    void fun( float *sn, int n)
    { float s=0.0, w, f=-1.0;
    int i=0;
    for(i=0; i<=n; i++)
    { f=【13】* f;
    w=f/(2*i+1);
    s+=w; }
    【14】=s;}
    解析: C語言中實參變量和形參變量的數據傳遞是單向的“值傳遞”方式。指針變量作函數也要遵循這一規(guī)則。調用函數不可能改變實參指針變量的值,但可以改變實參指針變量所指變量的值。
    (14)函數fun的功能是:根據以下公式求p的值,結果由函數值返回。m與n為兩個正數且要求m>n。
    例如:m=12,n=8時,運行結果應該是495.000000。請在題目的空白處填寫適當的程序語句,將該程序補充完整。
    #include
    #include
    float fun (int m, int n)
    { int i;
    double p=1.0;
    for(i=1;i<=m;i++)【15】;
    for(i=1;i<=n;i++)【16】;
    for(i=1;i<=m-n;i++)p=p/i;
    return p;}
    main ()
    { clrscr();
    printf ("p=%f\n",fun (12,8));}
    解析:本題中,欲求p的值,需要先求m,n,m-n的階乘值,可用循環(huán)語句實現。
    (15)該程序運行的結果是【17】。
    #include
    #include
    #define M 100
    void fun(int m, int *a, int *n)
    { int i,j=0;
    for(i=1;i<=m;i++)
    if(i%7==0||i%11==0)
    a[j++]=i;
    *n=j;}
    main()
    { int aa[M],n,k;
    clrscr();
    fun(10,aa,&n);
    for(k=0;k    if((k+1)%20==0)printf("\n");
    else printf("%4d",aa[k]);
    printf("\n");}
    解析: 解答本題的關鍵是要讀懂程序,試題要找出能被7或11整除的所有整數,注意數學中的“或”和C語言中的“或”的區(qū)別,但在此處,if條件語句中用了“||”運算符,若要找能同時被7和11整除的所有整數則在if()中應用“&&”運算符。
    當然,如果m的值輸入50,即表達式fun(10,aa,&n);為fun(50,aa,&n);時輸入結果為:7 11 14 21 22 28 33 35 42 44 49。
    (16)下列程序的功能是:求出ss所指字符串中指定字符的個數,并返回此值。
    例如,若輸入字符串123412132,輸入字符1,則輸出3,請?zhí)羁铡?BR>    #include
    #include
    #define M 81
    int fun(char *ss, char c)
    { int i=0;
    for(; 【18】;ss++)
    if(*ss==c)i++;
    return i;}
    main()
    { char a[M], ch;
    clrscr();
    printf("\nPlease enter a string: "); gets(a);
    printf("\nPlease enter a char: "); ch=getchar();
    printf("\nThe number of the char is: %d\n", fun(a,ch));}
    解析: 從字符串ss中找出子字符串的方法是:從第1個字符開始,對字符串進行遍歷;若ss串的當前字符等于t串的第1個字符,兩字符串的指針自動加1,繼續(xù)比較下一個字符;若比較至字符串的結尾,則跳出循環(huán);若ss串的字符和c串的字符對應不同,繼續(xù)對ss串的下一個字符進行處理。本程序是采用逐一比較的方式找出出現的次數。循環(huán)的作用是在串中從左到右逐一走動,if()的作用是進行判斷是否相同,若與c相同則表示又出現一次。
    (17)下面程序把從終端讀入的文本(用@作為文本結束標志)輸出到一個名為bi.dat的新文件中,請?zhí)羁铡?BR>    #include "stdio.h"
    FILE *fp;
    { char ch;
    if((fp=fopen(【19】))==NULL)exit(0);
    while((ch=getchar( ))!='@')fputc (ch,fp);
    fclose(fp);}
    解析: fopen函數的調用方式通常為:
    FILE *fp
    fp=fopen(文件名,使用文件方式);
    (18)設有如下宏定義
    #define MYSWAP(z,x,y)
    {z=x;x=y;y=z;}
    以下程序段通過宏調用實現變量a,b內容交換,請?zhí)羁铡?BR>    float a=5,b=16,c;
    MYSWAP(【20】,a,b);
    解析: 該題考查兩個知識點:
    (1)用一個指定的標識符(即名字)來代表一個字符串,它的一般形式為#define 標識符 字符串
    (2)在MYSWAP宏定義中,利用中間變量z來交換x和y的值,所以要實現a和b的交換,只需通過中間變量即可,所以,此處應填c。