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

字號:

一、選擇題
    (1)在深度為5的滿二叉樹中,葉子結(jié)點的個數(shù)為
     A)32
     B)31
     C)16
     D)15
    (2)若某二叉樹的前序遍歷訪問順序是abdgcefh,中序遍歷訪問順序是dgbaechf,則其后序遍歷的結(jié)點訪問順序是
     A)bdgcefha
     B)gdbecfha
     C)bdgaechf
     D)gdbehfca
    (3)一些重要的程序語言(如C語言和Pascal語言)允許過程的遞歸調(diào)用。而實現(xiàn)遞歸
     調(diào)用中的存儲分配通常用
     A)棧
     B)堆
     C)數(shù)組
     D)鏈表
    (4)軟件工程的理論和技術(shù)性研究的內(nèi)容主要包括軟件開發(fā)技術(shù)和
     A)消除軟件危機
     B)軟件工程管理
     C)程序設(shè)計自動化
     D)實現(xiàn)軟件可重用
    (5)開發(fā)軟件時對提高開發(fā)人員工作效率至關(guān)重要的是
     A)操作系統(tǒng)的資源管理功能
     B)先進的軟件開發(fā)工具和環(huán)境
     C)程序人員的數(shù)量
     D)計算機的并行處理能力
    (6)在軟件測試設(shè)計中,軟件測試的主要目的是
     A)實驗性運行軟件
     B)證明軟件正確
     C)找出軟件中全部錯誤
     D)發(fā)現(xiàn)軟件錯誤而執(zhí)行程序
    (7)數(shù)據(jù)處理的最小單位是
     A)數(shù)據(jù)
     B)數(shù)據(jù)元素
     C)數(shù)據(jù)項
     D)數(shù)據(jù)結(jié)構(gòu)
    (8)索引屬于
     A)模式
     B)內(nèi)模式
     C)外模式
     D)概念模式
    (9)下述關(guān)于數(shù)據(jù)庫系統(tǒng)的敘述中正確的是
     A)數(shù)據(jù)庫系統(tǒng)減少了數(shù)據(jù)冗余
     B)數(shù)據(jù)庫系統(tǒng)避免了一切冗余
     C)數(shù)據(jù)庫系統(tǒng)中數(shù)據(jù)的一致性是指數(shù)據(jù)類型一致
     D)數(shù)據(jù)庫系統(tǒng)比文件系統(tǒng)能管理更多的數(shù)據(jù)
    (10)數(shù)據(jù)庫系統(tǒng)的核心是
     A)數(shù)據(jù)庫
     B)數(shù)據(jù)庫管理系統(tǒng)
     C)模擬模型
     D)軟件工程
    (11)C語言規(guī)定,在一個源程序中,main函數(shù)的位置
     A)必須在最開始
     B)必須在系統(tǒng)調(diào)用的庫函數(shù)的后面
     C)可以任意
     D)必須在最后
    (12)下列數(shù)據(jù)中,不合法的C語言實型數(shù)據(jù)的是
     A)0.123
     B)123e3
     C)2.1e3.5
     D)789.0
    (13)下面四個選項中,均是不合法的用戶標(biāo)識符的選項是
     A)A P_0 do
     B)float la0 _A
     C)b-a goto int
     D)_123 temp int
    (14)設(shè)變量a是int型,f是float型,i是double型,則表達式10+′a′+i*f值的數(shù)據(jù)類型為
     A)int
     B)float
     C)double
     D)不確定
    (15)能正確表示邏輯關(guān)系:“a≥10或a≤0”的C語言表達式是
     A)a>=10 or a<=0
     B)a>=0|a<=10
     C)a>=10 &&a<=0
     D)a>=10‖a<=0
    (16)設(shè)以下變量均為int類型,表達式的值不為7的是
     A)(x=y=6,x+y,x+1)
     B)(x=y=6,x+y,y+1)
     C)(x=6,x+1,y=6,x+y)
     D)(y=6,y+1,x=y,x+1)
    (17)若有說明:int *p,m=5,n;以下正確的程序段是
     A)p=&n;scanf("%d",&p);
     B)p=&n;scanf("%d",*p)
     C)scanf("%d",&n);*p=n;
     D)p=&n;*p=m;
    (18)以下程序段的輸出結(jié)果是
     int a=1234;
     printf("%2d\n",a);
     A)12
     B)34
     C)1234
     D)提示出錯、無結(jié)果
    (19)若變量a是int類型,并執(zhí)行了語句:a=′A′+1.6;,則正確的敘述是
     A)a的值是字符C
     B)a的值是浮點型
     C)不允許字符型和浮點型相加
     D)a的值是字符′A′的ASCII值加上1
    (20)有如下程序
     main()
     { int a=2,b=-1,c=2;
     if(a     if(b<0)c=0;
     else c++;
     printf("%d\n",c);
     }
     該程序的輸出結(jié)果是
     A)0
     B)1
     C)2
     D)3
    (21)有如下程序
     main()
     { int x=23;
     do
     { printf("%d",x--);}
     while(!x);
     }
     該程序的執(zhí)行結(jié)果是
     A)321
     B)23
     C)不輸出任何內(nèi)容
     D)陷入死循環(huán)
    (22)執(zhí)行語句 for(i=1;i++<4;); 后變量 i 的值是
     A)3
     B)4
     C)5
     D)不定
    (23)有一堆零件(100到200之間),如果分成4個零件一組的若干組,則多2個零件;若分成7個零件一組,則多3個零件;若分成9個零件一組,則多5個零件。下面程序是求這堆零件總數(shù),請選擇填空。
     #include
     main()
     { int i;
     for(i=100;i<200;i++)
     if((i-2)%4==0)
     if(!((i-3)%7))
     if(_______)
     printf("%d",i);
     }
     A)i%9=5
     B)i%9!=5
     C)(i-5)%9!=0
     D)(i-5)%9==0
    (24)已有定義int a=-2;和輸出語句 printf("%8lx",a);以下正確的敘述是
     A)整型變量的輸出形式只有%d一種
     B)%x是格式符的一種,它可以適用于任何一種類型的數(shù)據(jù)
     C)%x是格式符的一種,其變量的值按十六進制輸出,但%8lx是錯誤的
     D)%8lx不是錯誤的格式符,其中數(shù)字8規(guī)定了輸出字段的寬度
    (25)若變量c為char類型,能正確判斷出c為小寫字母的表達式是
     A)′a′<=c<=′z′
     B)(c>=′a′)||(c<=′z′)
     C)(′a′<=c)and(′z′>=c)
     D)(c>=′a′)&&(c<=′z′)
    (26)以下正確的說法是
     A)用戶若需調(diào)用標(biāo)準(zhǔn)庫函數(shù),調(diào)用前必須重新定義
     B)用戶可以重新定義標(biāo)準(zhǔn)庫函數(shù),若如此,該函數(shù)將失去原有含義
     C)系統(tǒng)根本不允許用戶重新定義標(biāo)準(zhǔn)庫函數(shù)
     D)用戶若需調(diào)用標(biāo)準(zhǔn)庫函數(shù),調(diào)用前不必使用預(yù)編譯命令將該函數(shù)所在文件包括到用戶源文件中,系統(tǒng)自動調(diào)用
    (27)以下正確的函數(shù)頭定義形式是
     A)double fun(int x,int y)
     B)double fun(int x;int y)
     C)double fun(int x,int y);
     D)double fun(int x,y);
    (28)下面程序段的運行結(jié)果是
     char a[]="lanuage",*p;
     p=a;
     while(*p!=′u′){printf("%c",*p-32);p++;}
     A)LANGUAGE
     B)language
     C)LAN
     D)langUAGE
    (29)下面程序段的運行結(jié)果是
     char str[]="ABC",*p=str;
     printf("%d\n",*(p+3));
     A)67
     B)0
     C)字符′C′的地址
     D)字符′C′
    (30)若fp是指向某文件的指針,且已讀到文件末尾,則庫函數(shù)feof(fp)的返回值是
     A)EOF
     B)-1
     C)1
     D)NULL
    (31)在C語言中,char型數(shù)據(jù)在內(nèi)存中的存儲形式是
     A)補碼
     B)反碼
     C)原碼
     D)ASCII碼
    (32)若有說明:int a[][3]={1,2,3,4,5,6,7};則a數(shù)組第一維的大小是
     A)2
     B)3
     C)4
     D)無確定值
    (33)以下不正確的定義語句是
     A)double x[5]={2.0,4.0,6.0,8.0,10.0};
     B)int y[5.3]={0,1,3,5,7,9};
     C)char c1[]={′1′, ′2′, ′3′, ′4′, ′5′};
     D)char c2[]={′\x10′, ′\xa′, ′\x8′};
    (34)有以下語句,則對a數(shù)組元素的引用不正確的是(0≤i≤9)
     int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;
     A)a[p-a]
     B)*(&a[i])
     C)p[i]
     D)*(*(a+i))
    (35)當(dāng)說明一個結(jié)構(gòu)體變量時系統(tǒng)分配給它的內(nèi)存是
     A)各成員所需內(nèi)存量的總和
     B)結(jié)構(gòu)中第一個成員所需內(nèi)存量
     C)成員中占內(nèi)存量者所需的容量
     D)結(jié)構(gòu)中最后一個成員所需內(nèi)存量
    (36)有以下程序
     fun(int x,int y,int z)
     { z=x*y;}
     main()
     {int a=4,b=2,c=6;
     fun(a,b,c);
     printf("%d",c);
     }
     程序運行后的輸出結(jié)果是
     A)16
     B)6
     C)8
     D)12(37)函數(shù)fun的返回值是
     fun(char *a,char *b)
     { int num=0,n=0;
     while(*(a+num)!=′\0′)num++;
     while(b[n]){*(a+num)=b[n];num++;n++;}
     return num;
     }
     A)字符串a(chǎn)的長度
     B)字符串b的長度
     C)字符串a(chǎn)和b的長度之差
     D)字符串a(chǎn) 和b的長度之和
    (38)以下敘述中不正確的是
     A)預(yù)處理命令行都必須以#號開始
     B)在程序中凡是以#號開始的語句行都是預(yù)處理命令行
     C)宏替換不占用運行時間,只占編譯時間
     D)在以下定義是正確的: #define PI 3.1415926;
    (39)調(diào)用gets和puts函數(shù)時,必須包含的頭文件是
     A)stdio.h
     B)stdlib.h
     C)define
     D)以上都不對
    (40)利用 fseek 函數(shù)可以實現(xiàn)的操作是
     A)改變文件的位置指針
     B)文件的順序讀寫
     C)文件的隨機讀寫
     D)以上答案均正確
    (41)下列程序的輸出結(jié)果是
     main()
     { int a[5]={2,4,6,8,10},*p,**k;
     p=a;
     k=&p;
     printf("%d",*(p++));
     printf("%d\n",**k);
     }
     A)4
     B)22
     C)24
     D)46
    (42)若有以下結(jié)構(gòu)體,則正確的定義或引用的是
     struct Test
     {int x;
     int y;
     } vl;
     A)Test.x=10;
     B)Test v2;v2.x=10;
     C)struct v2;v2.x=10;
     D)struct Test v2={10};
    (43)下面程序段的運行結(jié)果是
     char *p="abcdefgh";
     p+=3;
     printf("%d\n",strlen(strcpy(p,"ABCD")));
     A)8
     B)12
     C)4
     D)7
    (44)下面判斷正確的是
     A)char *a="china";等價于 char *a;*a="china";
     B)char str[5]={"china"};等價于char str[]={"china"};
     C)char *s="china";等價于 char *s;s="china";
     D)char c[4]="abc",d[4]="abc";等價于char c[4]=d[4]="abc";
     (45)下列函數(shù)的運行結(jié)果是
     main()
     { int i=2,p;
     int j,k;
     j=i;
     k=++i;
     p=f(j,k);
     printf("%d",p);
     }
     int f(int a,int b)
     { int c;
     if(a>b)c=1;
     else if(a==b)c=0;
     else c=-1;
     return(c);
     }
     A)-1
     B)1
     C)2
     D)編譯出錯,無法運行
    (46)在位運算中,操作數(shù)左移一位,其結(jié)果相當(dāng)于
     A)操作數(shù)乘以2
     B)操作數(shù)除以2
     C)操作數(shù)除以4
     D)操作數(shù)乘以4
    (47)若調(diào)用fputc函數(shù)輸出字符成功,則其返回值是
     A)EOF
     B)1
     C)0
     D)輸出的字符
    (48)已知函數(shù)的調(diào)用形式:fread(buf,size,count,fp),參數(shù)buf的含義是
     A)一個整型變量,代表要讀入的數(shù)據(jù)項總數(shù)
     B)一個文件指針,指向要讀的文件
     C)一個指針,指向要讀入數(shù)據(jù)的存放地址
     D)一個存儲區(qū),存放要讀的數(shù)據(jù)項
    (49)有如下程序:
     #define N 2
     #define M N+1
     #define NUM 2*M+1
     main()
     {
     int i;
     for(i=1;i<=NUM;i++)printf("%d\n",i);
     }
     該程序中的for循環(huán)執(zhí)行的次數(shù)是
     A)5
     B)6
     C)7
     D)8
    (50)以下定義中,標(biāo)識符prt int(*prt)[3]
     A)定義不含法
     B)是一個指針數(shù)組名,每個元素都是一個指向整數(shù)變量的指針
     C)是一個指針,它指向一個具有三個元素的一維數(shù)組
     D)是一個指向整型變量的指針
    二、填空題
    (1)在樹形結(jié)構(gòu)中,樹根結(jié)點沒有 【1】 。
    解析: 在樹形結(jié)構(gòu)中,每一個結(jié)點只有一個前件,稱為父結(jié)點,沒有前件的結(jié)點只有一個,稱為樹的根結(jié)點;每一個結(jié)點可以有多個后件,它們都稱為該結(jié)點的子結(jié)點。沒有后件的結(jié)點稱為葉子結(jié)點。
    (2)Jackson結(jié)構(gòu)化程序設(shè)計方法是英國的M.Jackson提出的,它是一種面向 【2】 的設(shè)計方法。
    解析: 結(jié)構(gòu)化分析方法主要包括:面向數(shù)據(jù)流的結(jié)構(gòu)化分析方法(SA-Structured analysis),面向數(shù)據(jù)結(jié)構(gòu)的Jackson方法(JSD-Jackson system development method)和面向數(shù)據(jù)結(jié)構(gòu)的結(jié)構(gòu)化數(shù)據(jù)系統(tǒng)開發(fā)方法(DSSD-Data structured system development method)。
    (3)面向?qū)ο蟮哪P椭校罨镜母拍钍菍ο蠛?【3】 。
    解析: 面向?qū)ο竽P椭校罨镜母拍钍菍ο蠛皖?。對象是現(xiàn)實世界中實體的模型化;將屬性集和方法集相同的所有對象組合在一起,可以構(gòu)成一個類。
    (4)軟件設(shè)計模塊化的目的是 【4】 。
    解析: 模塊化是指解決一個復(fù)雜問題時自頂向下逐層把軟件系統(tǒng)劃分成若干模塊的過程,由此分解來降低復(fù)雜性。
    (5)數(shù)據(jù)模型按不同應(yīng)用層次分成3種類型,它們是概念數(shù)據(jù)模型、 【5】 和物理數(shù)據(jù)模型。
    解析: 數(shù)據(jù)是現(xiàn)實世界符號的抽象,而數(shù)據(jù)模型(data model)則是數(shù)據(jù)特征的抽象,它從抽象層次上描述了系統(tǒng)的靜態(tài)特征、動態(tài)行為和約束行為,為數(shù)據(jù)庫系統(tǒng)的信息表示與操作提供一個抽象的框架。
    數(shù)據(jù)模型按不同的應(yīng)用層次分成3種類型,它們是概念數(shù)據(jù)模型(conceptual data model)、邏輯數(shù)據(jù)模型(logic data model)、物理數(shù)據(jù)模型(physical data model)。
    (6)以下程序段的輸出結(jié)果是【6】。
    main ()
    {int a=2,b=3,c=4;
    a*=16+(b++)-(++c);
    printf("%d",a);
    }
    解析: a*=16+(b++)-(++c)等價于a=a*(16+(b++)-(++c)),b++的值為3,++c的值為5,請注意前綴++和后綴++的用法。
    (7)若變量n中的值為24,則print()函數(shù)共輸出【7】行,最后一行有【8】個數(shù)。
    void print (int n,int aa[])
    {int i;
    for (i=1; i<1;i++)
    {printf ("%6d", aa[i]);
    if(!(i%5)) printf ("\n");
    }
    printf ("\n");
    }
    解析: 語句if(!(i%))printf("\n");是將每5個數(shù)輸出一行,因為n的值為24,所以共輸出5行,最后一行有4個數(shù)。
    (8)調(diào)用C語標(biāo)準(zhǔn)庫函數(shù)時要求用【9】命令。
    解析: include命令可調(diào)用標(biāo)準(zhǔn)的C語言庫函數(shù),可以用一對括號或一對雙引號,但要在前面加"#"。
    (9)stract函數(shù)的作用是【10】。
    解析: 連接兩個字符數(shù)組中的字符串
    (10)C語言程序的注釋可以出現(xiàn)在程序中的任何地方,一個注釋以【11】作為開始和結(jié)束。
    解析: C語言程序的注釋可以出現(xiàn)在程序基本單詞之間的任何地方,C語言程序的注釋以′/*′作為開始標(biāo)記,并以′*/′作為結(jié)束標(biāo)記。
    (11)設(shè)二進制數(shù)A是00101101,若想通過異或運算A^B使A的高4位取反,低4位不變,則二進制數(shù)B應(yīng)是
    【12】 。
    解析: 按位異成運算的一個重要應(yīng)用是讓某個整型變量的二進位取反,0變成1,而1變成0。這只要設(shè)計這樣一個位串信息,讓要變反的位為1,不要改變的位為0,用這個位串信息與整型變量按位加就能得到希望的結(jié)果。要使字節(jié)的高4位取反,低4位不變,則需要位串信息是11110000。
    (12)若已知a=10,b=20,則表達式!a    解析: 計算表達式!a    (13)設(shè)i,j,k均為int型變量,則執(zhí)行完下面的for語句后,k的值為【14】 。
    for(i=0, j=10; i<=j; i++, j--)k=i+j;
    解析: 該for語句以i為0,j為10初始化,循環(huán)條件是i<=j,每次循環(huán)后i增1、j減1,循環(huán)體是將i與j的和賦給k。這樣變量k將保存的是最后一次賦給它的值。一次循環(huán)后i為1、j為9,二次循環(huán)后i為2、j為8,……,五次循環(huán)后i為5、j為5,繼續(xù)第六次循環(huán),將i與j的和10存于k后,i為6、j為4,結(jié)束循環(huán)。所以循環(huán)執(zhí)行后k為10。
    (14)下面函數(shù)的功能是:找出一維數(shù)組元素中的值和它所在的下標(biāo),值的和它所在的下標(biāo)通過形參傳回。數(shù)組元素中的值已在主函數(shù)中賦予。主函數(shù)中x是數(shù)組名,n是x中的數(shù)據(jù)個數(shù),max存放值,index存放值所在元素的下標(biāo)。請?zhí)羁铡?BR>    #include
    #include
    void fun(int a[],int n, int *max, int *d)
    { int i;
    *max=a[0];
    *d=0;
    for(i=0;【15】;i++)
    if(*max<【16】)
    {*max=a[i];*d=i;}
    }
    main()
    { int i, x[20], max, index, n=10;
    randomize();
    for(i=0;i    {
    x[i]=rand()%50; printf("%4d",x[i]);
    }
    printf("\n");
    fun(x,n,&max,&index);
    printf("Max=%5d,Index=%4d\n",max,index);
    }
    解析: 該程序直接使用形參max和d,由于它們都是指針變量,所以要引用它所指向的變量時要對它進行指針運算,也即*號運算。
    (15)以下程序的輸出結(jié)果是【17】。
    void fun()
    { static int a=0;
    a+=2; printf("%d",a);
    }
    main()
    { int cc;
    for(cc=1;cc<4;cc++)fun();
    printf("\n");
    }
    解析: 本題考查靜態(tài)局部變量的使用。用關(guān)鍵字static聲明的局部變量為"靜態(tài)局部變量",其值在函數(shù)調(diào)用結(jié)束后不消失而保留原值,即其占用的存儲單元不釋放,在下一次該函數(shù)調(diào)用時,該變量已有值,就是上一次函數(shù)調(diào)用結(jié)束時的值。
    (16)以下程序的輸出結(jié)果是【18】 。
    #define MAX(x,y)(x)>(y)?(x):(y)
    main()
    { int a=5,b=2,c=3,d=3,t;
    t=MAX(a+b,c+d)*10;
    printf("%d\n",t);
    }
    解析: 本題綜合考查帶參數(shù)的宏以及三目運算符的計算方法,“?”運算符是一個三目運算符,其一般形式是:<表達式1>?<表達式2>:<表達式3>?!?” 運算符的含義是:先求表達式1的值,如果為真,則求表達式2的值并把它作為整個表達式的值;如果表達式1的值為假,則求表達式3的值并把它作為整個表達式的值。注意,在本題中宏替換時可采用逐步求解,最終為7>6?7:6*10,即t=7>6?7:60,其值為t=7。
    (17)用以下語句調(diào)用庫函數(shù)malloc,使字符指針st指向具有11個字節(jié)的動態(tài)存儲空間,請?zhí)羁铡?BR>    st=(char*)【19】 ;
    解析: malloc函數(shù)的參數(shù)可以是一個具體的常數(shù),也可以是一個表達式。在本題中,可以是malloc(11),也可以借助于sizeof運算符來表示。
     (18)以下程序段打開文件后,先利用fseek函數(shù)將文件位置指針定位在文件末尾,然后調(diào)用ftell函數(shù)返回當(dāng)前文件位置指針的具體位置,從而確定文件長度,請?zhí)羁铡?BR>    FILE *myf; long f1;
    myf=【20】 ("test.t","rb");
    fseek(myf,0,SEEK_END); f1=ftell(myf);
    fclose(myf);
    printf("%d\n",f1);
    解析: 函數(shù)fopen的原型為FILE *fopen(char *filename,char *mode),功能為以mode指定的方式打開名為filename的文件;函數(shù)fseek的原型為int fseek(FILE *fp,long offset,int base),功能為將fp所指向的文件的位置指針移到以base所指出的位置為基準(zhǔn)。以offset是以字節(jié)為單位的位移量;函數(shù)ftell的原型為long ftell(FILE *fp),功能為返回fp所指向的文件中的讀寫位置;函數(shù)fclose的原型為int fclose(FILE *fp),功能為關(guān)閉fp所指的文件,釋放文件緩沖區(qū)。
    選擇題
    01-05  B  D  A  B  B
    06-10  D  C  B  B  B
    11-15  C  C  C  C  D
    16-20  C  D  C  D  C
    21-25  B  C  D  D  B
    26-30  B  A  C  B  C
    31-35  D  B  B  D  A
    36-40  B  D  D  A  D
    41-45  C  D  C  C  A
    46-50  A  D  C  B  D