C語(yǔ)言程序設(shè)計(jì)課后習(xí)題答案(主編:胡宏智)_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)課后習(xí)題答案(主編:胡宏智)_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)課后習(xí)題答案(主編:胡宏智)_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)課后習(xí)題答案(主編:胡宏智)_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)課后習(xí)題答案(主編:胡宏智)_第5頁(yè)
已閱讀5頁(yè),還剩31頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

習(xí)題參考答案

習(xí)題一參考答案:

【習(xí)題1-1]ABCD

【習(xí)題1-2]C

【習(xí)題1-3]B

【習(xí)題1-4]B

【習(xí)題1-5]略

習(xí)題二參考答案:

一、單項(xiàng)選擇題

【習(xí)題2-1】?【習(xí)題2-6】:CCDBAA

二、簡(jiǎn)答題

【習(xí)題2-7】:

C語(yǔ)言提供了豐富的數(shù)據(jù)類型,可以根據(jù)這些數(shù)據(jù)類型構(gòu)造出不同的數(shù)據(jù)結(jié)

構(gòu)。C中的數(shù)據(jù)類型包括基本類型、構(gòu)造類型、指針類型、空類型等。其中基本

類型包括整型、字符型、實(shí)型(浮點(diǎn)型)等。

【習(xí)題2-8】:

C中整常數(shù)的表示

整型常量即整常數(shù)。C整常數(shù)可用以下三種形式表示:

①十進(jìn)制整數(shù);

②八進(jìn)制整數(shù)。以數(shù)字0開(kāi)頭的數(shù)是八進(jìn)制數(shù),如0123表示八進(jìn)制數(shù)123;

③十六進(jìn)制整數(shù)。以O(shè)x開(kāi)頭的數(shù)是十六進(jìn)制數(shù)。如0x123,代表十六進(jìn)制

數(shù)123o

【習(xí)題2-9】:

C規(guī)定對(duì)所有的變量要“先定義,后使用”,這樣規(guī)定有以下好處:

(1)便于糾錯(cuò);

(2)便于編譯系統(tǒng)為變量分配存儲(chǔ)空間;

(3)運(yùn)算合法性檢查。

【習(xí)題2-10]:

C語(yǔ)句可以分為以下五類:

(1).控制語(yǔ)句。完成一定的控制功能;

(2).函數(shù)調(diào)用語(yǔ)句;

(3)表達(dá)式語(yǔ)句;

(4)空語(yǔ)句;

(5)可以用{}把一些語(yǔ)句括起來(lái)成為復(fù)合語(yǔ)句。

C只有9種控制語(yǔ)句,它們是:

(1)if()?else?(條件語(yǔ)句)

(2)for()?(轉(zhuǎn)向語(yǔ)句)

(3)while()~(循環(huán)語(yǔ)句)

(4)do?while()(循環(huán)語(yǔ)句)

(5)continue(結(jié)束本次循環(huán)語(yǔ)句)

(6)break(中止執(zhí)行switch或循環(huán)語(yǔ)句)

(7)switch(多分支選擇語(yǔ)句)

(8)goto(轉(zhuǎn)向語(yǔ)句)

(9)return(從函數(shù)返回語(yǔ)句)

【習(xí)題2-11]:

表達(dá)式不是獨(dú)立存在的,它存在于其它表達(dá)式、語(yǔ)句、函數(shù)參數(shù)里,表達(dá)式

后面加上一個(gè)分號(hào),就變成表達(dá)式語(yǔ)句,如

i=i+l(是表達(dá)式,不是語(yǔ)句)

i=i+l;(是語(yǔ)句)

表達(dá)式能構(gòu)成語(yǔ)句是C語(yǔ)言的一個(gè)特色。其實(shí)“函數(shù)調(diào)用語(yǔ)句”也是屬于表達(dá)

式語(yǔ)句,因?yàn)楹瘮?shù)調(diào)用也屬于表達(dá)式的一種,只是為了便于理解和使用,我們把

“函數(shù)調(diào)用語(yǔ)句”和“表達(dá)式語(yǔ)句”分開(kāi)來(lái)說(shuō)明。由于C程序中大多數(shù)語(yǔ)句是

表達(dá)式語(yǔ)句(包括函數(shù)調(diào)用語(yǔ)句),所以有人把C語(yǔ)言稱作“表達(dá)式語(yǔ)言”。

【習(xí)題2-12]:

字符常量就是一個(gè)字符,用單引號(hào)括起來(lái),占一個(gè)字節(jié);而字符串常量是由

若干個(gè)字符組合而成,用雙引號(hào)括起來(lái),存貯時(shí)自動(dòng)在后面加“\0”,即使同樣

是一個(gè)字符,字符串常量后面還要加一個(gè)“\0”。

【習(xí)題2-13]:

(l)12,a;(2)40,20;(3)l13,4b;(4)176627,fd97;(5)177621,ff91;(6)4663,9b3;(7)l10022,90

12;(8)51013,520bo

三、閱讀程序?qū)懡Y(jié)果或填空

【習(xí)題2-14]:

aabbccabc

AN

【習(xí)題2-15]:261

【習(xí)題2-16]:10

【習(xí)題2-17]:

57

57

67.856400,-789.124023

67.856400,-789.124023

67.86,-789.12,67.8564,-789.1240,67.856400,-789.124023

6.78564e+01,-7.9e+02

A,65,101,41

1234567,4553207,d687

65535,177777,

COMPUTER,COM

【習(xí)題2-18]:9,11,9,10

【習(xí)題2-19】:2.5

【習(xí)題2-20】:3.5

