程序設計教程譚浩強答案1_第1頁
程序設計教程譚浩強答案1_第2頁
程序設計教程譚浩強答案1_第3頁
程序設計教程譚浩強答案1_第4頁
程序設計教程譚浩強答案1_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、C程序設計教程譚浩強版部分習題答案 第一章 C語言概述1.4請參照本章例題,編寫一個C程序,輸出以下信息:* Very Good!*解:#include mian()printf(“*”);printf(“n”);printf(“Very Good!n”);printf(“n”);printf(“*”);1.5 編寫一個程序,輸入a、b、c三個值,輸出其中最大值。解:#include mian()int a,b,c,max;printf(“請輸入三個數(shù)a,b,c:n”);scanf(“%d,%d,%d”,&a,&b,&c);max=a;if(maxb)max=b;if(maxc)max=c;p

2、rintf(“最大數(shù)為:“%d”,max);第二章 數(shù)據(jù)類型、運算符與表達式2.5寫出以下程序運行的結果。#include main()char c1=a,c2=b,c3=c,c4=101,c5=116;printf(“a%cb%ctc%ctabcn”,c1,c2,c3);printf(“t b%c %c”,c4,c5);解:aabbccabcAN2.6要將China譯成密碼,譯碼規(guī)律是:用原來字母后面的第4個字母代替原來的字母例如,字母A后面第4個字母是EE代替A。因此,China應譯為Glmre。請編一程序,用賦初值的方法使cl、c2、c3、c4、c5五個變量的值分別為,C、h、i、n、a

3、,經(jīng)過運算,使c1、c2、c3、c4、c5分別變?yōu)镚、l、m、r、e,并輸出。解:#include main() char c1=C,c2=h,c3=i,c4=n,c5=a;c1+=4;c2+=4;c3+=4;c4+=4;c5+=4;printf(密碼是%c%c%c%c%cn,c1,c2,c3,c4,c5); 運行結果: 密碼是Glmre2.8求下面算術表達式的值。(1)x+a%3*(int)(x+y)%2/4設x=2.5,a=7,y=4.7(2)(float)(a+b)/2+(int)x%(int)y設a=2,b=3,x=3.5,y=2.5(1)2.5(2)3.52.9寫出程序運行的結果。#

4、include main()int i,j,m,n;i=8;j=10;m=+i;n=j+;printf(“%d,%d,%d,%d”,i,j,m,n);解:9,11,9,10第三章 最簡單的C程序設計-順序程序設計3.4用scanf下面的函數(shù)輸入數(shù)據(jù),使a=3,b=7,x=8.5,y=71.82,c1=A,c2=a,問在鍵盤上如何輸入?#include main()int a,b;float x,y;char c1c2;scanf(a=%d_b=%d,&a,&b);scanf(_x=%f_y=%e,&x,&y);scanf(_c1=%c_c2=%c,&c1,&c2);a=3_b=7_x=8.5_

5、y=71.82_c1=A_c2=a 3.6設圓半徑r=1.5,圓柱高h=3,求圓周長、圓面積、圓球表面積、圓球體積、圓柱體積。用scanf輸入數(shù)據(jù),輸出計算結果,輸出時要求文字說明,取小數(shù)點后兩位數(shù)字。請編程序。#include main()float r,h,C1,Sa,Sb,Va,Vb;scanf(%f,%f,&r,&h);C1=2*3.14*r;Sa=3.14*r*r;Sb=4*Sa;Va=4*3.14*r*r*r/3;Vb=Sa*h;printf(C1=%.2fn,C1);printf(Sa=%.2fnSb=%.2fnVa=%.2fnVb=%.2fn,Sa,Sb,Va,Vb);3.7輸

6、入一個華氏溫度,要求輸出攝氏溫度。公式為c=5(F-32)/9輸出要求有文字說明,取位2小數(shù)。#include main()float F,c;scanf(%f,&F);c=5*(F-32)/9;printf(c=%.2f,c);3.8編程序,用getchar函數(shù)讀入兩個字符給c1、c2,然后分別用函數(shù)和函數(shù)輸出這兩個字符。并思考以下問題:()變量c1、c2應定義為字符型或整形?抑二者皆可?()要求輸出c1和c2值的ASCII碼,應如何處理?用putchar函數(shù)還是printf函數(shù)?()整形變量與字符變量是否在任何情況下都可以互相代替?如:charc1,c2;與intc1,c2;是否無條件的等

