05年9月等級考試二級C語言考前密卷2(三)

字號:

(26)有以下程序:
     #include
     main(){
     char c[6];
     int I=0:
     for(;i<6;c[-]=getchar(),i++);
     for(I=0;i<6;i++)putchar(c[i]);
     primf("\n");
     }
     如果從鍵盤上輸入:
     ab<回車>
     c<回車>
     def<回車>
     則輸出結(jié)果為_________.
     A)a  B)a  C)ab  D)abcdef
     b   b   c
     c   c   d
     d   d
     e
     f
     答案:C
     評析:1.getchar():此函數(shù)的作用是從終端(或系統(tǒng)隱含指定的輸入設(shè)備)輸入一個字符。
     2.putchar():此函數(shù)的作用是向終端輸出一個字符,也可以輸出控制字符。
     本題在輸入字符時,ab和c后面的回車符分別賦給了c[2]和e[4],所以,正確答案為c。
     (27)在調(diào)用函數(shù)時,如果實參是簡單變量,它與對應形參之間的數(shù)據(jù)傳遞方式是_______。
     A)地址傳遞       B)單向值傳遞
     C)由實參傳遞給形參,再由形參傳遞給實參
     D)傳遞方式由用戶指定
     答案:B
     評析:c語言規(guī)定,實參變量對形參變量的數(shù)據(jù)傳遞是"單向值傳遞",只由實參傳給形參。在內(nèi)存中,實參單元與形參單元是不同的單元。調(diào)用結(jié)束后,實參單元仍保留并維持原值。
     (28)下面程序
     #include
     #include
     main()
     { char*p1="abc",*p2="ABC",str[50]="xyz";
     strcpy(str+2,strcat(p1,p2));
     printf("%s\n",str);
     }
     的輸出是_________。
     A)xyzabcABC    B)zabcABC
     C)yzabcABC     D)xyabcABC
     答案:D
     評析:strcat(pl,p2)將字符串a(chǎn)bcABC放到了*pl所指向的存儲單元中;strcpy在本題將abcABC復制到str+2所指向的存儲單元中,即覆蓋原str數(shù)組中的字符z及其后的所有字符,故str的值為"xyabcABC"。
     (29)下面程序
     int aa[3][3]:{{2},{4},{6}};
     main()
     {  int i,*p:&aa[0][0];
     for(I=0;i<2;i++){
     if(i==0)aa[I][i+l]=*p+1;
     else++p;
     printf("%d'.,。p);
     }
     }
     的輸出是__________。
     A)23  B)26  C)33  D)36
     答案:A
     評析:觀察題目,可以發(fā)現(xiàn),*p=&aa[01[o]語句實際是將數(shù)組aa的首地址賦給了指針變量p,將i的值帶入for循環(huán)中,i=0時,aa[0][1]=3,+p=2;*p輸出的是指針所指向的數(shù)組值,此時p所指向的是aa[O][O],輸出2,而i=l時執(zhí)行了++p操作使指針向后移動指向了aa[O兒1],所以在輸出*p時應為3。
     (30)以下程序的輸出結(jié)果是_________。
     #include
     #include
     fun(char*w,int n)
     {
     char t,*s1,*s2;
     s1=w;s2=w+n-l:
     while(s1     {
     t=*s1++:
     *sl=*s2--;
     *s2=t;
     }
     }
     main()
     {
     char*p;
     p="1234567";
     fun(p,strlen(p));
     puts(p);
     }
     A)1234567  B)7654321  C)1711717  D)717717l
     答案:C
     評析:在子函數(shù)fun中,sl為字符串w的起始地址,s2為字符串的結(jié)束地址(字符'\O'除外),當執(zhí)行循環(huán)結(jié)束循環(huán),w="1711717"。
     (31)下面程序
     main()
     { int x=100,a=10,b=20,okl=5,ok2=0;
     if(a     if(b!=15)
     if(10k1) x=l;
     else i"oL2)x。10;
     X=-1;
     Printf(%d\n",x);
     }
     的輸出是________。
     A)-1  B)0  c)1  D)不確定的值
     答案:A
     評析:第一個判斷值為真,過渡到下一個判斷,第二個判斷為真,過渡到第三個判斷……如此循環(huán),在打印輸出語句的前一行,程序給變量x賦了值,為.1,所以,無論前期如何變化,最后的x值依然為-1。
     (32)下面程序
     main()
     {
     int x=32:
     printf("%d\n",x=x<<1);
     }
     的輸出是________。
     A)100  B)160  C)120  D)64
     答案:D
     評析:<<是c語言中規(guī)定的左移運算符,例如,a=a<<2,這個語句即是將a的二進制數(shù)左移兩位,左移一位相當于該數(shù)乘于2,左移兩位相當于該數(shù)乘以2的2次方。所以,x<<1=32.2=64。
     (33)設(shè)有以下定義和語句,輸出的結(jié)果是(用small模式編譯,指針變量占2個字節(jié))_________。
     struct date
     {
     long *cat;
     struct date *next;
     double dog;
     }too;
     printf("%d",sizeof(too));
     A)20  B)16  C)14  D)12
     答案:D
     評析:sizeof函數(shù)計算已知類型所占的字節(jié)數(shù)。結(jié)構(gòu)體變量所占內(nèi)存長度是各成員占的內(nèi)存長度之和。指針變量占2個字節(jié),所以cat和*next各占2個字節(jié);double型占8個字節(jié),故too共占12個字節(jié)。
     (34)以下程序的輸出結(jié)果是_________。
     #include
     #define FUDGE(y)    2.84+y
     #define PR(a)printf  ("%d",(int)(a))
     #define PRINT l(a)   PR(a);putchar('\n')
     main()
     { intx=2;
     PRINTl(FUDGE(5)*x);
     }
     A)ll  B)12  C)13  D)15
     答案:B
     評析:在程序中如果有帶實參的宏,則按#define命令行中指定的字符串從左到右進行置換,如果串中包含宏中的形參,則將程序語句中相應的實參代替形參。將實參帶入已經(jīng)定義的宏中,可以得出答案燈"12"。
     (35)以下程序段給數(shù)組所有的元素輸入數(shù)據(jù),請選擇正確答案填入:
     #include
     main()
     {
     int a[10],i=O;
     while(i     :
     :
     }
     A)a+(i++)  B)&a[i+l]  C)a+i  D)&a[++I]
     答案:A
     評析:a就是數(shù)組a的首地址,而a+x是數(shù)組中第x個元素的地址,。所以在四個選項中,選項B和c只能輸入一個數(shù)據(jù),選項D不能給a[O]輸入數(shù)據(jù),只有A可以完成給數(shù)組所有的元素輸入數(shù)據(jù)的任務。
     (36)以下對枚舉類型名的定義中正確的是________。
     A)enum a={one,two,three};      B)enum a{one=9,two=-1,three};
     C)enum a={"one","two","three"}; D)enum a{"one","two","three"};
     答案:B
     評析:聲明枚舉類型用enum開頭。例如:enum weekday( SUN ,mon,tue,wed,thu,fri,sat);
     說明:1、在c編譯中,對枚舉元素按常量處理,同時可以改變他們的值。2、枚舉值可以用來做判斷比較。3、一個整數(shù)不能直接賦給一個枚舉變量。(37)字符(char)型數(shù)據(jù)在微機內(nèi)存中的存儲形式是________.
     A)反碼      B)補碼
     C)EBCDIC碼   D)ASCII碼
     答案:D
     評析:將一個字符常量放到一個字符變量中,實際上并不是把該字符本身放到內(nèi)存單元中去,而是將該字符的ASCII碼值放到存儲單元中。
     (38)下面程序的輸出是________。
     typedef union
     { long x[2];
     int y[4];
     char z[8];
     }MYTYPE;
     MYTYPE them;
     main()
     { printf("%d\n",sizeof(them));}
     A)32  B)16  C)8  D)24
     答案:C
     評析:sizeof(x)是一個標準c函數(shù),它的返回值是x型的數(shù)據(jù)結(jié)構(gòu)占用的內(nèi)存字節(jié)數(shù)。題目中定義了一個共用體,共用體變量在內(nèi)存中所占的長度等于最長的成員的長度。
     (39)有以下程序,程序運行后的輸出結(jié)果是_________。
     Int f(intb[][4])
     { int I,J,s=O;
     for(j=00<4;j++)
     {
     I=j;
     if(I>2)i=3-j;
     s+=b[i][j];
     }
     return s:
     }
     main()
     {
     int a[4][4]={{1,2,3,4},{O,2,4,6},{3,6,9,12},{3,2,1,0}};
     printf("%d\n",f(a));
     }
     A)22  B)ll  C)18  D)16
     答案:D
     評析:本題通過函數(shù)調(diào)用對數(shù)組a[0][0]、a[1][l]、a[2112]、a[0][3]進行求和,然后用return語句返回s的值。
     (40)不能把字符串:Hello!賦給數(shù)組b的語句是_________。
     A)charb[10]={'H','e','1','l','0','!'};
     B)char b[10]={'h','e','1','l''O','!'};
     C)charb[10];strcpy(b,"Hello!");
     D)char b[10]="Hello!";
     答案:B
     評析:在c語言中,大寫字母和小寫字母被認為是兩個不同的字符,因此,"hello!"和"Hello!"是兩個不同的字符串。
     (41)下面程序的輸出是_________。
     main()
     { int x=3,y=6,a=0;
     while(x++!=(y-=1))
     { a+=1;
     if(y     }
     primf("x=%d,y=%d,a=%d\n",x,y,a);
     }
     A)x=4,y=4,a=1  B)X=5,y=5,a=1
     C)x=5,y=4,a=3  D)x=5,y=4,a=l
     答案:D
     評析:注意的是x++中x值的引用時,這里應當是先引用,后自加,具體執(zhí)行過程如下:
     第一次while循環(huán):條件為真,執(zhí)行a=a+l=l;此時,x的值已為4,判斷y     第二次while循環(huán):條件為假,此時x的值已為5,退出while循環(huán),執(zhí)行printf。
     (42)若有程序:
     fun(int a,int b)
     {
     static int c=O:
     c+:a+b:
     return C;
     }
     main()
     {
     int x=5,y=3,z=7,r;
     r=fun((y,x+y),z);
     r=fun(x,y);
     printf("%d\n",r);
     }
     上面程序的輸出結(jié)果是__________。
     A)23  B)15   C)19  D)18
     答案:A
     評析:stoic聲明的外部變量只限于被本文件引用,而不能被其他文件引用。用static來聲明一個變量的作用有:①對局部變量用static聲明,則為該變量分配的空間在整個程序執(zhí)行期間始終存在;②全部變量用static聲明,則該變量的作用域只限于本文件模塊(即被聲明的文件中)。調(diào)用第一個fun,其兩個實參的值為(3,5+3)與7即8與7,在函數(shù)fun執(zhí)行結(jié)束返回15。第二次調(diào)用fun時,由于stat~為靜態(tài)類型,其值保留,執(zhí)行fun(5,3)后,其返回值為23,故選A。
     (43)下面程序的輸出是________。
     main()
     {char*s="12134211";
     int vl=0,v2=0,v3=0,v4=0,k;
     for(k=0;s[k];k++)
     switch(s[k])
     {  default:v4++;
     case'l':vl++;
     case'3':v3++;
     case'2':v2++;
     }
     printf("v1=%d,v2=%d,v3=%d,v4=%d\n",v1,v2,v3,v4);
     }
     A)vl=4,v2=2,v3=l,v4=l  B)vl=4,v2=9,v3=3,v4=l
     C)vl=5,v2=8,v3=6,v4=l  D)vl=8,v2=8,v3=8,v4=8
     答案:C
     評析:當switch后面括弧內(nèi)的表達式的值與某一個case后面的常量的表達式的值相等時,就執(zhí)行此caSe后面的語句,若所有的case中的常量表達式的值都沒有與表達式的值匹配的,就執(zhí)行default后面的語句。
     (44)下面程序的輸出是_________。
     main()
     { int k=11;
     printf("k=%d,k=%o,k=%x\n",k,k,k);
     }
     A)k=l1,k=12,k=l1   B)k=ll,k=13,k=13
     C)k=l1,k=013,k=0xb  D)k=l1,k=13,k=B
     答案:D
     評析:在C語言格式字符的輸出中,"%d"是以帶符號的十進制形式輸出整數(shù);"%0"是以8進制無符號形式輸出整數(shù)(不輸出前導符O);"O/ox"是以16進制無符號形式輸出整數(shù)(不輸出前導符0x)。
     (45)下面程序段中c的二進制值是__________。
     char a=3,b=6,c;
     c=a^b<<1:
     A)00001011   B)00001111  C)00011110  D)00011100
     答案:B
     評析:c語言提供六種位運算符,按優(yōu)先級由高到低的順序分別為:取反(~)、左移((<)和右移(>>)、按位與(&)、按位異或(八)、按位或(I)。所以表達式c=aAb<     評析:c語言提供六種位運算符,按優(yōu)先級由高到低的順序分別為:取反(~)、左移((<)和右移(>>)、按位與(&)、按位異或(八)、按位或(I)。所以表達式c=aAb<     (46)以下敘述中正確的是__________。
     A)C語言比其他語言高級
     B)C語言可以不用編譯就能被計算機識別執(zhí)行
     C)C語言以接近英語國家的自然語言和數(shù)學語言作為語言的表達形式
     D)C語言出現(xiàn)的最晚,具有其他語言的一切優(yōu)點
     答案:C
     評析:計算機語言分為低級語言、匯編語言和高級語言,c語言屬于高級語言,但并不是說c語言比其他語言高級,所以選項A錯誤;除了低級語言外,其他各種語言都必須編譯成能被計算機識別的二進制數(shù)才能執(zhí)行,選項B錯誤;C語言出現(xiàn)從1972年到1973年間,并不是出現(xiàn)最晚的語言,所以選項D也是錯誤的。
     (47)下列可用于C語言用戶標識符的一組是__________。
     A)void define WORD   B)a3_b3 _123 Car
     C)For -abc IFCase    D)2a DO sizeof
     答案:B
     評析:c語言規(guī)定標識符只能由字母、數(shù)字和下劃線3種字符組成,且第一個字符必須為字母或下劃線,所以排除c和D。c語言還規(guī)定標識符不能為c語言的關(guān)鍵字,從而選項A(void是關(guān)鍵字)是錯誤的。
     (48)fgetc函數(shù)的作用是從指定文件讀入一個字符,該文件的打開方式必須是________。
     A)只讀  B)追加  C)讀或讀寫  D)以上均正確
     答案:D
     評析:fgetc函數(shù)是指從指定的文件讀入一個字符,該文件必須是以讀或讀寫方式打開的。電etc"函數(shù)的調(diào)用形式為:ch=fgetc(fp);。
     (49)請選出正確的程序段_________。
     A)int*p               B)int*s,k;
     Scanf(""%d"",p);  *s=100;
     ……                 ……
     C)int*s,k;             D)int*s,k;
     Char *p,c;             char *p,e;
     s=&k:                s=&k
     p=&c;                p=&c;
     *p='a';              s=p;
     ……                 *s=l;
     ……
     答案:C
     評析:本題的A和B犯了一個同樣的錯誤,即指針變量p定義后并沒有指向具體的變量,因此不能進行賦值操作。另外,在選項D中,s是int指針變量,p是char型指針變量,所指向的內(nèi)存單元所占用的字節(jié)數(shù)是不同的,因而不能將字符指針變量p的值賦給整型指針變量s。
     (50)若有下面的說明和定義,則sizeof(struct aa)的值是__________。
     struct aa
     {
     int rl;double r2;float r3:
     union uu{char u1[5];long u2[2]}ua;
     }mya;
     A)30  B)29  C)24  D)22
     答案:D
     評析:結(jié)構(gòu)體變量所占內(nèi)存長度是各成員占的內(nèi)存長度之和,每個成員分別占有自己的內(nèi)存單元;共用體變量所占的內(nèi)存長度等于最長的成員的長度。結(jié)構(gòu)體變量aa中,成員r1占2個字節(jié),r2占8個字節(jié),r3古4個字節(jié),共用體ua占8個字節(jié),所以共占用2+8+4+8=22個字節(jié)。
    二、填空題 (每空2分,共40分)
     請將每一個空的正確答案寫在答題卡的【1】至【20】序號的橫線上,答在試卷上不得  分。
     (1)在先左后右的原則下,根據(jù)訪問根結(jié)點的次序,二叉樹的遍歷可以分為三種:前序遍  歷、 【1】 遍歷和后序遍歷。
     答案:【1】中序
     評析:在先左后右的原則下,根據(jù)訪問根結(jié)點的次序,二叉樹的遍歷可以分為三種:前序遍歷、中序遍歷和后序遍歷。
     前序遍歷是指在訪問根結(jié)點、遍歷左子樹與遍歷右子樹這三者中,首先訪問根結(jié)點,然后遍歷左子樹,最后遍歷右子樹;并且遍歷左、右子樹時,仍然先訪問根結(jié)點,然后遍歷左子樹,最后遍歷右子樹。
     中序遍歷指在訪問根結(jié)點、遍歷左子樹與遍歷右子樹這三者中,首先遍歷左子樹,然后訪問根結(jié)點,最后遍歷右子樹;并且遍歷左、右子樹時,仍然先遍歷左子樹,然后訪問根結(jié)點,最后遍歷右子樹。
     后序遍歷指在訪問根結(jié)點、遍歷左子樹與遍歷右子樹這三者中,首先遍歷右子樹,然后訪問根結(jié)點,最后遍歷左子樹;并且遍歷左、右子樹時,仍然先遍歷右子樹,然后訪問根結(jié)點,最后遍歷左子樹。
     (2)結(jié)構(gòu)化程序 設(shè)計 方法的主要原則可以概括為自頂向下、逐步求精、 【2】 和限制使用goto語句。
     答案:【2】模塊化
     評析:結(jié)構(gòu)化程序設(shè)計方法的主要原則可以概括為自項向下、逐步求精、模塊化和限制使用goto語句。
     自頂向下:程序設(shè)計時,應先考慮總體,后考慮細節(jié);先考慮全局目標,后考慮局部目標。不要一開始就過多追求眾多的細節(jié),先從最上層總目標開始設(shè)計,逐步使問題具體化。
     逐步求精:對復雜問題,應設(shè)計一些子目標作過度,逐步細化。
     模塊化:一個復雜問題,肯定是由若干稍簡單的問題構(gòu)成。模塊化是把程序要解決的總目標分解為分目標,再進一步分解為具體的小目標,把每個小目標稱為一個模塊。
     限制使用goto語句。
     (3)軟件測試是保證軟件質(zhì)量的重要手段,而軟件測試的主要和重要的測試方法是通過測  試數(shù)據(jù)和 【3】  的設(shè)計來實現(xiàn)。
     答案:【3】測試實例
     評析:進行軟件測試時,應精心設(shè)計測試實例和選擇測試數(shù)據(jù),以對系統(tǒng)進行全面測試。
     (4)數(shù)據(jù)庫系統(tǒng)的三級模式分別為 【4】 模式、內(nèi)部級模式與外部級模式。
     答案:【4】概念 或 概念級
     評析:數(shù)據(jù)庫系統(tǒng)在其內(nèi)部具有三級模式及二級映射,三級模式分別是概念級模式、內(nèi)部級模式和外部級模式。
     概念模式是數(shù)據(jù)庫系統(tǒng)中全局數(shù)據(jù)邏輯結(jié)構(gòu)的描述,是全體用戶(應用)公共數(shù)據(jù)視圖。
     內(nèi)模式又稱物理模式,它給出了數(shù)據(jù)庫物理存儲結(jié)構(gòu)與物理存取方法,如數(shù)據(jù)存儲的文件結(jié)構(gòu)、索引、集簇及hash等存取方式與存取路徑,內(nèi)模式的物理性主要體現(xiàn)在 操作系統(tǒng) 及文件級上,.它還未深入到設(shè)備級上(如磁盤及磁盤操作)。
     外模式也稱子模式或用戶模式,它是用戶的數(shù)據(jù)視圖,也就是用戶所見到的數(shù)據(jù)模式,它由概念模式推導面出。
     (5)數(shù)據(jù)字典是各類數(shù)據(jù)描述的集合,它通常包括5個部分,即數(shù)據(jù)項、數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)流、 【5】 和處理過程。
     答案:【5】數(shù)據(jù)存儲
     評析:數(shù)據(jù)字典是各類數(shù)據(jù)描述的集合,它通常包括5個部分,即數(shù)據(jù)項,是數(shù)據(jù)的最小單位;數(shù)據(jù)結(jié)構(gòu),是若干數(shù)據(jù)項有意義的集合;數(shù)據(jù)流,可以是數(shù)據(jù)項,也可以是數(shù)據(jù)結(jié)構(gòu),表示某一處理過程的輸入或輸出;數(shù)據(jù)存儲,處理過程中存取的數(shù)據(jù),常常是手工憑證、手工文檔或計算機文件;處理過程。
     (6)下面程序的輸出是 【6】 。
     main()
     {int arr[10],i,k=O:
     for(i=0;i<10;i++)
     arr[i]=i;
     for(I=1;i<4;i++)
     k+=arr[I]+i;
     printf("%d\n",k);}
     答案:【6】12
     評析:本題通過第一個for循環(huán)將數(shù)組arr[O]-arr[9]分別賦值為0-9,通過第二個for循環(huán)的三次循環(huán)累加,求出結(jié)果為12,具體分析如下:
     i=l:k=0+arr[1]+l即k=2:
     i=2:k=2+arr[2]+2即k=6:
     i=3:k=6+arr[3]+3即k=12;
     (7)若a=10,b=20,則表達式!(a     答案:【7】0
     評析:已知a=10,b=20,所以邏輯表達式a     (8)有以下程序:
     int fa(int x){return x*x;}
     int fb(int x){return x*x*x;}
     int f(int(*f1)(),int(*f2)(),int x)
     {return f2(X)-n(x);}
     main()
     {int i;i=f(fa,fb,2);printf("%d\n",i);}
     程序運行后,輸出結(jié)果是 【8】 。
     答案:【8】4
     評析:在主函數(shù)中調(diào)用函數(shù)f,函數(shù)f有三個參數(shù),形參f1與f2分別是兩個指向函數(shù)的指針。在f中執(zhí)行r2(x)-f1(x),實際上是執(zhí)行了fb(2).fa(2),故執(zhí)行i=(fa,fb,2)后i的值為2^3-2^2=4。
     (9)下面程序的輸出是 【9】 。
     main()
     {enum em{eml=3,em2=1,em3};
     char*aa[]={"AA","BB","CC","DD"};
     primf("%s%s%s\n",aa[eml],aa[em2],aa[em3]);
     }
     答案:【9】DDBBCC
     評析:c語言對枚舉的定義規(guī)定:在枚舉中聲明的各個枚舉元素,如果沒有明確指出某個枚舉元素的值,它的上一個元素存在并有明確值的情況下,這個枚舉元素的值為其上一個元素的值+1。
     在本題中,沒有明確說明枚舉元素em3的值,則em3=em2+l=1+l=2,進而可知,在printf()打印函數(shù)中,要打印的數(shù)組元素是aa[3]、aa[1]、aa[2],因此最后的打印結(jié)果應當為"DDBBCC"。
     (10)若想通過以下輸入語句使a=5.0,b=4,c=3,則輸入數(shù)據(jù)的形式應該是 【10】 。
     int b,c;float a;
     scanf("%£%d,c=%d",&a,&b,&c)
     答案:【10】5.0,4,c=3
     評析:scanf(格式控制,地址表列),如果在"格式控制"字符串中除了格式說明以外還有其它字符,則在輸入數(shù)據(jù)時應輸入與這些字符相同的字符。所以此題中輸入數(shù)據(jù)的形式是5.0;4,c=3。
     (11)下列程序的輸出結(jié)果是 【11】 。
     int t(int x,int y,int cp,int dp)
     {  cp=x*x+y*y;
     dp=x*x-y*y;
     }
     main()
     {  int a=4,b=3,c=5,d=6;
     t(a,b,c,d);
     printf("%d%d\n",c,d);
     }
     答案:【ll】5 6
     評析:本題中a,b,c,d是實參,x,多,cp,dp是形參。c語言規(guī)定,實參變量對形參變量的數(shù)據(jù)傳遞是"值傳遞",即單向傳遞,只由實參傳給形參,而不能由形參傳回來給實參。在內(nèi)存中,實參單元與形參單元是不同的單元。在調(diào)用函數(shù)時,給形參分配存儲單元,并將實參對應的值傳遞給形參,調(diào)用結(jié)束后,形參單元被釋放,實參單元仍保留并維持原值。因此,程序的輸出結(jié)果是5 6。
     (12)下面程序的輸出結(jié)果是 【12】 。
     char b[]="ABCD";
     main()
     {
     char b[30];
     strcpy(&b[0],"GH");
     strcpy(&b[1],"GH");
     strcpy(&b[2],"GH");
     printf("%s\n",b);
     }
     答案:【12】GGGH
     評析:由于在函數(shù)main中定義了數(shù)組變量b,其將屏蔽全局變量b。對于一維數(shù)組變量,其值為一常數(shù),等于數(shù)組首元素地址。strcpy(&b[0],"GH"),是將字符串。"GH"復制到數(shù)組b中從首元數(shù)開始的空間中,此是b中的字符串為"GH";strcpy(&b[1],"GH"),是將字符串。"GH"復制到數(shù)組b中從第二個元素開始的空間中,此是b中的字符串為"GH"。執(zhí)行第三次strcpy函數(shù)后,b中的字符串為"GGGH"。
     (13)有以下定義和語句,則sizeof(a)的值是 【13】 ,而sizeof(a.share)的值是 【14】 。
     struct date
     { int day;
     int mouth;
     int year;
     union{int sharel;
     float share2;
     }share;
     }a;
     答案:【13】10
     【14】4
     評析:結(jié)構(gòu)體變量所占內(nèi)存長度是各成員占的內(nèi)存長度之和。每個成員分別占有其自己的內(nèi)存單元。int占2個字節(jié),float占4個字節(jié),共用體變量所占的內(nèi)存長度等于最長的成員的長度。所以,sizeof(a.share)的值是4,sizeof(a)的值是2+2+2+4=10。
     (14)下述函數(shù)用于統(tǒng)計一行字符中的單詞個數(shù),單詞之間用空格分隔。
     Word_num(str)
     char str[];
     {int i,num=O,word=O;
     for(i=0;str[i]!= 【15】?。籭++)
     if( 【16】 =='')word=0;
     else if(word==0)
     {
     word=l;
     【17】??;
     }
     return(num);
     }
     答案:【15】'\0'或0或NULL
     【16】str[I]
     【17】num++或num=num+l或num+=1
     評析:觀察題目要求,可以知道以下幾點:
     ①for循環(huán)的結(jié)束條件應當是:str[i]已是字符串的最后一個字符;
     ②strⅢ代表字符串str中的第i+1個字符;
     ③整型變量num的值是要記錄的單詞的個數(shù)。
     c語言中規(guī)定字符串的最后一個字符是一個隱含的字符串結(jié)束符"\0",所以在題中第一個空中應填寫"\0";題中第二個空應填寫"str[i]",以判斷當前位置的字符是否為空格;題中第三個空中應當填寫"num++",通過變量num的加l累加得到字符串中的單詞個數(shù)。
     (15)有一個已排好序的數(shù)組,今輸入一個數(shù),要求按原來的順序規(guī)律將它插入到數(shù)組中。算法是:假設(shè)排序順序是從小到大,對輸入的數(shù),檢查它在數(shù)組中哪個數(shù)之后,然后將比這個數(shù)大的數(shù)順序后移一個位置,在空出的位置上將該數(shù)插入。請在程序中的空白處填上一條語句或一個表達式。
     #defineN 100
     main()
     { float a[N+1],x;
     inti,p;
     for(i=0;i     scanf("%f",&a[I]);
     scanf("%f",&x);
     for(I=0,p=N;i     if(x   { 【18】??;
     break;}
     for(i=N-1; 【19】 ;I--)
     a[I+1]=a[I];
     a[p]_x;
     for(i=0; 【20】??;i++)
     { primf("%8.2f",a[i]);
     if(i%5==O)
     printf("\n");
     }
     }
     答案:【18】p=i;
     【19】i>=p
     【20】i<=N
     評析:本題主要考查了插入排序。由于程序中的數(shù)組在開始已經(jīng)按從小到的大順序排好。在插入時,首先要查到第一個大于待插入數(shù)的數(shù)組下標,即當待插入元素小于數(shù)組中當前元素時,記下數(shù)組的當前下標p,并結(jié)束循環(huán)。故第一空目的是為了記下數(shù)組下標,應填p=i;插入排序的第二部是將大于待插入元素的所有元素都向后移動一位,故在循環(huán)時,要從最后一個元素到第p個元素都要后移一位,因此第二空應埴i>=p。最后一個循環(huán)是將N+1個元素都輸出,故最后一空應為i<=N。(注:本題有多種答案,以上僅提供一種)