【習(xí)題2-21】:(1)14,(2)10,(3)60,(4)0,(5)0,(6)0

【習(xí)題2-22]:x>-5&&x<5

x>5||x<-5

四、編寫(xiě)程序題

【習(xí)題2-23]

main()

(

floatr,h,Cl,Sa,Sb,Va,Vb;

scanf("%f,%f,,&r,&h);

Cl=2*3.14*r;

Sa=3.14*r*r;

Sb=4*Sa;

Va=4*3.14*r*r*r/3;

Vb=Sa*h;

printf("Cl=%.2f\n",Cl);

printf("Sa=%.2f\nSb=%.2f\nVa=%.2f\nVb=%.2f\n",Sa,Sb,Va,Vb);

}

【習(xí)題2-24]

main()

{floatF,c;

printf("請(qǐng)輸入一個(gè)華氏溫度:\n");

scanf("%f',&F);

c=5.0/9.0*(F-32);/*注意5和9要實(shí)型表示,否則5/9的值為0*/

printf("攝氏度為:%5.2f\n",c);

)

【習(xí)題2-25]

#includenstdio.hH

main()

{charcl,c2;

printf("請(qǐng)輸入兩個(gè)字符cl,c2:\n");

cl=getchar();

c2=getchar();

printf("用putchar語(yǔ)句輸出結(jié)果為:\nn);

putchar(cl);

putchar(,,);

putchar(c2);

printf("用printf語(yǔ)句輸出結(jié)果為:\n");

printf("\n%c%c\n",cl,c2);

(1)都可以;

(2)用printf。函數(shù);

(3)不是在任何情況下,因?yàn)閏har只有一個(gè)字節(jié),而int有2個(gè)字節(jié)。能表示

的范圍不一樣。

【習(xí)題2-26]:

#include<stdio.h>

#definePI3.14159

main()

floatr,h,cl,cs,cvz;

printf(nInputr,h:n);

scanf(n%f,%f;&r,&h);

cl=2*PI*r;

cs=PI*r*r;

cvz=cs*h;

printffThelengthofthecircumference:%6.2f\nn,cl);

printf(Hareaofthecircle:%6.2f\nn,cs);

printfi(,!volumeofthecolumn:%6.2f\nH,cvz);

}

【習(xí)題2.27】:

#include<stdio.h>

main()

(

charch;

printf(n\nlnputaletter:0);

scanf(n%cn,&ch);

printf(n\nASCntheletter:%dH,ch);

)

習(xí)題三參考答案:

一、單項(xiàng)選擇題

【習(xí)題3-1】?【習(xí)題3-6】:DCADCBo

【習(xí)題3-7】:

(1)0,(2)1,(3)1,(4)0,(5)1o

二、簡(jiǎn)單題

【習(xí)題3-8】:

程序解決問(wèn)題是按指定的次序執(zhí)行一系列操作的結(jié)果,按照次序執(zhí)行操作的

過(guò)程描述稱為算法。

算法的特性:(1)有窮性;(2)確定性;(3)有零個(gè)或多個(gè)輸入;(4)有一個(gè)或多

個(gè)輸出;(5)有效性。

舉例:菜譜操作步驟、樂(lè)譜、施工圖紙等等。

【習(xí)題3-9】:

(1)自然語(yǔ)言,(2)偽代碼,(3)流程圖,(4)計(jì)算機(jī)語(yǔ)言。

自然語(yǔ)言通俗易懂,但有歧義性;偽代碼方便實(shí)用,但沒(méi)有流程圖明晰,容

易犯邏輯錯(cuò)誤;流程圖明晰但繪制和修改時(shí)比較繁瑣;計(jì)算機(jī)語(yǔ)言表示算法嚴(yán)謹(jǐn),

但無(wú)法做到算法設(shè)計(jì)的第一步就使用計(jì)算機(jī)語(yǔ)言,讀程序比看流程圖要費(fèi)神很

多。

【習(xí)題3-10]:

順序結(jié)構(gòu),由順序執(zhí)行的一組語(yǔ)句或者結(jié)構(gòu)組成。(2)分支結(jié)構(gòu),根據(jù)判斷

條件,做出取舍,要么執(zhí)行A分支要么執(zhí)行B分支,必須執(zhí)行其中的一個(gè),

不可全執(zhí)行也不可全不執(zhí)行。(3)循環(huán)結(jié)構(gòu),由需要反復(fù)執(zhí)行的一段代碼或

者結(jié)構(gòu)組成。任何算法功能都可以通過(guò)以上三種基本程序結(jié)構(gòu)的組合來(lái)實(shí)

現(xiàn)。

【習(xí)題3-11]:非0為真,0為假。

三、用傳統(tǒng)流程圖表示求解以下問(wèn)題的算法。

【習(xí)題3-12]?【習(xí)題3-19]:如下圖3-12~3-19所示。

3-123-133-14

其中的符號(hào)”表示“倒給”,例如“A-C”“將A瓶中的液體倒給C

瓶”

A

2->i

i+1—*i|n—?i|

/打印n/

n+1—>n

(結(jié)束)

3-153-17

3-183-19

四、編寫(xiě)程序題

【習(xí)題3-20]:

#include<stdio.h>

main()