7、價?#includestdio.hmain()char c1,c2;c1=getchar();c2=getchar();putchar(c1);putchar(n);putchar(c2);putchar(n);#includestdio.hmain()char c1,c2;c1=getchar();c2=getchar();printf(c1=%d c2=%dn,c1,c2);printf(c1=%c c2=%cn,c1,c2);第四章 選擇結構程序設計4.2 C語言中如何表示“真”和“假”?系統(tǒng)如何判斷一個量的“真”和“假”?解:設有一個邏輯表達式,若其結果為“真”,則以1表示;若其結果為

8、“假”,則以0表示。但是判斷一個邏輯量的值時,以0代表“真”,以非0代表“假”。例如3&5的值為“真”,系統(tǒng)給出3&5的值為1。4.3 寫出下面各邏輯表達式的值。設a=3,b=4,c=5。(1) a+bc&b=c(2) a|b+c&b-c(3) !(ab)&!c|1(4) !(x=a)&(y=b)&0(5) !(a+b)+c-1&b+c/2解:(1) 0(2) 1(3) 1(4) 0(5) 1 4.4 有3個整數(shù)a、b、c,由鍵盤輸入,輸出其中最大的數(shù)。解:方法一#include main() int a,b,c;printf(請輸入3個整數(shù):);scanf(%d,%d,%d,&a,&b,&c

9、);if(ab)if(bc) printf(max=%dn,c);else printf(max=%dn,b);else if(ac) printf(max=%dn,c);else printf(max=%dn,a);方法二:使用條件表達式,可以使程序更加簡明、清晰。程序如下: #include main() int a,b,c,temp,max;printf(請輸入3個整數(shù):);scanf(%d,%d,%d,&a,&b,&c);temp=(ab)?a:b; max=(tempc)?temp:c; printf(3個整數(shù)的最大數(shù)是%dn”,max);4.5 有一函數(shù): 寫一程序,輸入x值,輸出

10、y值。解: #include main()int x,y;printf(輸入x:);scanf(%d,&x);if(x1) y=x;printf(x=%3d, y=x=%dn,x,y);else if (x10) y=2*x-1;printf(x=%3d, y=2*x-1=%dn,x,y);else y=3*x-11;printf(x=%3d, y=3*x-11=%dn,x,y);4.6 給一個百分制成績,要求輸出等級A、B、C、D、E。90分以上為A,8090分為B,7079分為C,60分以下為D。解:程序如下:#include main() float score;char grade;c

