第一篇:大學(xué)C語(yǔ)言課本課后習(xí)題相應(yīng)答案及詳細(xì)解答
5-1
#include“stdio.h” void main(){ char c1,c2;printf(“c1:”);c1=getchar();if(c1>='a'&&c1<='z')c2=c1-32;else if(c1>='A'&&c1<='Z')c2=c1+32;else c2=c1;printf(“=>%cn”,c2);}
5-2 #include“stdio.h” void main(){ char c;printf(“c:”);c=getchar();if(c>='A'&&c<='Z')
if(c=='A')printf(“沒(méi)有前面的字母!”);
else if(c=='Z')printf(“沒(méi)有后面的字母!”);
else printf(“前面的字母=%c,后面的字母=%c”,c-1,c+1);printf(“n”);}
5-3 #include“stdio.h” void main(){ int s;char g;printf(“s:”);scanf(“%d”,&s);if(s>=0&&s<=100){
switch(s/10){
case 9:
case 10: g='A';break;
case 8: g='B';break;
case 7: g='C';break;
case 6: g='D';break;
default: g='E';
}
printf(“g=%cn”,g);} else printf(“成績(jī)不在百分制范圍內(nèi)!n”);} 5-4 #include“stdio.h” void main(){ int y,m,d,dok;int yy,mm,dd;printf(“y,m,d:”);scanf(“%d,%d,%d”,&y,&m,&d);
switch(m){
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
if(d>0&&d<=31)dok=4;
else dok=0;
break;
case 4: case 6: case 9: case 11:
if(d>0&&d<=30)dok=3;
else dok=0;
break;
case 2: if(y%4==0&&y%100!=0||y%400==0)
if(d>0&&d<=29)dok=2;
else dok=0;
else
if(d>0&&d<=28)dok=1;
else dok=0;
break;
default: dok=0;
}
if(dok==0)printf(“月份或日期不對(duì)!n”);
else{
switch(dok){
case 1: if(d==28){yy=y;dd=1;mm=m+1;}
else{yy=y;dd=d+1;mm=m;}
break;
case 2:if(d==29){yy=y;dd=1;mm=m+1;}
else{yy=y;dd=d+1;mm=m;}
break;
case
3:if(d==30){yy=y;dd=1;mm=m+1;}
else{yy=y;dd=d+1;mm=m;}
break;
case 4:if(d==31)
if(m==12){yy=y+1;dd=1;mm=1;}
else {yy=y;dd=1;mm=m+1;}
else{yy=y;dd=d+1;mm=m;}
break;
}
printf(“Tomorrow:%d年%d月%d日n”,yy,mm,dd);
} }
5-5
#include“stdio.h” void main(){ int a,b,c,t;printf(“a,b,c:”);scanf(“%d,%d,%d”,&a,&b,&c);if(a+b>c&&b+c>a&&a+c>b){
if(a>b){t=a;a=b;b=t;}
if(a>c){t=a;a=c;c=t;}
if(b>c){t=b;b=c;c=t;}
if(a==b&&b==c)printf(“等邊三角形.”);
else if(a==b||b==c||a==c)printf(“等腰角形.”);
else if(c*c==a*a+b*b)printf(“直角三角形.”);
else printf(“任意三角形.”);
printf(“n”);} else printf(“不能構(gòu)成三角形!n”);} 6-1 #include“stdio.h” void main(){ int a,b,m,n,k;printf(“m,n:”);scanf(“%d,%d”,&m,&n);
a=m;b=n;k=a%b;while(k){
a=b;
b=k;
k=a%b;} printf(“%dn”,(m*n/b));}
6-2 #include“stdio.h” void main(){ int n;int i,j,s;printf(“n=”);scanf(“%d”,&n);for(i=1;i<=n;i++){
s=0;
for(j=1;j
if(i%j==0)s=s+j;
if(s==i){
printf(“%d:”,i);
for(j=1;j
if(i%j==0)printf(“%d ”,j);
printf(“n”);
} } } 6-3
#include“stdio.h” #include“math.h” void main(){ double x,y,zd,zx,x1,x2;zd=zx=50;for(x=0;x<=2;x=x+0.2){
y=2*pow(x,3)-3*pow(x,4)+6*pow(x,5)-4*x+50;
if(y>zd){ zd=y;x1=x;}
if(y 6-4 #include“stdio.h” void main(){ double x,sum=0,a,b,c;int i;printf(“x=”);scanf(“%lf”,&x);a=x;b=1.0;c=1.0;for(i=1;i<=10;i++){ sum=sum+a/(b*c); a=a*x*x; b=b+2; c=c*i;} printf(“y(%.2lf)=%lfn”,x,sum);} 7-1 /*選擇排序*/ #include“stdio.h” void main(){ int i,j,n,k,temp;int a[10];printf(“n(<10):”);scanf(“%d”,&n);printf(“Original:”);for(i=0;i k=i; for(j=i+1;j if(a[j]?*/ if(k!=i){ temp=a[i]; a[i]=a[k]; a[k]=temp; } } printf(“Ordered:”);for(i=0;i 7-2 #include“stdio.h” void main(){ int a[3][3];int i,j,s=1;printf(“Input:n”);for(i=0;i<3;i++) for(j=0;j<3;j++){ scanf(“%d”,&a[i][j]); if(i==j)s=s*a[i][j]; } printf(“s=%dn”,s);} 7-3 /*楊輝三角*/ #include“stdio.h” void main(){ int x[7][7];int i,j;for(i=0;i<7;i++){ x[i][0]=1; x[i][i]=1;} for(i=2;i<7;i++) for(j=1;j x[i][j]=x[i-1][j]+x[i-1][j-1];for(i=0;i<7;i++){ for(j=0;j<=i;j++) printf(“%3d”,x[i][j]); printf(“n”);} } 7-4 #include if(str[i]!=str[j])break;if(i>j)printf(“%s是回文n”,str);else printf(“%s不是回文n”,str);} 7-5 /*輸入一維數(shù)組的10個(gè)元素,并將最小值與第1個(gè)數(shù)交換,最大值與最后一個(gè)數(shù)交換,然后輸出交換后的結(jié)果*/ #include printf(“Input:n”);zx=zd=0;for(i=0;i<10;i++){ scanf(“%d”,&a[i]); if(a[i] if(a[i]>a[zd])zd=i;} if(zx!=0){ int t; t=a[0]; a[0]=a[zx]; a[zx]=t;} if(zd!=9){ int t; t=a[9]; a[9]=a[zd]; a[zd]=t;} for(i=0;i<10;i++) printf(“%d ”,a[i]);printf(“n”);} 8-2 #include“stdio.h” double xexp(double x,int n){ double c;if(n==0)c=1.0;else c=x*xexp(x,n-1);return c;} void main(){ int n;double x; printf(“x:”);scanf(“%lf”,&x);printf(“n:”);scanf(“%d”,&n);printf(“Result=%gn”,xexp(x,n));} 8-3 #include“stdio.h” int find(int x[],int n,int y){ int i,pos=-1;for(i=0;i if(x[i]==y)pos=i;return pos;} void main(){ int a[10]={11,1,13,15,18,7,19,27,3,8};int i,y,pos; for(i=0;i<10;i++)printf(“%d ”,a[i]); printf(“ny:”);scanf(“%d”,&y);pos=find(a,10,y);if(pos==-1)printf(“Not found!n”);else printf(“Position=%dn”,pos);} 8-1 #include“stdio.h” #include“conio.h” //getch()#include“stdlib.h” //srand(),rand(),system(“cls”)#include“time.h” //time()void main(){ void init(int a[][5],int m,int n);void input(int a[][5],int m,int n); void output(int a[][5],int m,int n);int min(int b[][5],int m,int n);int a[5][5],ch='0';while(1){ system(“cls”);//清屏 printf(“1.初始化 2.鍵盤(pán)輸入 0.結(jié)束程序:”); ch=getch();//頭文件conio.h printf(“n”); if(ch=='0')break; else if(ch=='1'){ init(a,5,5); output(a,5,5); } else if(ch=='2'){ input(a,5,5); output(a,5,5); } else printf(“Error!n”); printf(“Min element:%dn”,min(a,5,5)); printf(“按任意鍵繼續(xù)!n”); getch();} } void init(int a[][5],int m,int n){ int i,j;srand(time(0));//time(0)表示以當(dāng)前的時(shí)間做種子,增加每次運(yùn)行的隨機(jī)性 for(i=0;i<5;i++) for(j=0;j<5;j++) a[i][j]=rand()%100;//隨機(jī)數(shù)范圍:0~32767,將它控制在0~99的范圍 } void input(int a[][5],int m,int n){ int i,j;printf(“Input Array 5X5:n”);for(i=0;i for(j=0;j scanf(“%d”,&a[i][j]);} void output(int a[][5],int m,int n){ int i,j;printf(“Output Array 5X5:n”);for(i=0;i<5;i++){ for(j=0;j<5;j++) printf(“%2d ”,a[i][j]); printf(“n”);} } int min(int b[][5],int m,int n){ int i,j,zx;zx=b[0][0];for(i=0;i for(j=0;j if(i==j&&b[i][j] if(a[i]<0){nsum=nsum+a[i];z++;} else if(a[i]>0){psum=psum+a[i];f++;} else continue;pave=(z!=0?psum/z:0.0);nave=(f!=0?nsum/f:0.0);} void main(){ float a[10]={1.0,11.0,3.0,-1.5,-5.5,-2}; saver(a,10);printf(“pave=%.1f,nave=%.2fn”,pave,nave);} 8-5 #include“stdio.h” #include“math.h” void p1(int a,int b){ printf(“has two equal roots:%8.4fn”,-b/(2*a));} void p2(int a,int b, int disc){ float x1,x2;x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);printf(“Has distant real roots:%8.4f and %8.4fn”,x1,x2);} void p3(int a,int b, int disc){ float real,image;real=-b/(2*a);image=sqrt(-disc)/(2*a);printf(“Has complex roots:n”);printf(“%8.4f+%8.4fin”,real,image);printf(“%8.4f-%8.4fin”,real,image);} void main() { int a,b,c,disc;printf(“a,b,c:”);scanf(“%d,%d,%d”,&a,&b,&c); disc=b*b-4*a*c;if(fabs(disc)<=1e-6)p1(a,b);else if(disc>1e-6)p2(a,b,disc);else p3(a,b,disc);} 8-6 #include“stdio.h” #include“stdlib.h” #include“conio.h” #include“time.h” void main(){ void printaverage(int score[][5],int m,int n); void printname(int score[][5],int m,int n);int score[10][5];int i,j;srand(time(0));for(i=0;i<10;i++) for(j=0;j<5;j++) score[i][j]=50+rand()%50+1;printf(“Output Students' score:n”);printf(“Course 1 5n”);printf(“-------------------------n”);for(i=0;i<10;i++){ printf(“No.%2d:”,i+1); for(j=0;j<5;j++) printf(“%3d ”,score[i][j]); printf(“n”);} printaverage(score,10,5);printname(score,10,5);} void printaverage(int score[][5],int m,int n){ int i,j,sum;printf(“nAverage score:n”);for(i=0;i sum=0; for(j=0;j sum=sum+score[i][j]; printf(“No.%d:%.1fn”,i+1,sum/5.0);} } void printname(int score[][5],int m,int n){ int i,j,max0,row0; for(j=0;j<5;j++){ max0=score[0][j]; for(i=0;i<10;i++) if(score[i][j]>max0){ max0=score[i][j]; row0=i; } printf(“Course %d,max score=%d,student:No.%dn”,j+1,max0,row0+1);} } 程序設(shè)計(jì)基礎(chǔ)(C語(yǔ)言版)習(xí)題 第01章 一.選擇題 1.以下敘述中正確的是________。 A)程序設(shè)計(jì)的任務(wù)就是編寫(xiě)程序代碼并上機(jī)調(diào)試 B)程序設(shè)計(jì)的任務(wù)就是確定所用數(shù)據(jù)結(jié)構(gòu) C)程序設(shè)計(jì)的任務(wù)就是確定所用算法 D)以上三種說(shuō)法都不完整 【解析】 程序設(shè)計(jì)通常分為問(wèn)題建模、算法設(shè)計(jì)、編寫(xiě)代碼和編譯調(diào)試四個(gè)階段。所以選項(xiàng)A)、B)、C)說(shuō)法都不完整。2.以下關(guān)于簡(jiǎn)單程序設(shè)計(jì)的步驟和順序的說(shuō)法中正確的是。A)確定算法后,整理并寫(xiě)出文檔,最后進(jìn)行編碼和上機(jī)調(diào)試 B)首先確定數(shù)據(jù)結(jié)構(gòu),然后確定算法,再編碼,并上機(jī)調(diào)試,最后整理文檔 C)先編碼和上機(jī)調(diào)試,在編碼過(guò)程中確定算法和數(shù)據(jù)結(jié)構(gòu),最后整理文檔 D)先寫(xiě)好文檔,再根據(jù)文檔進(jìn)行編碼和上機(jī)調(diào)試,最后確定算法和數(shù)據(jù)結(jié)構(gòu) 【解析】設(shè)計(jì)一個(gè)能解決實(shí)際問(wèn)題的計(jì)算機(jī)程序需要經(jīng)過(guò)以下幾個(gè)過(guò)程:① 建立模型。② 算法設(shè)計(jì):給出解決問(wèn)題的步驟,即算法。③ 算法表達(dá):選擇一種表達(dá)算法的工具,對(duì)算法進(jìn)行清晰的表達(dá)。④ 編寫(xiě)程序:選擇一種程序設(shè)計(jì)語(yǔ)言,把以上算法程序化,這稱為編寫(xiě)程序。⑤ 程序調(diào)試:對(duì)編寫(xiě)好的程序進(jìn)行調(diào)試,修改程序中的錯(cuò)誤。⑥ 程序文檔編寫(xiě)與程序維護(hù)。綜上所述,B)選項(xiàng)是符合上述描述的,其他選項(xiàng)不恰當(dāng)。3,敘述中正確的是________。A)C程序的基本組成單位是語(yǔ)句 B)C程序中的每一行只能寫(xiě)一條語(yǔ)句 C)簡(jiǎn)單C語(yǔ)句必須以分號(hào)結(jié)束 D)C語(yǔ)句必須在一行內(nèi)寫(xiě)完 【解析】函數(shù)是C程序的基本組成單位;C語(yǔ)言書(shū)寫(xiě)風(fēng)格很自由,不但一行可以寫(xiě)多個(gè)語(yǔ)句,還可以將一個(gè)語(yǔ)句寫(xiě)在多行中。故本題答案為C)。4.以下敘述中正確的是。 A)C程序中的注釋只能出現(xiàn)在程序的開(kāi)始位置和語(yǔ)句的后面 B)C程序書(shū)寫(xiě)格式嚴(yán)格,要求一行內(nèi)只能寫(xiě)一個(gè)語(yǔ)句 C)C程序書(shū)寫(xiě)格式自由,一個(gè)語(yǔ)句可以寫(xiě)在多行上 D)用C語(yǔ)言編寫(xiě)的程序只能放在一個(gè)程序文件中 【解析】在C語(yǔ)言中,注釋可以加在程序中的任何位置,選項(xiàng)A)錯(cuò)誤。C程序可以分模塊寫(xiě)在不同的文件中,編譯時(shí)再將其組合在一起,選項(xiàng)D)錯(cuò)誤。C程序的書(shū)寫(xiě)風(fēng)格很自由,不但一行可以寫(xiě)多個(gè)語(yǔ)句,還可以將一個(gè)語(yǔ)句寫(xiě)在多行中。所以正確答案為選項(xiàng)C)。 5.以下關(guān)于C語(yǔ)言的敘述中正確的是。 A)C語(yǔ)言中的注釋不可以?shī)A在變量名或關(guān)鍵字的中間 B)C語(yǔ)言中的變量可以在使用之前的任何位置進(jìn)行定義 C)在C語(yǔ)言算術(shù)表達(dá)式的書(shū)寫(xiě)中,運(yùn)算符兩側(cè)的運(yùn)算數(shù)類型必須一致 D)C語(yǔ)言的數(shù)值常量中夾帶空格不影響常量值的正確表示 【解析】C語(yǔ)言中注釋可以放在任何位置,但不能夾在變量名或關(guān)鍵字中間,選項(xiàng)A正確;C語(yǔ)言中的變量要在使用之前定義,C標(biāo)準(zhǔn)規(guī)定定義位置在相關(guān)程序塊的首部,選項(xiàng)B錯(cuò)誤;C語(yǔ)言中兩側(cè)數(shù)據(jù)類型可以不一致,系統(tǒng)可進(jìn)行強(qiáng)制類型轉(zhuǎn)換,選項(xiàng)C錯(cuò)誤;C語(yǔ)言數(shù)值常量中不允許存在空格,選項(xiàng)D錯(cuò)誤。6.以下關(guān)于C語(yǔ)言數(shù)據(jù)類型使用的敘述中錯(cuò)誤的是。A)若要準(zhǔn)確無(wú)誤差地表示自然數(shù),應(yīng)使用整數(shù)類型 緒論 B)若要保存帶有多位小數(shù)的數(shù)據(jù),應(yīng)使用雙精度類型 C)若要處理如“人員信息”等含有不同類型的相關(guān)數(shù)據(jù),應(yīng)自定義結(jié)構(gòu)體類型 D)若只處理“真”和“假”兩種邏輯值,應(yīng)使用邏輯類型 【解析】C語(yǔ)言中沒(méi)有邏輯類型,若只處理“真”或“假”兩種邏輯值,可以使用整型數(shù)“1”或“0”表示,故選D。第02章 一.選擇題 1.有以下定義:int a;long b;double x,y;則以下選項(xiàng)中正確的表達(dá)式是。A)a%(int)(x-y) B)a=x?。統(tǒng); C)(a*y)%b D)y=x+y=x 【解析】A)選項(xiàng)中如果x與y的值相等那么取余時(shí)就會(huì)有除數(shù)為0的情況。C)選項(xiàng)中取余的兩個(gè)數(shù)據(jù)都應(yīng)為整數(shù),不能有一方為實(shí)型變量,而a*y的結(jié)果為double型。D)選項(xiàng)表達(dá)式本身就錯(cuò)誤,不能給表達(dá)式賦值。所以,本題答案為B)。2.有以下程序 #include s=sizeof(A); t=sizeof(B); printf(“%d,%dn”,s,t); } 在VC6平臺(tái)上編譯運(yùn)行,程序運(yùn)行后的輸出結(jié)果是 A)2,4 B)4,4 C)4,8 D)10,6 【解析】sizeof的作用就是返回一個(gè)對(duì)象或者類型所占的內(nèi)存字節(jié)數(shù)。在VC6中整型占4個(gè)字節(jié),雙精度實(shí)型占8個(gè)字節(jié),所以選C)。 3.若有定義:double a=22;int i=0,k=18;,則不符合C語(yǔ)言規(guī)定的賦值語(yǔ)句是。A)a=a++,i++; B)i=(a+k)<=(i+k);C)i=a%11; D)i=!a; 【解析】C語(yǔ)言中取余運(yùn)算符兩側(cè)的操作數(shù)只能是整型(若為char型,則會(huì)自動(dòng)轉(zhuǎn)換成整型)。4.有以下程序: #include printf(“%d,”,b=a+b); printf(“%dn”,a=2*b);} 程序運(yùn)行后的輸出結(jié)果是________。A)0,0 B)1,0 C)3,2 D)1,2 【解析】 執(zhí)行第一個(gè)printf語(yǔ)句時(shí),b=a+b=1,所以輸出1,執(zhí)行第二個(gè)printf語(yǔ)句時(shí),a=2*b=2,所以輸出結(jié)果為2。5.若有定義語(yǔ)句:int a=3,b=2,c=1;,以下選項(xiàng)中錯(cuò)誤的賦值表達(dá)式是。A)a=(b=4)=3; B)a=b=c+1; C)a=(b=4)+c; D)a=1+(b=c=4); 基本數(shù)據(jù)類型 【解析】在A)選項(xiàng)中,賦值語(yǔ)句b=4先把4賦值給整型變量b,之后執(zhí)行(b=4)=3是把常量3賦值給常量4,但是由于C語(yǔ)言規(guī)定賦值運(yùn)算符的左側(cè)只能是變量,不能是常量或者表達(dá)式,因此A)選項(xiàng)錯(cuò)誤。6.有以下定義:int a;long b;double x,y;則以下選項(xiàng)中正確的表達(dá)式是。A)a%(int)(x-y) B)a=x?。統(tǒng); C)(a*y)%b D)y=x+y=x 【解析】A)選項(xiàng)中如果x與y的值相等那么取余時(shí)就會(huì)有除數(shù)為0的情況。C)選項(xiàng)中取余的兩個(gè)數(shù)據(jù)都應(yīng)為整數(shù),不能有一方為實(shí)型變量,而a*y的結(jié)果為double型。D)選項(xiàng)表達(dá)式本身就錯(cuò)誤,不能給表達(dá)式賦值。所以,本題答案為B)。 7.若有定義語(yǔ)句:int x=10;,則表達(dá)式x-=x+x的值為_(kāi)_______。A)-20 B)-10 C)0 D)10 【解析】 x-=x+x可化為:x=x-(x+x),由于x初始值為10,所以計(jì)算后,x=10-20=-10,因此選B)。二.填空題 1.以下程序的功能是:將值為三位正整數(shù)的變量x中的數(shù)值按照個(gè)位、十位、百位的順序拆分并輸出。請(qǐng)?zhí)羁铡?/p> #include 參考答案:x%10 【解析】x=256,x%10=6。 2.以下程序運(yùn)行后的輸出結(jié)果是。 #include a=(int)((double)(3/2)+0.5+(int)1.99*2); printf(“%dn”,a); } 參考答案:3 【解析】本題中3/2=1,(double)(3/2)=1,(int)1.99*2=1*2=2,因此(int)(1+0.5+2)=(int)3.5=3。3.若有定義語(yǔ)句:int a=5;,則表達(dá)式:a++的值是____。 參考答案:5 【解析】 a++的含義是在使用a值以后,使a值加1,所以a++的值為5。4.若有語(yǔ)句double x=17;int y;,當(dāng)執(zhí)行y=(int)(x/5)%2;之后y的值為_(kāi)___。 參考答案:1 【解析】 y=(int)(x/5)%2=(int)(3.4)%2=3%2=1。 5.設(shè)變量a和b已正確定義并賦初值。請(qǐng)寫(xiě)出與a-=a+b等價(jià)的賦值表達(dá)式 ____。 參考答案:a=-b 【解析】a-=a+b等價(jià)于a=a-(a+b),等價(jià)于a=-b。第03章 一.選擇題 1.有以下程序 #include 則輸出結(jié)果是 A)1234 B)12 C)12 D)12 【解析】程序根據(jù)用戶輸入分別給字符型變量a、b、c、d賦值為'1'、'2'、' char ch; int k; ch=′a′; k=12; printf(“%c,%d,”,ch,ch,k); printf(“k=%dn”,k); 已知字符a的ASCII碼值為97,則執(zhí)行上述程序段后輸出結(jié)果是 A)因變量類型與格式描述符的類型不匹配輸出無(wú)定值 B)輸出項(xiàng)與格式描述符個(gè)數(shù)不符,輸出為零或不定值 C)a,97,12k=12 D)a,97,k=12 【解析】輸出格式控制符%c表示將變量以字符的形式輸出;輸出格式控制符%d表示將變量以帶符號(hào)的十進(jìn)制整型數(shù)輸出。所以第一個(gè)輸出語(yǔ)句輸出的結(jié)果為a,97,第二個(gè)輸出語(yǔ)句輸出的結(jié)果為k=12,所以選項(xiàng)D)為正確答案。3.有以下程序 #include scanf(“%s”,a); gets(b); printf(“%sn%sn”,a,b); } 程序運(yùn)行時(shí)若輸入: how are you? I am fine <回車> 則輸出結(jié)果是 A)how are you? I am fine B)how are you? I am fine C)how are you? I am fine D)how are you? 解析】scanf函數(shù)會(huì)把空格字符作為輸入的字符串之間的分隔符,因此字符串a(chǎn)為“how”。gets()函數(shù)讀取字符串時(shí),直至接受到換行符或EOF時(shí)才停止,并將讀取的結(jié)果存放在指針?biāo)赶虻淖址麛?shù)組中,因此其余輸入的內(nèi)容賦值給b。二.填空題 1.以下程序運(yùn)行后的輸出結(jié)果是。 #include printf(“%d%dn”,a,b); } 參考答案:2008 【解析】整型變量a的值為200,b的值“010”是用八進(jìn)制表示的“10”即十進(jìn)制的“8”,最后輸出格式均為%d,即十進(jìn)制格式,所以輸出為“2008”。 2.有以下程序(說(shuō)明:字符0的ASCIl碼值為48)#include scanf(“%d”,&c1); c2=c1+9; printf(“%c%cn”,c1,c2); } 若程序運(yùn)行時(shí)從鍵盤(pán)輸入48<回車>,則輸出結(jié)果為。 參考答案:09 【解析】本題中通過(guò)ASCII碼對(duì)字符變量賦值,由于字符0的ASCII碼是48,因此字符變量c1為0,c2的ASCII碼比c1大9,因此c2為9。第04章 一.選擇題 1.若變量已正確定義,在if(W)printf(“%dn”,k);中,以下不可替代W的是。A)a<>b+c B)ch=getchar() C)a==b+c D)a++ 【解析】在C語(yǔ)言中,表示不等于不能用“<>”,而只能使用“!=”。其他選項(xiàng)均滿足題目的要求。2.當(dāng)變量c的值不為2、4、6時(shí),值也為“真”的表達(dá)式是。A)(c==2)||(c==4)||(c==6)B)(c>=2&& c<=6)||(c!=3)||(c?。?)C)(c>=2&&c<=6)&&!(c%2)D)(c>=2&& c<=6)&&(c%2?。?) 【解析】滿足表達(dá)式(c>=2&& c<=6)的整型變量c的值是2,3,4,5,6。當(dāng)變量c的值不為2,4,6時(shí),其值只能為3或5,所以表達(dá)式c!=3和c?。?中至少有一個(gè)為真,即不論c為何值,選項(xiàng)B)中表達(dá)式的值都為“真”。正確答案為B)。3.已知字母A的ASCII碼值為65,若變量kk為char型,以下不能正確判斷出kk中的值為大寫(xiě)字母的表達(dá)式是。A)kk>=′A′&& kk<=′Z′ B)!(kk>=′A′||kk<=′Z′)C)(kk+32)>=′a′&&(kk+32)<=′Z′ D)isalpha(kk)&&(kk<91) 【解析】C語(yǔ)言的字符以其ASCII碼的形式存在,所以要確定某個(gè)字符是大寫(xiě)字母,只要確定它的ASCII碼在'A'和'Z'之間就可以了,選項(xiàng)A)和C)符合此要求。在選項(xiàng)D)中,函數(shù)isalpha用來(lái)確定一個(gè)字符是否為字母,大寫(xiě)字母的ASCII碼值的范圍為65到90,所以如果一個(gè)字母的ASCII碼小于91,那么就能確定它是大寫(xiě)字母。本題答案選B)。4.有以下程序: #include < stdio.h> main() { int a=l,b=2,c=3,d=0; if(a==l && b++==2) if(b?。?||c--!=3) printf(“%d,%d,%dn”,a,b,c); else printf(“%d,%d,%dn”,a,b,c); 選擇結(jié)構(gòu) else printf(“%d,%d,%dn”,a,b,c); } 程序運(yùn)行后的輸出結(jié)果是________。A)1,2,3 B)1,3,2 C)l,3,3 D)3,2,1 【解析】 程序首先執(zhí)行第一個(gè)判斷語(yǔ)句,a==1成立;b++==2,先判斷b是否為2,再進(jìn)行b加1操作,執(zhí)行后b的值為3。繼續(xù)執(zhí)行第二個(gè)判斷語(yǔ)句,注意程序此時(shí)進(jìn)行邏輯或運(yùn)算,b!=2的值為真,因此條件表達(dá)式b!=2||c--?。?的值為真,程序便不再執(zhí)行第二個(gè)邏輯語(yǔ)句c--?。?,而直接進(jìn)行輸出操作。因此,本題正確答案為C)。5.執(zhí)行以下程序段后,w的值為_(kāi)_______。 int w='A',x=14,y=15; w=((x‖y)&&(w<'a')); A)-1 B)NULL C)1 D)0 【解析】根據(jù)題目所給條件可知,x||y為1,w<'a'為1,1&&1結(jié)果為1。因此正確答案為C)。6.若變量已正確定義,有以下程序段: int a=3,b=5,c=7; if(a>b)a=b; c=a; if(c?。絘)c=b; printf(“%d,%d,%dn”,a,b,c); 其輸出結(jié)果是 A)程序段有語(yǔ)法錯(cuò) B)3,5,3 C)3,5,5 D)3,5,7 【解析】?jī)蓚€(gè)if語(yǔ)句的判斷條件都不滿足,程序只執(zhí)行了c=a這條語(yǔ)句,所以變量c的值等于3,變量b的值沒(méi)能變化,程序輸出的結(jié)果為3,5,3。所以正確答案為選項(xiàng)B)。7.有以下程序段: int a,b,c; a=10; b=50; c=30; if(a>b)a=b,b=c; c=a; printf(“a=%d b=%d c=%dn”,a,b,c); 程序的輸出結(jié)果是________。A)a=10 b=50 c=10 B)a=10 b=50 c=30 C)a=10 b=30 c=10 D)a=50 b=30 c=50 【解析】該題考查if條件語(yǔ)句,當(dāng)條件為真時(shí),將b值賦給a,c值賦給b;當(dāng)條件為假時(shí),將a值賦給c。該題中if條件為假,所以將a的值賦給c,故a=10 b=50 c=10。8.有以下程序: #include main(){ int x=1,y=2,z=3; if(x>y)if(y else printf(“%d”,++y); printf(“%dn”,x++); } 程序的運(yùn)行結(jié)果是________。A)331 B)41 C)2 D)1 【解析】該題目考查if條件語(yǔ)句。else語(yǔ)句和最近的一個(gè)if語(yǔ)句配對(duì)。由于x>y為假,所以直接執(zhí)行最后一行代碼。9.有以下程序: #include switch(x) { case 1: switch(y) { case 0: a++; break; case 1: b++; break; } case 2:a++; b++; break; case 3:a++; b++; } printf(“a=%d,b=%dn”,a,b); } 程序的運(yùn)行結(jié)果是 A)a=1,b=0 B)a=2,b=2 C)a=1,b=1 D)a=2,b=1 【解析】本題考查了 switch結(jié)構(gòu)的內(nèi)容。在C語(yǔ)言中,程序執(zhí)行完一個(gè)case標(biāo)號(hào)的內(nèi)容后,如果沒(méi)有break語(yǔ)句,控制結(jié)構(gòu)會(huì)轉(zhuǎn)移到下一個(gè)case繼續(xù)執(zhí)行,因?yàn)閏ase 常量表達(dá)式只是起語(yǔ)句標(biāo)號(hào)作用,并不是在該處進(jìn)行條件判斷。本題程序在執(zhí)行完內(nèi)部switch結(jié)構(gòu)后,繼續(xù)執(zhí)行了外部switch結(jié)構(gòu)的 case 2分支。最后a和b的值分別為2和1。二.填空題 1.在C語(yǔ)言中,當(dāng)表達(dá)式值為0時(shí)表示邏輯值“假”,當(dāng)表達(dá)式值為 時(shí)表示邏輯值“真”。 參考答案:非0 【解析】本題一定要明確一個(gè)概念,即:所有非0的數(shù)(并不只是“1”),在c語(yǔ)言中都表示邏輯值為“真”。 2.設(shè)x為int型變量,請(qǐng)寫(xiě)出一個(gè)關(guān)系表達(dá)式__ ,用以判斷x同時(shí)為3和7的倍數(shù)時(shí),關(guān)系表達(dá)式的值為真。 參考答案:(x%3==0)&&(x%7==0)【解析】x%3==0能保證x是3的倍數(shù),x%7==0能保證x是7的倍數(shù),(x%3==0)&&(x%7==0)能保證x是3的倍數(shù)并且 x是7的倍數(shù)。3.有以下程序 #include if(a==1) if(b!=2) if(c==3)d=1; else d=2; else if(c!=3)d=3; else d=4; else d=5; printf(“%dn”,d);} 程序運(yùn)行后的輸出結(jié)果是__。 參考答案:4 【解析】a==1為真,b!=2為假,c!=3為假,所以d=4。4.有以下程序 #include scanf(“%d”,&x); if(x>15)printf(“%d”,x-5); if(x>10)printf(“%d”,x); if(x>5)printf(“%dn”,x+5); } 若程序運(yùn)行時(shí)從鍵盤(pán)輸入12<回車>,則輸出結(jié)果為。 參考答案:1217 【解析】本題中輸入12時(shí),第一條if的條件x>15不滿足因此不執(zhí)行,第二條if的條件x>10滿足因此輸出12,第三條if的條件x>5滿足因此輸出17。 5.以下程序運(yùn)行后的輸出結(jié)果是。 #include if(x==y)t=x;x=y;y=t; printf(“%d%dn”,x,y); } 參考答案:20 0 【解析】本題中if選擇的條件x==y不滿足,因此直接執(zhí)行后面的x=y和y=t,則x的值為20,y的值為0。第05章 一.選擇題 1.以下不構(gòu)成無(wú)限循環(huán)的語(yǔ)句或語(yǔ)句組是 A)n=0; do{++n;}while(n<=0); 循環(huán)結(jié)構(gòu) B)n=0; while(1){n++;} C)n=10; while(n);{n--;} D)for(n=0,i=1;;i++) n+=i; 【解析】項(xiàng)A)中變量n的值,先自加1,再進(jìn)行循環(huán)條件判斷,此時(shí)循環(huán)條件n<=0不成立,跳出循環(huán)。所以正確答案為A)。2.有以下程序 #include while(y--); printf(“y=%dn”,y); } 程序執(zhí)行后的輸出結(jié)果是 A)y=0 B)y=-1 C)y=l D)while構(gòu)成無(wú)限循環(huán) 【解析】當(dāng)y減為1時(shí)判斷while(y--),此時(shí)滿足條件,但是y變成0。下次循環(huán)判斷while(y--)時(shí),因?yàn)閥為0不滿足條件跳出循環(huán),但是此時(shí)也要執(zhí)行y--,所以y變成了-1。打印輸出時(shí)輸出-1。3.有以下程序: #include do { if(i%3==1)if(i%5==2){ printf(“*%d”,i); break; } i++;} while(i?。?); printf(“n”); } 程序的運(yùn)行結(jié)果是________。A)*7 B)*3*5 C)*5 D)*2*6 【解析】整個(gè)程序中只有對(duì)i增加的語(yǔ)句而沒(méi)有對(duì)i減少的語(yǔ)句,所以2、3都不可能出現(xiàn),選項(xiàng)B)和D)錯(cuò)誤。而i=5時(shí)第一個(gè)if語(yǔ)句的表達(dá)式為假,所以選項(xiàng)C)也錯(cuò)誤。4.以下程序段中的變量已正確定義: for(i=0;i<4;i++,i++) for(k=l;k<3;k++);printf(“*”); 程序段的輸出結(jié)果是________。A)******** B)**** C)** D)* 【解析】 本題考察for循環(huán)語(yǔ)句,注意第二個(gè)for語(yǔ)句的后面有一個(gè)分號(hào),即printf函數(shù)不屬于循環(huán)體,無(wú)論循環(huán)執(zhí)行多少次,printf(“*”)語(yǔ)句只執(zhí)行一次。因此,本題正確答案為D)。5.有以下程序 #include for(;a<8;a++){b+=a;a+=2;} printf(“%d,%dn”,a,b);} 程序運(yùn)行后的輸出結(jié)果是 A)9,18 B)8,11 C)7,11 D)10,14 【解析】初始值a=1,b=2,第一次循環(huán):b=b+a=2+1=3,a=a+2=1+2=3,a=a+1=3+1=4;第二次循環(huán):b=b+a=3+4=7,a=a+2=4+2=6,a=a+1=6+1=7;第三次循環(huán):b=b+a=7+7=14,a=a+2=7+2=9,a=a+1=9+1=10,故本題答案選D。6.有以下程序: #include for(i=3;i>=1;i--) { for(j=1;j<=2;j++)printf(“%d”,i+j); printf(“n”); } } 程序的運(yùn)行結(jié)果是________。A)2 3 4 B)4 3 2 4 5 4 3 C)2 3 D)4 5 4 5 3 【解析】該題目主要考查for嵌套循環(huán),要注意循環(huán)變量i和j的取值范圍。輸出結(jié)果為變量i和j的和。8.設(shè)變量已正確定義,以下不能統(tǒng)計(jì)出一行中輸入字符個(gè)數(shù)(不包含回車符)的程序段是________。A)n=0;while((ch=getchar())?。?n')n++; B)n=0;while(getchar()!='n')n++; C)for(n=0;getchar()!='n';n++); D)n=0;for(ch=getchar();ch?。?n';n++); 【解析】 A)項(xiàng)每進(jìn)行一次循環(huán)判斷一個(gè)字符是否為回車,如果不是就進(jìn)行下一次判斷,因此可以統(tǒng)計(jì)出輸入字符個(gè)數(shù);B)項(xiàng)與A)項(xiàng)的判斷相似,僅為是否將讀入的數(shù)據(jù)賦值給一個(gè)變量,因此并不影響判斷結(jié)果;C)想用for循環(huán)來(lái)判斷,與B)項(xiàng)的判斷完全相同,可以統(tǒng)計(jì)出輸入字符個(gè)數(shù);D)項(xiàng)中ch=getchar()是給變量ch賦初值,如果輸入回車,則程序只循環(huán)一次,如果輸入一個(gè)非回車的字符,則程序進(jìn)入死循環(huán)。因此,本題正確答案為D)。9.有以下程序 #include for(i=1;i<3;i++) { for(j=3;j>0;j--) {if(i*j>3)break; m*=i*j; } } printf(“m=%dn”,m);} 程序運(yùn)行后的輸出結(jié)果是 A)m=6 B)m=2 C)m=4 D)m=5 【解析】第一次循環(huán)i=1,j=3和j=2時(shí)都能執(zhí)行m*=i*j,此時(shí)得到m的值為6;然后進(jìn)行第二次循環(huán)i=2,j=3時(shí)會(huì)執(zhí)行break語(yǔ)句,內(nèi)部循環(huán)直接結(jié)束,此時(shí)i再加1,也會(huì)導(dǎo)致退出外部循環(huán),所以最終結(jié)果m的值為6。10.有以下程序 #include scanf(“%d”,&s); while(s>0){ switch(s){ case 1:printf(“%d”,s+5); case 2:printf(“%d”,s+4);break; case 3:printf(“%d”,s+3); default:printf(“%d”,s+1);break; } scanf(“%d”,&s); } } 運(yùn)行時(shí),若輸入123450<回車>,則輸出結(jié)果是 A)6566456 B)66656 C)66666 D)6666656 【解析】switch語(yǔ)句執(zhí)行完一個(gè)case后面的語(yǔ)句后,流程控制轉(zhuǎn)移到下一個(gè)case語(yǔ)句繼續(xù)執(zhí)行,遇到break會(huì)跳出本次循環(huán)。本題中輸入1時(shí)會(huì)輸出65,輸入2時(shí)會(huì)輸出6,輸入3時(shí)會(huì)輸出64,輸入4時(shí)會(huì)輸出5,輸入5時(shí)會(huì)輸出6,在輸入0時(shí)不滿足循環(huán)條件,程序執(zhí)行結(jié)束。11.有以下程序段 int i,n;for(i=0;i<8;i++){ n=rand()%5; switch(n){ case 1: case 3:printf(“%dn”,n);break; case 2: case 4:printf(“%dn”,n);continue; case 0: exit(0); } printf(“%dn”,n); } 以下關(guān)于程序段執(zhí)行情況的敘述,正確的是 A)for循環(huán)語(yǔ)句固定執(zhí)行8次 B)當(dāng)產(chǎn)生的隨機(jī)數(shù)n為4時(shí)結(jié)束循環(huán)操作 C)當(dāng)產(chǎn)生的隨機(jī)數(shù)n為1和2時(shí)不做任何操作 D)當(dāng)產(chǎn)生的隨機(jī)數(shù)n為0時(shí)結(jié)束程序運(yùn)行 【解析】當(dāng)產(chǎn)生的隨機(jī)數(shù)n為1或2時(shí),由于沒(méi)有遇到break,因此程序?qū)⒎謩e順序執(zhí)行case 3與case 4;當(dāng)n為3時(shí),程序輸出n的值后跳出switch語(yǔ)句;當(dāng)n為4時(shí),程序輸出n的值后將繼續(xù)執(zhí)行下一次循環(huán);當(dāng)n為0時(shí),程序執(zhí)行exit函數(shù)結(jié)束運(yùn)行。二.填空題 1.有以下程序 #include int m,n; scanf(“%d%d”,&m,&n); while(m!=n) { while(m>n)m=m-n; while(m } printf(“%dn”,m);} 程序運(yùn)行后,當(dāng)輸入14<空格>7<回車>時(shí),輸出結(jié)果是_____。 參考答案:7 【解析】執(zhí)行while(m #include do{ b=b/2;a+=b; } while(b>1); printf(“%dn”,a);} 參考答案:5 【解析】 第一次循環(huán)執(zhí)行后,b=3,a=4,滿足條件b>1,循環(huán)繼續(xù);第二次循環(huán)執(zhí)行后,b=1,a=5,不滿足條件b>1,結(jié)束循環(huán)。所以輸出的a值為5。3.有以下程序: #include f1=0;f2=1; printf(“%d %d ”,f1,f2); for(i=3;i<=5;i++) { f=f1+f2;printf(“%d”,f); f1=f2;f2=f; } printf(“n”); } 程序運(yùn)行后的輸出結(jié)果是____。 參考答案:0 1 123 【解析】 第一個(gè)printf語(yǔ)句輸出結(jié)果為0 1。循環(huán)體總共循環(huán)三次,第一次循環(huán)結(jié)果為,f=1,f1=1,f2=1;第二次循環(huán)結(jié)果為f=2,f1=1,f2=2;第三次循環(huán)結(jié)果為f=3,f1=2,f2=3。4.若有定義:int k;,以下程序段的輸出結(jié)果是____。 for(k=2;k<6;k++,k++)printf(“##%d”,k); 參考答案:##2##4 【解析】在for循環(huán)語(yǔ)句中,自變量k的自增表達(dá)式為k++,k++。這是一個(gè)逗號(hào)表達(dá)式,所以輸出結(jié)果為##2##4。5.以下程序運(yùn)行后的輸出結(jié)果是____。 #include main() { int k=1,s=0; do{ if((k%2)?。?)continue; s+=k;k++; }while(k>10); printf(“s=%dn”,s); } 參考答案:s=0 【解析】continue語(yǔ)句用于跳出本次循環(huán),直接進(jìn)行下一次循環(huán)。進(jìn)行if判斷時(shí)k的值為1不能夠被2整除,因此執(zhí)行continue退出本次循環(huán),不對(duì)s進(jìn)行任何操作,直接進(jìn)行循環(huán)條件判斷,此時(shí)k的值為1不滿足循環(huán)條件,退出while循環(huán),輸出s的值為0。第06章 一.選擇題 1.下列選項(xiàng)中,能正確定義數(shù)組的語(yǔ)句是 A)int num[0..2008]; B)int num[];C)int N=2008; D)#define N 2008 int num[N]; int num[N]; 【解析】選項(xiàng)A不符合C語(yǔ)言的語(yǔ)法要求;選項(xiàng)B中沒(méi)有指定數(shù)組的大??;選項(xiàng)C中數(shù)組大小不能用變量來(lái)指定。2.下列定義數(shù)組的語(yǔ)句中,正確的是。 A)int N=10; B)#define N 10 C)int x[0..10]; D)int x[]; int x[N]; int x[N]; 【解析】A)中的N是一個(gè)變量,不可以用變量來(lái)定義數(shù)組,所以選項(xiàng)A)錯(cuò)誤。C)中把所有的下標(biāo)均列出不正確,此處只需指明數(shù)組長(zhǎng)度即可。D)中在定義時(shí)沒(méi)有指明數(shù)組長(zhǎng)度不正確,如果不指明長(zhǎng)度就應(yīng)在定義時(shí)對(duì)數(shù)組元素進(jìn)行賦值,而此選項(xiàng)沒(méi)有,所以錯(cuò)誤。故本題答案為B)。 3.若要定義一個(gè)具有5個(gè)元素的整型數(shù)組,以下錯(cuò)誤的定義語(yǔ)句是 A)int a[5]={0}; B)int b[]={0,0,0,0,0}; C)int c[2+3]; D)int i=5,d[i]; 【解析】在進(jìn)行數(shù)組的定義時(shí),不能使用變量對(duì)數(shù)組的長(zhǎng)度進(jìn)行定義。其他選項(xiàng)均符合數(shù)組定義標(biāo)準(zhǔn)。4.以下錯(cuò)誤的定義語(yǔ)句是。 A)int x[][3]={{0},{1},{1,2,3}}; B)int x[4][3]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}}; C)int x[4][]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}}; 數(shù)組 D)int x[][3]={1,2,3,4}; 【解析】本題考查的是二維數(shù)組的定義和初始化方法。C語(yǔ)言中,在定義并初始化二維數(shù)組時(shí),可以省略數(shù)組的第一維的長(zhǎng)度,但是不能省略第二維的長(zhǎng)度。故選項(xiàng)C)錯(cuò)誤。 5.若有定義:int a[2][3];,以下選項(xiàng)中對(duì)a數(shù)組元素正確引用的是。A)a[2][!1] B)a[2][3] C)a[0][3] D)a[1>2][!1] 【解析】C語(yǔ)言中數(shù)組下標(biāo)是從0開(kāi)始的,所以二維數(shù)組a[2][3]的第一維下標(biāo)取值為0、1;第二維的下標(biāo)取值為0、1、2,因而選項(xiàng)A)、B)、C)都是錯(cuò)誤的,選項(xiàng)D)表示的是數(shù)組元素a[0][0]。所以正確答案為D)。6.有以下程序: #include printf(“%d,%dn”,strlen(a),sizeof(a)); } 程序運(yùn)行后的輸出結(jié)果是________。A)7,4 B)4,10 C)8,8 D)10,10 【解析】 strlen()用來(lái)返回字符串的長(zhǎng)度,而sizeof()返回的是一個(gè)對(duì)象或者類型所占的內(nèi)存字節(jié)數(shù),即數(shù)組所占的內(nèi)存。二.填空題 1.以下程序運(yùn)行后的輸出結(jié)果是。 #include for(i=1;i<=4;i++){ n[i]=n[i-1]*2+1;printf(“%d”,n[i]);} printf(“n”); } 參考答案:13715 【解析】本題中已知n[0]為0,根據(jù)循環(huán)的執(zhí)行可以得到n[1]為1,n[2]為3,n[3]為7,n[4]為15,因此輸出結(jié)果是13715。2.有以下程序 #include for(i=l;i<=4;i++) {n[i]=n[i-1]*3+1;printf(“%d ”,n[i]);} } 程序運(yùn)行后的輸出結(jié)果是。參考答案:1 4 13 40 【解析】第一次循環(huán)結(jié)果為:n[1]=0*3+1,即n[1]的值為1,打印輸出1 ;第二次循環(huán)結(jié)果為:n[2]=1*3+1,即n[2]的值為4,打印輸出4 ;第三次循環(huán)結(jié)果為:n[3]=4*3+1,即n[3]的值為13,打印輸出13 ;第四次循環(huán)結(jié)果為:n[4]=13*3+1,即n[4]的值為40,打印輸出40。3.有以下程序 #include int a[3][3]={{1,2,3},{4,5,6},{7,8,9}}; int b[3]={0},i; for(i=0;i<3;i++) b[i]=a[i][2]+a[2][i]; for(i=0;i<3;i++) printf(“%d”,b[i]); printf(“n”);} 程序運(yùn)行后的輸出結(jié)果是____。 參考答案:101418 【解析】當(dāng)i=0時(shí),b[0]=a[0][2]+a[2][0]=3+7=10;當(dāng)i=1時(shí),b[1]=a[1][2]+a[2][1]=6+8=14;當(dāng)i=2時(shí),b[2]=a[2][2]+a[2][2]=9+9=18,則打印結(jié)果為101418。4.有以下程序 #include for(i=0;i<2;i++)n[i]=0; for(i=0;i<2;i++) for(j=0;j<2;j++)n[j]=n[i]+1; printf(“%dn”,n[1]); } 結(jié)果為:__________參考答案:3 【解析】通過(guò)第一次 for(i=0;i<2;i++)n[i]=0;的循環(huán)語(yǔ)句可知,已經(jīng)將數(shù)組n 中的兩個(gè)元素都賦初值為0。接下來(lái)的循環(huán)中,第一次循環(huán),外循環(huán) i=0 的前提下:內(nèi)循環(huán)j=0時(shí),運(yùn)行完n[0]=n[0]+1后n[0]為1;j=1時(shí),運(yùn)行完n[1]=n[0]+1后,n[1]為2。第二次循環(huán),外循環(huán)i=1的前提下,內(nèi)循環(huán)j=0時(shí),運(yùn)行完n[0]=n[1]+1后n[0]為3;j=1時(shí),運(yùn)行完n[1]=n[1]+1后,n[1]為3。 5.以下fun函數(shù)的功能是在N行M列的整型二維數(shù)組中,選出一個(gè)最大值作為函數(shù)值返回,請(qǐng)?zhí)羁铡?設(shè)M,N已定義)int fun(int a[N][M]){ int i,j,row=0,col=0; for(i=0; i for(j=0;j if(a[i][j]>a[row][co1]){row=i;col=j(luò);} return(____); }參考答案:a[row][col] 【解析】通過(guò)程序可以看出,外循環(huán)是行,內(nèi)循環(huán)是列。先在行不變的情況下找一行內(nèi)最大的數(shù)據(jù)進(jìn)行記錄。通過(guò)語(yǔ)句 if(a[i][j]>a[row][col]){ row=i;col=j;}可知,如果變量a[i][j]大于a[row][col],將i賦給了row,將j賦給了col,所以a[row][col]是記錄當(dāng)前最大值的變量。6.有以下程序 #include for(i=0;i<3;i++) for(j=i;j<3;j++)printf(“%d”,a[i][j]); printf(“n”); } 程序運(yùn)行后的輸出結(jié)果是____。參考答案:123569 【解析】當(dāng)i=0時(shí),j=0、1、2時(shí)滿足條件,則打印a[0][0]、a[0][1]、a[0][2];當(dāng)i=1時(shí),j=1、2時(shí)滿足條件,則打印a[1][1]、a[1][2];當(dāng)i=2時(shí),j=2時(shí)滿足條件,則打印a[2][2],所以打印結(jié)果為123569。7.有以下程序: #include scanf(“%s”,b);printf(“%s %sn”,a,b); } 程序運(yùn)行時(shí)從鍵盤(pán)輸入:How are you?<回車> 則輸出結(jié)果為_(kāi)___。參考答案:How are you? How 【解析】用%s格式輸入字符串時(shí),空格和回車都作為輸入數(shù)據(jù)的分隔符,不能被讀入,因此數(shù)組b的輸出結(jié)果為How。第07章 一.選擇題 1.有以下程序: #include r=p;p=q;q=r; printf(“%d,%d,%d,%dn”,m,n,*p,*q); } 程序運(yùn)行后的輸出結(jié)果是________。A)1,2,1,2 B)1,2,2,1 C)2,1,2,1 D)2,1,1,2 【解析】 m和n的值不變,輸出結(jié)果為1,2。指針*p和*q交換了指向的位置,即*p=&n,*q=&m,輸出結(jié)果分別為2,1。2.以下程序段完全正確的是 A)int*p; scanf(“%d”,&p); B)int*p; scanf(“%d”,p); C)int k,*p=&k; scanf(“%d”,p); D)int k,*p; *p=&k; scanf(“%d”,p); 【解析】A)選項(xiàng)輸入的是指針型變量p的地址,變量一定義就已分配好了地址不能再指定了,所以A錯(cuò)誤。B)選項(xiàng)沒(méi)有指定指針p應(yīng)該指向的變量,沒(méi)給變量賦初值。D)選項(xiàng)中,p是地址,*p是地址內(nèi)存放的數(shù)據(jù),它把整型變量k的地址賦給了*p,所以錯(cuò)誤。 3.以下定義語(yǔ)句中正確的是。 A)int a=b=0; B)char A=65+1,b=′b′; C)float a=1,*b=&a,*c=&b; D)double a=0.0;b=1.1; 【解析】本題考查變量的定義方法。如果要一次進(jìn)行多個(gè)變量的定義,則在它們之間要用逗號(hào)隔開(kāi)。因此選項(xiàng)A)和D)錯(cuò)誤;在選項(xiàng)C)中,變量c是一個(gè)浮點(diǎn)型指針,它只能指向一個(gè)浮點(diǎn)型數(shù)據(jù),不能指向指針變量b;所以正確答案為B)。4.若有定義語(yǔ)句:double x,y,*px,*py;執(zhí)行了px=&x;py=&y;之后,正確的輸入語(yǔ)句是________。A)scanf(“%f%f”,x,y);B)scanf(“%f%f”&x,&y); 指針 C)scanf(“%lf%le”,px,py);D)scanf(“%lf%lf”,x,y); 【解析】 本題考查scanf函數(shù),其格式為:scanf(“控制格式”,地址表列)。其中地址表列中應(yīng)為要賦值變量的地址。本題要為變量x和y賦值,并定義了兩個(gè)指針?lè)謩e指向x和y,因此取得變量x和y的地址的方法有兩種,一種是使用取地址符號(hào)“&”,即&x和&y,另一種是使用指針變量,即px和py。選項(xiàng)A)和D)中地址表列表示錯(cuò)誤;選項(xiàng)B)中控制格式與地址表列之間應(yīng)用逗號(hào)分開(kāi)。因此,本題正確答案為C)。5.有以下程序: #include --p;y=*p;printf(“y=%dn”,y); } 程序的運(yùn)行結(jié)果是 A)y=0 B)y=1 C)y=2 D)y=3 【解析】在程序中指針變量p初始指向a[3],執(zhí)行p減1后,p指向a[2],語(yǔ)句y=*p的作用是把a(bǔ)[2]的值賦給變量y,所以輸出為y=3。正確答案為D)。6.下列函數(shù)的功能是________。 fun(char *a,char *b){ while((*b=*a)?。?
第二篇:C語(yǔ)言習(xí)題(詳細(xì)解答)