{intx,y;

printf("輸入x:n);

scanf("%dn,&x);

if(x<1)/*x<l*/

{y=x;

printf(Hx=%3d,y=x=%d\nn,x,y);

)

elseif(x<10)/*l<x-10*/

{y=2*x-l;

printf(Mx=%3d,y=2*x-l=%d\n”,x,y);

)

else/*x>10*/

{y=3*x-l1;

printf(nx=%3d,y=3*x-ll=%d\nn,x,y);

)

}

【習(xí)題3-21]:

#include<stdio.h>

main()

{longintnum;

intindiv,ten,hundred,thousand,ten_thousand,place;

/*分別代表個(gè)位、十位、百位、千位、萬(wàn)位和位數(shù)*/

printf(”請(qǐng)輸入一個(gè)整數(shù)(0-99999):)

scanf(n%ldH,&num);

if(num>9999)place=5;

elseif(num>999)place=4;

elseif(num>99)place=3;

elseif(num>9)place=2;

elseplace=l;

printf(Hplace=%d\nn,place);

ten_thousand=num/l0000;

thousand=num/l000%10;

hundred=num/l00%10;

ten=num%100/10;

indiv=num%10;

switch(place)

{case5:printf(n%d,%d,%d,%d,%dn,ten_thousand,thousand,hundred,ten,indiv);

printf("\n反序數(shù)字為;”);

printfifH%d%d%d%d%d\nn,indiv,ten,hundred,thousand,tenthousand);

break;

case4:printf(n%d,%d,%d,%dn,thousand,hundred,ten,indiv);

printf(”\n反序數(shù)字為:”);

printf(,,%d%d%d%d\nH,indiv,ten,hundred,thousand);

break;

case3:printf(n%d,%d,%dM,hundred,ten,indiv);

printf("\n反序數(shù)字為:");

printf(^,%d%d%d\n^^,indiv,ten,hundred);

break;

case2:printf(n%d,%dH,ten,indiv);

printf("\n反序數(shù)字為:");

printf("%d%d\n",indiv,ten);

break;

case1:printf(,,%dn,indiv);

printf("\n反序數(shù)字為:");

printf(H%d\ii,\indiv);

break;

}

【習(xí)題3-22]:

(1)用if語(yǔ)句編程序。

#include<stdio.h>

main()

{longi;

floatbonus,bon1,bon2,bon4,bon6,bon10;

bonl=100000*0.1;/*利潤(rùn)為10萬(wàn)元時(shí)的獎(jiǎng)金*/

bon2=bon1+100000*0.075;/*利潤(rùn)為20萬(wàn)元時(shí)的獎(jiǎng)金*/

bon4=bon2+200000*0.05;/*利潤(rùn)為40萬(wàn)元時(shí)的獎(jiǎng)金*/

bon6=bon4+200000*0.03;/*利潤(rùn)為60萬(wàn)元時(shí)的獎(jiǎng)金*/

bon10=bon6+400000*0.015;/*利潤(rùn)為100萬(wàn)元時(shí)的獎(jiǎng)金*/

printf("請(qǐng)輸入利潤(rùn)i:");

scanf("%ld",&i);

if(i<=100000)

bonus=i*0.1;/*利潤(rùn)在10萬(wàn)元以內(nèi)按0.1提成獎(jiǎng)金*/

elseif(i<=200000)

bonus=bon1+(i-100000)*0.075;/*利潤(rùn)在10萬(wàn)至20萬(wàn)元時(shí)的獎(jiǎng)金*/

elseif(i<=400000)

bonus=bon2+(i-200000)*0.05;/*利潤(rùn)在20萬(wàn)至40萬(wàn)元時(shí)的獎(jiǎng)金*/

elseif(i<=600000)

bonus=bon4+(i-400000)*0.03;/*利潤(rùn)在40萬(wàn)至60萬(wàn)元時(shí)的獎(jiǎng)金*/

elseif(i<=1000000)

bonus=bon6+(i-600000)*0.015;/*利潤(rùn)在60萬(wàn)至100萬(wàn)元時(shí)的獎(jiǎng)金*/

else

bonus=bon10+(i-1000000)*0.01;/*利潤(rùn)在100萬(wàn)元以上時(shí)的獎(jiǎng)金*/

printf("獎(jiǎng)金是%10.2f\n",bonus);

此題的關(guān)鍵在于正確寫(xiě)出每一區(qū)間的獎(jiǎng)金計(jì)算公式。例如利潤(rùn)在10萬(wàn)元至

20萬(wàn)時(shí),獎(jiǎng)金應(yīng)由兩部分組成:①利潤(rùn)為10萬(wàn)元時(shí)應(yīng)得的獎(jiǎng)金。即100000*0.1;

②10萬(wàn)元以上部分應(yīng)得的獎(jiǎng)金。即(num-100000)*0.075。同理,20萬(wàn)?40萬(wàn)這

個(gè)區(qū)間的獎(jiǎng)金也應(yīng)由兩部分組成:JD利潤(rùn)為20萬(wàn)元時(shí)應(yīng)得的獎(jiǎng)金,即

100000*0.1*10萬(wàn)*0.075;②20萬(wàn)元以上部分應(yīng)得的獎(jiǎng)金,即(num-200000)*0.05。

程序中先把10萬(wàn)、20萬(wàn)、40萬(wàn)、60萬(wàn)、100萬(wàn)各關(guān)鍵點(diǎn)的獎(jiǎng)金計(jì)算出來(lái),即

bonl>bon2>bon4、bon6、honlO;然后再加上各區(qū)間附加部分的獎(jiǎng)金。

(2)用switch語(yǔ)句編程序。

輸入利潤(rùn)i,確定相應(yīng)的提成等級(jí)branch

#include<stdio.h>

main()

{longi;

floatbonus,bonl,bon2,bon4,bon6,bon10;

intc;

bonl=100000*0.1;

bon2=bon1+100000*0.075;

bon4=bon2+200000*0.05;

bon6=bon4+200000*0.03;

bon10=bon6+400000*0.015;

printf("請(qǐng)輸入利潤(rùn)i:”);

scanf(n%ldH,&i);

c=i/100000;

if(c>10)c=10;

switch(c)

{case0:bonus=l*0.1;break;

case1:bonus=bon1+(i-100000)*0.075;break;

case2:

case3:bonus=bon2+(i-200000)*0.05;break;

case4:

case5:bonus=bon4+(i-400000)*0.03;break;

case6:

case7:

case8:

case9:bonus=bon6+(i-600000)*0.015;break;

case10:bonus=bon10+(i-1000000)*0.01;

)

printf("獎(jiǎng)金是%10.2f,bonus);

)

【習(xí)題3-23]:

#include<stdio.h>

main()

{intt,a,b,c,d;

printf-請(qǐng)輸入4個(gè)整數(shù):”);

scanf(n%d,%d,%d,%dn,&a,&b,&c,&d);

printf(H\na=%d,b=%d,c=%d,d=%d\n,,,a,b,c,d);

ififa>b){t=a;a=b;b=t;}

if(a>c){t=a;a=c;c=t;}

ififa>d){t=a;a=d;d=t;}

ififb>c){t=a;b=c;c=t;}