11、ase 2:printf(請輸入學生成績:);scanf(%f,&score);while(score100|(score0) printf(n輸入有誤,請重新輸入:);scanf(%f,&score);switch(int)(score/10) case 10:case 9: grade=A;break;case 8: grade=B;break;case 7: grade=C;break;case 6: grade=D;break;case 5:case 4:case 3:case 1:case 0: grade=E;printf(成績是%5.1f,相應的等級是%c。n,score,gra

12、de);說明:對輸入的數(shù)據(jù)進行檢查,如小于0或大于100,要求重新輸入。(int)(score/10)的作用是將 (score/10) 的值進行強制類型轉換,得到一個整型值。4.7 給定一個不多于5位的正整數(shù),要求: 求它是幾位數(shù); 分別打印出每一位數(shù)字; 按逆序打印出各位數(shù)字。例如原數(shù)為321,應輸出123。解: #include main() long int num;int indiv,ten,hundred,thousand,ten_thousand,place;printf(請輸入一個整數(shù)(099999):);scanf(%ld,&num);if (num9999) place=5;

13、else if(num999) place=4;else if(num99) place=3;else if(num9) place=2;else place=1;printf(place =%dn, place);ten_thousand=num/10000;thousand=num/1000%10;hundred=num/100%10;ten=num%100/10;indiv=num%10;switch(place) case 5: printf(%d,%d,%d,%d,%d,ten_thousand,thousand,hundred,ten,indiv);printf(n反序數(shù)字為;);

14、printf(%d%d%d%d%dn,indiv,ten,hundred,thousand,ten_thousand);break;case 4: printf(%d,%d,%d,%d,thousand,hundred,ten,indiv);printf(n反序數(shù)字為:);printf(%d%d%d%dn,indiv,ten,hundred,thousand);break;case 3: printf(%d,%d,%d,hundred,ten,indiv);printf(n反序數(shù)字為:);printf(%d%d%dn,indiv,ten,hundred);break;case 2: print

15、f(%d,%d,ten,indiv);printf(n反序數(shù)字為:);printf(%d%dn,indiv,ten);break;case 1: printf(%d,indiv);printf(n反序數(shù)字為:);printf(%dn,indiv);break;4.8 企業(yè)發(fā)放的獎金根據(jù)利潤提成。利潤I低于或等于10萬元時,獎金可提成10% ;利潤高于10萬元,低于20萬元(100000I200000)時,其中10萬元按10%提成,高于10萬元的部分,可提成7.5% ;200000I400000時,其中20萬元仍按上述辦法提成(下同),高于20萬元的部分按5%提成;4000001000000時,

16、超過100萬元的部分按1%提成。從鍵盤輸入當月利潤I,求應發(fā)放獎金總數(shù)。要求:(1)用if語句編程序;(2)用switch語句編程序。解:計算利潤時,要特別注意不同利潤的不同提成比例。例如,利潤為15萬元,其中有10萬元按10%的比例提成,另外5萬元則按7.5%提成。(1) 用if語句編程序。#include main() long i;float bonus,bon1,bon2,bon4,bon6,bon10;bon1=100000*0.1; bon2=bon1+100000*0.075; bon4=bon2+200000*0.05; bon6=bon4+200000*0.03; bon10

17、=bon6+400000*0.015; printf(請輸入利潤i:);scanf(%ld,&i);if(i=100000)bonus=i*0.1; else if(i=200000)bonus=bon1+(i-100000)*0.075; else if(i=400000)bonus=bon2+(i-200000)*0.05; else if(i=600000)bonus=bon4+(i-400000)*0.03; else if(i=1000000)bonus=bon6+(i-600000)*0.015; elsebonus=bon10+(i-1000000)*0.01; printf(”

18、獎金是%10.2fn,bonus);此題的關鍵在于正確寫出每一區(qū)間的獎金計算公式。例如利潤在10萬元至20萬時,獎金應由兩部分組成:利潤為10萬元時應得的獎金。即1000000.1;10萬元以上部分應得的獎金。即(num-100000)0.075。同理,20萬40萬這個區(qū)間的獎金也應由兩部分組成:利潤為20萬元時應得的獎金,即1000000.110萬0.075;20萬元以上部分應得的獎金,即(num-200000)0.05。程序中先把10萬、20萬、40萬、60萬、100萬各關鍵點的獎金計算出來,即bon1、bon2、bon4、bon6、hon10;然后再加上各區(qū)間附加部分的獎金。(2) 用s

19、witch語句編程序。輸入利潤i,確定相應的提成等級branch根據(jù)branch確定獎金值0 獎金=i*0.11 獎金=bon1+(i-105)*0.0752 獎金=bon2+(i-2*105)*0.053 4 獎金=bon4+(i-4*105)*0.035 6 獎金=bon6+(i-6*105)*0.0157 8 9 10 獎金=bon10+(i-106)*0.01輸出獎金#include main() long i;float bonus, bon1, bon2, bon4, bon6, bon10;int c;bon1=100000*0.1;bon2=bon1+100000*0.075;

20、bon4=bon2+200000*0.05;bon6=bon4+200000*0.03;bon10=bon6+400000*0.015;printf(請輸入利潤i:);scanf(%ld,&i);c=i/100000;if(c10) c=10;switch(c) case 0: bonus=1*0.1;break;case 1: bonus=bon1+(i-100000)*0.075;break;case 2 :case 3: bonus=bon2+(i-200000)*0.05; break;case 4:case 5: bonus=bon4+(i-400000)*0.03;break;ca

21、se 6:case 7:case 8:case 9: bonus=bon6+(i-600000)*0.015;break;case 10: bonus=bon10+(i-1000000)*0.01;printf(獎金是%10.2f,bonus);4.9 輸入4個整數(shù),要求按由大到小的順序輸出。解:此題采用依次比較的方法排出其大小順序。在學習了循環(huán)和數(shù)組以后,可以有更多的排序方法。#include main() int t,a,b,c,d;printf(請輸入4個整數(shù):);scanf(%d,%d,%d,%d,&a,&b,&c,&d);printf(n a=%d,b=%d,c=%d,d=%dn,a

22、,b,c,d);if(ab) t=a; a=b; b=t;if(ac) t=a; a=c; c=t;if(ad) t=a; a=d; d=t;if(bc) t=a; b=c; c=t;if(bd) t=b; b=d; d=t;if(cd) t=c; c=d; d=t;printf(排序結果如下:n);printf(%d, %d, %d, %dn,a,b,c,d);4.10 有4個圓塔,圓心分別為(2,2)、(-2,2)、(2,-2)、(-2,-2),圓半徑為1。這4個塔的高度分別為10m。塔以外無建筑物。今輸入任一點的坐標,求該點的建筑高度(塔外的高度為零)。程序如下:#include mai

