譚浩強C程序設計第二版習題解答_第1頁
譚浩強C程序設計第二版習題解答_第2頁
譚浩強C程序設計第二版習題解答_第3頁
譚浩強C程序設計第二版習題解答_第4頁
譚浩強C程序設計第二版習題解答_第5頁
已閱讀5頁,還剩15頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、譚浩強C程序設計(第二版)習題 解答第一章1.5請參照本章例題,編寫一個 C程序,輸出以下信息:*VeryGood!*1.6編寫一個C程序,輸入a、b、c3個值,輸出其中最大者。第三章3.3請將下面各數用八進制和十六進制(補碼)表示:(1)10(2)32( 3)75(4)-617( 5)-111(6)2483 ( 7)-28654( 8)210033.5字符常量與字符串常量有什么區別?3.6寫出以下程序運行的結果。main () char c1= ' a' ,c2= ' b' ,c3= ' c' ,c4= ' 101 ' ,c5=

2、 ' 116 'printf(“a%cb%ctc%ctabcn ”,c1,c2,c3);printf( “tb%c%c”,c4,c5);3.7要將” China”譯成密碼,密碼規律是:用原來的字母后面第4個字母代替原來的字母。例如,字母” A”后面第4個字母是” E”,用” E”代替” A”。因 此,” China”應譯為” Glmre”。請編一程序,用賦初值的方法使c1、c2、c3、c4、c5五個變量的值分別為C'、 h'、 i '、 n'、 a',經過運算,使c1、c2、 c3、c4、c5 分別變為'G、' I、

3、9; m'、' r '、' e',并輸出。3.8例3.6能否改成如下:main ()in t c1,c2;c1=97;c2=98;printf(“ %c%cn ,c1,c2);printf(“ %d%dn ,c1,c2);3.9求下面算術表達式的值。(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.53.10寫出程序運行結果main () int i,j,m, n;i=8;j=10;m=+l;n=j+;printf(“

4、d,%d,%d,%”,i,j,m,n);3.12寫出下面表達式運算后 a的值,設原來a=12。設a和已定義為整型變量。(1)a+=a(2)a-=2 a*=2+3 a/=a+a(5)a%=(n%=2), n 的值等于 5a+=a-=a*=a第四章4.3 C語言為什么要把輸入輸出的功能作為函數,而不作為語言的基本部分?4.4 若 a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274, n=128765, c仁'a' c2=' b'。想得到以下的輸出格式和結果,請寫出程序(包括定義變量類型和設 計輸出)。要求輸出的結果如下:aF 3口口 b=

5、4口口 c= 5x=1.200000,y=2.400000,z=-3.600000x+y=D3.60 y+z=-1.20 z+x=-2.40u= 51274口 n=口 128765c1 = ' a' or 97(ASCII)c2=' b' or 97(ASCII)4.5請寫出下面程序的輸出結果:#include "stdio.h"main () int a=5,b=7;float x=67.8564,y=-789.124;char c='A'long n=1234567;un sig ned u=65535;prin tf(&

6、quot;%d%dn",a,b);prin tf("%3d%3dn",a,b);prin tf("%f,%fn",x,y);prin tf("%-10f,%-10fn",x,y);prin tf("%8.2f,%8.2f,%.4f,%.4f,%3f,%3fn",x,y,x,y,x,y);prin tf("%e,%10.2en",x,y);prin tf("%c,%d,%o,%xn",c,c,c,c);prin tf("%ld,%lo,%xn",

7、n,n,n);prin tf("%u,%o,%x,%dn",u,u,u,u);prin tf("%s,%5.3sn","COMPUTER","COMPUTER");4.8設圓半徑r=1.5,圓柱高h=3,求圓周長、圓面積、圓球表面積、圓球體積、 圓柱體積。用scanf輸入數據,輸出計算結果,輸出時要求有文字說明,取小 數點后2位數字。請編程序。4. 9輸入一個華氏溫度,要求輸出攝氏溫度。公式為5c -(F 32)輸出要有文字說明,取2位小數。94. 10編程序,用getchar函數讀入兩個字符給 c1、c2,然后分

8、別用putchar 函數和printf函數輸出這兩個字符。并思考以下問題:(1) 變量c1、c2應定義為字符型或整型?抑二者皆可?(2) 要求輸出c1和c2值的ASCII碼,應如何處理?用putchar函數還是printf 函數?(3) 整型變量與字符變量是否在任何情況下都可以互相代替?如char c1,c2;與int c1,c2;是否無條件地等價?第五章5.3寫出下面各邏輯表達式的值。設 a=3,b=4,c=5。(1)a+b>c&&b= =c(3) !(a>b)&&!c|1(5) !(a+b)+c-1 &&b+c/25.45.5有3

