C程序設(shè)計4譚浩強(qiáng)完整版 課后習(xí)題答案_第1頁
C程序設(shè)計4譚浩強(qiáng)完整版 課后習(xí)題答案_第2頁
C程序設(shè)計4譚浩強(qiáng)完整版 課后習(xí)題答案_第3頁
C程序設(shè)計4譚浩強(qiáng)完整版 課后習(xí)題答案_第4頁
C程序設(shè)計4譚浩強(qiáng)完整版 課后習(xí)題答案_第5頁
已閱讀5頁,還剩99頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、C程序設(shè)計(第四版)(譚浩強(qiáng))第 章課后習(xí)題答案 P0061.1向屏幕輸出文字 III #in clude /預(yù)編譯.代碼均調(diào)試成功,若有失誤大多不是代碼問題.自已找找. int mai nO P ri ntf(Welcome to mybb in g.co mn); return 0;/與int main 對應(yīng),為了程序可移植性 ,建議全用int main + return 0;. P0081.2求兩個數(shù)的和 #in clude int mai nO int a,b,sum; a=5; b=4; sum=a+b; p ri ntf(The sum is %d .n ,sum); return

2、 0; P0081.3 調(diào)用函數(shù)比較兩個數(shù)的大小 I I I I 丨I I I I I I I I I I #in clude int mainO /被調(diào)用函數(shù)在主函數(shù)后面,用前先聲明. int max( int x, int y); int a,b,c; scanf( %d,%d, /輸入時要按格式來,此處的逗號,用空格會發(fā)生錯誤. c=max(a,b); /a,b作為實(shí)參傳入被調(diào)用函數(shù)中. pri ntf( The max is %d .n,c); return 0; P0172.1 計算機(jī)1-5相乘的積. int int 乙 /z if (xy) 屬于局部變量,可與主函數(shù)中相同名字 ma

3、x( int x, int y) /定義了兩個形參. z=x; else z=y; return (z); /z作為整個程序的岀口值,賦給主函數(shù)中的C. P015 0.6 三個數(shù)的大小.(數(shù)字0表示課后練習(xí)題) I I I I I I I I I I I I #in elude int mainO int a,b,c,d; /d是用于存儲最大值的. int max( int x , int y , int z);/測試可知,在VS2008中,可以不預(yù)先聲明. ); P ri ntf(Pl ease input 3 n umbers :n: seanf( %d %d %d, d=max(a,b,

