C語言程序設(shè)計(jì)(鐵道出版社第二版)課后習(xí)題參考答案_第1頁
C語言程序設(shè)計(jì)(鐵道出版社第二版)課后習(xí)題參考答案_第2頁
C語言程序設(shè)計(jì)(鐵道出版社第二版)課后習(xí)題參考答案_第3頁
C語言程序設(shè)計(jì)(鐵道出版社第二版)課后習(xí)題參考答案_第4頁
C語言程序設(shè)計(jì)(鐵道出版社第二版)課后習(xí)題參考答案_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

C語言程序設(shè)計(jì)課后習(xí)題參考答案

第1章

一、選擇題

1.C2.B3.A4.B5.D

二、填空題

1.main2.main3.有窮性、確定性、有零個(gè)或多個(gè)輸入、有一個(gè)或多個(gè)輸出、有效性

4.順序、分支和循環(huán)5.自頂向下,逐步細(xì)化、模塊化設(shè)計(jì)、限制使用got。語句

第2章

一、選擇題

1.C2.C3.B4.C5.A

二、敘述題

1.向菜單或工具欄添加命令

(1)單擊“工具”菜單中的“自定義”,或者右單擊菜單欄(或工具欄),在彈出的快捷菜單中

選擇“自定義”命令選項(xiàng)。

(2)在“命令”選項(xiàng)卡的“請(qǐng)選擇要重排的菜單或工具欄”下,選擇要更改的菜單或工具欄,

如選擇工具欄,在其對(duì)應(yīng)的下拉列表框中選擇“調(diào)試”,然后單擊“添加命令二

(3)在“添加命令”話柩中,從“類別”列表中選擇類別名稱,然后從“命令”列表中選擇要

添加的命令。

(4)單擊“確定”,再單擊“關(guān)閉”。

2.項(xiàng)目和解決方案是VisualSludio2()l()提供的兩類容器。項(xiàng)目是構(gòu)成某個(gè)程序的所有項(xiàng)的容

器,該程序可能是控制臺(tái)應(yīng)用程序、基于窗口的應(yīng)用程序或某種別的程序,構(gòu)成項(xiàng)目的項(xiàng)可以是源

代碼文件、窗體、類、資源文件等。一個(gè)解決方案可包含一個(gè)或多個(gè)項(xiàng)目,以及一些其他項(xiàng)。例如,

?個(gè)分布式系統(tǒng)可能由若干個(gè)不同的程序組成,而各個(gè)程序是作為同一個(gè)解決方案內(nèi)的項(xiàng)目開發(fā)的。

源文件只有放在相關(guān)的項(xiàng)目中才可以生成可執(zhí)行程序。

3.在解決方案資源管理中,首先移除該項(xiàng)目中的例1.1程序代碼,然后右單擊源文件,如果沒

有建立例1.2的代碼文件,則選擇添加一新建項(xiàng),并選擇C++文件,輸入文件名和后綴.c,之后輸入

相關(guān)代碼,就可生成項(xiàng)目、運(yùn)行程序了;如果例1.2代碼已存于某個(gè)源文件中,則選擇添加一現(xiàn)有

項(xiàng),添加該源文件,生成、運(yùn)行即可。

4.在VC++2010的編譯系統(tǒng)中,編譯會(huì)從多個(gè)角度檢測每個(gè)錯(cuò)誤,如果從多個(gè)角度解釋都有問

題,則系統(tǒng)會(huì)提示有多個(gè)錯(cuò)誤。也就說,哪怕一個(gè)程序中只有一個(gè)錯(cuò)誤,但生成項(xiàng)目時(shí)可能會(huì)出現(xiàn)

了一系列編譯錯(cuò)誤和警告信息。

5.選擇“工具”一“選項(xiàng)”菜單命令,彈出“選項(xiàng)”對(duì)話框,在“選項(xiàng)”對(duì)話框的左側(cè)導(dǎo)航窗格

中選擇“環(huán)境”一“字體和顏色”,在“顯示其設(shè)置”下拉列表中選擇環(huán)境字體,可更改其字體及大

小,環(huán)境包含菜單;在“顯示其設(shè)置”下拉列表中選擇文本編輯器,可更改其字體及大小.

第3章

一、選擇題

1.A2.C3.C4.D5.A6.D7.D8.B9.B10.A11.B12.B13.A14C.15.B

二、填空題

1.字母、數(shù)字、下劃(畫)線2.03.4、84.(a+b)*c/(a-b)5.-60

6.-167.98.6、4、29.010.10、6

11.12.412.5.50000013.014.1615.6.6

三、編程題

1.編寫一個(gè)程序求各種類型數(shù)據(jù)的存儲(chǔ)長度。