9、個整數a、b、c,有一函數:x(x2x3x(2) a|b+c&&b-c(4) !(x=a)&&(y=b)&&0由鍵盤輸入,輸出其中最大的數。1)1(1 x 10),寫一程序,輸入x,輸出y值。11(x10)給出一百分制成績,要求輸出成績等級A'、B'、C'、D'、'E'。A', 8089 分為B', 7079 分為C,6069 分為D,60 分以5.690分以上為'下為E'5.8企業發放的獎金根據利潤提成。利潤I低于或等于10萬元的,獎金可提10%利潤高于10萬元,低

10、于20萬元(100000<I < 200000)時,低于10萬元的部分 按10%提成,高于10萬元的部分,可提成7.5%; 20萬元<1 <40萬元時,低于 20萬元的部分仍按上述辦法提成(下同),高于20萬元的部分按5%§成;40萬 元<1 < 60萬元時,高于40萬元的部分按3%提成;60萬元<1 < 100萬元時,高 于60萬元的部分按1.5%提成;I>100萬元時,超過100萬元的部分按1勉成。 從鍵盤輸入當月利潤I,求應發獎金總數。要求:(1)用if語句編程序;(2)用switch語句編程序。5.9輸入4個整數,要求按由

11、小到大的順序輸出。5.10 有 4 個圓塔,圓心分別為(2, 2),(-2,2),(-2,-2 ),(2,-2 ),圓半 徑為1。這4個塔的高度為10m,塔以外無建筑物。今輸入任一點的坐標,求該 點的建筑高度(塔外的高度為零)。22m和 n,6.1輸入兩個正整數m和 n,求其最大公約數和最小公倍數。英文字母、空格、數字和其他字符的個數。:26.2輸入一行字符,分別統計出其中祕亠"掾蚪宀叢06.3求Sn a aa aaa aa a之值,其中a是一個數字 例如:2+22+222+2222+22222(此時 n=5), n 由鍵盤輸入。206.4 求 n!(即求 1! +2! +3! +4

12、! + +20!)。n 110100506.5 求 k k2n 1k 16.6打印出所有的“水仙花數”,所謂“水仙花數”是指一個3位數,其各位數 字立方和等于該數本身。例如,153是一水仙花數,因為153=13+53+33。6.7 一個數如果恰好等于它的因子之和,這個數就稱為“完數” 。例如,6的因 子為1、2、3,而6=1+2+3,因此6是“完數”。編程序找出1000之內的所有完 數,并按下面格式輸出其因子:6 its factors are 1,2,36.8有一分數序列2 3 5 8 13 211,2,3,5, 8 ,13,求出這個數列的前20項之和。6.9 一球從100m高度自由落下,每

13、次落地后反跳回原來高度的一半,再落下。求它在第10次落地時,共經過多少米?第10次反彈多高?6.10猴子吃桃問題。猴子第一天摘下若干個桃子,當即吃了一半,還不過癮, 又多吃了一個。第二天早上又將剩下的桃子吃掉了一半,又多吃了一個。以后 每天早上都吃了前一天剩下的一半零一個。到第10天早上想再吃時,就只剩下一個桃子了。求第一天共摘了多少桃子。6.11用迭代法求x ,.a。求平方根的迭代公式為xn1 1 (xn皂)2Xn5 要求前后兩次求出的x的差的絕對值小于10。(可不做)6.12用牛頓迭代法求下面方程在1.5附近的根。(可不做)322x -4x +3x-6=06.13用二分法求下面方程在(-1

14、0,10)之間的根。(可不做) 2x3-4x 2+3x-6=06.14打印出以下圖案。6.15兩個乒乓球隊進行比賽,各出 3人。甲隊為A B、C3人,乙隊為X、Y、 Z3人。已抽簽決定比賽名單。有人向隊員打聽比賽的名單,A說他不和X比,C說他不和X、Z比,請編程序找出3對賽手的名單。C程序設計習題解答1.5mai n() printf("*n");prin tf("n");printf("Very Good!n");prin tf("n");printf("*n");1.6mai n() int