23、n() int h=10;float x1=2,y1=2,x2=-2,y2=2,x3=-2,y3=-2,x4=-2,y4=-2,x,y,d1,d2,d3,d4;printf(請輸入一個點(x,y):);scanf(%f,%f,&x,&y);d1=(x-x1)*(x-x1)+(y-y1)*(y-y1); d2=(x-x2)*(x-x2)+(y+y2)*(y+y2);d3=(x+x3)*(x+x3)+(y-y3)*(y-y3);d4=(x+x4)*(x-x4)*(y+y4)*(y+y4);if(d11&d21&d31&d41) h=0; printf(該點高度為%dn,h);以下未整理,請見諒,一

24、般提前一章,也就是第六章就是第五章的答案。第六章循環(huán)控制6.1輸入兩個正整數(shù)m和n,求其最大公約數(shù)和最小公倍數(shù)。main()long m,n,i=1,j,s;scanf(%ld,%ld,&m,&n);for(;i=m&i=n) j=m;else j=n;for(;!(j%m=0&j%n=0);j+);printf(s=%ld,j=%ldn,s,j);6.2輸入一行字符,分別統(tǒng)計出其中英文字母、空格、數(shù)字和其他字符的個數(shù)。#includestdio.hmain()char c;int i=0,j=0,k=0,l=0;while(c=getchar()!=n)if(c=65&c=97&c=48&c

25、=57) j+;else if(c=32) k+;else l+;printf(i=%d,j=%d,k=%d,l=%dn,i,j,k,l);6.3求Sn=a+aa+aaa+aaaaa(有n個a)之值,其中a是一個數(shù)字。例如:2+22+222+2222+22222(n=5),n由鍵盤輸入。#includemath.hmain()int n,sum=0,i=1,s=2;scanf(%d,&n);while(i=n)sum=sum+s;s=s+2*pow(10,i);i+;printf(sum=%dn,sum);6.4 求 ,(即求1!+2!+3!+4!+5!+20!)main()int n,i=1

