(28)有以下程序
Void f(int *x, int *y)
{
int t;
t= *x; *x=*y;'*y=t;
)
main( )
{
int a[8]={1,2,3,4,5,6,7,8},i,*p,*q;
p=a;q=&a[7];
while(p<q)
{f(p,q); p++; q--;} 。
for(i=0;i<3;i++) printf("%d",a[1][i]);
}
程序運(yùn)行后的輸出結(jié)果是________。
A)8,2,3,4,5,6,7,1, B)5,6,7,8,1,2,3,4.
C)1,2,3,4,5,6,7,8, D)8,7,6,5,4,3,2,l,
答案:D
評析;本程序中函數(shù)f的作用是交換指針變量x和y所指向的存儲單元的值。
(29)有以下程序
main()
{
im a[3][3],*p,i;
p=&a[0][o];
for(i=0;j<9;i++) p[i]=I;
for(i=0;j<3;i++)printf("%d",a[1][i]);
)
程序運(yùn)行后的輸出結(jié)果是________。
A)012 B)123 C)234 D)345
答案:D
評析:本題賦值后,a的數(shù)組元素的值分別為a[01[0]=0,a[0][1]=1,a[0][2]=2,a[1][0]=3,a[1][1]=4,a[1][2]=5,a[2][0]=6,a[2][1]=7,a[2][2]=8,故本題輸出的值為345。
(30)以下敘述中錯(cuò)誤的是________。
A)對于double類型數(shù)組,不可以直接用數(shù)組名對數(shù)組進(jìn)行整體輸入或輸出
B)數(shù)組名代表的是數(shù)組所占存儲區(qū)的首地址,其值不可改變
C)當(dāng)程序執(zhí)行中,數(shù)組元素的下標(biāo)超出所定義的下標(biāo)范圍時(shí),系統(tǒng)將給出"下標(biāo)越
界"的出錯(cuò)信息
D)可以通過賦初值的方式確定數(shù)組元素的個(gè)數(shù)
答案:C
評析:在c語言中,如果出現(xiàn)下標(biāo)越界的情況,系統(tǒng)不管在編譯還是執(zhí)行時(shí)都不會給出"下標(biāo)越界"的錯(cuò)誤提示。
(31)有以下程序
#define N20
fun(int a[],int n,int m)
{ int i,j;
for(i=m;i>=n;i--)a[i+1]=a[i];
}
main()
{
int i,a[N]={1,2,3,4,5,6,7,8,9,10};
fun(a,2,9);
for(i=O;i<5;i++) printf("%d",a[i]);
}
程序運(yùn)行后的輸出結(jié)果是________。
A)10234 B)12344 C)12334 D)12234
答案:C
評析:本題函數(shù)fun的作用是將指定的數(shù)組元素(從下標(biāo)n到下標(biāo)m)向后移一位。由函數(shù)調(diào)用"fun(a,2,9);"可知,函數(shù)fun用于將a[2]到a[9]的各元素依次向后移一位,移完后,a數(shù)組中各元素的值分別為1,2,3,3,4,5,6,7,8,9,10,故輸出的前5個(gè)數(shù)組元素為12334。
(32)有以下程序
main()
{
int a[3][2]={0},(*ptr)[2],i,j;
for(i=0;i<2;i++) {ptr=a+i; scanf("%d",ptr); ptr++;}
for(i=0;i<3;i++)
{ for(i=0;j<2;j++) printf("%2d",a[i][j]);
printf("\n");
}
}
若運(yùn)行時(shí)輸入:1 2 3<回車>,則輸出結(jié)果是________。
A)產(chǎn)生錯(cuò)誤信息
B)l 0 C)l 2 D)l 0
2 O 3 0 2 0
0 0 0 O 3 0
答案:B
評析:二維數(shù)組a,通過a[3][2]={0}將數(shù)組中的各個(gè)元素初始化為0,指針變量ptr,指向包含2個(gè)元素的一維數(shù)組。a[0][0]:l,a[1][0]=2,故本題的輸出選B。
(33)有以下程序
prt(int *m, int n)
{ int i;
for(i=O;i<n;i++) m[i]++;
)
main()
{
int a[]={ 1,2,3,4,5 },i;
prt(a,5);
for(i=O;i<5;i++)
printf("%d,",a[i]);
程序運(yùn)行后的輸出結(jié)果是________。
A)l,2,3,4,5, B)2,3,4,5,6, C)3,4,5,6,7, D)2,3,4,5,1,
答案:B
評析:用數(shù)組名作函數(shù)實(shí)參時(shí),不是把數(shù)組的值傳遞給形參,而是把實(shí)參數(shù)組的起始地址傳遞給形參數(shù)組,這樣兩個(gè)數(shù)組就共同占用同一段內(nèi)存單元。
(34)有以下程序
main()
{ int a[]={1,2,3,4,5,6,7,8,9,0},*p;
for(p=a;p<a+10;p++)printf("%d,",*p);
}
程序運(yùn)行后的輸出結(jié)果是________。
A)l,2,3,4,5,6,7,8,9,0, B)2,3,4,5,6,7,8,9,10,1,
C)0,1,2,3,4,5,6,7,8,9, D)l,l,1,l,l,l,l,l,l,l,
答案:A
評析:c語言規(guī)定數(shù)組變量名代表數(shù)組的首地址,即第0號元素的地址。本題將a數(shù)組中的值全部輸出,即為l,2,3,4,5,6,7,8,9,0,。
(35)有以下程序
#define P 3
void F(int x){return(P*x*x);}
main()
{printf("%d\n",F(3+5));}
程序運(yùn)行后的輸出結(jié)果是________。
A)192 B)29 C)25 D)編譯出錯(cuò)
答案:D
評析:return語句用于從被調(diào)函數(shù)帶回一個(gè)函數(shù)值。void關(guān)鍵字表示"無類型",即不需要從被調(diào)函數(shù)中帶回函數(shù)值,所以不需要return語句,故編譯時(shí)出錯(cuò)。
(36)有以下程序
main()
{int c=35;printf("%d\n",c&C);}
程序運(yùn)行后的輸出結(jié)果是________。
A)0 B)70 C)35 D)1
答案:C
評析:按位"與"時(shí),1&1=1,其他都等O。因?yàn)楸绢}中相與的兩個(gè)值相等,即對應(yīng)位上的二進(jìn)制值相等,所以"與"的結(jié)果也即為其值本身。
(37)以下敘述中正確的是________。
A)預(yù)處理命令行必須位于源文件的開頭
B)在源文件的一行上可以有多條預(yù)處理命令
C)宏名必須用大寫字母表示
D)宏替換不占用程序的運(yùn)行時(shí)間
答案:D
評析:通常,預(yù)處理命令位于源文件的開頭,也可以寫在函數(shù)與函數(shù)之間;不能在一行上寫多條預(yù)處理命令:宏名一般習(xí)慣用大寫字母表示,以便與變量名相區(qū)別,但這并非規(guī)定,也可用小寫字母。
(38)若有以下說明和定義
union dt
{int a;har b;ouble c;}data;
以下敘述中錯(cuò)誤的是________。
A)data的每個(gè)成員起始地址都相同
B)變量data所占的內(nèi)存字節(jié)數(shù)與成員c所占字節(jié)數(shù)相等
C)程序段:data.a(chǎn)=5;pintf("%f\n",data.C);輸出結(jié)果為5.000000
D)data可以作為函數(shù)的實(shí)參
答案:C
評析:union是表示共用體的關(guān)鍵字,成員a,b,c共占用同一個(gè)內(nèi)存空間,data的每個(gè)成員起始地址都相同;共用體變量所占的內(nèi)存長度等于最長的成員的長度,故變量'data所占的內(nèi)存字節(jié)數(shù)與成員c所占字節(jié)數(shù)相等;執(zhí)行"data.a(chǎn)=5;printf("%f\n",data.C);"printf函數(shù)只是將內(nèi)存中的數(shù)據(jù)以不同的類型輸出,而不能將內(nèi)存中的整型數(shù)據(jù)自動轉(zhuǎn)換為等值的浮點(diǎn)數(shù),故C是錯(cuò)誤的。
(39)以下語句或語句組中,能正確進(jìn)行字符串賦值的是________。
A)char*sp;*sp="right!"; B)char s[lO];s="right! ";
C)char s[10];*s="right! "; D)char*sp="right! ";
答案:D
評析:選項(xiàng)A定義了字符型的指針變量sp,則*sp存儲的是第一個(gè)字符,而給它賦的是字符串,故錯(cuò);
選項(xiàng)B表示代表數(shù)組的首地址,而題中給它賦的是字符串,所以錯(cuò)誤;
選項(xiàng)c定義了一個(gè)字符型的數(shù)組s[10],再通過+s給數(shù)組元素賦初值,這時(shí)是與選項(xiàng)A相同的錯(cuò)誤。
(40)設(shè)有如下說明
typedef struct ST
{long a; int b; char c[2];}NEW;
則下面敘述中正確的是________。
A)以上的說明形式非法 B)ST是一個(gè)結(jié)構(gòu)體類型
C)NEW是一個(gè)結(jié)構(gòu)體類型 D)NEW是一個(gè)結(jié)構(gòu)體變量
答案:C
評析:typedef關(guān)鍵字用于聲明一個(gè)新的類型名代替已有的類型名。
本題中如果沒有用typedef進(jìn)行定義的話,則struct ST為結(jié)構(gòu)體類型,現(xiàn)在用typedef定義后,相當(dāng)于用NEW代表了struct ST這一結(jié)構(gòu)體類型,故NEW為結(jié)構(gòu)體類型。
(41)有以下程序
main()
{ int a=1,b;
for(b=l;b<10;b++)
{ if(a>=8)break;
if(a%2==1){a+=5;continue;}
a-=3;
)
printf("%d\n",b);
}
程序運(yùn)行后的輸出結(jié)果是________。
A) 3 B) 4 C) 5 D) 6
答案:B
評析:break和continue的區(qū)別是:continue語句只結(jié)束本次循環(huán),而不是終止整個(gè)循環(huán)的執(zhí)行;而break語句則是結(jié)束整個(gè)循環(huán)過程,.不再判斷執(zhí)行的條件是否成立。
(42)有以下程序
main()
{ char s[]="l 59",*p;
p=s;
printf("%c",*p++);printf("%c",*p++);
}
程序運(yùn)行后的輸出結(jié)果是________。
A)15 B)16 C)12 D)59
答案:A
評析:本題通過"p=s"將指針變量p指向字符數(shù)組s,在第一次輸出時(shí),由于++和*為同一優(yōu)先級,"*p++"相于"+(p++)"。p指向s[1],輸出為s[1]的值。
(43)有以下函數(shù)
fun(char*a,char*b)
{ while((*a!='\0')&&(*b!='\0')&&(*a==b))
{a++;b++; }
return(*a-*b);
}
該函數(shù)的功能是________。
A)計(jì)算a和b所指字符串的長度之差
B)將b所指字符串連接到a所指字符串中
C)將b所指字符串連接到a所指字符串后面
D)比較a和b所指字符串的大小
答案:D
評析:字符串的比較規(guī)則是對兩個(gè)字符串自左至右逐個(gè)字符相比(按ASCII碼值大小比較),直到出現(xiàn)不同的字符或遇到'\0'為止,相等,則返回0,否則返回第一個(gè)不等字符串的ASCII碼的差值。
(44)有以下程序
main()
{ int num[4][4]={{1,2,3,4},{5,6,7,8),{9,10,11,12},{13,14,15,16}},i,j;
for(i=O;i<4;i++)
{ for(j=0;j<=i.j++)printf("%4c",' ');
for(j______; j<4;j++)printf("%4d",num[i][j]);
printf("\n");
}
}
若要按以下形式輸出數(shù)組右上半三角
l 2 3 4
6 7 8
11 12
16
則在程序下劃線處應(yīng)填入的是________
A)i-l B)i C)i+1 D)4-i
答案:B
評析:本題程序?yàn)槎匮h(huán),外循環(huán)控制輸出數(shù)據(jù)的行數(shù),內(nèi)循環(huán)控制輸出數(shù)據(jù)的列數(shù)。從本題輸出的形式來看,程序要求輸出的是4行4列。
(45)有以下程序
point(char*p){p+=3;}
main()
{ char b[4]={'at,lb','c','d.},*p=b;
poim(p);primf("%c\n",*p);
}
程序運(yùn)行后的輸出結(jié)果是________.
A)a B)b C)c D)d
答案:A
評析:在c語言中,函數(shù)的參數(shù)傳遞方式采用按值傳遞,因此不能通過調(diào)用函數(shù)的方式來改變指針本身的值,只能改變指針?biāo)缸兞康闹怠?BR>
(46)程序中若有如下說明和定義語句
char fun(char*);
main()
{
char *s="one; a[5]={O},(*f1)()=fun,ch;
}
以下選項(xiàng)中對函數(shù)fun的正確調(diào)用語句是________.
A)(*f1)(a); B)*f1(*s); C)fun(&a); D)ch=*fl(s);
答案:A
評析:題中將函數(shù)fun的入口地址賦給了指針變量f1,這時(shí)f1和fun都指向函數(shù)的開頭,調(diào)用*fl。就是調(diào)用函數(shù)fun.
(47)有以下結(jié)構(gòu)體說明和變量定義,如圖所示:
struct node
{int data;struct node *next;} *p,*q,*r;
現(xiàn)要將q所指結(jié)點(diǎn)從鏈表中刪除,同時(shí)要保持鏈表的連續(xù),以下不能完成指定操作
的語句是________。
A)P->next=q->next; B)p->next=p->next->next;
C)p->next=r; D)p=q->next;
答案:D
評析:要想將q所指結(jié)點(diǎn)從鏈表中刪除,同時(shí)保持鏈表的連續(xù),必需使p結(jié)點(diǎn)的next指向r,在四個(gè)選項(xiàng)中,只有選項(xiàng)D不能做到。
(48)以下對結(jié)構(gòu)體類型變量td的定義中,錯(cuò)誤的是________。
A) typedef struct aa B) struct aa
{ int n; { int n;
float m; float m;
}AA; }td;
AA td; struct aa td;
C) street D) struct
{ int n; { int n;
float m; float m;
}aa; }td;
struct aa td;
答案:C
評析:選項(xiàng)c中的aa本身就為結(jié)構(gòu)體變量名,所以不能再用它來定義結(jié)構(gòu)體變量,故此種定義方法是錯(cuò)誤的:
(49)以下與函數(shù)fseek(f1),0L,SEEK_SET)有相同作用的是________。
A)feof(fp) B)ftell(fp) C)fgetc(fp) D)rewind(fp)
答案:D
評析:fseek函數(shù)用于改變文件的位置指針。
本題中"fseek(fp,0L,SEEK_SET)"的作用是將位置指針移到文件頭。
feof的作用是判斷文件是否結(jié)束,已指到文件的末尾,則返回值為非零,否則為零。
ftell的作用是得到流式文件中的當(dāng)前位置,用相對于文件開頭的位移量來表示。
fgets的作用是指定文件讀入二個(gè)字符串。
(50)有以下程序
#include <stdio.h>
void WriteStr(char *fn, char *str)
{ FILE *fp;
fp=fopen(fn,"w");fputs(str, fp);fclose(fp);
}
main()
{
WriteStr("t1.dat","start");
WriteStr("tl.dat","end");
}
程序運(yùn)行后,文件t1.dat中的內(nèi)容是________。
A)start B)end C)startend D)endrt
答案:B
評析:兩次使用"寫入"的方式打開同一個(gè)文件,在第二次打開時(shí),文件指針指向文件頭,所以此次寫入的數(shù)據(jù)覆蓋了文件原有的數(shù)據(jù),故本題中t1.dat的內(nèi)容為end。
二、填空題(每空2分,共40分)
請將每空的正確答案寫在【1】至【20】序號的橫線上,答在試卷上不得分。
(1)某二叉樹中度為2的結(jié)點(diǎn)有18個(gè),則該二叉樹中有一___【1】___ 一個(gè)葉子結(jié)點(diǎn)。
答案:【1】19
評析:二叉樹的性質(zhì)3:在任意一棵二叉樹中,度為0的結(jié)點(diǎn)(即葉子結(jié)點(diǎn))總是比度為2的結(jié)點(diǎn)多一個(gè)。本題中度為2的結(jié)點(diǎn)數(shù)為18,故葉子結(jié)點(diǎn)數(shù)為18+1=19個(gè)。
(2)在面向?qū)ο蠓椒ㄖ,類的?shí)例稱為___【2】___.
答案:【2】對象
評析;將屬性、操作相似的對象歸為類,也就是說,類是具有共同屬性、共同方法的對象的集合。所以,類是對象的抽象,它描述了屬于該對象類型的所有對象的性質(zhì),而一個(gè)對象則是其對應(yīng)類的一個(gè)實(shí)例。
(3)診斷和改正程序中錯(cuò)誤的工作通常稱為___【3】___.
答案:【3】程序調(diào)試
評析:程序調(diào)試的任務(wù)是診斷和改正程序中的錯(cuò)誤。它與軟件測試不同,軟件測試是盡可能多地發(fā)現(xiàn)軟件中的錯(cuò)誤。先要發(fā)現(xiàn)軟件的錯(cuò)誤,然后借助于一定的調(diào)試工具去找出軟件錯(cuò)誤的具體位置。軟件測試貫穿整個(gè)軟件生命期,調(diào)試主要再開發(fā)階段。
(4)在關(guān)系數(shù)據(jù)庫中,把數(shù)據(jù)表示成二維表,每一個(gè)二維表稱為___【4】___。
答案:【4】關(guān)系
評析:在關(guān)系數(shù)據(jù)庫中,把數(shù)據(jù)表示成二維表,而一個(gè)二維表就是一個(gè)關(guān)系。
(5)問題處理方案的正確而完整的描述稱為___【5】___。
答案:【5】算法
評析:所謂算法是指解題方案的準(zhǔn)確而完整的描述。
(6)以下程序運(yùn)行時(shí),若從鍵盤輸入:10 20 30<回車>,輸出的結(jié)果是___【6】___. #include<stdio.h>
main()
{ int i=0,j=0,k=0;
scanf("%d%*d%d",&i,&j,&k);
printf("%d%d%d\n"I,j,k);
}
答案:【6】10300
評析:在scanf格式控制符中,如果在%后有一個(gè)"*"附加說明符,表示跳過它指定的列數(shù)。本題中""%d%*d%d""表示將10賦給i,%+d表示讀入整數(shù)但不賦給任何變量,然后再讀入整數(shù)30賦給變量j,那么變量k并沒有重新賦值,仍為初始值0。所以輸出的結(jié)果為10300。
(7)以下程序運(yùn)行后的輸出結(jié)果是___【7】___。
#define S(x)4*x*x+l
main()
{ inti=6,j=8;
printf("%d\11",S(i+j));
}
答案:【7】81
評析;帶參數(shù)的宏定義是按#define命令行中指定的字符串從左到右進(jìn)行轉(zhuǎn)換。本題中替換的式子為:4*i+j*i+j+l,代入i,j的值得81。
(8)以下程序運(yùn)行后的輸出結(jié)果是___【8】___。
main()
{ int a=3,b=4,c=5,t=99;
if(b<a&&a<C)t=a;a=c;c=t;
if(a<c&&b<C)t=b;b=a;a=t;
printf("%d%d%d\n",a,b,C);
}
答案:【8】4 5 99
評析:本題需特別注意的是";"的問題,不能把"t=a;a=c;c=t;"誤認(rèn)為是第一個(gè)if的語句,實(shí)際上,只有"t=a;"才是第一個(gè)if的語句。
(9)以下程序運(yùn)行后的輸出結(jié)果是___【9】___。
main()
{ int a,b,c;
a=10;b=20;c=(a%b<1)||(a/b>1);
printf("%d。 %d\n",a,b,C);
}
答案:【9】10 20 0
評析:本題中"(a%b<1)‖(a/b>1)"的運(yùn)算順序?yàn)橄人憷ㄌ枴阈g(shù)運(yùn)算符→關(guān)系運(yùn)算符→邏輯運(yùn)算符。其中a%b=10,a/b=0,所以a%b<l的值為0,a/b>l值也是0,故整個(gè)表達(dá)式的結(jié)果為0,所以輸出的a,b,c的值為10 20 0。
(10)以下程序運(yùn)行后的輸出結(jié)果是___【10】___。
main()
{char c1,c2;
for(c1='0',c2='9';c1<c2;c1++,c2--) printf("%c%c",c1,c2);
printf("\n");
}
答案:【10】0918273645
評析:本題程序的作用是通過for循環(huán)將0-9這10個(gè)數(shù)字從前向后,同時(shí)也從后向前依次輸出。
(11)已知字符A的ASCII代碼值為65,以下程序運(yùn)行時(shí)若從鍵盤輸入:B33<回車>,
則輸出結(jié)果是_____。
#include<stdio.h>
main()
{chara,b;
a=getchar();scanf("%dt",&b);
a=a-'a'+'O';b=b*2;
printf("%c%c\n",a,b);
}
答案:【11】1 B
評析:c語言使字符型數(shù)據(jù)和整型數(shù)據(jù)之間可以通用。題中執(zhí)行"a=getchar();"后,a的值B,在內(nèi)存中的表現(xiàn)形式為ASCII碼66;執(zhí)行"scanf("%d"&b);"后,b在內(nèi)存中的表現(xiàn)形式為33,然后經(jīng)過"a=a-'A'+'0';b=b*2;"運(yùn)算,得出a的值為字符'1',b的值為ASCII碼66,最后以字符型輸出為l B。
(12)以下程序中,fun函數(shù)的功能是求3行4列二維數(shù)組每行元素中的最大值。請?zhí)羁铡?BR> void fun(int, int, int(*)[4],int *);
main()
{ int a[a][4]={{12,41,36,28},{19,33,15,27},{3,27,19,1}},b[3],i;
fun(3,4,a,b);
for(i=O;i<3;i++) printf("%4d",b [i]);
printf("\n");
}
void fun(int m,int n, int ar[][4],int *br)
{ int i,j,x;
for(i=O;i<m;i++)
( x=ar[i][0];
For(j=O;j<n;j++) if(x<ar[i][j]) x=ar[i][j];
___【12】___=x;
}
}
答案:【12】br[I]或*(br+i)
評析:二維數(shù)組a存放3行4列的數(shù)組元素,一維數(shù)組b用于存放每行的最大數(shù)。在函數(shù)fun中,外層for循環(huán)用于控制行數(shù),內(nèi)層for循環(huán)用于控制列數(shù)。
(13)以下程序運(yùn)行后的輸出結(jié)果是___【13】___。
void swap(int x, int y)
{ int t;
t=x;x=y;y=t;printf("%d %d ",x,y);
}
main()
{ int a=3,b=4;
swap(a,b); printf("%d %d",a,b);
答案:【13】4 3 3 4
評析:用變量作為函數(shù)的實(shí)參時(shí),屬單向傳遞,即"值傳送"方式,此種函數(shù)參數(shù)的傳遞方式只能由實(shí)參傳給形參,不能由形參傳回來給實(shí)參。
(14)以下程序運(yùn)行后的輸出結(jié)果是___【14】___。
#include <string.h>
void fun(char *s, int p, int k)
{ int i;
for(i=p;i<k-1;i++) s[i]=s[i+2];
}
main()
{ char s[]="abcdefg";
fun(s,3,strlen(s)); puts(s);
}
答案:【14】abcfg
評析:函數(shù)fun的作用是將s所指的字符串中從第p十3到第k+1個(gè)字符向前移動兩個(gè)位置。本題程序是將數(shù)組s中從第6個(gè)元素開始的值分別向前移動兩個(gè)位置。在執(zhí)行fun函數(shù)時(shí),p的值是3,k的值是7,
所以,具體執(zhí)行"for(i=p;i<k-1;i++)s[i]=s[i+2];"語句的過程如下:
i=3:判斷i<k-1成立,執(zhí)行s[3]=s[5],此時(shí),s[3l=f;
i=4:判斷i<k-1成立,執(zhí)行s[4]=s[6],此時(shí),s[4]=g;
i=5:判斷i<k-l成立,執(zhí)行s[5]=s[7],此時(shí),s[5]='\O':
i=6:判斷i<k-1不成立,返回主函數(shù)輸出s的值,即為abcfg。
(15)以下程序運(yùn)行后的輸出結(jié)果是___【15】___。
#include <string.h>
main()
{ char ch[]="abc",x[3][4]; int i;
for(i=O;i<3;i++) strcpy(x[i],ch);
for(i=O;i<3;i++) printf("%s",&x[i][i]);
printf("\n");
}
答案:【15】abcbcc
評析:字符數(shù)組ch的值'abc'分別復(fù)制到了二維數(shù)組x的每一行,使得二維數(shù)組中每一行的值均為'abc',再通過第二個(gè)for循環(huán)打印出每一行上所要求輸出的字符串。
(16)以下程序運(yùn)行后的輸出結(jié)果是___【16】___。
fun(int a)
int b=0;static int c=3;
b++;c++;
return(a+b+C);
}
main()
{int i,a=5;
for(i=0;i<3;i++)printf("%d%d",i,fun(a));
printf("\n");
}
答案:【16】010111212
評析:靜態(tài)局部變量是在編譯時(shí)賦初值的,在程序運(yùn)行時(shí)它已有初值。
(17)以下程序運(yùn)行后的輸出結(jié)果是___【17】___。
struct NODE
{ int k;
struct NODE *link;
};
main()
{ struct NODE m[5],*p=m,*q=m+4;
int i=0;
while(p!=q) {
p->k=++i; p++;
q->k=i++; q--;
}
q->k=i;
for(i=0;i<5;i++) printf("%d",m[i].k);
printf("n");
}
答案:【17】13431
評析:程序執(zhí)行過程如下:
p=m,q=m+4,條件p!=q成立,執(zhí)行p->k=++i;,由于是"前加",所以m[O].k=1.執(zhí)行p++后p=m+l;執(zhí)行q->k=i++;,由于是"后加",所以m[4].k=1,然后使得i加上1,即i=2,q--后,q=m+3:
p=m+l,q=m+3,條件p!=q成立,執(zhí)行p->k=++i;,由于是"前加",所以i=3,m[0].k=3,執(zhí)行p++后p=m+2;執(zhí)行q->k=i++;,由于是"后加",所以m[4].k=3,i=4,q--后,q=m+2;
p=m+2,q=m+2,條件p!=q不成立,則執(zhí)行q->k=i;即m[2].k=4;故輸出的值為13431。
(18)以下程序中函數(shù)huiwen的功能是檢查一個(gè)字符串是否是回文,當(dāng)字符串是回文,
時(shí),函數(shù)返回字符串:yes!,否則函數(shù)返回字符串:no!,并在主函數(shù)中輸出,所謂回
文即正向與反向的拼寫都一樣,例如:adgda。請?zhí)羁铡?BR> #include <string.h>
char *huiwen(char *str)
{ char *pl,*p2; int i,t=0;
pl=str;p2=___【18】___;
for(i=0;i<=strlen(str)/2;i++)
if(*pl ++!=*p2--) {t=l ;break;}
if(___【19】___) retum("yes!");
else return("no!");
}
main()
{ char str[50];
printf("Input:"); scanf("%s",str);
printf("%s\n",___【20】___ );
}
答案:【18】pl+(strlen(str)-1)或str+(strlen(str)-1)
【19】t==0或!(tl=0)或t!=l或!t
【20】huiwen(str)
評析:本題的要求是判斷從鍵盤輸入的字符串是否是回文,但在主函數(shù)中并沒有完成此功能的代碼,故第20空應(yīng)該填調(diào)用函數(shù)huiwen代碼,即huiwen(str)。
由于回文字符串是指正向與反向拼寫都一樣,所以對于一個(gè)字符串,如果正向順序與反向順序?qū)?yīng)位置上的字符一樣,則此字符串即為回文。在函數(shù)huiwen中,已用"pl=str"使得pl指向字符串str的第一個(gè)字符的地址,則第18空語句的功能應(yīng)該是使得p2指向字符串str的最后一個(gè)字符串的地址,故填pl+(strlen(str)-1),由于p1與str指向的是同一個(gè)地址,所以,第18空也可以填str+(strlen(str)-1)。
在進(jìn)行for循環(huán)時(shí),如果pl所指向的字符與p2指向的字符不相同,則說明,字符串str不是回文,則用t=l標(biāo)記,并退出循環(huán),執(zhí)行下面的if語句,由于題中要求如果是回文,則返回"yes!",否則,返回"no!"。故當(dāng)t=O的時(shí)候,說明字符串str為回文,所以第19應(yīng)填t==O或!(t!=O)或t!=l或!t。
相關(guān)閱讀:
-----------------------------------------------
05年9月等級考試二級C語言考前上機(jī)密卷2
05年9月等級考試二級C語言考前上機(jī)密卷1
05年9月等級考試二級C語言考前密卷(十)
05年9月等級考試二級C語言考前密卷(九)
05年9月等級考試二級C語言考前密卷(八)
05年9月等級考試二級C語言考前密卷(七)
05年9月等級考試二級C語言考前密卷(六)
05年9月等級考試二級C語言考前密卷(五)
05年9月等級考試二級C語言考前密卷(四)
05年9月等級考試二級C語言考前密卷(三)
------------------------------------------------