15、 a,b,c,max;prin tf("i nput a,b,c:n");sca nf("%d,%d,%d",&a,&b,&c);max=a;if(max<b) max=b; if(max<c) max=c; prin tf("max=%d",max);第二章習題解略第第三章要點:1、C語言的數據類型P38圖2、常量、變量的約定及各類數據常量、變量使用的約定。3.3、(10)、(32)、(75)3、運算符及表達式的約定和應用。難點:自加、自減的用法及其運算后的值。 逗號運算符及逗號表達式的用法10=

16、(12) 8=(a) 1610=(40) 8=(20) 1610= (113) 8=(4b) 16、(-617)10=( 176627)8=(fd97) 16、(-111)10=(177621) 8=(ff91) 16、(2483)10=( 4663)8=(9B3) 16、(-28654) 10=(110022)8=(9012)16(8)、(21003) 10=(51013) 8=(520B)163.4略3.5字符常量是一個字符,用單引號括起來。字符串常量是由0個或若干個字符 組合而成,用雙引號把它們括起來,存儲時自動在字符串最后加一個結束符號0。3.6運行結果為:aabb cc abcAN3

17、.7main () 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%”nc1,c2,c3,c4,c5);3.8可以。因為在可輸出的字符范圍內,用整型和用字符型作用相同3.9(1) 2.5(2) 3.53.10結果為:9,11,9,103.12(1)2 4(2)10(3)6 0(4)0(5)0(6)0第三早第四章要點:1、C語句分類2、賦值語句的用法3、數據輸

18、入輸出的語句的用法。特別注意格式輸入、輸出語句的用法,要看到 語句能寫出輸入、輸出結果,給出輸入、輸出結果能寫出語句。4、順序程序的概念、結構。4.3 不把輸入輸出作為C語言提供的語句的目的是使 C語言編譯系統簡單,因 為將語句翻譯成二進制的指令是在編譯階段完成的,沒有輸入輸出語句就是可 以避免在編譯階段處理與硬件有關的問題,可以使編譯系統簡化,而且通用性強,可移植性好,對各種型號的計算機都適用,便于在各種計算機上實現。4.4mai n() int a,b,c;long int u,n;float x,y,z;char c1,c2;a=3;b=4;c=5;x=1.2;y=2.4;z=-3.6;

19、u=51274; n=128765;c1 = ' a' ;c2= ' b'printf( “ n ” );printf(“ a=%2d b=%2d c=%2dn”,a,b,c);printf(“ x=%8.6f,y=%8.6f,z=%9.6fn ”,x,y,z);printf( “x+y=%5.2f y+z=%5.2f z+x=%5.2fn”,x+y,y+z,z+x);printf( “ u=%6ld n=%9ldn ” ,u,n);printf(“ c1=' %C or %d(ASCII)n ” ,c1,c1);printf(“ c2=' %c

20、 or %d(ASCII)n ”,c2,c2);4.557 5口 767.856400,-789.12400067.856400 ,-789.124000 67.86, -789.12,67.8564,-789.1240, 67.856400,-789.124000 6.785640e+01, -7.89e+02A,65,101,411234567,4553207,d68765535,177777,ffff,-1COMPUTE口 COM4.8#include "stdio.h"#defi ne PI 3.1416void mai n()float h,r,l,s,sq,vq

21、,vz;printf("input r, hn");sca nf("%f,%f",&r,&h);l=2*PI*r; s=r*r*PI; sq=4*PI*r*r;vq=3.0/4.0*PI*r*r*r; vz=PI*r*r*h;prin tf("l=%6.2fn",l);prin tf("s=%6.2fn",s);prin tf("sq=%6.2fn",sq);prin tf("sv=%6.2fn",vq);prin tf("sz=%6.2fn&quo

22、t;,vz);4. 9main () float c,f;printf(“請輸入一個華氏溫度:n ”);scanf( “f”,&f);c=(5.0/9.0)*(f-32);printf(“攝氏溫度為:5.2n” ,c);4. 10#include“ stdio.h ”main () char c1,c2;printf( “ in put c1,c2n” );scanf(%c,%c ”,&c1,&c2); putchar(cl);putchar(c2);printf(“ n ” );printf(“ %c%cn ,c1,c2);第5章第五章要點:1、關系運算符和關系運算式

