07年4月等級(jí)考試二級(jí)C語言考前密卷(9)

字號(hào):

(1)根據(jù)數(shù)據(jù)結(jié)構(gòu)中各數(shù)據(jù)元素之間前后件關(guān)系的復(fù)雜程度,一般將數(shù)據(jù)結(jié)構(gòu)分成
    A)動(dòng)態(tài)結(jié)構(gòu)和靜態(tài)結(jié)構(gòu) B)緊湊結(jié)構(gòu)和非緊湊結(jié)構(gòu)
    C)線性結(jié)構(gòu)和非線性結(jié)構(gòu) D)內(nèi)部結(jié)構(gòu)和外部結(jié)構(gòu)
    (2)設(shè)一棵二叉樹中有3個(gè)葉子結(jié)點(diǎn),有8個(gè)度為1的結(jié)點(diǎn),則該二叉樹中總的結(jié)點(diǎn)數(shù)為
    A)12 B)13
    C)14 D)15
    (3)在下列幾種排序方法中,要求內(nèi)存量的是
    A)插入排序
     B)選擇排序
    C)快速排序
     D)歸并排序
    (4)下列敘述中,不屬于結(jié)構(gòu)化程序設(shè)計(jì)方法的主要原則的是
    A)自頂向下
     B)由底向上
    C)模塊化
     D)限制使用goto語句
    (5)下列不屬于軟件調(diào)試技術(shù)的是
    A)強(qiáng)行排錯(cuò)法
     B)集成測試法
    C)回溯法
     D)原因排除法
    (6)為了避免流程圖在描述程序邏輯時(shí)的靈活性,提出了用方框圖來代替?zhèn)鹘y(tǒng)的程序流程圖,通常也把這種圖稱為
    A)PAD圖 B)N-S圖
    C)結(jié)構(gòu)圖 D)數(shù)據(jù)流圖
    (7)軟件復(fù)雜性度量的參數(shù)包括
    A)效率
     B)規(guī)模
    C)完整性
     D)容錯(cuò)性
    (8)下列敘述中,不屬于數(shù)據(jù)庫系統(tǒng)的是
    A)數(shù)據(jù)庫
     B)數(shù)據(jù)庫管理系統(tǒng)
    C)數(shù)據(jù)庫管理員
     D)數(shù)據(jù)庫應(yīng)用系統(tǒng)
    (9)數(shù)據(jù)庫系統(tǒng)的核心是
    A)數(shù)據(jù)庫
     B)數(shù)據(jù)庫管理系統(tǒng)
    C)數(shù)據(jù)模型
     D)軟件工具
    (10)視圖設(shè)計(jì)一般有3種設(shè)計(jì)次序,下列不屬于視圖設(shè)計(jì)的是
    A)自頂向下 B)由外向內(nèi)
    C)由內(nèi)向外 D)自底向上
    (11)下列常數(shù)中不能作為C語言常量的是
    A)0xabc
    B)2.5e-0.2
    C)32
    D)0747
    (12)設(shè)int型的數(shù)據(jù)長度為2個(gè)字節(jié),則unsigned int 類型數(shù)據(jù)的取值范圍是
    A)-127~128
    B)0~255
    C)0~65535
    D)0~32768
    (13)已知int t=6,s;則執(zhí)行語句s=(++t)+(t++);后,s的值是
    A)12
    B)13
    C)14
    D)15
    (14)已知int x=6,y=2,z;則執(zhí)行表達(dá)式z=x=x>y后,變量z的值為
    A)0
    B)1
    C)4
    D)5
    (15)已知int i,a;執(zhí)行語句i=(a=3,a++,--a,a+4,a+5,++a);后,變量i的值為
    A)2
    B)3
    C)4
    D)5
    (16)下列說法中正確的是
    A)一個(gè)C程序是從命令行開始執(zhí)行的
    B)C程序中有些執(zhí)行語句不用分號(hào)(;)結(jié)束
    C)分號(hào)不是C語句的一部分,是C語句之間的分隔符
    D)命令行必須用“#”開頭,最后不能加“;”號(hào),命令行不是C程序中的語句
    (17)已知int x=2;執(zhí)行語句x*=x+=++x;后,x的值是
    A)16
    B)26
    C)36
    D)46
    (18)已知int a=20,b=5;則執(zhí)行以下語句后的輸出結(jié)果是
    printf("%d\n",a%=(b%=2));
    A)0
    B)1
    C)2
    D)3
    (19)現(xiàn)有以下程序段
     #include
     main()
    { int a,b,c;
    scanf("a=%*d%d,b=%d%*d,c=%d",&a,&b,&c);
    printf("a=%d,b=%d,c=%d\n",a,b,c); }
    若輸出的結(jié)果為a=20,b=30,c=40,則以下能夠正確輸入數(shù)據(jù)的是
    A)a=10]20,b=20]30,c=40
    B)20,30,40
    C)a=20,b=30,c=40
    D)a=10]20,b=30]20,c=40
    [注]: “]”表示空格,表示回車
    (20)已知int x=5,y=3;則表達(dá)式(x||y)&&78的結(jié)果為
    A)1
    B)0
    C)5
    D)78
    (21)有如下程序段
     #include "stdio.h"
     main()
    {int a=10,b=50,c=30;
    a=a>30?1:2;
    b=b>30?1:2;
    c=c>30?1:2;
    printf("%d,%d,%d\n",a,b,c);}
    則執(zhí)行結(jié)果為
    A)2,1,2
    B)1,2,1
    C)1,1,2
    D)2,1,1
    (22)閱讀如下程序段
    #include "stdio.h"
    main()
    { int a=45,b=40,c=50,d;
    d=a>30?b:c;
    switch(d)
    { case 30 : printf("%d,",a);
    case 40 : printf("%d,",b);
    case 50 : printf("%d,",c);
    default : printf("#");}}
    則輸出的結(jié)果是
    A)40,50,
    B)50,#
    C)40,#
    D)40,50,#
    (23)若有定義int k=10;則下列程序的輸出結(jié)果為
    do{
    printf("%d",k--); } while(!k);
    A)9
    B)10
    C)10987654321
    D)沒有輸出
    (24)閱讀下列程序段,則程序的輸出結(jié)果是
    #include "stdio.h"
    main()
    { int a=10,b=10,k;
    for(k=0;a>8;b=++k)
    printf("%d,%d,",a--,--b);
    printf("\n");}
    A)10,10,10,0,
    B)10,9,9,0,
    C)10,10,9,1,
    D)9,9,9,1,
    (25)下列程序的運(yùn)行結(jié)果是
    #include "stdio.h"
    main()
    {int a,b,m;
    for(a=5;a>=1;a--)
    { m=0;
    for(b=a;b<=5;b++)
    m=m+a*b;}
    printf("%d\n",m);}
    A)30
    B)15
    C)20
    D)10
    (26)有字符串如下,"\n\\\407as1\"\xabc",則字符串的長度為
    A)6
    B)7
    C)8
    D)9
    (27)閱讀下面程序段
    #include "stdio.h"
    main()
    { char c;
    c=(′z′-′a′)/2+′A′;
    putchar(c);}
    輸出結(jié)果為
    A)M
    B)N
    C)O
    D)Q
    (28)下列說法中不正確的是
    A)C語言規(guī)定,不能在一個(gè)函數(shù)的內(nèi)部再定義函數(shù)
    B)在沒有聲明函數(shù)返回值類型的情況下,C默認(rèn)的函數(shù)返回值類型為int型
    C)函數(shù)的類型可以是整型、實(shí)型、字符型,但不能是指針型
    D)函數(shù)可以沒有形參,但函數(shù)名后的一對圓括號(hào)不能省略
    (29)現(xiàn)有如下程序,則程序的輸出結(jié)果為
    #include "stdio.h"
    int f(int a,int b)
    {int c;
    if(a>0&&a<10)c=(a+b)/2;
    else c=a*b/2;
    return c;}
    main()
    { int a=8,b=20,c;
    c=f(a,b);
    printf("%d\n",c);}
    A)隨機(jī)數(shù)
    B)80
    C)28
    D)14
    (30)閱讀如下程序段,則程序段的執(zhí)行后的輸出結(jié)果為
    #include "stdio.h"
    main()
    { char c;
    int i;
    char count();
    int p(char);
    for(i=0;i<30;i++)c=count();
    p(c);}
    char count()
    { char str=′A′;
    str+=1;
    return(str);}
    p(char c)
    {putchar(c);
    putchar(′\n′);}
    A)A
    B)B
    C)a
    D)b
    (31)閱讀如下程序段,則執(zhí)行后的結(jié)果為
    #include "stdio.h"
    main()
    {int a,*p,*q,**w;
    p=&a;
    q=&a;
    w=&p;
    *p=5%6;
    *q=5;
    **w=3;
    printf("%d\n",a);}
    A)無確定值
    B)1
    C)5
    D)3
    (32)現(xiàn)有定義int a=10,*p=&a;則不能使a的內(nèi)容增1的語句是
    A)*p++;
    B)*p=*p+1;
    C)++*p;
    D)*p+=1;
    (33)現(xiàn)有下列程序段
    #include "stdio.h"
    void JFT(int *a,int *b,int *c,int *d,int *e)
    {int i,j,k,m;
    for(i=0;i<*a;i++)
    for(j=0;j<*b;j++)
     for(k=0;k<*c;k++)
     for(m=0;m<*d;m++)*e++;}
    main()
    {int a=10,b=10,c=10,d=10,e=0;
    JFT(&a,&b,&c,&d,&e);
    printf("%d\n",e);}
    則程序段的輸出結(jié)果是
    A)10000
    B)1000
    C)10001
    D)0
    (34)已知:int c[5][6];則對數(shù)組元素引用不正確的是
    A)c[0+2][2*1]
    B)c[1][3]
    C)c[4-2][0]
    D)c[5][2]
    (35)以下能對二維數(shù)組c進(jìn)行正確的初始化的語句是
    A)int c[3][]={{3},{3},{4}};
    B)int c[][3]={{3},{3},{4}};
    C)int c[3][2]={{3},{3},{4},{5}};
    D)int c[][3]={{3},{},{3}};
    (36)閱讀下列程序段,則程序段實(shí)現(xiàn)的功能是
    #include "stdio.h"
    main()
    { int k[10];
    int j;
    for(j=0;j<10;j++)
    scanf("%d",&k[j]);
    for(j=9;j>=0;j--)
    printf("%d,",k[j]);}
    A)輸入10個(gè)數(shù)據(jù)的順序輸入并輸出
    B)輸入10個(gè)數(shù)據(jù)的逆序存放
    C)輸入10個(gè)數(shù)據(jù)的逆序輸出
    D)以上敘述均錯(cuò)誤
    (37)閱讀程序,則執(zhí)行后的結(jié)果為
     #include "stdio.h"
    main()
    {int i,m,n;
    for(i=0;i<3;i++)
    {m=test1();
    n=test2();}
    printf("%d,%d\n",m,n);}
    test1()
    { int x=0;
    x++;
    return x;}
    test2()
    {static int x=0;
    x++;
    return x;}
    A)1,1
    B)1,3
    C)3,1
    D)3,3
    (38)以下關(guān)于宏替換敘述中,錯(cuò)誤的是
    A)宏替換占用編譯時(shí)間
    B)替換文本中可以包含已定義過的宏名
    C)宏名可以由+號(hào)組成
    D)宏替換只能是字符替換
    (39)閱讀下面程序,則程序的輸出結(jié)果為
    #include "stdio.h"
    main()
    { int c[]={1,2,3,4,5,6};
    int *p;
    p=c;
    printf("%d,",*p);
    printf("%d\n",*++p);}
    A)1,2
    B)2,1
    C)1,1
    D)2,2
    (40)有如下定義,則函數(shù)fun的首部可以是
    #define N 5
    #define M 6
    main()
    {doublec[M][N];
    fun(c); }
    A)fun(double a)
    B)fun(double a[M][])
    C)fun(double *a)
    D)fun(double (*a)[N])
    (41)下面關(guān)于字符串的說明中,錯(cuò)誤的是
    A)char a[15]= "jft";
    B)char a[]="jft";
    C)char *a=:"jft";
    D)char a[]={′j′,′f′,′t′};
    (42)已知:char a[20]= "abc",b[20]= "defghi";則執(zhí)行下列語句后的輸出結(jié)果為
    printf("%d",strlen(strcpy(a,b)));
    A)11
    B)6
    C)5
    D)以上答案都不正確
    (43)閱讀如下程序段,則程序在先后輸入love和china后,輸出結(jié)果是
    #include
    #include
    main()
    {char a[30],b[30];
    int k;
    gets(a);
    gets(b);
    k=strcmp(a,b);
    if(k>0)puts(a);
    else if(k<0)puts(b);}
    A)love
    B)china
    C)lovechina
    D)沒有輸出結(jié)果
    (44)閱讀下面程序,則執(zhí)行后的結(jié)果為
    #include "stdio.h"
    #include "string.h"
    #define N 10
    #define M 10
    char *find(char (*a)[M],int n)
    {char *q; int i;
    q=a[0];
    for(i=0;i    if(strcmp(a[i],q)<0)q=a[i];
    return q;}
    main()
    {char s[N][M]={"tomeetme","you","and","he","china"};
    char *p;
    int n=5,i;
    p=find(s,n);
    puts(p);}
    A)he
    B)and
    C)you
    D)tomeetme
    (45)當(dāng)定義一個(gè)結(jié)構(gòu)變量時(shí)系統(tǒng)分配給它的內(nèi)存是
    A)各個(gè)成員占用內(nèi)存的總和
    B)成員中占內(nèi)存量者所需的容量
    C)定義的同時(shí)并不分配空間
    D)結(jié)構(gòu)中最后一個(gè)成員所需內(nèi)存量
    (46)有以下說明語句
    struct a{ char x;
     double y; } ptype;
    則下列選項(xiàng)中錯(cuò)誤的是
    A)a是用戶定義的結(jié)構(gòu)體標(biāo)識(shí)
    B)struct a是用戶定義的結(jié)構(gòu)類型
    C)ptype是用戶定義的結(jié)構(gòu)類型名
    D)x和y都是結(jié)構(gòu)成員名
    (47)已知有如下定義:struct a{char x; double y;}data,*t;,若有t=&data,則對data中的成員的正確引用是
    A)(*t).data.x
    B)(*t).x
    C)t->data.x
    D)t.data.x
    (48)若有以下程序段,則選項(xiàng)中值為2的是
    struct a{int n,*next;};
    int x=1,y=2,z=3;
    struct a s[3],*p=s;
    s[0].next=&x;s[1].next=&y;s[2].next=&2;
    A)*(p++)->next
    B)*(++p)->next
    C)(*p).next
    D)(p++)->next
    (49)下面程序段的輸出為
    #include "stdio.h"
    main()
    { int a=8,b;
    b=a|1;
    b>>=1;
    printf("%d,%d\n",a,b);}
    A)4,4
    B)4,0
    C)8,4
    D)8,0
    (50)閱讀下面程序,此程序的功能為
    #include "stdio.h"
    main(int argc,char *argv[])
    { FILE *p1,*p2;
     int c;
     p1=fopen(argv[1],"r");
     p2=fopen(argv[2],"a");
     c=fseek(p2,0L,2);
     while((c=fgetc(p1))!=EOF)fputc(c,p2);
     fclose(p1);
     fclose(p2);}
    A)實(shí)現(xiàn)將p1打開的文件中的內(nèi)容復(fù)制到p2打開的文件
    B)實(shí)現(xiàn)將p2打開的文件中的內(nèi)容復(fù)制到p1打開的文件
    C)實(shí)現(xiàn)將p1打開的文件中的內(nèi)容追加到p2打開的文件內(nèi)容之后
    D)實(shí)現(xiàn)將p2打開的文件中的內(nèi)容追加到p1打開的文件內(nèi)容之后
    二、填空題
    (1)算法的工作量大小和實(shí)現(xiàn)算法所需的存儲(chǔ)單元多少分別稱為算法的 【1】 。
    【命題目的】本題考查了考生對算法的理解程度。
    【解題要點(diǎn)】算法的復(fù)雜性是指對一個(gè)在有限步驟內(nèi)終止算法和所需存儲(chǔ)空間大小的估計(jì)。算法的計(jì)算量是算法的時(shí)間復(fù)雜性,算法所需存儲(chǔ)空間大小是算法的空間復(fù)雜性。
     【考點(diǎn)鏈接】算法的各種屬性及其相互作用。
    (2)數(shù)據(jù)結(jié)構(gòu)包括數(shù)據(jù)的邏輯結(jié)構(gòu)、數(shù)據(jù)的 【2】 以及對數(shù)據(jù)的操作運(yùn)算。
    【命題目的】本題考查了數(shù)據(jù)結(jié)構(gòu)所包括的幾個(gè)方面。
    【解題要點(diǎn)】數(shù)據(jù)結(jié)構(gòu)包括3個(gè)方面,即數(shù)據(jù)的邏輯結(jié)構(gòu)、數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)及對數(shù)據(jù)的操作運(yùn)算。
     【考點(diǎn)鏈接】數(shù)據(jù)結(jié)構(gòu)包含的3個(gè)方面及各方面之間的關(guān)系。
    (3)可以把具有相同屬性的一些不同對象歸類,稱為 【3】 。
    【命題目的】本題考查了對象的一些基本特征。
    【解題要點(diǎn)】類描述的是具有相似性質(zhì)的一組對象;把具有相同屬性的一些不同對象歸為類,我們稱之為對象類。
    (4)軟件工程包括3個(gè)要素,分別為方法、工具和 【4】 。
    【命題目的】本題考查軟件工程的3要素。
    【解題要點(diǎn)】軟件工程包括3個(gè)要素,即方法、工具和過程。方法是完成軟件工程項(xiàng)目的基礎(chǔ)上的技術(shù)手段;工具支持軟件的開發(fā)、管理、文檔生成;過程支持軟件開發(fā)的各個(gè)環(huán)節(jié)的控制、管理。
     【考點(diǎn)鏈接】軟件工程的3個(gè)要素及各要素的作用。
    (5)由關(guān)系數(shù)據(jù)庫系統(tǒng)支持的完整性約束是指 【5】 和參照完整性。
    【命題目的】掌握關(guān)系的完整性約束。
    【解題要點(diǎn)】關(guān)系的完整性約束指關(guān)系的某種約束條件,包括實(shí)體完整性、參照完整性和用戶定義的完整性。其中,前兩種完整性約束由關(guān)系數(shù)據(jù)庫系統(tǒng)自動(dòng)支持。
     【考點(diǎn)鏈接】關(guān)系的各種性質(zhì)。
    (6)表達(dá)式3*7/2+7/2%5的值為 【6】 。
    解析: 算術(shù)運(yùn)算符的優(yōu)先級(jí)別依次為(由高到低):*,/,%,+,-。
    (7)閱讀下面的程序,當(dāng)程序在執(zhí)行時(shí),如果輸入的是′A′,則輸出結(jié)果為 【7】 。
    #include "stdio.h"
    main()
    {char a;
     a=getchar();
     switch(a)
    {case 65: printf("%c",′A′);
    case 66: printf("%c",′B′);
    default :printf("%s\n","other");}}
    解析: switch語句中的某一個(gè)標(biāo)號(hào)被選中,將依次執(zhí)行這個(gè)語句到default語句之間的所有語句。如遇到break語句之后就跳出了switch語句。
    (8)以下程序的輸出結(jié)果是 【8】 。
    main()
    {char a []="abcdefg";
    char b[10]="abcdefg";
    printf("%d,%d\n",sizeof(a),sizeof(b));}
    解析: 當(dāng)維數(shù)組省略維數(shù)時(shí),系統(tǒng)會(huì)按數(shù)組實(shí)際元數(shù)分配內(nèi)存空間,如規(guī)定了一維的大小,則按維數(shù)分配內(nèi)存空間的大小。
    (9) 閱讀下面程序段,則執(zhí)行后的輸出結(jié)果為 【9】 。
    #include "stdio.h"
    main()
    {int a=1;
    for(;a<=15;)
    if(++a%5!=2)continue;
    else printf("%d",a);
    printf("\n");}
    解析: continue是結(jié)束本次循環(huán),即從continue開始到最后的執(zhí)行,直接執(zhí)行循環(huán)判定條件。
    (10)以下程序的輸出結(jié)果是 【10】 。
    main()
    {int m=2,n=6;
    for(;n>=0;n--)m*=n;
    printf("%d\n",m);}
    解析: for語句執(zhí)行最后時(shí)n的值為0,所以m的值也為0。
    (11)閱讀下列程序,則執(zhí)行后的結(jié)果為 【11】 。
    #include "stdio.h"
    fun(int x,int y)
    { int z;
     z=x;x=y;y=z;}
    main()
    {int a,b;
    a=100;b=640;
    fun(a,b);
    printf("%d,%d\n",a,b);}
    解析: 當(dāng)傳遞數(shù)據(jù)值的時(shí)候,在被調(diào)用函數(shù)內(nèi)部不能改變調(diào)用函數(shù)的變量的值。
    (12)閱讀以下程序,使程序輸出結(jié)果為30,4.000 000,請?zhí)羁铡?BR>    #include "stdio.h"
    main()
    {int a=30,b=40,c;
    double 【12】 ,s;
    s=fun(&a,&b,&c);
    printf("%d,%lf\n",c,s);}
    double fun(int *a,int *b, 【13】 )
    { *c=*a%*b;
     return(4.0); }
    解析: 函數(shù)說明的一般形式為:類型名 函數(shù)名(參數(shù)類型1,參數(shù)類型2,……)。
    (13)下面程序段的功能是:從鍵盤上輸入兩個(gè)字符串,對兩個(gè)字符串分別排序;然后將它們合并,合并后的字符串按ASCII碼值從小到大排序,并刪去相同的字符。請?zhí)羁铡?BR>    #include "stdio.h"
    fun(char *x,char *y,char *z)
    {char t,*p;
    p=z;
    while(*x!=′\0′&&*y!=′\0′)
    { t=*x<*y?*x++:*y<*x?*y++: 【14】 ;
    if(*p==′\0′)*p=t;
    else if(t!=*p)*++p=t;}
    if(*x!=′\0′)
    while(*x!=′\0′)
    if(*x!=*p)*++p=*x++;
    else x++;
    if(*y!=′\0′)while(*y!=′\0′)
    if(*y!=*p)*++p=*y++;
    else y++;
    *++p= 【15】 ;}
    sort(char *s)
    { int i,j,k;
    char t,*p;
    p=s;
    for(k=0;*p!=′\0′;k++)p++;
    for(i=0;i    for(j=i+1;j    if(s[i]>s[j])
     { 【16】 }}
    main()
    { char s1[100],s2[100],s3[200];
    scanf("%s",s1);
    scanf("%s",s2);
    sort(s1);
    sort(s2);
    s3[0]=′\0′;
    fun(s1,s2,s3);
    printf("%s\n",s3);}
    解析: 根據(jù)題目的要求認(rèn)真閱讀程序,找到各個(gè)部分的功能所在,這樣就很容易做出答案。
    (14)下面函數(shù)是一個(gè)求階乘的遞歸調(diào)用函數(shù)。請?zhí)羁铡?BR>    int fun(int k)
    {if(k==1) 【17】 ;
    else return( 【18】 );}
    解析: 解這個(gè)題目應(yīng)該首先寫遞歸公式,之后很容易得出答案。
    (15)以下函數(shù)set用來建立一個(gè)帶頭結(jié)點(diǎn)的單向鏈表,新產(chǎn)生的結(jié)點(diǎn)總是插入在鏈表的末尾。單向鏈表的頭指針作為函數(shù)值返回,請?zhí)羁铡?BR>    struct node{char data;
     struct node *next; };
    struct node *set()
    {struct node *t1,*t2,*t3;
    char ch;
    t1=(struct node*)malloc(sizeof(struct node));
    t3=t2=t1;
    ch=getchar();
    while(ch!=′\n′)
    { t2= 【19】 malloc(sizeof(struct node));
    t2->data=ch;
    t3->next=t2;
    t3=t2;
    ch=getchar();}
    t3->next=′\0′ ;
     【20】 }
    解析: 動(dòng)態(tài)申請的返回值是void *類型,所以在使用動(dòng)態(tài)申請函數(shù)的時(shí)候都要在前面加上適當(dāng)?shù)膹?qiáng)制類型轉(zhuǎn)換,使它的返回值有意義。
    選擇題
    01-05  C  B  D  B  B
    06-10  B  B  B  B  B
                   
    11-15  B  C  C  B  C
                   
    16-20  D  C  A  D  C
                   
    21-25  A  D  B  B  B
                   
    26-30  D  A  C  D  B
                   
    31-35  D  A  D  B  C
                   
    36-40  C  B  C  A  D
                   
    41-45  D  B  A  B  A
                   
    46-50  C  B  B  C  C