if(b>d){t=b;b=d;d=t;}

if(c>d){t=c;c=d;d=t;}

printf("排序結(jié)果如下:\nH);

printf(H%d,%d,%d,%d\nn,a,b,c,d);

)

【習(xí)題3-24]:

#include<stdio.h>

main()

{intp,r,n,m,temp;

printf("請(qǐng)輸入兩個(gè)正整數(shù)n,m:");

scanf(,!%d,%dn,&n,&m);

if(n<m)

{temp=n;n=m;m=temp;}/*把大數(shù)放在n中,小數(shù)放在m中*/

p=n*m;/*先將n和m的乘積保存在p中,以便求最小公倍數(shù)時(shí)用*/

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

{r=n%m;

n=m;

m=r;

)

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

printf(”它們的最小公倍數(shù)為:%d\nu,p/n);/*P是原來(lái)兩個(gè)整數(shù)的乘積*/

}

【習(xí)題3-25]:

#include<stdio.h>

main()

{charc;

intIetter=0,space=0,digit=0,other=0;

printff請(qǐng)輸入一行字符:\n)

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

{if(c>-a,&&c<-z,||c>-A^&^-z*)letter-H-;

else*)space";

elseif(c>=U&&cv=9)digit";

elseother-H-;

)

printf("字母數(shù)=%d,空格數(shù)=%d,數(shù)字?jǐn)?shù)=%d,其他字符數(shù)'

=%d\nn,letter,space,digit,other);

)

【習(xí)題3-26]:

#include<stdio.h>

mainO

(

inta,b,x,y;

scanf(〃%d,%d〃,&a,&b);

x=a*a+b*b;

if(x>100){y=x/100;printfC%d,z,y);}

elseprintf(〃%d〃,a*a+b*b);

)

【習(xí)題3-27】:

#include<stdio.h>

mainO

(

intx;

scanf(〃%d,〃,&x);

if(x%5==0&&x%7==0)printf(〃Yes〃);

elseprintf(〃No.〃);

)

【習(xí)題3-28]:

#include<stdio.h>

mainO

(

intx;

floaty;

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

if(x<0)y=0;

elseif(x>0&&x<=10)y=x;

elseif(x>10&&x<=20)y=10;

elseif(x>20&&x<40)y=-0.5*x+20;

elsey=-l;

if(y!=-l)printfC%r,y);

elseprintf("Error!\n〃);

)

【習(xí)題3-29]:

#include<stdio.h>

mainO

(

intx;

scanf(〃%d,〃,&x);

if((x%3==0)&&(x%5==0)&&(x%7==0))

printf(z,%dcanbedividedby3,5,7\n〃,x);

elseif((x%3==0)&&(x%5==0))

printf(/z%dcanbedividedby3,5,\n〃,x);

elseif((x%3==0)&&(x%7==0))

printf(z/%dcanbedividedby3,7\n〃,x);

elseif((x%5==0)&&(x%7==0))

printf(z/%dcanbedividedby5,7\n〃,x);

elseif(x%3==0)

printf(zz%dcanbedividedby3\n〃,x);

elseif(x%5==0)

printf(zz%dcanbedividedby5\n〃,x);

elseif(x%7==0)

printf(zz%dcanbedividedby7\n〃,x);

elseprintf(〃%dcannotbedividedby3,5,7\n〃,x);

【習(xí)題3-30】:

#include<stdio.h>

mainO

(

floatx;

inty;

printf(〃\ninputx:〃);

scanf&x);

switch(x<0)

case1:y="l;break;

case0:switch(x==0)

{case1:y=0;break;

defaut:y=l;

)

)

printfC\ny=%d",y);

)

【習(xí)題3-31]:

#include<stdio.h>

mainO