23、;2、邏輯運算符和邏輯運算式、;3、IF語句的三種形式;4、條件運算符;5、switch語句的用法;5.3(1)0( 2) 1( 3) 1(4)0( 5)15.4main()int a,b,c,t,max;printf( “ in put a,b,c:”);scanf( “d,%d,%d,&a,&b,&c); t=(a>b)?a:b;max=(t>c)?t:c;printf( “ max=%d ,max);5.5mai n() float x,y;printf( “ in put x: ” );sca nf( “ f”,&x);if (x<1)

24、y=x;else if (x<10) y=2*x-1; else y=3*x-11;printf(“x=%f, y=%fn ”,x,y);5.6mai n() int score,t,logic;char grade; logie=1; while(logic) prin tf(“ in put score:” );scanf(“%d,&score);“error ” );if (score>100|score<0) pri ntf( else logic=0; printf(“n ” );break;'B' ;break;'C' ;b

25、reak;'D' ;break;if (score= =100) t=9; else t=(i nt)(score/10); switch(t) case 9: grade= ' A' case 8: grade= case 7: grade= case 6: grade= case5: case4: case3: case2: case1: case0: grade= ' E'else if (I<=1e6)bon us=bo n6+(i-600000)*0.015;5.8(1)用mai n() long i;float bon us,b

26、o n1,bo n2,bo n4 ,bo n6,bo n10; bo n仁 100000*0.1;bon 2=bo n1+100000*0.075;bon 4=bo n2+200000*0.05;bon 6=bo n4+200000*0.03;bon 10=b on6+40000*0.015;scanf(%ld ”,&i);if (i<1e5) bonu s=i*0.1;if語句/*/*/*/*/*利潤為10萬元時的獎金 利潤為20萬元時的獎金 利潤為40萬元時的獎金利潤為60萬元時的獎金*/*/*/*/利潤為100萬元時的獎金*/else if (i<=2e5)bon u

27、s=bo n1+(i-100000)*0.075;else if (I<=4e5)bon us=bo n2+(i-200000)*0.05;else if (I<=6e5)bon us=bo n4+(i-400000)*0.03;else bo nus =bo n10+(i-100000)*0.01;printf(“ bonus=%10.2f”,bonus);用switch 編寫mai n() long i;float t, bonu s,bo n1,bo n2,bo n4 ,bo n6,bo n10;in t c;bo n仁 100000*0.1;bon 2=bo n1+1000

28、00*0.075;bon 4=bo n2+200000*0.05;bon 6=bo n4+200000*0.03;bon 10=b on6+40000*0.015;scanf(%ld ”,&i);c=i/100000;if( c>10) c=10;switch(c) case 0: bonu s=i*0.1; break;case 1: bon us=b on 1+(i-100000)*0.075; break; case 2:case 3: bon us=bo n2+(i-200000)*0.05; break;case 4:case 5: bon us=bo n4+(i-40

29、0000)*0.03; break; case 6:case 7:case 8:case 9: bon us=b on 6+(i-600000)*0.015; break; case 10: bonus=bon 10+(i-1000000)*0.01;printf(“ bonus=%10.2f” ,bonus);5.9mai n() int t,a,b,c,d;scanf(“ d,%d,%d,%”,&a,&b,&c,&d);printf( “ na=%d,b=%d,c=%d,d=%dn ,a,b,c,d);if (a>b) t=a;a=b;b=t;if (

30、a>c) t=a;a=c;c=t;if (a>d) t=a;a=d;d=t;if (b>c) t=b;b=c;c=t;if (b>d) t=b;b=d;d=t;if (c>d) t=c;c=d;d=t;printf( “ %d %d %d %dn ,a,b,c,d);5.10mai n() int h=10;float X,y,x0=2,y0=2,d1,d2,d3,d4;prin tf(“ in put x,y: ” );scanf( “ f,%f”,&x,&y); d1=(x-x0)*(x-x0)+(y-y0)*(y-y0); d2=(x-x0)

31、*(x-x0)+(y+y0)*(y+y0); d3=(x+x0)*(x+x0)+(y-y0)*(y-y0); d4=(x+x0)*(x+x0)+(y+y0)*(y+y0); if(d1>1 &&d2>1 &&d3>1 &&d4>1) h=0; printf( “ h=%d ,h)第6章要點:1、實現循環的語句。2、幾種循環的比較3、讀程序寫結果。常見問題的程序設計。6.1#i nclude<stdio.h> mai n()int a,b, n1, n2,t;printf( “ in put a,bn ”); s

32、canf( “%d,%d,&n 1,&n2); if(n 1>n2) t=n1;n1=n2;n2=t; a=n 2;b=n1;while(b!=0)t=a%b; a=b; b=t; printf( printf(“最大公約數為:dn” ,a); “最小公倍數為:%dn, n1*n 2/a);6.2#i nclude<stdio.h>#i nclude <stdio.h>mai n() char c;int letters=0,space=0,digit=0,other=0; printf(“輸入一行字符:n ”);while(c=getchar(

33、)!=' n ');if(c>= ' a' &&c<= z' |c>= ' A &&c<= Z' ) letters+; else if(c='' ) space+;else if(c>=' O' &&c<= 9' ) digit+;else other+;printf(“ l%d,%d,%d,%dn” ,letters,space,digit,other);6.3#i nclude<stdio.h>ma