#include<stdio.h>

main()

(

printf("int:%dbyte\n",sizeof(int));

printf(Hshortint:%dbyte\n,,,sizeof(shortint));

printf(*1ongint:%dbyte\nM,sizeof(longint));

printf(ufloat:%dbyte\n'\sizeof(float));

printf(adouble:%dbyte\nH,sizeof(double));

printf('1ongdouble:%dbyte\n',,sizeof(longdouble));

printf(Hchar:%dbyte\n'\sizeof(char));

)

2.

#include<stdio.h>

#defineRAT1.60934

main()

(

floatk;

printfCinputthekm:H);

scanf("%f',&k);

printf("mile:%f\n”,k/RAT);

)

第4章

一、選擇題

1.D2.D3.C4.D5.D6.D7.C8.D9.C10.C

二、解析題

1.X=170,X=LJLJM170,X=UUU252,X=MMUUaa.x=uuLj170

x=170,x=170UMM,X=UMU170,x=%6d

a=513.789185,a=uu513.79,a=513.78918457,a=513.78918457

2.a=3ub=7x=8.5口y=71.82c1=Auc2=az

三、編程題

1.

main()

(

intx,y;

scanf("%d%d",&x,&y);

printf("商數(shù)=%5余數(shù)=%d”,x/y,x%y);

)

2.

main()

(

doublex,y,z,avg;

scanf("%lf%lf%ir,&x,&y,&z);

avg=(x+y+z)/3;

printf("%.1f',avg);

)

第5章

一、選擇題

1.C2.C3.A4.A5.D6.C7.C8.A9.B10.D

二、填空題

1.?a>0&&b>0||a>0&ac>0||b>0&ac>0

@a<b||a<c

③a>5"-a>5或a>5||a<-5

@(a<0)&&((int)a)==a

⑤(a%b)!=0

2.①!(x>0)②1③!(x>=0&&x<=5)

3.3、2、2

4.ch>='A'&&ch<='Z'ch=ch-32

include<stdio.h>

main()

(

floatprice,tax;

printf("pleaseinputthepriceofproduct:");

scanf("%f,,&price);

if(price>=10000)tax=price*0.05;

elseif(price>=5000)tax=price*0.03;

elseif(price>=1000)tax=price*。.02;

elsetax=0;

printf(H%r,tax);

)

5.

include<stdio.h>

main()

(

floatscore;

printf("pleaseinputthescoreofstudent:'*);

scanf("%r,&score);

if(score>=85)printf("VERYGOOD");

elseif(score>=60)printf("GOODM);

elseprintf("BAD");

)

6.

#include<stdio.h>

main()

(

intx,y,z;

printf("inputtwonumber:");

scanff'%d%d",&x,&y);

if(x<10||x>99||y<10||y>99)

printf("inputdataerror!\nH);

else

{z=(x/10)*1000+(y/1C)*100+(x%10)*10+y%10;

',

printf("%d\n1z);

)

)

第6章

一、選擇題

1.D2.C3.A4.D5.A6.D7.D8.B9.D10.B11.C12.A13.D14.A15.0

二、填空題

1.fahrcelsius=5.0/9*(fahr-32)fahr+=step

2.5、4、63.3*i-24.y—z*=x5.8M5u2

6.j++說j==0j>=i(或j=i)

7.sum<ksum==kj-28.s=0p=lj<=i

三、改錯(cuò)題

1.第一處改正:For改為for(注:出版社將For改成了for,所以教材上沒錯(cuò))

第二處改正:for(k=l;kv=4;k++)或for(k=0;k<4;k++)

第三處改正:ave=sum/4改為ave=sum/4.0

2.第一處改正:i++改為j++

第二處改正:m=100*i+1O*j+k

3.第一處改正:temp=1

第二處改正:temp>:eps

第三處改正:產(chǎn)2

4.第一處改正:&n

第二處改正:====

5.第一處改正:t=m/10改為I=m%10

第二處改正:t=0改為t=0

第三處改正:m=m%10改為m=/10

四、編程題

1.分式累加和。

include<math.h>

main()

(

ints;

floatn,t,sum;

t=1;sum=0;n=1;s=1.0;

whilA(n<=100)

(

sum=sum+t;

n=n+1;

s=-s;

t=s/n;

)

printf("sum=%10.6f\n",sum);

)

2.1~10的階乘

include<stdio.h>

main()

(

inti;

longintn=1;

for(i=1;j<=10;i++)

(

n=n*i;

printf(i%5==0?"%2d!=%-10ld\nM:"%2d!=%-10ld,,,i,n);

)

)

3.由*組成的等腰三角形

include<stdio.h>

main()

(

intn,i,j;

scanf("%dn,&n);

for(i=1;i<=n;i??)

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

if0<=n-i)printf("");

elseprintf("*");

printf("\n");

)

)

4.完數(shù)

main()

(

intm,s,i;

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

{s=0;

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

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

if(s==m)

{printf("%ditsfactorsare",m);

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

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

printf(H\n");

}

)

)

5.打靶

include<stdio.h>

main()

inth10,h7,h5;

for(h10=0;h10<=8;h10++)

for(h7=0;h7<=8h7++)

for(h5=0;h5<=8;h5++)

if(h10+h7+h5==8&&h10*10+h7*7+h5*5==53)

printf("h10=%d\th7=%d\th5=%d\n",h10,h7,h5);

)

6.猴子吃桃子問題。采取逆向思維的方法,從后往前推斷。

〃代碼一

main()

(

intday,x1,x2;

day=9;

x2=1;

while(day>0)

{x1=(x2+1)*2;/*第一天的桃子數(shù)是第2天桃子數(shù)加1后的2倍*/

x2=x1;

day-;

}

printf("thetotalis%d\n",x1);

)

〃代碼二

main()

(

inti=9,sum=1;

for(;i>0;sum=2*(sum+1),i-);

printf("sum=%d\n",sum);

)

7.牛頓迭代法

一般地:

f(x)=aoxn+aixn_1+....+an-ix+an=O

求f(x)在Xo附近的根

計(jì)算公式:Xn+1=Xn-f(Xn)/f'(Xn)

精度:£=|Xn+i-Xn|<1.0e-m,m=5o

所求的根:滿足精度的Xn

include<stdio.h>

#include<math.h>

main()

{floatx,x0,f,f1;

x=1.5;〃可改為scanf("%f',&x);

do

{xO=x;

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

f1=6*x0*x0-8*x0+3;〃f的導(dǎo)數(shù),即它的切線

x=xO-f/f1;//切線與x軸的交點(diǎn)

}while(fabs(x-xO)>=1e-5);

printf("Therootis%8.7f\n",x);

)

8.利用歐幾里德算法求兩個(gè)正整數(shù)的最大公約數(shù)。歐幾里德算法又稱輾轉(zhuǎn)相除法,非常有名。該算

法的要領(lǐng)是:假設(shè)兩個(gè)正整數(shù)為a和b,先求出前者除以后者的余數(shù),存放到變量r中,若「不為0,

則將b的值得賦給a,將?r的值得賦給b:再求出a除以b的余數(shù),仍然存放到變量「中,”,如此反

復(fù),直至r為。時(shí)終止,此時(shí)b中存放的即為原來兩數(shù)的最大公約數(shù)。

兩個(gè)正整數(shù)a和b的最小公倍數(shù)二axb/最大公約數(shù)

main()

(

inta,b,r,p;

do

(

scanf(',%d%d",&a,&b);

}while(a<=0||b<=0);/*確保a和b為正整數(shù)*/

p=a*b;

r=a%b;〃若a<b,則—a,經(jīng)過下面第一次輾轉(zhuǎn)后,a^b進(jìn)行了交換,使a>b

while(r!=0)

{a=b;

b=r;

r=a%b;

)

printf("greatestcommondivisoris:%d\nH,b);//最大公約數(shù)

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

)

第7章

一、選擇題

1.C2.C3.D4.C5.C6.A7.A8.D9.B10.D

二、寫出程序的運(yùn)行結(jié)果

1.sum=6

2.Max=9,row=1,col=0

3.

0

10

210

3210

5.-5

三、填空

1.i=j=k=Oi<4&&j==5j<5&&i==4

2.i=1&&j-1

3.n>0n%10+0x303cn%10+'0'sO]='\0'

4.s[i]s[0],s[1]str,s[1]s[2],str

四、改錯(cuò)題

1.第一處改正:n=strlen(str)

第二處改正:str[j]==''

第三處改正:strU]!="(注:該錯(cuò)誤產(chǎn)生警告,運(yùn)行時(shí)如果不修改,有時(shí)結(jié)果不正確,如輸

入aubeduudefuuuqwe)

2.第一處改正:ch=str[i]

第二處改正:(j>=0)&&(ch<strO])

3.第一處改正:s1[i]!='\C

第二處改正:j=0;

4.第一處改正:cnt=0

第二處改正:if(!(m%i))

第三處改正:i<cnt

五、編程題

1.VC提供的intrand(void)產(chǎn)生的實(shí)際上是0?32767(short型的最大數(shù))的偽隨機(jī)數(shù),偽隨機(jī)數(shù)

總是以一個(gè)相同的數(shù)為起始值(種子),運(yùn)用遞推的原理來生成的。所以,如果只使用rand函數(shù),每

次運(yùn)行所形成的偽隨機(jī)數(shù)列也相同,失去了隨機(jī)意義。但這樣便于程序調(diào)試。VC的rand()函數(shù)默認(rèn)

以1為種子。要解決這個(gè)問題,需要在每次產(chǎn)生隨機(jī)序列前,先指定不同的種子,這樣計(jì)算出來的

隨機(jī)序列就不會(huì)完全相同了。VC提供的voidsrand(unsignedintseed)將seed作為種子,如果以

time函數(shù)值(即當(dāng)前時(shí)間)作為種子數(shù),那么就可以保證隨機(jī)性了,因?yàn)閮纱握{(diào)用rand函數(shù)的時(shí)間通

常是不同的。也可以使用srand函數(shù)來人為指定種子數(shù)。

若要產(chǎn)生a?b之間的一個(gè)隨機(jī)數(shù),則可用2+r2代()%8、+1)表示。若要0~1的小數(shù),則可

以先取得0T0的整數(shù),然后均除以10即可得到隨機(jī)到十分位的10個(gè)隨機(jī)小數(shù);若要得到隨機(jī)到

百分位的隨機(jī)小數(shù),則需要先得到0700的整數(shù),然后均除以100,其它情況依此類推。

include<stdio.h>

#include<stdlib.h>

include<time.h>

main()

(

inta[12],count=0,i;

srand((unsigned)time(NULL));

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

a[i]=5+rand()%11;

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

(

printf("%5d",a[i]);

count++;

if(count%4==0)printf("\n");

)

)

2.用一維數(shù)組a表示一組數(shù),假定為整數(shù)。

include<stdio.h>

#defineN5

main()

(

inta[N],max,min,i,sum=0,count=0;

floatav;

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

scanf("%d",&a[i]);

max=min=a[0];

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

(

sum+=a[i];

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

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

}

av=(float)sum/5;

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

if(a[i]>av)count++;

printf(,'max:%d\nmin:%d\nav:%f\ncount:%d,',max,min,account);

)

3.

include<stdio.h>

main()

(

intscore[30];/*={61,62,63,64,65,66,67,68,69,70,

71,72,73,74,75,76,77,78,79,80,

81,85,89,90,33,44,55,91,92,93):〃不必賦初值,這是為調(diào)試程序方便*/

inti,count90=0,count80=0,count70=0,count60=0;

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

(

printf("intputNO.%dstudent'sscore:'1,i+1);

scanf("%d",score+i);

)

for(i-0,i<30,i++)

(

if(score[i]>=90)

(

count90++;

count80++;

count70++;

count60++;

}

elseif(score[i]>=80)

count80++:

count70++;

count60++;

)

elseif(score[i]>=70)

(

count70++;

count60++;

)

elseif(score[i]>=60)

count60++;

)

printf("0-59:%d\n60-69:%d\n70-79:%d\n80~89:%d\n90~100:%d",30-count60,count60-

count70,count70-count80,count80-count90,count90);

printf("\n60orhigher:%d\n70orhigher:%d\n80orhigher:%d\n90or

higher:%d\n",count60,count70,count80,count90);

}、

4.

方法1:使用一維數(shù)組。共輸出5行,第1行靠左端輸出,第2行空1個(gè)字符輸出,第3行空

2個(gè)字符輸出,……,笫5行空4個(gè)字符輸出。第5行共有6個(gè)字符(含空格),為方便起見,每行

按9個(gè)字符輸出,即輸出9個(gè)字符后換行。每行的一串*前可能有空格,*后面也可能有空格。共5

行,每行9個(gè)字符,所以定義數(shù)組大小為45.

include<stdio.h>

main()

(

chara[45];

inti,j,k;

for(i=0;i<45;i++)a[i]='

for(i=0;i<5;i++)〃i代表行,從0開始計(jì)數(shù)

(

forC=0;j<i;j-+)〃每行下標(biāo)從9*j開始,第i行前面有i個(gè)空格

a[9*i+j]='

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

a[9*i+j+k]=w;

}

j=0;

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

(

M

printf(%c"Ja[i]);

j++;

ifO%9==0)printf("\n");

)

)

方法2:

#include<stdio.h>

main()

chara[5][9J;

inti,j,k;

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

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

尸';

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

{

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

afiirjl='r;

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

}

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

{

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

printf("%c",a[i][j]);

printf("\n,');

}

)

5.

#include<stdio.h>

#defineN4

main()

(

inti,j,aD[N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10);

printf("\nTheoriginalarray:\n");

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

(

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

printf("%2dM,a[i][j]);

printf("\n");

)

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

(

forO=0;j<i;j++)

(

a[i][j]=a[i]O]+aU][i];

aO]U]=0;

)

}

printf("\nTheresultis:\n");

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

forG=0;j<N;j++)

printf("%2d",a[i]D]);

printf("\n");

)

)

第8章

一、選擇題

1.D2.A3.D4.B5.D6.C7.A8.D9.A10.C11.B12.D13.D14.B15D

二、填空

1.函數(shù)2.main函數(shù)3.函數(shù)首部、函數(shù)體4.形式參數(shù)、實(shí)際參數(shù)、實(shí)參、形參

5.常量、變量、表達(dá)式6.函數(shù)定義時(shí)函數(shù)值、返回值

7.max(max(a,b),c))^(x>y?x:y)

8.

******

ITIIIIIITTIT

iiitii11ri11

******

i?ii11iiTi11

TTTTTTTTTTTT

******

******

aititiiiiii

TTJTTTJTTTTT

******

9.str[]=abdef

10.Iow<=high(high+low)/2

三、改錯(cuò)題

1.第?處:void改為int

第二處:i〈=n&&(n%i==0)改為i<=n&&(n%i!=0)或i<n&&(n%i!=0)

第三處:n!=i改為n==i

2.第一處:刪除;

第二處:for(j=1;j<=50;i++)改為for(j=1;j<=50;j++)

第三處:returni

3.第一處:doublefun(doubleb,x0)改為doublefun(doubleb,doublexO)

第二處:if(abs(x1?x0)>=1e-6)改為if(fabs(x1-x0)>=1e-6)

四、編程題

1.

include<stdio.h>

longact(longn)

(

if(n==1||n==0)return1;

else

(

returnn*act(n-1);

)

)

main()

(

intn=3;

printfC'n!=%ld",act(n));

)

2.

/include<stdio.h>

voidmmax(floata[],intn);

main()

(

floata[6];

inti;

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

scanf("%f',&a[i]);

a[0]=1;

mmax(a,5);

printf("%f%d\n",a[(int)a[0]],(int)a[0]);

)

voidmmax(floata[],intn)

(

if(n<=0)

return;

else

if(a[n]>a[(int)a[O]])

a[0]=n;

mmax(a,n-1);

)

3.

include<stdio.h>

#include<string.h>

intstart;

intfun(charstrfl);

main()

chara[40];

inti,num;

gets(a);

num=fun(a);

if(num==-1)

printf("inputstringerrorornohave'A'\n");

else

(

printf("%d'n",num);

for(i=start;i<start+num;i++)

printf(R%c",a[i]);

printf("\n");

)

)

intfun(charstr[])

(

intcount=0,i=0,len,flag=0;

len=strlen(str);

while((!flag)&&i<len)

(

if(str[i]=='A')flag=1;

i++;

)

if(flag==O)return-1;

start=i;

while(flag&&i<len)

(

if(str[i++]=='A')flag=0;

elsecount++;

)

if(flag==1)return-1;

returncount;

)

4.

my_strcpy(chardst[],charsrc[])

(

inti=0;

while(src[i]!='\0')

{dst[i]=src[i];

i++;

)

dst[i]=>\0';

)

intmain()

chara[12];charb[12];

gets(b);

my_strcpy(a,b);

puts(a);

)

5.

/include<stdio.h>

#include〈string.h>

voidfun(charstrOJnta。)//不使用數(shù)組時(shí),可使用全局變量保存統(tǒng)計(jì)結(jié)果

(

inti=0;

a[0]=a[1]=a[2]=a[3]=0;

while(str[i]!='\O')

(

if(str[i]>='A'&&str[i]<='Z*||str[i]>="a'&&str(i]<='z')

a[0]++;

elseif(str[i]>='O'&&str[i]<='9')

a[1]++;

elseif(str[i]=='')

a[2]++;

else

a[3]++;

i++;

)

)

intmain()

(

chars[80];

inta[4];

gets(s);

fun(s,a);

printf("letters:%d\tdigits:%d\tspaces:%d\totherthecharacter:%d\nM,a[0],a[1],a[2],a[3]i;

)

第9章

一、選擇題:

1.D2.A3.B4.A5.D

二、編程題

1.

習(xí)題9_2_1

#defineISALPHA(a)(((a)>='A,&&(a)<='Z')||((a)>='a,&&(a)<=,z,))

main()

{charc;

scanf("%c",&c);

printf("%d\n”,ISALPHA(c));

)

2.

習(xí)題9.2.2

#defineSWAP(t,x,y){tw;w=x;x=y;y=w;}

main()

{doublea=99.99,b=11.11;

SWAP(double,a,b);

printf("%f,%f\n",a,b);

)

3.

習(xí)題9.2.3

include"stdio.h"

#defineMAX80

#defineCHANGE1

main()

{charstr[MAX];

inti;

printf("lnputtext:\n");

gets(str);

#if(CHANGE)

{for(i=0;i<MAX;i++)

{if(str[i]!='\O')

if(str[i]>='a'&&str[i]<'z'||str[i]>=,A,&&str[i]<'Z,)

str[i]+=1;

elseif(str[i]=='z'||str[i]=='Z')

str[i]-=25;

)

)

#endif

printf("output:\n%s',,str);

)

4.

習(xí)題9.2.4

#defineLEAP_YEAR(y)(y%4==0)&&(y%100!=0)||(y%400==0)

main()

{intyear;

printf("lnputyear:");

scanf("%d",&year);

if(LEAP_YEAR(year))

printf("%disaleapyear.\n",year);

else

printf("%disnotaleapyear.\n",year);

)

5.

x9_2_5.h如下:

#ifndef_X9_2_5_H

#define_X9_2_5_H

#defineAVER(a,b,c)(a<b?c)/3.0

#endif

x9_2_5.c如下:

include"x9-2-5.hH

main()

{inta,b,c;

printf("lnputthreeintegersa,b,c:");

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

printf("Averageis%f.\n",AVER(a,b,c));

)

第10章

一、選擇題

二、

1.A2,D3.C4.D5.B6.B7.C8.D9.D10.C11.B12.B

二、填空題

1.指針或者地址2.110

3.Cchar*p;匚p=&ch;Escanf("%c",p);□*p='a,;匚printf("%c"Jp);

4.105.0.76.ab7.abcdcd8.7u1

9.void(*p)(int*jnt*);10.r+b[k]11.'\0'、n++;12.aegi

三、改錯(cuò)題

1.第一處改正:*sub=x-y

第二處改正:scanf(,'%f%f',&x,&y);

第三處改正:calc(x,y,&add,&sub);

2.第一處:charswap(char*pl,char*p2)改為voidswap(char*pl,char*p2)

第二處:strcpy(p,pl)改為strcpy(p,p2)

3.第一處:pl=pl+m改為p1=pl+m-l

第二處:*pl=*p2改為*p2=*pl

第三處:*p2="\0"改為*p2='\0'

4.第一處:char*fun(char*str.chart)改為char*fun(char*str,char*t)

第二處:s=NuLL改為s=NULL;

第三處:if(r==p)改為if(*r==*p)

5.第一處:voidfun(int*b[N],intvoidfun(int(*b)[N],intn)

第二處:b(j][k]=k*j改為b[j][k]=(k+l)"j+l)

四、編程題

1.

習(xí)題10.4.1

voidmove(intarray[20],intn,intm);

main()

{intnumber[20],n,m,i;

printf(MHowmanynumbers?,1);/*共有多少個(gè)數(shù)7

scanf("%d",&n);

printf(Mlnput%dnumbers:\nM,n);/*輸入n個(gè)數(shù)7

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

scanf("%d",&number[i]);

printf("Howmanyplaceyouwanttomove?");/*后移多少個(gè)位置7

scanf(H%d",&m);

move(number,n,m);/*調(diào)用move函數(shù)*/

printf("Now,theyare:\n");

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

printf("%d",number[i]);

)

voidmove(intarray[20],intn,intm)/*循環(huán)后移函數(shù)*/

{int*p,array_end;

array_end=*(array+n-1);

for(p=array+n-1;p>array;p-)

*P=*(P-1);

*array=array_end;

m-;

if(m>0)move(array,n,m);/*遞歸調(diào)用,當(dāng)循環(huán)次數(shù)m減至0時(shí),停止調(diào)用*/

)

2.

習(xí)題10.4.2

#include<stdio.h>

#include<string.h>

#defineTOTAL6

intmseek(char*str[],charn)

{inti;

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

{if(strcmp(str[i],xstr)==O)

return1;

)

return0;

)

main()

{char*name[TOTAL]={"Lining","LinsharT,"Tianyuarr,"Zhangqiang","Haipo","Fangbing"};

charxname[20];

printf("enteraname:");

gets(xname);

if(mseek(name,xname,TOTAL))

printf("Found!\n");

else

printf("Notfound!\n");

)

3.

習(xí)題10.4.3

include<stdio.h>

include<string.h>

voidfun(char*str,intnum[4])

{inti;

for(i=0;i<4;i++)num[i]=0;

while(*str!='\0')

{if(*str>='a'&&*str<='z"||*str>='A'&&*str<='Z')

num[0]++;

elseif(*str=='*)

num[1]++;

elseif(*str>='0'&&*str<='9')

num[2]++;

else

num[3]++;

str++;

)

)

#defineN80

main()

{intstring[N];

intn[4],i;

gets(string);

fun(string,n);

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

printf("%d\t",n[i]);

)

4.

習(xí)題10.4.4

I*調(diào)試時(shí),可這樣輸入數(shù)據(jù):*/

/*1112131415

2122232425

3132333435

4142434445

5152535455*/

include<stdio.h>

main()

{inta[5][5],*p,i,j;

voidchange(int*p);

printf("lnputmatrix:\n");

for(i=0;i<5;i??)/*輸入矩陣*/

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

scanf("%d",&a[i]O]);

P=&a[0][0];〃使p指向0行0列元素*/

change(p);〃調(diào)用函數(shù),實(shí)現(xiàn)交換*/

printf("Now,matrix:\nu);

for(i=0;i<5;i++)/*輸出已交換的矩陣*/

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

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

printf("\nH);

)

)

voidchange(int*p)/*交換函數(shù)7

{inti.j.ternp;

int*pmax,*pmin;

pmax=p;

pmin=p;

for(i=0;i<5;i++)〃找最大值和最小值的地址,并賦給pmax.pmin*/

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

{if(*pmax<*(p+5*i+j))pmax=p+5*i+j;

if(*pmin>*(p+5*i+j))pmin=p+5*i+j;

)

temp=*(p+12);〃將最大值換給中心元素*/

*(p+12)=*pmax;

*pmax=temp;

temp=*p;/*將最小值換給左上角元素*/

"p="pmm;

*pmin=temp;

pmin=p+1;

for(i=0;i<5;i++)/*找第二最小值的地址賦給pmin7

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

if(((p+5*i+j)!=p)&&(*pmin>*(p+5*i+j)))pmin=p+5*i+j;

temp=*pmin;/*將第二最小值換給右上角元素7

*pmin=*(p+4);

*(p+4)=temp;

pmin=p+1;

for(i=0;i<5;i++)/*找第三最小值的地址賦給pmin*/

forO=0;j<5;j++)

if(((p+5*i+j)!=(p+4))&&((p+5*i+j)!=p)&&(*pmin>*(p+5*i+j)))

pmin=p+5*i+j;〃將第三最小值換給左下角元素*/

temp=*pmin;

*pmin=*(p+20);

*(p+20)=temp;

pmin=p?1;

for(i=0;i<5;i++)/*找第四最小值的地址賦給pmin*/

forG=0;j<5;j++)

if(((p+5*i+j)!=p)&&((p+5*i+j)!=(p+4))&&((p+5*i+j)!=(p+20))&&(*pmin>*(p+5*i+j))i

pmin=p+5*i+j;

temp=*pmin;/*將第四最小值換給右下角元素7

*pmin=*(p+24);

*(p+24)=temp;

)

5.

習(xí)題10.4.5

〃可以專門編寫一個(gè)函數(shù)求各學(xué)生的平均分,存到aver[4]數(shù)組*/

#include<stdio.h>

voidavcourl(floatscore[][5]);

voidfali2(intnum[4],floatscore[4][5]);

voidgood(intnum[4],floatscore[4][5]);

main()

(

int數(shù)組num代表學(xué)號(hào)

floatscore[4][5];

printf("lnputNO.andscores:\n");

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

{printfCNO.*1);

scanf("%d",&num[i]);

printf("scores:");

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

scanf("%r,&score[i][j]);

)

printf("\n\n");

avcourl(score);/*求出第一門課的平均成績*/

printf("\n\n");

fali2(num,score);〃找出2門課不及格的學(xué)生*/

printfC'\n\n");

good(num,score);〃找出成績好的學(xué)生*/

)

voidavcourl(floatscore口[5])/*第一門課的平均成績的函數(shù)7

{inti;

floatsum,average1;

sum=0.0;

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

sum=sum+score[0][i];/*累計(jì)每個(gè)學(xué)生的得分*/

average1=sum/4;〃計(jì)算平均成績*/

printf("course1averages:%6.2f.\nH,average1);

)

voidfali2(intnum[4],floatscore[4][5])

/*找兩門以上課程不及格的學(xué)生的函數(shù)*/

{inti,j,k,label;

floatsum=0;

printf("========Studentwhoisfail============\n");

printf("NO.");

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

printf(,'%1Od",i+1);

printf("average\n");

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

{label=0;

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

if((score[i][j])<60.0)label++;

if(label>=2)

{printf(',%5d",num[i]);

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

{printf("%10.2r,score[i][k]);

sum+=score[i][k];

)

printf("%10.2f\n',sum/5);

)

}

}

voidgood(intnum[4],floatscore[4][5])

/*找成績優(yōu)秀的學(xué)生(各門85分以上或平均90分以上)的函數(shù)7

{inti,j,k,n;

floatsum=0,aver[4];

printf("========Studentwhosescoreisgood========\n");

printf("NO.");

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

printf("%10d",i+1);

printf("average\n");

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

{n=0;

sum=0;

forO=0;j<5;j++)

(

if((score[i][j])>85.0)n++;

sum+=score[i][j];

}

aver[i]=sum/5;

if((n==5)||(aver[i]>=90))

{printf("%5d",num[i]);

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

printf("%10.2f,,score[i][k]);

printf("%10.2f\n;aver[i]);

)

)

)

6.

習(xí)題10.4.6

#include<math.h>

doublesigma(double(*fn)(double),doubleI,doubleu)

{doublesum=0,d;

for(d=l;d<u;d+=0.1)

sum+=fn(d);

returnsum;

)

voidmain()

{doublesum;

sum=sigma(sin,0.1,1.0);

printf("sumofsinfrom0.1to1.0is:%f\n",sum);

sum=sigma(cos,0.5,3.0);

printf("sumofcosfrom0.5to3.0is:%f\n",sum);

)

7.

習(xí)題10.4.7

main()

{inti;

char*month_name(intn);

printf(MinputMonthNo.:\n");

scanf("%d",&i);

printf("MonthNo.:%2d—>%s\n",i,month_name(i));/*調(diào)用指針函數(shù)month_name()*/

)

char*month_name(intn)

〃定義一個(gè)指針函數(shù)month_name(),返回一個(gè)指向字符串的指針*/

{staticchar*name[]={,'lllegalMonth",

?'January","February1',"March","April",

"May",Pune","July","August';

"September","October","November","December"};

return((n<1||n>12)?name[0]:name[n]);

)

8.

習(xí)題10.4.8

include<stdio.h>

include<string.h>

#defineN10

main()

{voidsort(charAp[]);

inti;

char*p[N],str[N][20];

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

p[i]=str[i];/"將第i個(gè)字符串的首地址賦予指針數(shù)組p的第i個(gè)元素*/

printf("lnputstrings:\n");

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

scanf("%s",p[i]);

sort(p);

printf("Now,thesequenceis:\n");

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

printf("%s\n",p[i]);

)

voidsort(char*p[])

{inti,j;

char*temp;

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

for(j=0;j<N-1-i;j++)

if(strcmp(*(p+j),*(p+j+1))>0)

{temp=*(p+j);

*(P+j)=*(P+j+1);

*(p+j+1)=temp;

)

)

9.

習(xí)題10.4.9

include<stdio.h>

#defineLINEMAX20/*定義字符串的最大長度*/

main()

{voidsort(char**p);

inti;

char**p,*pstr[5],str[5][LINEMAX];

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

pstr[i]=str[i];/*將第i個(gè)字符串的首地址賦予指針數(shù)組pstr的第i個(gè)元素*/

printf("lnput5strings:\n");

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

scanf("%su,pstr[i]);

p=pstr;

sort(p);

printf("stringssorted:\n");

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

printf("%s\nH,pstr[i]);

)

voidsort(char**p)〃冒泡法對(duì)5個(gè)字符串排序的函數(shù)*/

{inti,j;

char*temp;

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

{forO=i+1;j<5;j++)

{if(strcmp(*(p+i),*(p+j))>0)/*比較后交換字符串地址7

{temp=*(p+i);

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

*(p+j)=temp;

)

)

)

)

10.

voidStrOR(charxx[][80],intmaxline)

{inti,righto,j,s,k;

chartemp[80];

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

for(j=strlen(xx[i])-1;j>=0;j-)

{k=0;memset(temp,0,80);

if(xx[i]0]=='o')

{righto=j;

for(s=righto+1;s<strlen(xx[i]);s++)

temp[k++]=xx[i][s];

for(s=0;s<righto;s++)

if(xx[i][s]!=*o')temp[k++]=xx[i][s];

strcpy(xx[i],temp);

}elsecontinue;

)

)

第11章

一、選擇

1.D2.C3.C4.D5.A6.C7.A8.B

二、填空

1.structstudent

strcmp(str,stu[i].name)==O

break;

2.p=person

p-person<3

old=p->age;

q->name,q->age

3.p!=NULL

C++

p->next

4.&per[i].body.eye

&per[i].body.f.height

&per[i].body.f.weight

溫馨提示

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

評(píng)論

0/150

提交評(píng)論