{

intscore,temp,log;chargrade;

log=l;

while(log)

{

printf("enterscore:z,);

scanf(〃%d〃,&score);

if(score>1001|score<0)

printf(z/\nerror,tryagain!\n,z);

elselog=0;

if(score==100)temp=9;

elsetemp=(score-score%10)/IO;

switch(temp)

(

case0:

case1:

case2:

case3:

case4:

case5:grade='E';break;

case6:grade='D';break;

case7:grade='C';break;

case8:grade='B';break;

case9:grade='A';break;

)

printf(z/score=%d,grade=%c\nz,,score,grade);

}

【習(xí)題3?32】:

#include<stdio.h>

main()

(

inta,b;

charsymbol;

printfCpleaseenter:");

scanf(/z%d%c%di〃,&a,&symbol,&b);

printf("Originalvalue:%d%c%di\n,,,a,symbol,b);

if(symbol二二'」)

symbol=,+,;

elsesymbol='-';

z,,,

printf(Newvalue:%d%c%di)a,symbol,b);

)

【習(xí)題3?33]:

#include<stdio.h>

main()

{inta,n,i=l,sn=0,tn=0;

printf(ua,n=:");

scanf(M%d,%dn,&a,&n);

while(i<=n)

{tn=tn+a;/*賦值后的tn為i個(gè)a組成數(shù)的值*/

sn=sn+tn;/*賦值后的sn為多項(xiàng)式前i項(xiàng)之和*/

a=a*10;

++i;

}

printf(Ha+aa+aaa+...=%d\nn,sn);

【習(xí)題3-34]:

#include<stdio.h>

main()

{floats=O,t=l;

intn;

fdr(n=l;n<=20;n++)

{t=t*n;/*求n!*/

s=s+t;/*將各項(xiàng)累加*/

)

printfC'l!+2!+...+20!=%e\n",s);

)

【習(xí)題3-35]:

#include<stdio.h>

main()

{intnl=100,n2=50,n3=10;

floatk;

floatsl=0,s2=0,s3=0;

fbr(k=l;k<=n1;k++)/*計(jì)算1到100的和*/

sl=sl+k;

fbr(k=l;k<=n2;k++)/*計(jì)算1到50各數(shù)的平方和*/

s2=s2+k*k;

fdr(k=1;k<=n3;k++)/*計(jì)算1到10各數(shù)的倒數(shù)和*/

s3=s3+l/k;

printf("總和=%8.2血”上1+s2+s3);

【習(xí)題3-36]:

#include<stdio.h>

main()

{inti,j,k,n;

printf("“水仙花"數(shù)是:");

fdr(n=100;n<1000;n++)

{i=n/100;

j=n/10-i*10;

k=n%10;

if(n==i*i*i+j*j*j+k*k*k)

printf(n%4d,\n);

)

printf(n\nn);

)

【習(xí)題3-37】:

#include<stdio.h>

main()

intday=O,num=2;

floatsum=0.0,ave;

while(num〈二100)

(

sum+=0.8*num;

day++;num*=2;

)

ave=sum/day;

printf(/z\nave=%5.2f〃,ave);

)

【習(xí)題3-38]:

#include<stdio.h>

mainO

(

inti;

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

if(i*i%10==i||i*i%100==i)

printf(〃%3d〃,i);

}

【習(xí)題3?39]參考答案:

#include<stdio.h>

main()

(

inti,x,y;

longlast=l;

printf(z,Inputx,y:〃);

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

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

last=last*x%1000;

printf(Z/The3digits:ld\n,/,last);

)

【習(xí)題3-40]:

方法一:程序如下

SdefineM1000/*定義尋找范圍*/

Sinclude<stdio.h>

main()