34、i n()int a,n,coun t=1,s n=O,t n=O;scanf( “d,%d”,&a,&n);printf(“ a=%d n=%dn ,a,n);while(co unt<=n)tn=tn+a;sn=sn+tn;a=a*10;+co unt; “ ”printf( “a+aa+aaa+=%dn”,sn);6.4#i nclude<stdio.h>mai n() float n, s=0,t=1;for (n=1; n<=20; n+)t=t* n;s=s+t;printf( “ 1!+2!+3!+ +20!=%en” ,s);6.5#i

35、nclude<stdio.h>mai n()int n1=100 ,n 2=50 ,n 3=10;float k;float s1=0,s2=0,s3=0;for(k=1;k<=n1;k+) s1=s1+k;for(k=1;k<=n2;k+) s2=s2+k*k;for(k=1;k<=n3;k+) s3=s3+1/k;printf(“sum=%8.2r”,s1+s2+s3);6.6#i nclude<stdio.h>mai n()int i,j, n;printf(“水仙花數是:”);for (n=100; n<1000; n+) i=n/100

36、;j=n/10-i*10;k=n%10; lf(i*100+j*10+k=i*i*i+j*j*j+k*k*k) printf(“ %d ,n);printf( “ n ” );6.7#i nclude<stdio.h>mai n() static int k10;int i,j,n,s;for (j=2;j<=1000;j+)n=0;s=j;for (i=1;i<j;i+)if (j%i)=0)n+;s=s-i;kn =i;if (s=0)printf (“%5d是個完數,它的因子是:” ,j);for (i=1;i<=n;i+) printf(“%d ,ki);

37、prin tf("n"); 6.8#i nclude<stdio.h>mai n() float a=2,b=1,s=0;int n ,t ,nu mber=20;for (n=1; n<=nu mber; n+) s=s+a/b;t=a; a=a+b; b=t;printf( “sum=%9.6fn” ,s);6.9#i nclude<stdio.h>mai n() int n;float sn=100,h n=sn/2;for (n=2 ;n<=10, n+)sn=sn+2*h n;hn=h n/2;printf( “第10次落地時共

38、經過:f米n ”,sn);printf( “第 10 次反彈 %f米n ”,hn);6.10#i nclude<stdio.h>mai n() int day,x1,x2;day=10;x2=1;while(day>0)x仁(x2+1)*2;/*前1天的桃子數是當天桃子數加1后的2倍*/x2=x1;day-;printf( “桃子總數=%dn” ,x1);6.11#i nclude<stdio.h>#in clude <math.h>mai n() float a,x0,x1;prin tf( “ in put nn ”);scanf( “%f”,&a

39、mp;a);x0=a/2;x仁(x0+a/x0)/2;do x0=x1;x( x0+a/x0)/2;while( fabs(x0-x1)>=1e-5);printf( “ %5.2f 的平方根=%8.5fn ” ,a,x1);6.12牛頓迭代法又稱牛頓切線法。它采用以下的方法求根:先任意設定一個與其真實的根接近的值Xo作為第一次近似根,由Xo求出f(x 0),過(Xo, f(X 0)點做f(x) 的切線,交x軸于X1,把它作為第二次近似根;再由X1求出f(x 1),過(X1, f(x 1) 點做f(x)的切線,交X軸于X2,求出f(x 2);再作切線如此繼續下去,直到 足夠接近真正的根X為止。f ' (x o)=f(x o)/(x 1-X 0)Xi= X 0- f(x 0)/ f ' (x 0)這就是牛頓迭代公式。#in clude<math.h>main () float x,x0,f,f1;x=1.5;dox0=x;f=(2*x0-4)*x

溫馨提示

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

評論

0/150

提交評論