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