{intk1,k2,k3,k4,k5,k6,k7,k8,k9,k10;

inti,a,n,s;

for(a=2;a<=M;a++)/*a是2-1000之間的整數(shù).檢查它是否完數(shù)*/

{n=0;/*n用來(lái)累計(jì)a的因子的個(gè)數(shù)*/

s=a;/*s用來(lái)存放尚未求出的因子之和,開(kāi)始時(shí)等于a*/

fbr(i=l;i<a;i++)/*檢查i是否a的因子*/

if(a%i==0)/*如果i是a的因子*/

{n++;/*n加1,表示新找到一個(gè)因子*/

/*S減去已找到的因子,s的新值是尚未求出的因子之和*/

switch(n)/*將找到的因子賦給kl,...,klO*/

{case1:kl=i;break;/*找出的第1個(gè)因子賦給kl*/

case2:k2=i;break;/*找出的第2個(gè)因子賦給k2*/

case3:k3=i;break;/*找出的第3個(gè)因子賦給k2*/

case4:k4=i;break;/*找出的第4個(gè)因子賦給k4*/

case5:k5=i;break;/*找出的第5個(gè)因子賦給k5*/

case6:k6=i;break;/*找出的第6個(gè)因子賦給k6*/

case7:k7=i;break;/*找出的第7個(gè)因子賦給k7*/

case8:k8=i;break;/*找出的第8個(gè)因子賦給k8*/

case9:k9=i;break;/*找出的第9個(gè)因子賦給k9*/

case10:kl0=i;break;/*找出的第10個(gè)因子賦給klO*/

)

if(s==O)/*s=0表示全部因子都已找到*/

{printf("%dItsfactorsare",a);

if(n>1)printf("%d,%d",k1,k2);/*n>l表示a至少有2個(gè)因子*/

if(n>2)printf(",%d",k3);/*n>2至少有3個(gè)因子,故應(yīng)再輸出1因子*/

if(n>3)printf(",%d",k4);/*以下類似*/

if(n>4)printf(",%d",k5);

if(n>5)printf(",%d",k6);

if(n>6)printf(",%d",k7);

if(n>7)printf(",%d",k8);

if(n>8)printf(",%d",k9);

if(n>9)printf(",%d",kl0);

printf("\n");

方法二:程序如下

#include<stdio.h>

main()

{intm,s,i;

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

{s=0;

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

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

if(s==m)

{printf("%dItsfactorsare",m);

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

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

printf("\b\n");

)

方法三:此題用數(shù)組方法更為簡(jiǎn)單。程序如下

#include<stdio.h>

main()

{intk[100];

inti,a,n,s;

for(a=2;a<1000;a-H-)

{n=0;

s=a;

fbr(i=l;i<a;i++)

if((a%i)=O)

{n++;

s=s-i;

k[n]=i;/*將找到的因子賦給k[l]),...,k[10]*/

)

if(s==O)

{printf(,,%dItsfactorsareH,a);

fdr(i=l;i<n;i4-+)

HH

printf(%d,9k[i]);

printf(!,%d\nn,k[n]);

)

}

)

【習(xí)題3-41]:

ttinclude<stdio.h>

main()

{inti,t,n=20;

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

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

{s=s+a/b;

t=a;

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

b=t;/*將前一項(xiàng)的分子作為下一項(xiàng)的分母*/

)

printf(//sum=%9.6f\n",s);

)

【習(xí)題3-42]:

Sinclude<stdio.h>

mainO

{floatsn=100,hn=sn/2;

intn;

for(n=2;n<=10;n++)

{sn=sn+2*hn;/*第n次落地時(shí)共經(jīng)過(guò)的米數(shù)*/

hn=hn/2;/*第n次反彈的高度*/

printf("第10次落地時(shí)共經(jīng)過(guò)%fm。\n",sn);

printf("第10次反彈%fm。\n",hn);

【習(xí)題3-43]:

#include<stdio.h>

main()

{intday,xl,x2;

day=9;

x2=l;

while(day>0)

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

x2=xl;

day一;

)

printf("total=%d\n”,xl)

f

【習(xí)題3-44】:

Winclude<stdio.h>

main()

{inti,j,k;

for(i=0;i<=3;i++)/*輸出上面4行*號(hào)*/

{for(j=0;j<=2-i;j++)/*輸出*號(hào)前面的空格*/

printf(z/");

for(k=0;k<=2*i;k++)/*輸出*號(hào)*/

printf("*");

printf('\n");/*輸出完i彳丁*號(hào)后換行*/

)

for(i=0;i<=2;i++)/*輸出下面3行*號(hào)*/

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

printf(z/");/*輸出*號(hào)前面的空格*/

for(k=0;k<=4-2*i;k++)/*輸出*號(hào)*/

printf。*");

printf("\n");/*輸出完一行*號(hào)后換行*/

【習(xí)題3-451參考答案:

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

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

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

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

(4)如此繼續(xù)下去,直到前后兩次求出的x值(xn+1和xn)滿足以下關(guān)系:

Ixn+l-xn|<10-5

為了便于程序處理,今只用變量xO和xl,先令x的初值x0=a/2(也可以是

另外的值),求出xl;如果此時(shí)Ixl-xOI>10-5,則使xl—xO,然后用這個(gè)新

的xO求出下一個(gè)xl,如此反復(fù),直到Ixl-xO|<10-5為止。

#include<stdio.h>

#include<math.h>

mainO

{floata,xO,xl;

printf("Enterapositivenumber:");

scanf(緝f”,&a);/*輸入a的值*/

x0=a/2;

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

do

{xO=xl;

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

)

while(fabs(xO-xl)>=le-5);

printf(z,Thesquarerootof%5.2fis%8.5f\nz,,a,xl);

【習(xí)題3-46】:牛頓迭代法又稱牛頓切線法。它采用以下的方法求根:先任意設(shè)

定一個(gè)與真實(shí)的根接近的值xO作為第一次近似根,由xO求出f(xO),過(guò)(xO,f(xO))

點(diǎn)做f(x)的切線,交x軸于xl,把它作為第二次近似根,再由xl求出f(xl),過(guò)

(xl,f(xl))點(diǎn)做f(x)的切線,交x軸于x2,求出f(x2);再作切線……如此繼續(xù)下去,

直到足夠接近真正的根x*為止,,見(jiàn)圖3.1。

從圖3.1可以看出,

f(xO)=f(xO)/(xl-xO)

因此:xl=xO-f(xO)/f,(xO)

這就是牛頓迭代公式??梢岳盟蓌O求出xl,然后再由x2求出x3

設(shè)f(x)=2x-4x+3x-6

可以寫(xiě)成以下形式:f(x)=[(2x-4)x+3]x-6

同樣,f'(x)可寫(xiě)成:f*(x)=6x--8x+3=(6x-8)x+3

用這種方法表示的表達(dá)式,在運(yùn)算時(shí)可節(jié)省時(shí)間。例如求f(x)只需要進(jìn)行3

次乘法和3次加法,而原來(lái)的表達(dá)式要經(jīng)過(guò)多次指數(shù)運(yùn)算、對(duì)數(shù)運(yùn)算和乘法、加

法運(yùn)算,花費(fèi)時(shí)間較多?,F(xiàn)在由于計(jì)算機(jī)的運(yùn)算速度愈來(lái)愈快,這點(diǎn)時(shí)間開(kāi)銷是

微不足道的,這是以前計(jì)算機(jī)的運(yùn)算速度較慢時(shí)所提出的問(wèn)題。由于過(guò)去編寫(xiě)的

程序往往采用這種形式,所以我們?cè)诖艘岔槺憬榻B一下,以便在閱讀別人所寫(xiě)的

程序時(shí)知道其所以然。

#include<stdio.h>

Sinclude<math.h>

main()

{floatx,xO,f,fl;

x=l.5;

do

{xO=x;

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

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

x=xO-f/fl;

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

/?,,

printf(Therootofequationis%5.2f\nJx);

)

為了便于循環(huán)處理,程序中只設(shè)了xO和x,xO代表前一次的近似根,x代

表后一次的近似根。求出一個(gè)x后,把它的值賦給xO,然后用它求下一個(gè)xO由

于第一次執(zhí)行循環(huán)體時(shí),需要對(duì)xO賦值,故在開(kāi)始時(shí)應(yīng)先對(duì)x賦一個(gè)初值(今為

1.5,也可以是接近真實(shí)根的其他值)。

【習(xí)題3-47]:

先分析題目。按題意,畫(huà)出圖3.2的示意圖。

圖中帶“X”符號(hào)的虛線表示不允許的組合。從圖中可以看到:①X既不

與A比賽,又不與C比賽,必然與B比賽;②C既不與X比賽,又不與Z比賽,

必然與y比賽;③A只能與Z比賽,見(jiàn)圖3.3。

以上是經(jīng)過(guò)邏輯推理得到的結(jié)論。用計(jì)算機(jī)程序處理此問(wèn)題時(shí),不可能立即

就得出此結(jié)論,而必須對(duì)所有組合一一檢驗(yàn),看它們是否符合條件。

開(kāi)始設(shè)計(jì)程序時(shí),并不知道A、B、C與X、Y、Z中的哪一個(gè)進(jìn)行比賽,可以

假設(shè):A與i比賽,B與j比賽,C與k比賽;即:

A—i

B-j

C-k

i、j、k分別是X、Y、Z之一,且i、j、k互不相等(一個(gè)隊(duì)員不能與對(duì)方的

兩個(gè)隊(duì)員比賽)。N-S圖見(jiàn)圖3.4。

其中,外循環(huán)使i由X變到Z,中循環(huán)使j由X變到9(但i不應(yīng)與j相等)。

然后,對(duì)每一組i、j的值,找符合條件的k值。k同樣也可能是,X、V、Z之一。

但k也不應(yīng)與i或j相等。在由業(yè)的條件下,把i/X,和印X似及KZ的i、j、k

的值輸出即可。

#include<stdio.h>

main()

{chari,j,k;/*i是a的對(duì)手;j是b的對(duì)手;k是c的對(duì)手*/

for(i='X';i<='Z';i-H-)

fbr(j='X';j<='Z';j++)

if(i!=j)

for(k='X';k<='Z';k++)

if(i!=k&&j!=k)

if(i!='X'&&k!='X'&&k!='Z')

printf("A—%c\tB—%c\tC—%c\n",i,j,k);

說(shuō)明:

(1)整個(gè)執(zhí)行部分只有一個(gè)語(yǔ)句,所以只在語(yǔ)句的最后有一個(gè)分號(hào)。請(qǐng)讀者

弄清楚循環(huán)和選擇結(jié)構(gòu)的嵌套關(guān)系。

(2)分析最下面一個(gè)if語(yǔ)句中的條件:i#'x',k#'x','k'r'z',因?yàn)槲?/p>

們已事先假定A—i,B-j,c—k,由于題目規(guī)定A不與X對(duì)抗,因此i不能等

于'X';同理,C不與X、Z對(duì)抗,因此k不應(yīng)等于'X'和'Z'。

⑶題目給的是A、B、C、X、Y、Z,而程序中用了加撇號(hào)的字符常量‘X'、'Y'、

'Z',這是為什么?這是為了在運(yùn)行時(shí)能直接打印出字符'A'、'B'、'C'、'X'、

‘Y'、’Z',以表示三組對(duì)抗的情況。

習(xí)題四參考答案:

一、單項(xiàng)選擇題

【習(xí)題4-1】~【習(xí)題4-7】ACDBBBD

二、判斷題(正確用義錯(cuò)誤用J標(biāo)記)

【習(xí)題4-8]?【習(xí)題4-13】XVXVVV

三、閱讀程序?qū)懡Y(jié)果或填空

【習(xí)題4-14】s=10,t=25

【習(xí)題4-1511:resultis4

2:resultis6

3:resultis8

【習(xí)題4-16]s=16

【習(xí)題4-17】10

【習(xí)題4-1817

【習(xí)題4-19]x=9

【習(xí)題4-20】12

【習(xí)題4-21]static

【習(xí)題4-22】51

【習(xí)題4-23]3

四、程序設(shè)計(jì)題

【習(xí)題4-24]

doublefunc(intn,floatx)

{if(n==0)return1;

elsereturnfunc(n-l,x)+n*pow(x,n);

)

【習(xí)題4-25]

PRTStar(charc,intn)

{if(n>0){printf("%c",c);PRTStar(c,n-l);}

main()

{inti,n;

scanf("%d",&n);

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

{PRTStarC',n-i);/*輸出每行左端空格*/

PRTStar('*',2*i-l);/*輸出每行的*號(hào)*/

printf("\n");

)

【習(xí)題4-26]

從楊輝三角形的特點(diǎn)出發(fā),可以總結(jié)出:

⑴第N行有N+1個(gè)值(設(shè)起始行為第0行);

⑵對(duì)于第N行的第J個(gè)值:(N>=2)

當(dāng)J=1或上附1時(shí):其值為1

當(dāng)J!=l且J!=N+1時(shí):其值為第N-1行的第J-1個(gè)值與第N-1行第J個(gè)值之和。

將這些特點(diǎn)提煉成數(shù)學(xué)公式可表示為:

c(x,y)=1當(dāng)x=l或x=N+l

c(x,y)=c(x-l,y-l)+c(x-l,y)其它

程序如下:

intc(intx,inty)

{if((y==l)||(y==x+l))retum(l);

elsereturnc(x-l,y-l)+c(x-l,y);

}

main()

{inti,j,n=13;

printf(MN=n);

while(n>12)scanf(n%dn,&n);

fbr(i=O;i<=n;i++)

{for(j=0;jvn-i;j++)printf("");/*每行開(kāi)始3*(n-i)個(gè)空格*/

fdr(j=ly<i+2;j+4-)printf(H%6dH,c(i,j));/*每行輸出i+1個(gè)數(shù)*/

printf(”\n");

)

【習(xí)題4-27】

main()

{longk=2,N=l;

floatf=l,S=O;

while(N<=lE6)

{S+=f7N;

自-f;

N=N*k-H-;

)

printffS=%f\n”,S);

【習(xí)題4-28]

intIsPrime(intx)

{intk;

fbr(k=2;k<=x/2;k-H-)

if(x%k=0)break;

if(k>x/2)return1;

elsereturn0;

}

main()

{intk;

for(k=99;k>=l;k-)

if(IsPrime(k))printf(n%d;\k);

習(xí)題五參考答案:

一、單項(xiàng)選擇題

【習(xí)題5-1】?【習(xí)題5-8】DCABBDCA

二、閱讀程序?qū)懡Y(jié)果或填空題

【習(xí)題5-9]?⑴二⑵4⑶'B'

【習(xí)題5-1015

【習(xí)題5-11]a[k][k]

【習(xí)題5-12[⑴a[0](2)a[k](3)t

【習(xí)題5-13]⑴b[j]⑵a[m]⑶k<12

【習(xí)題5-14】運(yùn)行結(jié)果為:——--

KKKKKK

【習(xí)題5-151111

1234567890098T654321234806

a[0]=3

a[l]=2

【習(xí)題5-16]a[2]=3

a[3]=3

a[4]=3

a[5]=2

三、編寫(xiě)程序題

【習(xí)題5-17】:

#include<stdio.h>

main()

(

inta[10],b[6],c[10];

intij,k,m;

fbr(m=0;m<10;m-H-)scanf(n%dn,&a[m]);

fbr(m=0;m<6;m-H-)scanf(n%dH,&b[m]);

printf(u\nn);

i=0;k=0;

while(i<10)

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

if{a[i]==b[j])break;

if(j>=6){c[k]=a[i];k++;}

i++;

)

fbr(m=0;m<k;m++)printf(n%3dn,c[m]);

【習(xí)題5-18]:

#include<stdio.h>

main()

inta[3][4],s=0,m,n;

fbr(m=0;m<3;m++)

for(n=0;n<4;n++)scanf(,,%dn,&a[m][n]);

printf(n\nn);

fbr(m=0;m<3;m++)

s=s+a[m][O]+a[m][3];

fbr(n=l;n<3;n-H-)

s=s+a[0][n]+a[2][n];

printf(ns=%d\nM,s);

'【習(xí)題5/9】:

#include<stdio.h>

#include<string.h>

main()

(

chara[20],b[20];

intm,n,k,f;

gets(a);gets(b);

m=strlen(a);n=strlen(b);

k=0;

while((a[k]==b[k])&&k<m&&k<n)k++;

if(k==m&&k==n)f^O;

elseif(a[k]<b[k])f

elsef=l;

printf(n%d\nn,f);

習(xí)題5?20]:

#include<stdio.h>

#include<string.h>

main()

(

chars[20],t;

intk,n=0;

gets(s);

fbr(k=O;k<strlen(s);k++)

if((s[k]>-A,&&s[k]<-Z,)||(s[k]>=,a,&&s[k]<-z*))n++;

printf(,,\nn=%d\n,1,n);

【習(xí)題5-21]:

#include<stdio.h>

main()

(

inta[10],k,m,n,j;

for(j=0;j<10;j++)scanf(,,%dn,&a|j]);

printff'inputk:");

scanf(,,%d,,,&k);

n=9;

do{

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

if(a[j]==k)break;

if(j>=n)break;

else{

for(m=j;m<n-1;m++)

a[m]=a[m+l];

n=n-l;

)

}while(l);

printff'\nnewarray:\n,f);

for(j=0;j<n;j-H-)printf(,,%4d,,,a|j]);

printffW");

習(xí)題六參考答案:

一、單項(xiàng)選擇題【習(xí)題6-1】?【習(xí)題6-10]BDACBDACCD

二、閱讀下列程序,填空或給出程序運(yùn)行結(jié)果。

【習(xí)題6-11]num=*b,num=*c

【習(xí)題6-12]*pl++,*p2

【習(xí)題6-13]*(a+j),a+j

【習(xí)題6-14]87654321

【習(xí)題6-15]2,3,4,5,6.

【習(xí)題6-16】1711717

【習(xí)題6-17]ga

三、編寫(xiě)程序程題

【習(xí)題6-18]

#include"stdio.h"

voidmain()

{inta[10]={3,42,6,12,33,55,25,45,76,93);

inti,j,k,x,*p;

scanf("%d",&k);

p=a;

if(k>0&&k<10)

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

{x=*(p+9);

forG=9;j>0;j-)

*(p+j)=*(p+j-l);

*p=x;

fbr(i=0;i<10;i-H-)

printf(n%dH,a[i]);

}

【習(xí)題6-19]

#include"stdio.h"

#include,alloc.h"

voidmain()

{inta[3][3]={42,6,12,33,55,25,45,76,93};

intij,*sum;

sum=(int*)malloc(3*sizeof(int));

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

|

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

*(sum+i)+=a[i][j];

)

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

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論