4、c);/調(diào)用函數(shù)中有三個形參,這里需要傳入三個實(shí)參,才可運(yùn)算. int Printf(The max is :%d .n,d);/ d 可以換成 max(a,b,c). max( int x , int y , int z) int m; if (xy (yx (zy return (m);/返回值m給主函數(shù)中的d. C程序設(shè)計(第四版)(譚浩強(qiáng))第2章課 后習(xí)題答案 算法 程序的靈魂 #in elude int mai nO int i,s=1; / for (i=1;i6;i+) 在執(zhí)行數(shù)值操作前一定要先有個初值 /這里是到6. s=s*i; / 相乘 pri ntf( The sum i

5、s %d .n,s); return 0; #in elude /作岀要求:換成1到11間奇數(shù)相乘. int mai nO int for i,s=1; (i=1;i12;i+) / 在執(zhí)行數(shù)值操作前一定要先有個初值. /這里是到,但題目要求的是取單數(shù).也可以是i=i+2 if (i%2!=0) /i 對取模,值為非為奇數(shù);為則為偶數(shù). s=s*i; else continue ; /跳過這個for循環(huán)的這一次,執(zhí)行下一次. The sum is %d .n,s); 0; pri ntf( return P019 2.2按要求輸出80分以上的學(xué)生信息. I I I I I I I ! I I

6、I IHIH I 暫時沒法做. P 0192.3 判斷2000-250(年中的閏年 併輸出. 年的概念是地球圍繞太陽一周的時間(所謂公轉(zhuǎn)周期)稱為一年,這個周期是相當(dāng)穩(wěn)定的, 很長時間也不會變動1秒,但是真正的一年是365.2423天(目前)。所以,如果每年定義 為365天的話,1年就會多出0.2423天,4年就會多出0.9692天,非常接近1天,這樣閏 年就出現(xiàn)了,也就是每4年要有1年設(shè)置為366天,來抵消這多出的1天。規(guī)則為:。如 果年份能被4整除,則該年計為閏年;可是,假如不做調(diào)整的話,當(dāng)400年的時候,累計才 多出96.92天,接近于多出97天,閏年的設(shè)置卻多出來100天,所以要在40

7、0年內(nèi),再撤 銷3個閏年。怎么撤銷呢?就有了下面這個規(guī)則:2)如果年份能被100整除,則不計為閏 年;問題又來了,400年里有4個100年吧,去掉后四個100年后,又少了一個,所以再加 一個規(guī)則就是:3)如果年份能被400整除,則計為閏年。簡單說來每400年里設(shè)置了 97 個閏年,也就是400里的前3個100年不設(shè)置閏年,誤差被調(diào)整到400年僅有0.08天。 #in clude int mai nO int for i; (i=2000;i=2200;i+) if (i%4=0 p ri ntf(%d is not a lea p year !n ,i); P0202.4求(1)-(1/2)+

8、(1/3)+(1/99)-(1/100的值. 0 0 #in clude int mai nO float sign=1 , sum=0 , deno , term ; (de no=1;de no =100;de no+) for /關(guān)于有小數(shù)的計算應(yīng)該用float. term=sig n*(1/de no); sum=sum+term; / sig n=(-1)*sig n; /term 臨時值,sing符號,deno為分母. 第一次總?cè)鎯? /換號. P ri ntf(The sum of deno( return 0; 指定值)is %f .n ,sum); /若是到100的話,結(jié)果

9、為0.68172 P021 2.5 得到一個大于3的數(shù),并判斷是否為素數(shù). I I I I IHIH I IHIHIHIHIHI IHIHI IHIHBHI I IHIHI I #in clude int main() int i , num ,n ;/像13,37,這樣只能讓和它本身除以外 ,沒有其它除數(shù)的叫素數(shù) printf(Please input a number :n);/ 獲取一個數(shù)值 for /在到此數(shù)值間進(jìn)行循環(huán)除,如果除得盡,就不滿足素數(shù)要求. scanf( %d, (i=2;i n um;i+) if (n um%i=0) /除得盡,則不是. n=1; break ; /設(shè)

10、置跳岀,才不會執(zhí)行多次. n=0; /按程序走的話,這里會執(zhí)行多次,不能用Printf語句,會輸岀多次. if (n=0) /單岀口問題,雖然n=0執(zhí)行多次,但仍然是n=0,這樣才會只輸岀一次 printf( It is do a p rime n umber ! );/如果是100-200可以加個d,nmu進(jìn)去. else It is not a p rime n umber ! ); printf( return 0; 2.6-2.10要求用流程圖表示上列算法 I I I I I I I l 2.11-2.1要求用N-S圖表示上列算法 I ! I ! I I ! I I IHIHIHI !

11、 I I 還要偽代碼 P0360.1調(diào)換二個參數(shù)的值 IIHIHI I I I I I I I I I #in clude int mainO char a= a ,b= b ,c; c=a; a=b; b=c; ,a,b); p ri ntf(a now is %e , b now is %e !n return 0; P0360.2 輸入1(個數(shù)併輸出最大的那一個數(shù) #in elude int mai n() int i,a10,s=0 ; for ); p ri ntf(PI ease input 10 n umbers :n (i=0;i=9;i+) seanf( %d, for (i

12、=0;iv=9;i+) if (sai) s=ai; pri ntf( return ,s); %d is the biggest n umber !n 0; P0360.3 按大小順序輸出一些數(shù) #in elude int main() int i , j , a4 , s=0 ; p ri ntf( PI ease input 5 n umbers :n for );/此處要回車. (i=0 ; i=4 ; i+) seanf( %d, /這是取多個數(shù)的代碼,可以用while控制取到n符為止. for (i=0 ; iaj) s=ai; for ai=aj; aj=s; /重新定義循環(huán)輸岀

13、數(shù)組中新排列的數(shù) (i=0 ; i=4 ; i+) printf( %d- ,ai); return 0; P0360.4求1至10啲總合. #in clude /*第一種方法. int mai nO int i , sum=0 ; /這是一個簡單的程序. for (i=0 ; i101 ; i+) sum=sum+i; ,sum); p ri ntf(The sum of one to one hun dred is %d !n return 0; P0360.5 判斷一個數(shù)能否同時被 3和5整除. HIM I ! I HIHI I I I HI I ! I I I I I ! I I I

14、I II #in clude int mai nO int n ; ); p ri ntf(PI ease input a n umber :n scanf( %d, if (n%3=0 printf ( else Can be devide by 3 and 5 !n printf ( return 0; Can not be devide by 3 and 5 !n ); P036 0.6 輸出100-200可的素數(shù). #include / 網(wǎng)絡(luò)版本 , 采用調(diào)用函數(shù)和求根取素 . #include / 下面用到 sqrt, 所以需要包含數(shù)據(jù)函數(shù) .sqrt 是求根 , 屬數(shù)學(xué)函數(shù) . i

15、nt main() / 學(xué)會一個程序采用 ”主函數(shù) +被調(diào)用函數(shù) ”的方式 , 會比較規(guī)范 . int i; (i=100; i=200; i+) if (prime_number(i) = 1) printf( %d ,i); return 0; for / 為了書寫規(guī)范 , 最好加上 , 以示清范圍 . /i 是實(shí)參 . int prime_number( double m) /m 是形參 . int j,k; k=( int )sqrt(m); for (j=2;j=k;j+) if /求根,(int) 是強(qiáng)制轉(zhuǎn)換,求根里要是浮點(diǎn)型. return (m%j=0) return 0; /

16、 此值返回給主函數(shù)中的實(shí)參 1; /* 第二種方法 . #include #include int main() int i; for (i=100;i=200;i+) / 指定至間 . if (prime(i)=1) / 這里 i 為實(shí)參 , 傳入形參 j 中進(jìn)行運(yùn)算 , 然后再由形參 j 帶出返回 . printf (%d is the prime number !n ,i); int return 0; prime( int j) /j 是形參 , 用于接收實(shí)參 i 給的值 . int m, n; m=(int )sqrt(j); for (n=2;n=m;n+) if (j%n=0)

17、return0;/返回值,0為不是素數(shù),1是素數(shù). return 1; /* 請仿照2.5來寫. 第二種方法. P036 0.7 最大公約數(shù)和最小公倍數(shù) III #in elude vstdio.h /最大公約數(shù)用累除法 ,除到無余數(shù)時的被除數(shù)是最大公約數(shù) main () int int int m, n, c, d; gcd(); lcm(); / / 這是最大公約數(shù)的縮寫 這是最小公倍數(shù)的縮寫 ,此處調(diào)用函數(shù),可以不寫里面的實(shí)參 ,此處調(diào)用函數(shù),可以不寫里面的實(shí)參 int int p ri ntf( Pl ease input two n umber :n scanf( %d %d, c=

18、gcd(m, n);/c獲取最大公約數(shù) /d獲取最小公倍數(shù) d=lcm(m, n); pri ntf( pri ntf( return gcd( int The GCD of %d and %d is : %d !n The LCM of %d and %d is : %d !n 0; x, int y) int temp; while (x%y!=0) temp=y; y=x%y; x=te mp; return y; lcm( int x, int i, temp; if ); ,m, n, c); ,m, n, d); / 最大公約數(shù) Greatest Com mon Divisor 在

19、下一輪中作為除數(shù),即是下一輪中的X,所以先閃一邊去. 的余數(shù)作為下一輪中的 丫,由x%y來取得. /y /x,y /剛才temp中存儲了 y的值,現(xiàn)在拿岀來作為下一輪中的X使用. / int 這是每一輪中的被除數(shù),按原理來,這就是最大公約數(shù),即累除法的原理. y) / 最小公倍數(shù) Lowest Com mon Mult iple 保證二者大的數(shù)在X上,小的數(shù)在丫上.小于號降序,大于號升序. /以下為經(jīng)典三行碼,實(shí)現(xiàn)兩個數(shù)的互換. (xy)/ temp=x; x=y; y=te mp; for(i=1; i=y; i+)/設(shè)定一個區(qū)間,從1至小的數(shù)之間的循環(huán) if (!(x*i)%y)/除得盡為

20、零,非零為真,則成立并返回. /如此往復(fù),直到取模無余數(shù),那么小的數(shù)X乘以區(qū)間當(dāng)前的I值,就是最小公倍數(shù). return x*i; 最簡單的C程序設(shè)計 順序程序設(shè)計 P0373.1 把華氏溫度轉(zhuǎn)化為攝氏表示法 #in clude float F_to_C( floatinput_fah) /代表華轉(zhuǎn)攝,input_fah 是局部變量. floatoutput_cen;/這里也是局部變量 . output_cen=(5.0/9)*(input_fah-32);/ 函數(shù)的功能體. return output_cen; /返回值,注意,返回值的數(shù)據(jù)類型應(yīng)該和函數(shù)一致 float C_to_F( fl

21、oatinput_cen) float out put_fah; out put_fah=(9.0/5)* inp ut_ce n+32; return out put_fah; /轉(zhuǎn)換過程. int mai nO int choice; float inp ut_fah,i np ut_ce n, out put_fah,out put_ce n; pri ntf( F_to_C press and C_to_F p ress !n scanf( %d, if /局部變量的調(diào)用及參數(shù)傳遞 ); (choice=1) prin tf(PI ease input fahre nheit :);

22、scanf( %f,/這個是主函數(shù)定義的變量,雖然和調(diào)用函數(shù)同名 out put_ce n=F _to_C(i np ut_fah); printf( The 華氏 is %d , 攝氏 is %d .,( int )input_fah,(int )output_cen); if (choice=2) intmai nO ); printsPI ease input cen tigrade : scanf( %f, out put_fah=C_to_F(i np ut_ce n); printf( The Cen tigrade is %d , and the Fahre nheit is %

23、d . ,( int )input_cen,(int )output_fah); P0383.2 return 0; 計算存款利息(關(guān)于精度問題). I I I I IHIH I IHIHI lI #in clude int mai nO float p0=1000,r1=0.0036,r2=0.0225,r3=0.0198 ,p 1, p2,p3; p1= p0*(1+r1); p2=p0*(1+ r 2); p3=p0*(1+r3/2)*(1+r3/2); pri ntf(p 1=%fn p2=%fnp 3=%fn,p 1, p2,p3); return 0; P0553.3 大寫轉(zhuǎn)換成小

24、寫 #in clude int main()/小寫范圍是97-122,大寫范圍是65-90,大寫加上即得小寫.26個字母. char c1, c2; c1 = A; c2=c1+32; pri ntf( %c %d,c2,c2); return 0; P0593.4給出三角形邊長,算出面積.double a=3.67, b=5.43, c=6.21, s, area; s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c); pri ntf( area is %fn ,area); /默認(rèn)可以組成三角形 return 0; P0653.5 求一無二次等式的根,默認(rèn)

25、兩個不同根 #in clude #in clude int mai nO double a,b,c,disc,x1,x2,p,q; scanf( %lf %lf %lf, disc=b*b-4*a*c; p=-b/(2.0*a); q=sqrt(disc)/(2.0*a); x1= p+q; x2=p-q; pri ntf( x1=%7.2fnx2=%7.2f,x1,x2); return 0; P0713.6用1輸出實(shí)數(shù),只能得到六位小數(shù). V 0 0 #in clude #in clude int mai nO double a=1.0; /1是整型,1.0是浮點(diǎn)型,默認(rèn)是double.可

26、以是float. pri ntf( %.9fn ,a/3); return 0; P0723.7 floa型數(shù)據(jù)的有效位數(shù) #in clude #in clude int mai nO float a; / a=10000/3.0; pri ntf( %fn ,a); return 0; P078 3.8 使用putcha函數(shù)輸出. I Ml I I I #in clude #in clude int mai nO char a= B ,b= O ,c= Y; p utchar(a); p utchar(b); p utchar(c); putchar( n putchar(101); put

27、char(66); return 0; ); /101是A的ASCI I代碼的縮寫,因?yàn)榇撕瘮?shù)只能輸岀字符 P 079 3.9 使用getch得到字符. #in clude #in clude int mainO char a,b,c; a=getchar(); b=getchar(); 輸岀的結(jié)果是.333252,float 精度6位,所以第七位后不可信 c=getchar(); p utchar(a); p utchar(b); p utchar(c); putchar( n /這也是基本回顯的C程序代碼. ); return 0; P081 3.10getch得到大寫,putcha輸出小

28、寫. I I I I I I I I I I I #in clude #in clude #in clude int mai nO char a,b; a=getchar(); b=a+32; p utchar(b); putchar( n); return 0; P0820.1國民生產(chǎn)總值1(年后的增長倍數(shù) I I I I I I I IHIHIHI ! I I I I ! I I #in clude #in clude int mai nO double p,r=0.09,n=10; p=pow(1+r),n);/這是數(shù)學(xué)函數(shù),pow(x,y)計算x的y次方. pri ntf( P is

29、%lf whe n 10 years later .n,p); return 0;/ 結(jié)果是 0.36 倍. P0820.2 求各種存款的利息數(shù) #in clude int mai nO double p,r,n;/年份和當(dāng)年利率均有給岀. p=1000*(1+5*0.0585); pri ntf( 5 years is %lf !n ,p); /1292.5, p=(1000*(1+2*0.0468); p=( p*(1+3*0.0540); pri ntf( 5 years is %lf !n ,p); /1270.76, p=(1000*(1+3*0.0540); p=( p*(1+2*

30、0.0468); pri ntf( 5 years is %lf !n ,p); /1270.76, p=1000* po w(1+0.0414),5); pri ntf( 5 years is %lf !n ,p); /1224.86, p=1000* po w(1+0.072/4),4*5); pri ntf( 5 years is %lf !n ,p); /1428.74. return 0; 這是全五年期.If輸岀的是double型. 這是先二年,再三年的. 這是先三年,再二年的.證明,是一樣的. 這難道說是,相對的存死期越久越值錢 P0830.3 求幾個月要以還貸 #in clude

31、 #in clude int mai nO double m,r=0.01,d=300000,p=6000; m=(log10( p/( p-d*r)/(log10(1+r); printf( %.1lf ,m);/按要求只留一個小數(shù),所以要寫%.1lf. return 0; P0840.6 字母密碼轉(zhuǎn)換,調(diào)用函數(shù)及臨界處理 #in clude char printcode(char f) if ( int )f86 調(diào)用需要返回值. /因?yàn)閜utchar會自動返回,所以改成return,因?yàn)檫@是在函數(shù)中 int else return (f+4); mai nO char a,b,c,d,e

32、; p ri ntf(Pl ease inp ut :n); a=getchar(); b=getchar(); c=getchar(); d=getchar(); e=getchar(); /臨界問題. p ri ntf(%c%c%c%c%qpn ntcode(a), pri ntcode(b), prin tcode(c) ,pnn tcode(d), pri ntc ode(e); p utchar( putcharcode(a); p utchar( putcharcode(b); p utchar( putcharcode(c); p utchar( putcharcode(d);

33、p utchar( putcharcode(e); return 0;/注意理解自定義函數(shù)的定義,使用,及形參實(shí)參的流向. /p84的是計算問題,自己看著辦,最后要求小數(shù)點(diǎn)后兩位 要求實(shí)部,所以m.n格式中m不寫. /p84的是定義問題,第一問,兩者都行 時則要用(來獲取. ,但是定義字母時 ,用的是.2lf來實(shí)現(xiàn),因?yàn)闆]有 ,scanf要寫(來獲取,而定義數(shù)值 / 字符輸岀函數(shù)啦 符A啊. 第二問,putchar ,字符,有木有!字符啊! 貌似只能輸岀字符 盡管它的參數(shù)可以是putchar(101). ,所以用printf.putchar 本身就是 效果是輸岀字 / 要在某此條件下 第三問,

34、岀現(xiàn)“任何“及“無條件,那么答案明顯是否.可以轉(zhuǎn)換,但 ,例如輸岀和讀入時,c是字母,而(是數(shù)值,看著辦. 選擇結(jié)構(gòu)程序設(shè)計 P086 4.1 無二次方程求根的二分支 I I I |I I I I #in clude #in clude intmai nO double a,b,c,disc,x1,x2,p,q; scanf( %lf %lf %lf, disc=b*b-4*a*c; if (disc0) printf(This equati on has nt real rootsn else ); /這是選擇結(jié)構(gòu)和其判斷條件的示例 p=-b/(2.0*a); q=sqrt(disc)/(2

35、.0*a); x1= p+q; x2=p-q; pri ntf( x1=%7.2fnx2=%7.2f,x1,x2); return 0; P0874.2 個數(shù)按大小輸出 #in clude int mai nO /此程序代表按大小順序輸岀 float a,b,t; scanf( (ab) if %f %f , /岀錯時,注意檢查這里是否按格式輸入了 .比如有個逗號. t=a; a=b; b=t; pri ntf( %5.2f,%5.2fn return 0; ,a,b); P0884.3 三個數(shù)按大小輸出 #in clude intmai nO/此程序代表按大小順序輸岀 float a,b,c

36、,t; scanf( (ab) %f %f %f, if I /此處執(zhí)行后,a為小者. t=a; a=b; b=t; if (ac) /此處執(zhí)行后,a為小者. t=a; a=c; c=t; if (bc) /上面已經(jīng)搞定a是最小者,現(xiàn)在對比得岀次小者,并且已經(jīng)歸到變量中 t=b; b=c; c=t; pri ntf(%5.2f,%5.2f%5.2fn,a,b,c); return 0; P0994.4判斷輸入字符,并最終按小寫輸出. I I ! I I ! I I I 1HI I ! I ! I ! I I I 1 #in elude int mai nO char ch; /條件運(yùn)算符,真取

37、前,假取后. scanf( %c, ch=(ch= A printf( %cn ,ch); return 0; P100 4.5按要求輸出相應(yīng)的丫值. I I I I I I I I I #in clude int mai nO int x,y; scanf( %d, if (x=0) if (x0)/這個范圍要基于x=0來判斷. y=1; else y=0; else /這個是x0的范圍. y=-i; printf( x=%d,y=%d ,x,y); return 0; P102 4.6switc的簡單應(yīng)用. #in clude int mainO char grade; scanf( %c

38、, pri ntf( Your score: ); switch (grade) I case a :prints 85-100n );break ; / case b :printf( 70-84n );break ; case c :printf( 60-69n );break ; cased :printf( 60n); break ; default :printf( return 0; En ter data error! n ); 當(dāng)多分支結(jié)構(gòu)過于多時,可以用switch來解決. P104 4.7按輸入執(zhí)行操作,并且不分大小寫 #in clude void action1( int

39、 x, int y) seanf( %lf %lf %lf, printf(x+y=%dn ,x+y); void action2( int x, int y) printf( x*y=%dn ,x*y); int mai nO char ch; int a=15,b=23; ch=getchar(); switch (ch) case a: case A acti on 1(a,b); break ;/a,A共用一個執(zhí)行語句. case b case B default acti on 2(a,b); p utchar( a break ; );/a可以控制電腦發(fā)岀蜂鳴聲 return 0;

40、 P1064.8 用if的分支來做閏年問題 #in clude int mainO int year,leap; ); p ri ntf(PI ease input the year: n if (year%4=0)/400年里,在100個可除盡4的年里計算,以下是在全范圍內(nèi)計算 if (year%100=0)/既是100個內(nèi)的,又是可以除盡100的,算是且. if (year%400=0)/相當(dāng)于且了兩次,只余下唯一一個. lea p=1; else /400年里只有1個除得盡,其它都不是. else leap=O; / 這里的范圍是(year%4=0)/在合法的100內(nèi),又不是2100,2

41、200 一類的,當(dāng)然屬閏年. else leap=0; if (lea p) printf( %d is ,year); else printf( %d is not year); printf(a leap year !);/不管上面如何判斷,最后還是會輸岀這一句 return 0; P1084.9 元二次等式的全計算過程 I I 1HI 1 I HI I I I #in elude #in elude int mainO double a,b,c,disc,x1,x2,realpart,imagpart; p ri ntf(The equati on ); if (fabs(a)=1e-6

42、) /fabs是絕對值,le-6,即是的負(fù)六次方,接近或是等于零. printsis not a quadratic !n printf( x1=x2=%lf ,-c/b); ); else disc=b*b-4*a*c; if (fabs(disc)1e-6) x1=(-b+sqrt(disc)/(2*a); x2=(-b-sqrt(disc)/(2*a); p ri ntf(has disti net real roots : %lf and %lf n ,x1,x2); return 0; else real part=-b/(2*a); imag part=sqrt(-disc)/(2

43、*a); has comp lex roots: n %lf + %lfin pri ntf( pri ntf( pri ntf( ); ,realp art,imag part); ,realp art,imag part); P109 4.10關(guān)于多個區(qū)間的計算,運(yùn)費(fèi)問題為例 I HIHI I I I I I I I I I I I I I #in clude int main() double p,w,s,d,f; printf( p, w,sn); scanf( %lf %lf %lf, if (s250) d=0.0; f=p *w*s*(1-d); printf( %lf ,f);

44、 #in clude else if (s500) d=0.02; f=p *w*s*(1-d); printf( %lf ,f); else if (s1000) d=0.05; f=p *w*s*(1-d); printf( %lf ,f); else if (sb) /凡是比較中,大于號代表升序排列 m=a; a=b; b=m; if (ac) m=a; a=c; c=m; if (bc) m=a; a=c; c=m; return (c); /此排序后,a,b,c由小到大.所以c是返回中最大的. int mai nO int a,b,c; ); p ri ntf( Pl ease in

45、put 3 n umbers : scanf( %d %d %d, pri ntf( The max is %d !n,max(a,b,c); return 0; P01120.5 一個小于1000勺數(shù),有判定條件. I I I 1HI IHIHI I I I I HIM #in clude #in clude int mainO double a,b; scanf( %lf , if (a1000) b=sqrt(a); else printf( a );/控制蜂鳴聲 ); pnntf(Pl ease input a n umber aga in : scanf( %lf ,11 b=sqr

46、t(a); printf( %0lf ,b);/按要求,只取整數(shù). return 0; P01120.9 個不多于5位的數(shù),按條件輸出. #in clude #in clude int main() int i,a,b4,count=0; p ri ntf(Pl ease input a n umber (five-digit n umber): scanf( %d, (i=0;i=0;i-) printf( %d ,bi); printf( n); printf(倒序輸岀這一個數(shù)字,如下:); for (i=0;i=4;i+) printf( p ri ntf(n return 0; %d,

47、bi); ); P0112 0.10按要求提成獎金(if寫法). 0 0 #in clude int mainO double a,b; p ri ntf(Pl ease input pr ofit amou nt : scanf( %lf , if (a=10)/這個是整個if 的基礎(chǔ). ); b=a*0.1; else if (a=20)/以上面為基礎(chǔ),這已經(jīng)代表了 10-20間了 ! b=1+(a-10)*0.075; else if (a=40)/ 同理,這是 20-40 間. b=1+0.75+(a-20)*0.05; else if (a=60) b=1+0.75+0.1+(a-4

48、0)*0.03; else if (a=100) b=1+0.75+0.1+0.06+(a-60)*0.15; else /這里是大于100的. b=1+0.75+0.1+0.06+(a-100)*0.01; ,b); pri ntf( The reward is %lf !n return 0; P0112 0.10按要求提成獎金(switch法). I I ! I ! I I I I ! I I I I I I I I I #in clude double GetProfit( double c) pri ntf( sca nf( return ); int mai nO double c

49、har c; Pl ease input pr ofit amou nt : %lf , (c);/返回本身了,如果有進(jìn)一步的計算結(jié)果,將值賦給其它變量,也可以返回. a; Your choice :nA : 0-10 ;nB : 10-20 ;nC : 20-40 ;nD : 40-60 ;nE : 60-100 ;nF : 100-1000 ;n); scanf( %c,/不同檔時,應(yīng)照檔的規(guī)定數(shù)值進(jìn)行輸入,否則結(jié)果不會是正確的 switch (c)/前三后三用于比較調(diào)用函數(shù). /Get Profit(c) case A : printf( /0-10 0.100 pri ntf( 引入的

50、實(shí)參沒有意義 The reward is %lf !n ,返回值和引入的實(shí)參沒關(guān)系 ,Get Profit(c)*0.1); ,反而由鍵盤獲得. break ; case B : printf( /10-200.075 The reward is %lf !n ,1+(Get Profit(c)-10)*0.075); break ; case C : printf( /20-400.050 The reward is %lf !n ,1+0.75+(Get Profit(c)-20)*0.05); break ; caseD :printf( PI ease input pr ofit am

51、ou nt : );sca nf( %lf , printf( The reward is %lf !n ,1+0.75+0.1+(a-40)*0.03); break ; /40-600.030 case E :printf( reward is %lf !n Pl ease input pr ofit amou nt : ,1+0.75+0.1+0.6+(a-60)*0.15); );sca nf( break; %lf , printf( The /60-1000.015 case F :printf( reward is %lf !n Pl ease input pr ofit amo

52、u nt : ,1+0.75+0.1+0.6+0.6+(a-100)*0.01); );sca nf( break ; %lf , pri ntf( The /100-1000 0.010 default :printf( return 0; Error data !); break ;/可以有一個執(zhí)行體,用包括起來 #in elude int mai nO int a10,i,j,m,n;/變量可以在寫代碼過程中再回來臨時添加. printf(請輸入數(shù)值的個數(shù):(十個以內(nèi)); scanf( %d,/到這里需要變量來承載數(shù)值的個數(shù),設(shè)m,回頭去定義變量那寫上m. for printf(請分別輸

53、入相對應(yīng)個數(shù)的數(shù)值:); (i=0;im;i+) seanf( %d, for (i=0;im;i+) for (j=i+1;jaj) /這是選擇排序法.升序. for n=ai; ai=aj; aj=n; /這里需要一個用于臨時變量的n,所以回頭去寫上. (i=0;im;i+) printf( %d,ai); return 0; C程序設(shè)計(第四版)(譚浩強(qiáng))第五章課后習(xí) 題答案 循環(huán)結(jié)構(gòu)程序設(shè)計 #in clude int mai nO int i=1,sum=0; while (i=100)/對于需要運(yùn)算的值,要么在運(yùn)算前可以賦值,要么一開始要指定. sum=sum+i; i+; p r

54、i ntf(The sum is %d .n ,sum); return 0; P1175.2 用do-whil來做1至 10啲合. #in clude int mai nO int do i=1,sum=0; / do-while可以做的事,用while都可以做到. /do-while 先做一次執(zhí)行,再判斷條件,而while卻是先做一個條件,再執(zhí)行. sum=sum+i; i+; while pri ntf( return (i=100); The sum is %d .n ,sum); 0; P1185.3 比較do-whil與whil啲差別. #in clude int mainO in

55、t i,sum=0; p ri ntf(Pl ease input a n umber :); scanf( %d,/輸入10以內(nèi),正常,11的話,則sum仍然是0. while (i=10) sum=sum+i; i+; ,sum); pri ntf(The sum of 1-10 is %d .n return 0; #in clude int mai n() return0; p ri ntf(Pl ease input a n umber : scanf( %d, do while pri ntf( /此重點(diǎn)在于理解二者的差別 (i=10); The sum of 1-10 is %d

56、 .n ,sum); return 0; int i,sum=0; ); /輸入10以內(nèi),結(jié)果一樣.輸入11的話,先做操作,所以sum=11. sum=sum+i; i+; P1265.4brea的例子. I I I I I I I #in clude int main() int i,b=O,a,c; for (i=0;i=100) 這一類. break ; /break是用于跳岀循環(huán),對if無效,對while for switch c=b/i; pri ntf( conut is %d , aver is %d ,i+1,c); /注意號后的形式,否則可能輸岀錯誤. P127 5.5 co

57、ntinue例子. return0; #in clude int mai nO int i; for (i=1;iv20;i+) if (i%3!=0) continue ;/跳過本次I,執(zhí)行下一個i. printf( %d ,i); pri ntf( n ); return 0; P128 5.6 形成一個4*5的矩陣. #in clude int mainO int i,j,a=0; /沒有給初值,會岀現(xiàn)警告:使用了未初始化的局部變量 for (i=1;i=4;i+) for (j=1;j=5;j+,a+) / a用來控制換行. if (a%5=0) printf( n); printf(

58、 %dt ,i*j); pri ntf( n); P1315.7用一個交錯的式子求哌的近似值 #in elude #in clude int mainO/ 四分之哌等于(1)-(1/3)+(1/5)-(1/7)+(1/9)-(1/11). float s=1, n=1,m,sum=0,t; for (m=1;m=m+2)/不確定哪項(xiàng)才會小于等于十的負(fù)六次方,所以不指定,無限下去. /不指定第二項(xiàng),執(zhí)行語句中應(yīng)該有控制跳岀的句子,否則死循環(huán). t=(s)*( n/m); if (fabs(t)=1e-6) break ; sum=sum+t; / /這是第一項(xiàng),s是符號, /應(yīng)該寫在這里,題目要

59、求這一項(xiàng)不累加進(jìn)去 s=s*(-1); 因?yàn)槔奂禹?xiàng)在這里,所以,一旦跳岀就不會累加進(jìn)來了 /變號一次. pri ntf( pri ntf( return 四分之一哌的值是 %f.n ,sum); 一個完整哌的值是 %f.n ,sum*4); 0; 下面這段小代碼用來驗(yàn)證關(guān)于數(shù)值型數(shù)據(jù)類型的關(guān)系.去掉注釋,可運(yùn)行. 如果岀現(xiàn)類似值為全1或是全零的話,一般可以考慮數(shù)據(jù)類型賦值或是定義錯了的問題. /#include /這是關(guān)于int float double三者關(guān)復(fù)雜關(guān)系的,亂啊,如果看不懂,可 / / 以通過實(shí)驗(yàn)自己明白來 / /i nt mai nO / 話,會有警告:警告1 / / floa

60、t m,a,b,c; / 意思就是能變成double 面的m=1,其實(shí)得到的是 / 在C語言中,1.0認(rèn)為是實(shí)數(shù),即是double型,所以,如果你把它用float輸岀的 warning C4305:= ”:從 double 到 float 截斷 一旦定義了是這種類型的話,輸岀或是賦值的時候只能擴(kuò)展不能截斷 型,不能變成int型啦.而且后面的賦值會跟著它變成相應(yīng)的類型.比如下 m=1.0. / / / / / int d,e,f; m=1; a=1.0/3; b=1/3; c=m/3; d=1.0; / e=1/4; /f=1.0/4; /prin tf(%lf(float 管上面定義什么,這邊

溫馨提示

  • 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

提交評論