26、;long sum=0,s=1;scanf(%d,&n);while(i=n) s=s*i;sum=sum+s;i+;printf(sum=%ldn,sum);6.5 求 main()double i=1,j=1,k=1,s1=0,s2=0,s3=0,sum;for(;i=100;i+) s1=s1+i;for(;j=50;j+) s2=s2+j*j;for(;k=100&x1000) a=0.01*x;b=10*(0.01*x-a);c=x-100*a-10*b;if(x=(pow(a,3)+pow(b,3)+pow(c,3) printf(%5d,x);x+;6.7一個數(shù)如果恰好等于它的因

27、子之和,這個數(shù)就稱為完數(shù)。例如,6的因子為1、2、3,而6=1+2+3,因此6是完數(shù)。編程序找出1000之內(nèi)的所有完數(shù),并按下面格式輸出其因子:6itsfactorsare1、2、3main()int m,i,j,s;for(m=6;m10000;m+)s=1;for(i=2;im;i+)if(m%i=0) s=s+i;if(m-s=0)printf(%5d its fastors are 1 ,m);for(j=2;jm;j+) if(m%j=0)printf(%d ,j);printf(n);或main()int m,i,j,s;for(m=6;m1000;m+)s=m-1;for(i=2

28、;im;i+)if(m%i=0) s=s-i;if(s=0)printf(%5d its fastors are 1 ,m);for(j=2;jm;j+) if(m%j=0)printf(%d ,j);printf(n);6.8有一分數(shù)序列: 求出這個數(shù)列的前20項之和。main()int i=1,n;double t,x=1,y=2,s,sum=0;scanf(%ld,&n);while(i=n) s=y/x;sum=sum+s;t=y;y=y+x;x=t;i+;printf(%fn,sum);6.9一球從100米高度自由下落,每次落地后返回原高度的一半,再落下。求它在第10次落地時共經(jīng)過多

29、少米?第10次反彈多高?main()int i,n;double h=100,s=100;scanf(%d,&n);for(i=1;i=n;i+)h*=0.5;if(i=1) continue;s=2*h+s;printf(h=%f,s=%fn,h,s);6.10猴子吃桃問題。猴子第一天摘下若干個桃子,當即吃了一半,還不過癮,又多吃了一個。第二天早上又將剩下的桃子吃掉一半,又多吃一個。以后每天早上都吃了前一天剩下的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘多少桃子。main()int i=1,sum=0;for(;i=0.00001);printf(%.3fn,x1)

30、;6.12 用牛頓迭代法求方程在1.5附近的根。main()double x,y;x=1.5;doy=2*x*x*x-4*x*x+3*x-6;x=x-y/(6*x*x-8*x+3);while(y!=0);printf(x=%.3fn,x);6.13用二分法求方程在(-10,10)之間的根main()double x1,x2,y1,y2;x1=-10;x2=10;doy1=2*x1*x1*x1-4*x1*x1+3*x1-6;x1=x1-y1/(6*x1*x1-8*x1+3);while(y1!=0);doy2=2*x2*x2*x2-4*x2*x2+3*x2-6;x2=x2-y2/(6*x2*x

31、2-8*x2+3);while(y2!=0);printf(x1=%.3f,x2=%.3fn,x1,x2);6.14打印以下圖案* * * * * * * * * * * * * * * * * * *#includemath.hmain()int i,j,k;for(i=0;i=3;i+)for(j=0;j=2-i;j+)printf( );for(k=0;k=2*i;k+)printf(*);printf(n);for(i=0;i=2;i+)for(j=0;j=i;j+)printf( );for(k=0;k=4-2*i;k+)printf(*);printf(n); 第七章第七章數(shù)組7.

32、1 用篩法求之內(nèi)的素數(shù)。main() int i,j,a100;for(i=2;i100;i+) ai=i;for(j=2;j=i;j+)if(ji)if(ai%j=0)break;if(ai-j=0)printf(%5d,ai);printf(n);或#includemath.hmain()static int i,j,k,a98;for(i=2;i100;i+)ai=i;k=sqrt(i);for(j=2;j=ai;j+)if(j=k+1) printf(%5d,ai);printf(n);7.2用選擇法對10個整數(shù)從小到大排序。main() int i,j,a10,t;for(i=0;i10;i+)scanf(%d,&ai);for(j=1;j10;j+)for(i=0;iai+1) t=ai+1;ai+1=ai;ai=t;for(i=0;i10;i+)printf(%5d,ai);或main()static int a10,i,j,k,t;for(i=1;i11;i+)scanf(%d,&ai);for(j=1;j10;j+)for(i=1;iai+1) t=ai+1;ai+1=ai;ai=t;for(i=1;i11;i+)printf(%d,ai);printf(n);7.3求

溫馨提示

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

評論

0/150

提交評論