C語言教材課后習(xí)題參考答案_第1頁
C語言教材課后習(xí)題參考答案_第2頁
C語言教材課后習(xí)題參考答案_第3頁
C語言教材課后習(xí)題參考答案_第4頁
C語言教材課后習(xí)題參考答案_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

習(xí)題參考答案

習(xí)題1

一、選擇題

1、B2、C3、B4、D5、A6、B7C

二、填空題

1、源程序文件c2、obj3、可執(zhí)行文件exe

4、機(jī)器語言匯編語言高級語言

三、解答題

四、編程題

1、

main()

(

printf("Hello!WelcometoChina!");

)

2、

main()

{intx;

scanf("%d",&x);

if(x>=20&&x<1000)printf("x=%d",x)

elseprintf(uInputerror!,r);

)

習(xí)題2

一、選擇題

1、c2、A3、B4、D5、A

6、D7、B8、B9、B10、D

11、D12、B13、A14、B15、C

二、填空題

1、整型、實型、字符型

2、用戶標(biāo)識符、關(guān)鍵字標(biāo)識符

3、存儲單元、符號地址、內(nèi)存地址

4、十、十六、八

5、double(雙精度型)

6、8

7、5.500000

8、a=-32768

習(xí)題參考答案

9、+0017,021,0x11

三、寫程序運行結(jié)果

3257

3257

7.88,-345.12,7.8765,-345.1230

7.87654e+00,-3.5e+02

a,97,141,61

1234,2322,4d2

CHINESE,CHI

四、scanf函數(shù)的使用

a=3b=7

8.571.82

Aa

五、用scanf函數(shù)輸入數(shù)據(jù)

1020Aal.5-3.75123.45,67.8

注意,其中123.45可以是任意實數(shù),因為該值將被跳過,不用于賦值。

習(xí)題3

一、選擇題

1.C2.B3.D4.D

二、填空題

基本概念題

1.2

2.2

3.1

閱讀程序?qū)懗鲞\行結(jié)果題

4.1.00

5.1,0,1

6.9,11,9,10

三、寫出下面表達(dá)式運算后a的值,設(shè)原來a=12。

(I)24(2)10(3)60(4)0(5)0(6)0

習(xí)題4

一、選擇題

1、B2、D3、B4、D5、A6、C

二、填空題

1、1,0,12、1,2,3

3、chl〉='A'&&chl〈二'Z'chi=ch1-32;

三、編程題

296

1、從鍵盤輸入三個數(shù),然后按照由小到大的順序輸出。要求,設(shè)三個數(shù)放在變量a、b、

c中,最后仍然按照a、b、c的順序輸出。

^include<stdio.h>

main()

