計(jì)算機(jī)等級(jí)考試二級(jí)C語言考前密卷(8)

字號(hào):

一、選擇題
    (1)下列數(shù)據(jù)結(jié)構(gòu)中,按先進(jìn)后出原則組織數(shù)據(jù)的是
    A)線性鏈表 B)棧
    C)循環(huán)鏈表 D)順序表
    (2)具有3個(gè)結(jié)點(diǎn)的二叉樹有
    A)2種形態(tài) B)4種形態(tài)
    C)7種形態(tài) D)5種形態(tài)
    (3)設(shè)有下列二叉樹:
    對(duì)此二叉樹前序遍歷的結(jié)果為
    A)ZBTYCPXA B)ATBZXCYP
    C)ZBTACYXP D)ATBZXCPY
    (4)結(jié)構(gòu)化程序設(shè)計(jì)主要強(qiáng)調(diào)的是
    A)程序的規(guī)模 B)程序的效率
    C)程序設(shè)計(jì)語言的先進(jìn)性 D)程序易讀性
    (5)程序的3種基本控制結(jié)構(gòu)是
    A)過程、子過程和分程序 B)順序、選擇和重復(fù)
    C)遞歸、堆棧和隊(duì)列 D)調(diào)用、返回和轉(zhuǎn)移
    (6)下列敘述中,不屬于測(cè)試的特征的是
    A)測(cè)試的挑剔性 B)完全測(cè)試的不可能性
    C)測(cè)試的可靠性 D)測(cè)試的經(jīng)濟(jì)性
    (7)需求分析中開發(fā)人員要從用戶那里了解
    A)軟件做什么 B)用戶使用界面
    C)輸入的信息 D)軟件的規(guī)模
    (8)下列關(guān)系模型中,能使經(jīng)運(yùn)算后得到的新關(guān)系中屬性個(gè)數(shù)多于原來關(guān)系中屬性個(gè)數(shù)的是
    A)選擇 B)連接
    C)投影 D)并
    (9)下列敘述中,正確的是
    A)用E-R圖能夠表示實(shí)體集間一對(duì)一的聯(lián)系、一對(duì)多的聯(lián)系和多對(duì)多的聯(lián)系
    B)用E-R圖只能表示實(shí)體集之間一對(duì)一的聯(lián)系
    C)用E-R圖只能表示實(shí)體集之間一對(duì)多的聯(lián)系
    D)用E-R圖表示的概念數(shù)據(jù)模型只能轉(zhuǎn)換為關(guān)系數(shù)據(jù)模型
    (10)“年齡在18~25之間”這種約束是屬于數(shù)據(jù)庫當(dāng)中的
    A)原子性措施 B)一致性措施
    C)完整性措施 D)安全性措施
    (11)以下說法錯(cuò)誤的是
    A)高級(jí)語言都是用接近人們習(xí)慣的自然語言和數(shù)學(xué)語言作為語言的表達(dá)形式
    B)計(jì)算機(jī)只能處理由0和1的代碼構(gòu)成的二進(jìn)制指令或數(shù)據(jù)
    C)C語言源程序經(jīng)過C語言編譯程序編譯之后生成一個(gè)后綴為.EXE的二進(jìn)制文件
    D)每一種高級(jí)語言都有它對(duì)應(yīng)的編譯程序
    (12)算法是指為解決某個(gè)特定問題而采取的確定且有限的步驟,下面不屬于算法的五個(gè)特性的是
    A)有零個(gè)輸入或多個(gè)輸入
    B)高效性
    C)有窮性
    D)確定性
    (13)已知int a=6; 則執(zhí)行a+=a-=a*a;語句后,a的值為
    A)36
    B)0
    C)-24
    D)-60
    (14)下面各選項(xiàng)中,均是C語言標(biāo)識(shí)符的選項(xiàng)組是
    A)forchinato
    B)long_123short56_do
    C)voidunion_342
    D)text.txt _023_3ew
    (15)下列表達(dá)式中,結(jié)果為5的是
    A)6*5%6
    B)5*-2+15
    C)5+75
    D)6+-2/3
    (16)下列常量中,為不合法的實(shí)型常量表示的是
    A).0032
    B)0.0
    C)0.3242E8
    D).E3
    (17)關(guān)于C語言的主函數(shù)描述正確的是
    A)C程序可以有多個(gè)main函數(shù)
    B)C程序必有一個(gè)而且只能有一個(gè)main函數(shù)
    C)C程序可以沒有main函數(shù)
    D)C程序的執(zhí)行不一定在main函數(shù)開始執(zhí)行
    (18)已知int a=1,b=-1;則語句printf("%d\n",(a--,++b));的輸出結(jié)果是
    A)-1
    B)0
    C)1
    D)語句錯(cuò)誤
    (19)已知int a,b;double c;則以下語句中錯(cuò)誤的函數(shù)調(diào)用是
    A)scanf("%d,%x,%lf",&a,&b,&c);
    B)scanf("%d,%d,%le",&a,&b,&c);
    C)scanf("%o,%x,%o",&a,&b);
    D)scanf("%d,%o,%e",&a,&b,&c);
    (20)已知x,y,z均為整型變量,且值均為1,則執(zhí)行語句++x||++y&&++z;后,表達(dá)式x+y的值為
    A)1
    B)2
    C)3
    D)4
    (21)若int k=8;則執(zhí)行下列程序后,變量k的正確結(jié)果是
    main()
    {int k=8;
    switch(k)
    {case 9:k+=1;
    case 10:k+=1;
    case 11:k+=1;break;
    default:k+=1;}
    printf("%d\n",k);}
    A)12
    B)11
    C)10
    D)9
    (22)若int i,j;,則for(i=j=0;i<10&&j<8;i++,j+=3)控制的循環(huán)體執(zhí)行的次數(shù)是
    A)9
    B)8
    C)3
    D)2
    (23)下列程序的輸出結(jié)果是
    #include "stdio.h"
    main()
    { int i=6;
    while(i--)
    printf("%d",--i);
    printf("\n");}
    A)531
    B)420
    C)654321
    D)死循環(huán)
    (24)閱讀下列程序,則執(zhí)行結(jié)果是
    #include "stdio.h"
    main()
    {int a=0,b=0,c=0,i;
     for(i=0;i<4;i++)
    switch(i)
    {case 0:a=i++;
    case 1:b=i++;
    case 2:c=i++;
    case 3:i++;}
    printf("%d,%d,%d,%d\n",a,b,c,i);}
    A)0,1,3,4
    B)1,2,3,4
    C)0,1,2,5
    D)0,2,3,4
    (25)下面程序的運(yùn)行結(jié)果是
    #include "stdio.h"
    main()
    {int j,i,k=0;
    for(j=50;j<=60;j++)
    {if(!(k))printf("\n");
    for(i=2;i  if(i>=j-1){printf("%d",j);
    k++;}}}
    A)5359
    B)5953
    C)3595
    D)9535
    (26)已知char ch=′C′;則以下表達(dá)式的值是
    ch=(ch>=′A′ && ch<=′Z′)?(ch+32):ch;
    A)A
    B)a
    C)Z
    D)c
    (27)以下描述錯(cuò)誤的是
    A)C程序中,函數(shù)可以直接或間接的調(diào)用自己
    B)函數(shù)調(diào)用時(shí),函數(shù)名必須與所調(diào)用的函數(shù)名字完全一致
    C)函數(shù)說明語句中的類型必須與函數(shù)返回值的類型一致
    D)實(shí)參數(shù)可以與形參個(gè)數(shù)不一致
    (28)閱讀下面程序,則執(zhí)行后的結(jié)果為
    #include "stdio.h"
    main()
    {fun3(fun1(),fun2());}
    fun1()
    { int k=20;
    return k;}
    fun2()
    { int a=15;
    return a;}
    fun3(int a,int b)
    {int k;
    k=(a-b)*(a+b);
    printf("%d\n",k);}
    A)0
    B)184
    C)175
    D)編譯不通過
    (29)閱讀下面程序,則執(zhí)行后的輸出結(jié)果為
    #include "stdio.h"
    fun(int a,int b)
    {int s;
    s=a*b/2;
    printf("%d\n",s);}
    main()
    {int a=10,b=16;
    fun(a,b);}
    A)10
    B)16
    C)160
    D)80
    (30)閱讀下面程序,則程序執(zhí)行后的結(jié)果為
    #include "stdio.h"
    main()
    {int a=4,b=6,c=7;
    double d,fun(int,int,int);
    d=fun(a,b,c);
    printf("%lf\n",d);}
    double fun(int a,int b,int c)
    {double s;
    s=a%b*c;
    return s;}
    A)27
    B)27.000000
    C)28
    D)28.000000
    (31)下列不合法的指針變量的定義是
    A)int *_k;
    B)char *_245;
    C)int *p;
    D)double *5_is
    (32)下列關(guān)于指針變量賦空值的說法錯(cuò)誤的是
    A)當(dāng)賦空值的時(shí)候,變量指向地址為0的存儲(chǔ)單元
    B)賦值語句可以表達(dá)為變量名=′\0′;
    C)賦值語句可以表達(dá)為變量名=0;
    D)一個(gè)指針變量可以被賦空值
    (33)閱讀下面程序,則執(zhí)行后輸出的結(jié)果為
    #include "stdio.h"
    void fun(int *a,int *b)
    {int m;
    m=(*a+*b)*(*a+*b);
    m+=(*a-*b)*(*a-*b);
    printf("%d\n",m);}
    main()
    { int a=5,b=6,*x=&a,*y=&b;
     fun(x,y);}
    A)120
    B)121
    C)122
    D)123
    (34)閱讀下面程序,則輸出結(jié)果是
    #include "stdio.h"
    void fun(int *a,int *b)
    {int c=20,d=25;
    *a=c/3;
    *b=d/5;}
    main()
    { int a=3,b=5;
    fun(&a,&b);
    printf("%d,%d\n",a,b);}
    A)6,5
    B)5,6
    C)20,25
    D)3,5
    (35)以下對(duì)一維數(shù)組c進(jìn)行正確的定義初始化的語句是
    A)int c[10]=0;
     B)int c[10]={0}*10;
    C)int c[1]={0,0,0,0,0,0,0};
    D)int c[10]={0};(36)以下二維數(shù)組c的定義形式是
    A)int c[3][]
    B)float c[3,4]
    C)double c[3][4]
    D)float c(3)(4)
    (37)閱讀下列程序,則執(zhí)行后輸出的結(jié)果是
    #include "stdio.h"
    int k=1;
    main()
    {fun(k);
    printf("%d\n",k);}
    fun(int k)
    { k++;
     k=k*6;}
    A)1
    B)2
    C)6
    D)12
    (38)已知#define M 2;的宏定義,執(zhí)行語句k=M*5;后,k的值是
    A)10
    B)5
    C)2
    D)以上答案都不對(duì)
    (39)已知:int c[3][4];則對(duì)數(shù)組元素引用正確的是
    A)c[1][4]
    B)c[1.5][0]
    C)c[1+0][0]
    D)以上表達(dá)都錯(cuò)誤
    (40)現(xiàn)有如下程序段
    #include "stdio.h"
    void fun(int *a,int *b,int *c)
    {*c=*a+*b;}
    main()
    {int a[2]={12,23},c;
    fun(a,a+1,&c);
    printf("%d\n",c);}
    則程序的輸出結(jié)果為
    A)23
    B)12
    C)0
    D)35
    (41)若有以下語句,則正確的描述是
    char a[]="toyou";
    char b[]={′t′,′o′,′y′,′o′,′u′};
    A)a數(shù)組和b數(shù)組的長度相同
    B)a數(shù)組長度小于b數(shù)組長度
    C)a數(shù)組長度大于b數(shù)組長度
    D)a數(shù)組等價(jià)于b數(shù)組
    (42)已知:char a[15],b[15]={"I love china"};則在程序中能將字符串I love china賦給數(shù)組a的正確語句是
    A)a="I love china";
    B)strcpy(b,a);
    C)a=b;
    D)strcpy(a,b);
    (44)閱讀下面程序,則執(zhí)行后的結(jié)果為
    #include "stdio.h"
    main()
    { char *str="abcdefghijklmnopq";
     while(*str++!=′e′);
     printf("%c\n",*str);}
    A)f
    B)a
    C)e
    D)q
    (45)現(xiàn)有如下程序段
    #include "stdio.h"
    int fun(int k,int *m)
    {if(k%3)*m=k*k;
    else *m=k/3;}
    main()
    { int (*p)(int,int *),m;
     p=fun;
     (*p)(78,&m);
     printf("%d\n",m);}
    則程序段的輸出結(jié)果為
    A)24
    B)25
    C)26
    D)27
    (46)閱讀下列程序,則執(zhí)行后的輸出結(jié)果為
    #include "stdio.h"
    fun(int x)
    {if(x/2>0)fun(x/2);
    printf("%d",x%2);}
    main()
    { fun(20);
    putchar(′\n′);}
    A)11100
    B)10100
    C)10101
    D)10110
    (47)閱讀如下程序段,則執(zhí)行后程序的輸出結(jié)果是
    #include
    main()
    {structa{int x; int y;}num[2]={{20,5},{6,7}};
    printf("%d\n",num[0].x/num[0].y*num[1].y);}
    A)0
    B)28
    C)20
    D)5
    (48)閱讀程序段,則執(zhí)行后的輸出結(jié)果為
    #include "stdio.h"
    typedef union{ long x[2];
    int y[4];
    char z[8];} atx;
    typedef struct aa{ long x[2];
    int y[4];
    char z[8]; } stx;
    main()
    {printf("union=%d,struct aa=%d\n",sizeof(atx),sizeof(stx));}
    A)union=8,struct aa=8
    B)union=8,struct aa=24
    C)union=24,struct aa=8
    D)union=24,struct aa=24
    (49)閱讀下列程序段
    #include "stdio.h"
    typedef struct aa
    { int a;
     struct aa *next; } M;
    void set(M *k,int i,int *b)
    { int j,d=0;
     for(j=1;j  { k[j-1].next=&k[j];
    k[j-1].a=b[d++]; }
    k[j].a=b[d]; }
    main()
    { M k[5],*p;
    int d[5]={23,34,45,56,67};
    set(k,5,d);
    p=k+1;
    printf("%d\n",table); }
    則下面的表達(dá)式在table處,能使程序執(zhí)行后,打印輸出數(shù)據(jù)45的是
    A)p->next->a
    B)++p->a
    C)(*p).a++
    D)p++->a
    (50)閱讀下面程序,程序?qū)崿F(xiàn)的功能是(a123.txt在當(dāng)前盤符下已經(jīng)存在)
    #include "stdio.h"
    void main()
    {FILE *fp;
    int a[10],*p=a;
    fp=fopen("a123.txt","w");
    while( strlen(gets(p))>0 )
    { fputs(a,fp);
    fputs("\n",fp);}
    fclose(fp);}
    A)從鍵盤輸入若干行字符,按行號(hào)倒序?qū)懭胛谋疚募123.txt中
    B)從鍵盤輸入若干行字符,取前2行寫入文本文件a123.txt中
    C)從鍵盤輸入若干行字符,第一行寫入文本文件a123.txt中
    D)從鍵盤輸入若干行字符,依次寫入文本文件a123.txt中二、填空題
    (1)排序是計(jì)算機(jī)程序設(shè)計(jì)中的一種重要操作,常見的排序方法有插入排序、 【1】 和選擇排序等。
    【命題目的】需要考生記住常見的排序方法。
    【解題要點(diǎn)】常見的排序方法有插入排序(包括簡單插入排序法和希爾排序法等)、交換排序(包括冒泡排序和快速排序法等)和選擇排序(包括簡單選擇排序和堆排序等)。
     【考點(diǎn)鏈接】常見的排序方法及其作用機(jī)制和區(qū)別。
    (2)當(dāng)循環(huán)隊(duì)列非空且隊(duì)尾指針等于隊(duì)頭指針時(shí),說明循環(huán)隊(duì)列已滿,不能進(jìn)行入隊(duì)運(yùn)算。這種情況稱為 【2】 。
    【命題目的】本題考查了隊(duì)列的基本性質(zhì)。
    【解題要點(diǎn)】入隊(duì)運(yùn)算是指在循環(huán)隊(duì)列的隊(duì)尾加入一個(gè)新元素。這個(gè)運(yùn)算有兩個(gè)基本操作:首先將隊(duì)尾指針進(jìn)一(即rear=rear+1),并當(dāng)rear=m+1時(shí)置rear=1;然后將新元素插入隊(duì)尾指針指向的位置。當(dāng)循環(huán)隊(duì)列非空(s=1)時(shí)且隊(duì)尾指針等于隊(duì)頭指針時(shí),說明循環(huán)隊(duì)列已滿,不能進(jìn)行入隊(duì)運(yùn)算,這種情況稱為“上溢”。
    (3) 【3】 是一種信息隱蔽技術(shù),目的在于將對(duì)象的使用者和對(duì)象的設(shè)計(jì)者分開。
    【命題目的】本題考查了面向?qū)ο蠹夹g(shù)中的一些基本概念。
    【解題要點(diǎn)】面向?qū)ο蠹夹g(shù)中包括以下幾個(gè)基本概念,即對(duì)象、類、方法、消息、繼承和封裝,其中封裝是一種信息隱蔽技術(shù),目的在于將對(duì)象的使用者對(duì)象的和設(shè)計(jì)者分開。
    (4)為了便于對(duì)照檢查,測(cè)試用例應(yīng)由輸入數(shù)據(jù)和預(yù)期的 【4】 兩部分組成。
    【命題目的】本題主要考查測(cè)試的步驟。
    【考點(diǎn)鏈接】測(cè)試的基本方法和步驟。
    (5) 【5】 是從二維表列的方向進(jìn)行的運(yùn)算。
    【命題目的】本題考查了關(guān)系運(yùn)算的基本知識(shí)。
    【解題要點(diǎn)】在關(guān)系模型的數(shù)據(jù)語言中,一般除了運(yùn)用常規(guī)的集合運(yùn)算,(并、交、差、笛卡爾積等)外,還定義了一些專門的關(guān)系運(yùn)算,如投影、選擇、連接等。前者是將關(guān)系(即二維表)看成是元組的集合,這些運(yùn)算主要是從二維表的行的方向來進(jìn)行的;后者主要是從二維表的列的方向來進(jìn)行的運(yùn)算。兩者統(tǒng)稱為關(guān)系代數(shù)。
    (6)定義int a=5,b=20;若執(zhí)行語句printf("%d\n",++a*--b/5);后,輸出的結(jié)果為 【6】 。
    解析: ++和--做前綴使用的時(shí)候,先對(duì)變量進(jìn)行增1或減1,之后進(jìn)行其他的運(yùn)算,之后按照同級(jí)運(yùn)算符自左向右依次運(yùn)算。
    (7)執(zhí)行程序時(shí)的輸入為123456789,則程序的運(yùn)行結(jié)果為 【7】 。
    #include "stdio.h"
    main()
    { int a,b;
     scanf("-%*2d",&a,&b);
     printf("%d\n",a-b);}
    解析: 按照函數(shù)scanf中的格式控制符的描述:"-"控制前2個(gè)數(shù)字賦給變量a,變量a的值為12,""控制將隨后的1個(gè)數(shù)字作為輸入數(shù)據(jù)存入變量b中,變量b的值為5,所以隨后的輸出為7。注意:在%和格式控制符號(hào)之間加*號(hào),表示的是跳過相對(duì)應(yīng)的輸入數(shù)據(jù)。
    (8)閱讀下面程序,則在執(zhí)行時(shí)候的輸出為 【8】 。
     #include "stdio.h"
    main()
    {int x=1,y=2,z=0;
    if(x=2)z=x,x=y,y=z;
    printf("%d,%d\n",x,y);}
    解析: if語句的執(zhí)行過程為:首先計(jì)算緊跟在if后面一對(duì)圓括號(hào)中的表達(dá)式,如果表達(dá)式的值為非零,則執(zhí)行其后的if子句,然后去執(zhí)行if語句后的下一個(gè)語句,如果表達(dá)式為零,則跳過if子句直接執(zhí)行if語句后的下一個(gè)語句,if(x=2)的值為真,即x的值為2。
    (9)語句printf("%d\n",′H′-′0′+64);的執(zhí)行結(jié)果為 【9】 。
    解析: 在C程序中的字符量可參與任何整數(shù)運(yùn)算,在運(yùn)算的時(shí)候都是以ASCII值進(jìn)行的。
    (10)閱讀下面程序,則程序的執(zhí)行結(jié)果為 【10】 。
    #include "stdio.h"
    main()
    { int a=10;
     fun(a);
     printf("%d\n",a);}
    fun(int x)
    { x=50;}
    解析: 函數(shù)調(diào)用的時(shí)候,函數(shù)名字必須與所調(diào)用的函數(shù)名完全一致,形參與實(shí)參類型要一致,在沒有給出函數(shù)返回值類型的情況下,默認(rèn)為整形,當(dāng)返回值為整型放到主函數(shù)后面時(shí),可以不需要事先說明就調(diào)用這個(gè)函數(shù)。
    (11)以下程序的輸出結(jié)果是 【11】 。
    int fun(int x,int y,int *p,int *q)
    { *p=x*y;
     *q=x/y;}
    main()
    {int a,b,c,d;
    a=4;b=3;
    fun(a,b,&c,&d);
    printf("%d,%d\n",c,d);}
    解析: 通過地址傳遞可以在被調(diào)函數(shù)中對(duì)調(diào)用函數(shù)中的變量進(jìn)行引用,通過地址的傳遞,在經(jīng)過函數(shù)調(diào)用以后,改變了c,d變量的值。
    (12)下面程序是求出數(shù)組arr的兩條對(duì)角線上元素之和,請(qǐng)?zhí)羁铡?BR>    #include "stdio.h"
    main()
    {int arr[3][3]={2,3,4,8,3,2,7,9,8},a=0,b=0,i,j;
    for(i=0;i<3;i++)
     for(j=0;j<3;j++)
    if( 【12】 )a=a+arr[i][j];
    for(i=0;i<3;i++)
    for( 【13】 ;j>=0;j--)
    if( 【14】 )
    b=b+ arr[i][j];
    printf("%d,%d\n",a,b);}
    解析: 由于是求對(duì)角線元素的和,所以【12】是判斷是否為對(duì)角線元素的,填i==j這個(gè)判斷條件;對(duì)于次對(duì)角線的求和,初始化的時(shí)候應(yīng)該是從數(shù)組的列開始,由于判斷條件是j>=0,所以初始化時(shí)候應(yīng)該為值減1,即j=2,所以【13】應(yīng)填j=2;【14】是對(duì)次對(duì)角線的判斷,所以填i+j==2。
    (13)下面程序的功能是:對(duì)字符串從小到大進(jìn)行排序并輸出,請(qǐng)?zhí)羁铡?BR>    #include "string.h"
    #include "stdio.h"
    sort(char *a[],int n)
    { int i,j;
    char *p;
    for(j=1;j<=n-1;j++)
    for(i=0; 【15】 ;i++)
    if( 【16】 >0)
    { p=a[i];
    a[i]=a[i+1];
    a[i+1]=p;}}
    main()
    { int i;
    char *book[]={"itisme","itisyou","howareyou","fine","goodnight","goodbye"};
    sort( 【17】 );
    for(i=0;i<6;i++)
    printf("%s\n",book[i]);}
    解析: 這個(gè)題目其實(shí)用的是冒泡排序法,每一次都找一個(gè)的,之后順序的從頭開始排列。所以【15】是一次循環(huán)的判定條件,填i
    (14)下面的函數(shù)是完成1~n的累加,完成函數(shù)。
    a(int k)
    {if(k<=0)printf("error\n");
    if(k==1) 【18】 ;
    else 【19】 ;}
    解析: 由于題目沒有給循環(huán)語句,所以實(shí)現(xiàn)累加一定是用遞歸算法。
    (15)閱讀下列程序,則程序?qū)崿F(xiàn)的功能是 【20】 。
    #include "stdio.h"
    struct node
    { char data;
     struct node *next; } *head;
    fun(struct node *q)
    { if(head == NULL)
    {q->next=NULL;
    head=q;}
    else
    { q->next=head;
    head=q;}}
    main()
    {char ch;
    struct node *p;
    head = NULL;
    while((ch=getchar())!=′\n′)
    {p=(struct node *)malloc(sizeof(struct node));
    p->data=ch;
    fun(p); }
    p=head;
    while(p!=NULL)
    {printf("%c",p->data);
    p=p->next; }}
    解析: 本題目的功能是從鍵盤輸入一行字符,調(diào)用函數(shù)建立反序的鏈表,然后輸出整個(gè)鏈表,從主函數(shù)開始依次向下對(duì)程序進(jìn)行分析,分析初始化狀態(tài)的程序,之后再分析函數(shù)的功能。