{inta,b,c,t;

scanf("%d,%d,%d“,&a,&b,&c);

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;}

printf("%d,%d,%d\nw,a,b,c)

)

2、編寫程序根據(jù)以下的函數(shù)關(guān)系,對輸入的x值輸出相應(yīng)的y值。

Xy

2<x<=10x(x+2)

-l<x<=22x

X<=-1X-1

#include<stdio.h>

main()

{floatx,y;

scanf(“%f",&x);

if(x<=-l)

y=x-l;

elseif(x<=2)

y=2*x;

elseif(x<=10)

y=x*(x+2);

elseprintf("Error!\n");

printf(wy=%f\nw,y);

)

3、求一元二次方程ax2+bx+c=0的解。

^include<math.h>

main()

{floata,b,c,d,disc,xl,x2,realpart,imagpart;

scanf(%f,%f,”,&a,&b,&c);

if(fabs(a)<=le-6)

Printf(isnotaquadratic);

else

習(xí)題參考答案

{disc=b*b-4*a*c;

if(fabs(disc)<=le-6)

printf("hastwoequalroots:%8.4\nw,-b/(2*a));

elseif(disc>le-6)

{xl=(-b+sqrt(disc))/(2*a);

x2=(-b-sqrt(disc))/(2*a);

printf(uhasdistinctrealroots:%8.4fand%8.4f\n”,xl,x2);

)

else

{realpart=-b/(2*a);

imagpart=sqrt(-disc)/(2*a);

printf("hascomplexroots:\n");

printf(u%8.4f+%8.4fi\n”,realpart,imagpart);

printf(u%8.4f-%8.4fi\n",realpart,imagpart);

)

)

}

4、假設(shè)工資稅率如下,其中s代表工資,r代表稅率:

s<500r=0%

500<=s<1000r=5%

1000<=s<2000r=8%

2000<=s<3000r=10%

3000<=sr=15%

編一程序?qū)崿F(xiàn)從鍵盤輸入一個工資數(shù),輸出實發(fā)工資數(shù)。要求使用switch語句。

main()

{intsalarly,r,g;

scanf(“%d",&salarly);

if(salary>=3000)r=0.15;

else

{g=salary/500;

switch(g)

{1:r=0.05;

2:

3:r=0.08;

4:

5:r=0.10;

)

)

298

salary=salary*。-r);

printf(<<%d\n,?,salary);

)

習(xí)題5

一、選擇題

1、A2、C3、C4、D5、A6、A

7、A8、B9、C10、B11、B12、D

二、填空題

1、continue

2、[l]n<=999或n<1000[2]n%10

3、[l]x>=0或x>=0.0[2]x<min或x<=min

4、[1]i<10[2]j%3!=0

5、[l]t=l[2]n<=i

6、[l]n[2]flag=l[3]n—

7^[1]j<i[2]1/term

8、[l]sum<k[2]j-2

三、編程題

1、

^include<stdio.h>

main()

{intm,n,p,r,temp;

printf("Pleaseinputm,n:");

do

{scanf(,&m,&n);

}while(m<=:0||n<=0);

if(n<m)

{temp=n;n二m;m=temp;}/*確保大數(shù)放到n中*/

p=n*m;/*保留n和m的乘積到p中,以便求最小公倍數(shù)*/

while(m!=0)/*求n和m的最大公約數(shù)*/

{r=n%m;n=m;m=r;}

printf("最大公約數(shù)為:%d\n",n);

printf("最小公倍數(shù)為:%d\n",p/n);

)

2、

^include<stdio.h>

main()

{charc;

intletter=0,space=0,digit=O,other=0;

printf("Pleaseinputalinecharacter:;

習(xí)題參考答案

while((c=getchar())!=,\n9)

{if(c>=,&&c<=,z9||c>=,A'&&c<=,Z')letter++;

elseif(c=='')space++;

elseif(c>=,O'&&c<=,9')digit++;

elseother++;

)

printf(^Letteris%d,Spaceis%d,Digitis%d,Other

is%d,”,letter,space,digit,other);

)

3、

main()

{intm,s,i;

for(m=2;m<1000;m++)

{s=0;

for(i=l;i<m;i++)

if((m%i)=0)s=s+i;

if(s==m)

{printf("%ditsfactorsare”,m);

for(i=l;i<m;i++)

if(m%i==0)printf(“%d,”,i);

printf("\n”);

)

)

)

4、

main()

{inti,a,min,max;

scanf(,&a);

min=a;max=a;

for(i=2;i<=100;i++)

{scanf(,&a);

if(a<min)min=a;

if(a>max)max=a;

)

printf("Max=%d,Min二%d\n”,max,min);

)

5、

^include<stdio.h>

-defineN20

main()

{inti,t;

floata-2,b=l,s=0;

for(i=l;i<=N;i++)

{s=s+a/b;

300

t=a;

a=a+b;/*將前一項的分子與分母之和作為下一項的分子*/

b=t;/*將前一項的分子作為下一項的分母*/

)

printf("Sum=%f\n”,s);

)

6、問題分析:設(shè)王先生的歲數(shù)是x,他夫人的歲數(shù)是y,可得到如下方程組:

'J+>=1053

x+y2=873

這是一個非線性方程組的求解,無法手算求解,可以用窮舉法求解??紤]到實際可能,

x、y可以在20—100范圍內(nèi)取值,逐一窮興出x、y所有可能的取值判斷是否滿足上述方程

組,若滿足,這一組解就是要求的解。程序如下:

main()

{intx,y;

for(x=20;x<=100;x++)

for(y=20;y<=100;y++)

if(x*x+y==1053&&x+y*y=873)

printf(“x=%dy=%d\nw,x,y);

main()

(

longintk,g,s=0;

printf(z,Pleaseinputaninteger:,z);

scanf&k);

do

{g=k%10;

printf("%2d”,g);

k=k/10;

}while(k!=0);

)

8、

(1)

main()

{inti,j;

for(i=l;i<=9;i++)

{for(j=i;j<=9;j++)

printf(n%d*%d=%2d

printf(,'\nn);

(2)

習(xí)題參考答案

main()

{inti,j,k;

for(i=l;i<==9;i++)

(

for(k=l;k<i;k++)

printf(〃”);

for(j=i;j<=9;j++)

printf(,,%d*%d=%2d〃,i,j,i*j);

printf(〃\n〃);

)

)

9、

^include<stdio.h>

main()

{inti=0;

longs,n,j,x;

for(j=100;j<=999;j++)

{s=0;x=j;

while(x>0)/*求原數(shù)j的反序數(shù)*/

{s=s*10+x%10;

x=x/10;

)

if(s=j)/*判斷反序數(shù)s與原數(shù)j是否相等*/

{i++;printfj);

if(i%10==0)printf(〃\n〃);/*每行輸出10個回文數(shù)*/

)

)

)

10、

#include<stdio.h>

main()

{intx,y,z;

for(x=l;x<20;x++)

for(y=l;y<33;y++)

for(z=3;z<100;z+=3)

{if((x*5+y*3+z/3)==100&&x+y+z==100)

printf("公雞有%d只,母雞有刎只,小雞有%d只\n",x,y,z);

)

)

11、

#include<stdio.h>

#include<math.h>

main()

302

{intn=l;doublex,sum=0,term=l.0;

scanf("%lf",&x);

while(fabs(term)>=le-6)

{sum+=term;

term*="x*x/(n*(n+1));

n=n+2;

)

printf(acos(%lf)=%lf,%lf\nw,x,sum,cos(x));

)

12、

問題分析:

用迭代法求平方根的算法如下:

(1)設(shè)定一個x的初值xO;

(2)用上述公式求出x的下一個值xl;

(3)再將xl代入上述公式,求出x的下一個值x2;

(4)如此繼續(xù)下去,直到前后兩次求出的X值(XM和X。滿足,用一相|<10-5。

為便于程序處理,令x的初值x0=a/2(也可以是其他值),求出XI。程序?qū)崿F(xiàn)如下:

#include<math.h>

main()

{floata,xO,xl;

printf(uPleaseinputapositivenumber:,,);

scanfC^f\&a);/*輸入a的值*/

x0=a/2;

xl=(x0+a/x0)/2;

do

{xO=xl;

xi=(x0+a/x0)/2;

}while(fabs(x1-x0)>=1e-5);

printf(4tThesquarerootof%fis%f,thetruerootis%f\n”,a,x1,sqrt(a));

)

13、

程序如下:

#include<math.h>

main()

{floatx,xO,f,fl;

x=1.5;

do

{xO=x;

f=((2*x0-4)*x0+3)*x0-6;

fl=(6*x0-8)*x0+3;

x=xO-f/fl;/*進(jìn)行牛頓迭代*/

while(fabs(x-x0)>=le-5);

習(xí)題參考答案

printfC'Therootis%f\n,,,x);

)

14、

#include<stdio.h>

^include<math.h>

#defineepsilon0.00001/*定義要求的精度*/

floatf(floatx)/*求函數(shù)值*/

{return(2*x*x*x-4*x*x+3*x-6);

)

main()

{floata,b,x;

scanf&a,&b);/*輸入求根區(qū)間*/

if(f(a)*f(b)>=0)/*判斷是否符合二分法使用的條件*/

{printf(〃不滿足二分法使用條件,退出!〃);exit(0);}

do

{x=(a+b)/2;

if(f(x)*f(b)<0)/*如果成立,則根在區(qū)間的右半部分*/

a=x;

else/*否則根在左半部分*/

b=x;}

while(fabs(b-a)>=epsilon);/*判斷是否達(dá)到精度要求,如果沒達(dá)到,繼續(xù)循環(huán)*/

x=(b+a)/2;/*取最后的小區(qū)間中點作為根的近似值*/

printf(,zx=%f\nz,,x);/*輸出函數(shù)的近似根*/

)

15、

#defineN4

main()

{inti,j,k;

for(i=0;i<N;i++)

{for(j=0;j<N-i-l;j++)printf(HM);

for(j=N;j>=N-i;j-)printf。*");

for(j=N-l;j>=N-i;j-)printf("*");

for(j=0;j<N-i-1;j++)printf("");/*本行也可以不要*/

printf(”\n”);

習(xí)題6

一、選擇題

1.B2.D3.D4.D5.A6.C

二、填空題

閱讀程序?qū)懗鲞\行結(jié)果題

1.第一行:143

304

第二行:258

2.第一行:124

第二行:357

第三行:689

三、編程題

1.#include<stdio.h>

main()

(

charstri[20],str2[10];

inti=0,j=0;

gets(strl);

gets(str2)^

while(strl[i]!=,\0,)i++;

while(str2[j]!=,\0,)strl[i++]=str2[j++];

strl[i]=,\0,;

puts(strl);

)

2.#defineM3

#defineN4

#include<stdio.h>

main()

(

inti,j,m;

inta[M][N]={1,2,3,4,5,6,7,8,9,10,11,12},pp[N];

for(j=0;j<N;j++)

(

m=a[0]|jJ;/*將m值設(shè)為每一列的第一行元素的值*/

for(i=0;i<M;i++)/*找每一列的最小值,賦給m*/

if(a[i][j]<m)m=a[i][j];

pp[jl=m;/*將每一列的最小值m存入pp數(shù)組*/

)

for(j=0;j<N;j++)/*輸出pp數(shù)組*/

printf(4t%d2pp[j]);

3.#include<stdio.h>

voidfind(inta[5][5])

{inti,j,row,col,suml,sum2;

for(i=0;i<5;i++)

for(j=0;j<5;j++)

{suml=sum2=0;

for(col=0;col<5;col++)

suml+=a[ij[colj;

習(xí)題參考答案

for(row=0;row<5;row++)

sum2+=a[row][j];

if(suml==sum2)

printfCta[%d][%d]:%d\n,\ij,a[i][j]);

main()

{inli,j,a[5][5]={{2,81,9,4},{5,7,l,3,0},{7」,7,5,2},{3,221,5},{0,21,6,8}};

for(i=0;i<5;i++)

{forG=O;j<5;j++)

printf("%4d”,a[i][j]);

printf("\n”);

find(a);

)

4.

#include<stdio.h>

#include<stdlib.h>

main()

{inta[3][5],x,y,i,j,k,flag=0;

intmax,min;

for(i=0;i<3;i++)

for(j=0;j<5;j++)scanf(”%d”,&a[i][j]);/**/

for(i=0;i<3;i++)

{max=a[i][0];y=0;

for(k=l;k<5;k++)if(max<a[i][k]){y=k;max=a[i][k];}

min=a[i][y];x=i;

for(k=0;k<3;k++)if(min>a[k][yj){x=k;min=a[k][y];}

if(i==x){printf(,,a[%d][%d]=%disAndian\nu,x,y,a[x][y]);flag=l;}

)

if(flag==0)printf(n\nNotfoundAndian!,1);

)

5.#include<stdio.h>

#defineN10

voidcrl(inta[J)

{inti,j,max=0,min=0,temp;

for(i=l;i<N;i++)

if(a[min]>a[i])min=i;

temp=a[min];

j=min;

while(j>0)

{a[j]=a|j-l];

306

a[O]=temp;

for(i=l;i<N;i++)

if(a[max]<a[i])max=i;

temp=a[maxl;

j=max;

while(j<N-l)

{a|j]=a[j+l];

j++;

)

a[N-l]=temp;

)

main()

{inta[N]={8,5A9,4,1,-1,7,3,2);

inti;

crl(a);

for(i=0;i<N;i++)printf("%5d”,a[i]);

printf("\n”);

)

6.#include<stdio.h>

#include<string.h>

intReplace_string(charline[],charstrl[],charstr2[])

{inti=0,j,loc;

chartemp[80];

while(i<=strlen(line)-strlen(str2))

{j=0;loc=i;

while(strl[jj==line[locj&&strl[j]!=,\0,)

{loc++;j++;}

if(strl[j]==,\O,)

{strcpy(temp,&line[loc]);

strcpy(&line[i],str2);

i+=strlen(str2);

strcpy(&line[i],temp);

return1;

)

elsei++;

)

return0;

)

習(xí)題7

一、選擇題

習(xí)題參考答案

1.A2.A3.D4.C5.A

6.C7,B8.C9.B10.D

二、填空題

1.a=0,b=7

2.110

3.20

4.abc,ABC,be,BC,c,C,

5.14

6.len++p++

三、編程題

1、編寫一個程序,將字符串computer賦給一個字符數(shù)組,然后從第一個字母開始間隔

地輸出該字符串,請用指針完成。

main()

/z,,

{charch[20]=computer)*p=ch;

inti;

for(i=0;i<strlen(ch);i+=2)

printf(〃枇",*(p+i));

)

2、輸入3個字符串,按由小到大的順序輸出。

main()

{charstrl[20],str2[20],str3[20];

charcharp[20],*pl,*p2;

printf(''Inputthreelindes:\nz,);

gets(strl);gets(str2);gets(str3);

pl=strl;p2=str2;

if(strcmp(strl,str2)>0)

{strepy(p,pl);strepy(pl,p2);strepy(p2,p);}

pl=strl;p2=str3;

if(strcmp(strl,str3)>0)

{strepy(p,pl);strepy(pl,p2);strepy(p2,p);}

pl=str2;p2=str3;

if(stremp(str2,str3)>0)

{strepy(p,pl);strepy(pl,p2);strepy(p2,p);}

printf(^Now,theorderis:\n,z);

printf(,z%s\n%s\n%s\n/z,strl,str2,str3);

)

3、求一個3X3矩陣主對角線元素之和。

main()

308

{inta[3][3],*P,i,s=0;

for(i=0;i<3;i++)

scanf(zz%d%d%d/z,&a[i][0],&a[i][l],&a[i][2]);

p=&a[0][0];

for(i=0;i<3;i++)

s=s+*(p+3*i+i);

printf("%d\n”,s);

)

4、將一個3X3矩陣轉(zhuǎn)置。

main()

{inta[3][3],*p;

inti,j,t;

printf("'Inputmatrix:\nz,);

for(i=0;i<3;i++)

scanf(z,%d%d%dz,,&a[i][0],&a[i][1],&a[i][2]);

p=&a[0][0];

for(i=0;i<3;i++)

for(j=i;j<3;j++)

{t=*(p+3*i+j);

*(p+3*i+j)=*(p+3*j+i);

*(p+3*j+i)=t;

}

printf("Now,matrix:\n,z);

for(i=0;i<3;i++)

printf(z,%d%d%d\n〃,a[i][0],a[i][1],a[i]⑵);

)

5、輸出給定的字符串中某一個字符前面的一串字符。如指定字符'a',則對字符串

Fortranprogram”,輸出〃Fortr〃。若無指定字符,則輸出相應(yīng)的提示信息。

#include<stdio.h>

main()

{inti,n=0;

char*ptr,str[10],ch;

printf("Inputastring:\nz/);

scanf(〃%s〃,str);

ptr=str;

getchar();

printf("Pleaseinputacharacter\nzz);

scanf&ch);

習(xí)題參考答案

while(ch二二'\n)

{printf("Pleaseinputacharacteragain!");

scanf(〃%c〃,&ch);

)

while(*ptr!=ch)

{ptr++;n++;}

for(i=0;i<n;i++)

printfC%c",*(str+i));

}

注意:本題中g(shù)etcharO的作用是吸收鍵入給第一個scanf函數(shù)的字符串尾部的回車符,

如果無getchar(),則將無法正確輸入字符給變量cho

6、輸入一行字符,計算其中大寫字母、小寫字母、數(shù)字、空格及其他字符的數(shù)目。

-include<stdio.h>

main()

(intupper=0,lower=0,digit=O,space=0,other=0,i=0;

char*p,s[20];

printf("Inputastring:");

while((s[i]=getchar())!=,\n)i++;

p=s;/*使p指向數(shù)組s的首地址*/

while(*p!=,\n)

{if(<>A,<=*p)&&(*p<=,Z,))

++upper;

elseif(('a'<=*p)&&(*p<='z'))

++lower;

elseif(*p='')

++space;

elseif((*p<='9')&&(*p>='O'))

++digit;

else

++other;

p++;

)

printf(/zuppercase:%dlowercase:%dz/,upper,lower);

printf(,zspace:%ddigit:%dother:%d\n,z,space,digit,other);

)

7、從一個給定的字符串中找出某一子字符串的位置(從1開始)。例如子串“efg”在

字符串“abcdefghijk”中位置為5。若字符串中沒有指定的子串,則標(biāo)記為0。

ttinclude<stdio.h>

310

main()

{inti,n=O;

charstr1[20],str2[20],str3[20];

char*pl=strl,*p3=str3,*p=strl;

printf("'Inputastring:\n,z);

gets(str1);

printf("Pleaseinputasubstring:\n");

gets(str2);

n=strlen(str2);

while(*pl!=,\0?)

{for(i=0;i<n;i++)/*本for循環(huán)用于生成與str2進(jìn)行比較的字符串*/

{*p3=*p++;

p3++;

}

*p3='\0';/*在新生成的字符串尾添加結(jié)束符*/

if(strcmp(str3,str2)==0)/*新生成的字符串存放在str3中*/

{printf("substring'spositionis:%d\n,z,pl-strl+1);

pl=\05;

else

{pl++;/*使P指向字符串strl的下一字符*/

P=pl;

p3=str3;/*使p3重新指向數(shù)組str3首地址*/

)

if(*pl='\O')printf("Substringisnotinthestring!");

)

注意:由于gets函數(shù)可以接收帶有空格的字符串,所以本題中采用gets而未采用不可

接收帶空格字符串的函數(shù)scanfo

8、編程刪除字符串中的所有空白字符。

main()

{charstrl[20],str2[20];

char*pl,*p2;

printf(,zPleaseinputastring:\nz,);

gets(strl);/*strl用于存放原始字符串*/

pl=strl;

p2=str2;/*str2用于存放去掉空格后的字符串,使p2指向str2*/

while(*pl!=\0?)

習(xí)題參考答案

{if(*pl!='')

{*p2=*pl++;/*將原始字符串中的字符依次賦值給str2*/

p2++;

else

P1++;/*遇空格符,只移動指針pl,而不把空格符賦值給str2*/

)

printf("Newstringis:\n%s\n”,str2);

)

9、有n個人圍成一圈,順序排號。從第1個人開始報數(shù)(從1到3報數(shù)),凡報到3

的人退出圈子,問最后留下的是原來第幾號的那位。

main()

{inti,num[20],*p,n=0,m,k;

printf("Inputthenumberofpeople:n=H);

scanf(H%d",&n);

for(i=0;i<n;i++)

num[i]=i+l;/*以1至n為序給每個人編號*/

p=num;

m=0;/*m為退出人數(shù)*/

i=0;/*i為每次循環(huán)時的計數(shù)變量*/

k=0;/*k為按1,2,3報數(shù)時的計數(shù)變量*/

while(m<n-l)當(dāng)退出人數(shù)比n-1少時(未退出人數(shù)大于1時)執(zhí)行循環(huán)體*/

{if(*(p+i)!=O)k++;

if(k==3)/*本if分支對退出的人的編號賦值為0*/

{*(p+i)=0;

k=0;/*重新從1到3報數(shù)*/

m++;/*退出人數(shù)加1*/

)

i++;

if(i==n)i=0;/*報數(shù)到一圈人的尾部時,i恢復(fù)為0,也即使人圍成一圈*/

while(*p==0)p++;

printf("ThelastoneisNO.%d\n'r,*p);

10、有一個字符串,包含n個字符。編程實現(xiàn):將此字符串中從第m個字符開始的全部

字符復(fù)制成為另一個字符串。

main()

{charstrl[20J,str2[20];

char*p=strl;

intn,m,i;

printf("Pleaseinputastring:\nH);

gets(strl);

312

n=strlen(strl);

printf(nWhichcharacterthatbegintocopy?,1);

scanf(u%d",&m);

if(n<m)

printf("inputerror!");

else

{for(i=0;i<n-m+1;i++)

*(str2+i)=*(p+m-1+i);

*(str2+i)='\0,;

)

printfC'Newstringis:\n%s\nu,str2);

習(xí)題8

一、選擇題

1、C2、A3、D4、D5、A6^A7、A8、C9、A10、B

11>B12、C13、B14、C15、B16、C17>B18、D19、B20、B

二、填空題

1main2、scanfgets3、24^auto5、1,26、3235

7、5,258、159、310、6,72011、912、[l]x[2]x-f(x)/fl(x)

三、改錯題

1、參考答案與分析:

分析:

第1處錯誤:題目中已經(jīng)告訴我們“函數(shù)voiddbubble(int*f,intn)的功能是“,但在程序

的第2行定義函數(shù)時頭部就與題目要求不一致,因此,第I處錯誤就在第2行,只要將第2

行改成"voiddbubble(int*f,intn)”即可。

第2處錯誤:在函數(shù)dbubble。中的第二個內(nèi)循環(huán)(反向冒泡),題目要求很清楚:“從

f[n-2]開始(i=n-2),比較f[i]與若f[i]小于則交換f[i]和兩個元素的值,”,

所以,其中的"if(f|j]>f]j-l])w應(yīng)改成<<if(fU]<f[i-l]),,o

第3處錯誤:在主函數(shù)中定義數(shù)組時使用了“inta[n]={4,7,-3,2』0』7,l,6,9,-4};”這樣的

形式,其中n是變量,而根據(jù)數(shù)組的定義我們知道,在定義數(shù)組時口中表示的是數(shù)組元素的

個數(shù),必須由“常量表達(dá)式”組成,而不能是變量。因此,只要將n改成10即可。

第4處錯誤:在主函數(shù)中,調(diào)用函數(shù)dbubble。時調(diào)用方式不對。原調(diào)用方式是“void

dbubble(n,a);",此處有兩個錯誤,一是以語句方式調(diào)用函數(shù)時,其前面不能有“void”,應(yīng)

去掉;二是實參的順序與函數(shù)dbubble()定義時的順序不一致。因此,本錯誤應(yīng)改成

“dbubble(a,n);w()

2、參考答案與分析:

分析:

第1處錯誤:在函數(shù)find。的頭部定義出錯。函數(shù)頭部定義為“voidfind(inta[5][]),\

在二維數(shù)組的名字作為形參時,必須明確第二維的大小,第--維可以省略;但不能省略第二

維中的每行的元素個數(shù)。因此,可以改成“voidfind(inta[”D”或“voidfind(inta[5]L5])\

第2處錯誤:這處錯誤應(yīng)在計算列元素之和的語句"for(row=0;row<5;row++)

sum2+=a|jJlrow];”中。由于要求的是列元素之和,則列下標(biāo)不應(yīng)該變,而變化的是行下標(biāo)。

習(xí)題參考答案

因此,可以將本處錯誤改成ufor(row=0;row<5;row++)sum2+=a[row][j];,,o

第3處錯誤:在C語言中,判斷兩個整數(shù)是否相等用的運算符是“二=",而“二”是賦

值運算符,所以這處錯誤在<<if(suml=sum2)printf(”a[%d][%d]:%d\n”,i,j,a[i皿);”語句中。

應(yīng)該改成aif(suml==sum2)printf(na[%d][%d]:%d\nu,i,j,a[i][j]);,,o

第4處錯誤:這處錯誤出現(xiàn)在主函數(shù)中,在調(diào)用find。函數(shù)時,由于定義find。函數(shù)時形

參只有一個,即二維數(shù)組的數(shù)組名,但在調(diào)用時卻有兩個實參,顯然是錯誤的。應(yīng)將語句

“find(a,5);"改成“find(a);”

四、編程題

1、參考答案:

#include<stdio.h>

#defineM10

main()

{intk;

intjiec(intk);/*聲明函數(shù)*/

floats=0;

printff4計算代數(shù)式的值\n\n");

for(k=l;k<=M;k++)

s+=1.0/jiec(k);/*函數(shù)以表達(dá)式方式調(diào)用*/

printf(“計算結(jié)果為:s=%f\n,,,s);

)

intjiec(k)/*計算階乘值的函數(shù),函數(shù)名前的int表示返回值的類型*/

intk;

{ints,i;

s=l;

for(i=l;i<=k;i++)s*=i;/*計算1*2*3*…*k,并將計算結(jié)果賦值給變量s*/

return(s);/*將計算得的階乘值返回調(diào)用函數(shù)(這里是主函數(shù))*/

)

2、參考答案:

#include<stdio.h>

#include<math.h>

intshushu(intn)

{intj,k=0;/*計數(shù)變量k清零*/

for(j=2;j<=sqrt(n);j++)

if(n%j=0)k++;

if(k!=0)retum(O);

elsereturn(l);

)

main()

{intn,k;

printfC'Pleaseinputn:");

scanf("%d",&n);

k=shushu(n);

314

if(k==O)printf("\nNO!‘‘);

elseprintfC'XnYes!");

)

3、參考答案:

intstr_len(char*str)

{intk=0;

while(*str!=,\O,){k++;str++;}

retum(k);

)

main()

{chars[80];

printfCTleaseinputastring:,,);

gets(s);

printf(tl\nThestringlengthis:%d,,,str__len(s));

)

4、參考答案:

#include<stdio.h>

#include<string.h>

voidex(intk,charstr[])

{inta,b,c,d;

a=k/1000;b=k/100%10;c=k/10%10;d=k%10;

str[0]=,0,+a;str[l]=O+b;str[2]=,0,+c;str[3]=*0,+d;

)

main()

{inti,k;

chars[4];

do{

printf("請輸入一個4位整數(shù):");

scanf(M%dM,&k);}while(!(k>=1000&&k<=9999));

ex(k,s);

for(i=0;i<4;i++)printf(H%cu,s[iJ);

)

5、參考答案:

#include<stdio.h>

voidzhuanzhi(inta[]l3J)

{inti,j,t;

for(i=0;i<3;i++)

for(j=i+l;j<3;j++)

{t=a[i]|j];

a[i]U]=aU][i];

aUWH;

習(xí)題參考答案

main()

{intb[3][3],ij;

for(i=0;i<3;i++)

for(j=0;j<3;j++)

scanf("%dr\&b[i][j]);

zhuanzhi(b);

for(i=0;i<3;i++)

{for(j=0;j<3;j++)

printf(H%d",b[i][j]);

printf(u\nu);

)

)

6、參考答案:

#include<stdio.h>

voidduihuan(intalJ)

{intmax,min,i,j,k,temp;

max=min=a[OJ;j=k=O;

for(i=0;i<10;i++)

{if(a[i]>max){max=a[i];j=i;}

if(a[i]<min){min=a[i];k=i;}

)

if(j!=O){temp=a[jj;a[j]=a[9];a[9]=temp;}

if(k!=9){temp=a[0J;a[0]=a[k];a[k]=temp;}

)

voidinput(inta[])

{inti;

for(i=0;i<10;i++)scanf("%dn,&a[i]);

)

voidoutput(inta[J)

{inti;

printf(n\nu);

for(i=0;i<10;i++)printf(u%dM,a[i]);

)

main()

{intb[10];

input(b);

duihuan(b);

output(b);

)

7、參考答案:

#include<stdio.h>

#defineN10

316

voidsort(chars[])

{intij;

chart;

for(i=l;i<N;i++)

for(j=0;(j<N-j)&&(s[i]!='\O1);j++)

if(sU]>sU+l])

{t=s[j];s[j]=s[j+l];s[j+l]=t;}

)

main()

{charstr[8O];

printf("請輸入一個字符串:");

gets(str);

sort(str);

printf(n\n排序后的字符串是:%s\str);

)

8、參考答案:

#include<stdio.h>

intletter,digit,space,other;

voidfunc(chars[])

{inti;

for(i=0;s[i]!=,\0';i++)

{if(s[i]>=,a'&&s[i]<=>z'||s[i]>=,A,&&s[i]<='Z,)letter++;

elseif(s[i]=-*)space++;

elseif(s[i]>='0,&&s[i]<=,9,)digit++;

elseother++;

)

)

main()

{charstr[8OJ;

printf("\nPleaseinputastring:");

gets(str);

letter=0;digit=0;space=0;other=0;

func(str);

printf("Letteris%d,Spaceis%d,Digitis%d,Otheris%d,",letter,space,digit,other);

)

9、參考答案:

#include<stdio.h>

voidconvert(intn)

{inti;

if((i=n/10)!=0)convert(i);

putchar(n%10+'0');

main()

習(xí)題參考答案

{intnumber;

printf("\nPleaseinputaninteger:");

scanf(M%dM,&number);

printf(,'\nOutput:u);

if(number<0)

{putchar(-');

number=-number;

)

convert(number);

)

習(xí)題9

一、選擇題

1、B2、C3、A4、B

二、閱讀程序題

1、575

2、第一行是H04

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論