第一篇:C語言課后習(xí)題答案
C語言課后習(xí)題答案-第四版-第一章
5、請參照本章例題,編寫一個C語言程序,輸出以下信息: **************************** V e r y G o o d!**************************** #include
printf(“**************************nn”);printf(“
Very Good!nn”);printf(“**************************n”);return 0;}
6、編寫一個C語言程序,輸入a,b,c三個值,輸出其中最大值。#include
第3章
1、假如我國國民生產(chǎn)總值的年增長率為9%,計算10年后我國國民生產(chǎn)總值與現(xiàn)在相比增長多少百分比。計算公式為
P=(1+r)^n r 為年增長率,n 為年數(shù),p為與現(xiàn)在相比的倍數(shù)。#include
2、存款利息計算。有1000元,想存5年,可按以下5種辦法存:(1)一次存5年期。
(2)先存2年期,到期后將本息在存3年期。(3)先存3年期,到期后將本息在存2年期。
(4)先存1年期,到期后將本息在存1年期,連續(xù)存5次。(5)存活期存款?;钇诶⒚恳患径冉Y(jié)算一次。2007年12月的銀行存款利息如下: 1年定期存款利息為4.14%; 2年定期存款利息為4.68%; 3年定期存款利息為5.4%; 5年定期存款利息為5.85%;
活期存款利息為0.27%(活期利息每一季度結(jié)算一次。)如果r 為年利率,n 為存款年數(shù),則計算本息和的公式為 1年期本息和:P=1000*(1+r);n年期本息和:P=1000*(1+n*r);存n次1年期的本息和:P=1000*(1+ r)^n;存活期本息和:P=1000*(1+r/4)^4n。
說明:P=1000*(1+r/4)^4n。是一個季度的本息和。#include
// 一次存5年期
p2=p*(1+2*r2)*(1+3*r3);
// 先存2年期,到期后將本息再存3年期
p3=p*(1+3*r3)*(1+2*r2);
// 先存3年期,到期后將本息再存2年期
p4=p*pow(1+r1,5);
// 存1年期,到期后將本息存再存1年期,連續(xù)存5次
p5=p*pow(1+r0/4,4*5);
// 存活期存款?;钇诶⒚恳患径冉Y(jié)算一次
printf(“p1=%fn”,p1);
// 輸出按第1方案得到的本息和
printf(“p2=%fn”,p2);
// 輸出按第2方案得到的本息和
printf(“p3=%fn”,p3);
// 輸出按第3方案得到的本息和
printf(“p4=%fn”,p4);
// 輸出按第4方案得到的本息和
printf(“p5=%fn”,p5);
// 輸出按第5方案得到的本息和
return 0;}
3、購房從銀行貸了一筆款d,準(zhǔn)備每月還款額為p,月利率為r,計算多少月能還清。設(shè)d為300000元,p為6000元,r為1%。對求得的月份取小數(shù)點后一位,對第2位按四舍五入處理。提示:計算還請月數(shù)m 的公式如下: m =[ log p –log(p-d*r)] / log(1+r)可以講公式該寫為
m ={ log [p /(p – d*r)] }/ log(1+r)C的庫函數(shù)中有求對數(shù)的函數(shù)log10,是求以10為底的對數(shù),log(p)表示log p。#include
6、請編將“China”,編譯成密碼,密碼規(guī)律是:用原有的字母后面第4個字母代替原來的字母。#include
7、設(shè)圓半徑r =1.5,圓柱高h(yuǎn)=3,求圓周長、圓面積、圓柱表面積、圓柱體積。用scanf輸入數(shù)據(jù),輸出計算結(jié)果,輸出時要求有文字說明,取小數(shù)點后2位數(shù)字。請編程序。#include
//要求輸入圓半徑r和圓柱高h(yuǎn)
l=2*pi*r;
//計算圓周長l s=r*r*pi;
//計算圓面積s sq=4*pi*r*r;
//計算圓球表面積sq vq=3.0/4.0*pi*r*r*r;
//計算圓球體積vq vz=pi*r*r*h;
//計算圓柱體積vz printf(“圓周長為:
l=%6.2fn”,l);printf(“圓面積為:
s=%6.2fn”,s);
printf(“圓球表面積為:
sq=%6.2fn”,sq);printf(“圓球體積為:
v=%6.2fn”,vq);printf(“圓柱體積為:
vz=%6.2fn”,vz);return 0;}
第四章
4、有3個正整數(shù)a,b,c,有鍵盤輸入,輸出其中最大的數(shù)。#include if(b printf(“max=%dn”,c); else printf(“max=%dn”,b); else if(a printf(“max=%dn”,c);else } printf(“max=%dn”,a);return 0; 4、有3個正整數(shù)a,b,c,有鍵盤輸入,輸出其中最大的數(shù)。#include int a,b,c,temp,max;printf(“請輸入三個整數(shù):”);scanf(“%d,%d,%d”,&a,&b,&c);temp=(a>b)?a:b; /*將a和b中的大者存入temp中*/ max=(temp>c)?temp:c; /*將a和b中的大者與c比較,取最大者*/ printf(“三個整數(shù)的最大數(shù)是%dn”,max);return 0;} 5、從鍵盤輸入一個小于1000的正整數(shù),要求輸出它的平方根(如平方根不是整數(shù),則輸出其整數(shù)部分)。要求在輸入數(shù)據(jù)后先對其檢查是否為小于1000的正數(shù)。若不是,則要求從新輸入。#include printf(“請輸入一個小于%d的整數(shù)i:”,M);scanf(“%d”,&i);while(i>M) { printf(“輸入的數(shù)不符合要求,請重新輸入一個小于%d的整數(shù)i:”,M); } k=sqrt(i);printf(“%d的平方根的整數(shù)部分是:%dn”,i,k);return 0;} 6、有一個函數(shù): scanf(“%d”,&i); x (x<1) y(1<=x<10) 3*x – 11 (x>=10)= 2*x1 (x<0) Y = 0 (x=0) (x>0) 寫程序,輸入x 的值,輸出y 相應(yīng)的值。#include int x,y; printf(“please enter x:”); scanf(“%d”,&x); y=0; if(x>=0) if(x>0)y=1; else y=-1; printf(“x=%d,y=%dn”,x,y);return 0;{ } 8、給出一百分制成績,要求輸出成績等級‘A’,’B’,’C’,’D’,’E’。90分以上為‘A’,80~89分為’B’,70~79分為’C’,60~69分為’D’,60分以下為’E’。#include char grade; printf(“請輸入學(xué)生成績:”); scanf(“%f”,&score); while(score>100||score<0){ } switch((int)(score/10)){ case 10: case 9: grade='A';break;case 8: grade='B';break;case 7: grade='C';break;printf(“n 輸入有誤,請重輸”);scanf(“%f”,&score);case 6: grade='D';break;case 5: case 4: case 3: case 2: case 1: case 0: grade='E';} printf(“成績是 %5.1f,相應(yīng)的等級是%cn ”,score,grade);return 0;} 9、給出一個不多于5位數(shù)的正整數(shù);(1)求出它是幾位數(shù);(2)分別輸出每一位數(shù)字; (3)按逆順序輸出各位數(shù),例如原有數(shù)為123,應(yīng)輸出321.#include printf(“請輸入一個整數(shù)(0-99999):”);scanf(“%d”,&num);if(num>9999) place=5;else if(num>999)place=4;else if(num>99)place=3;else if(num>9)place=2;else place=1;printf(“位數(shù):%dn”,place);printf(“每位數(shù)字為:”);ten_thousand=num/10000;thousand=(int)(num-ten_thousand*10000)/1000;hundred=(int)(num-ten_thousand*10000-thousand*1000)/100;ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*100)/10;indiv=(int)(num-ten_thousand*10000-thousand*1000-hundred*100-ten*10);printf(“n反序數(shù)字為:”);switch(place){ case 5: printf(“%d%d%d%d%dn”,indiv,ten,hundred,thousand,ten_thousand);break;case break;case 3:printf(“%d%d%dn”,indiv,ten,hundred);break;case 2: printf(“%d%dn”,indiv,ten);break;case 1: printf(“%dn”,indiv);break;} return 0;} 11、輸入4個整數(shù),要求按由小到大的順序輸出。#include { t=a;a=b;b=t;} if(a>c)4: printf(“%d%d%d%dn”,indiv,ten,hundred,thousand); { 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(“排序結(jié)果如下: n”);printf(“%d %d %d %d n” ,a,b,c,d);return 0;} 12、有4個圓塔,圓心分別為(2,2)、(-2,2)、(-2,-2)、(2,-2),圓半徑為 1,這4個圓塔高位10cm, 塔以外無建筑物。求該點的建筑物高度(塔外的高度為零)。#include /*求該點到各中心點距離*/ d2=(x-x1)*(x-x1)+(y-y1)*(y-y1);d3=(x-x2)*(x-x2)+(y-y2)*(y-y2);d4=(x-x3)*(x-x3)+(y-y3)*(y-y3);if(d1>1 && d2>1 && d3>1 && d4>1) h=0;/*判斷該點是否在塔外*/ printf(“該點高度為 %dn”,h);return 0;} 第五章 例5.7 用pi/4=1-1/3+1/5-1/7+??公式求pi近似值,直到發(fā)現(xiàn)某一項的絕對值小于10^6為止。 #include // 程序中用到數(shù)學(xué)函數(shù)fabs,應(yīng)包含頭文件math.n int main(){ int sign=1,count=0; // sign用來表示數(shù)值的符號,count用來統(tǒng)計循環(huán)次數(shù) double pi=0.0,n=1.0,term=1.0;// pi開始代表多項式的值,最后代表π的值,n 代 表 分 母,term代表當(dāng)前項的值 while(fabs(term)>=1e-8) // 檢查當(dāng)前項term的絕對值是否大于或等于10的(-6)次方 { pi=pi+term; // 把當(dāng)前項term累加到pi中 n=n+2; // n+2是下一項的分母 sign=-sign; // sign代表符號,下一項的符號與上一項符號相反 } pi=pi*4; // 多項式的和pi乘以4,才是π的近似值 printf(“pi=%10.8fn”,pi); // 輸出π的近似值 printf(“count=%dn”,count); // 輸出循環(huán)次數(shù) return 0;} 3、輸入兩個正整數(shù)m和n,求其最大公約數(shù)和最小公倍數(shù)。#include // 求出下一項的值term count++; // count累加1 { int p,r,n,m,temp;printf(“請輸入兩個正整數(shù)n,m:”);scanf(“%d,%d,”,&n,&m);if(n temp=n; n=m; m=temp;} p=n*m;while(m!=0){ r=n%m; n=m; m=r;} printf(“它們的最大公約數(shù)為:%dn”,n);printf(“它們的最小公約數(shù)為:%dn”,p/n);return 0;} 4、輸入一行字符,分別統(tǒng)計出其中英文字母、空格、數(shù)字和其他字符的個數(shù)。#include char c; int letters=0,space=0,digit=0,other=0; printf(“請輸入一行字符:n”); while((c=getchar())!='n') { if(c>='a' && c<='z' || c>='A' && c<='Z') letters++; else if(c==' ') space++; else if(c>='0' && c<='9') digit++; else other++; } printf(“字母數(shù):%dn空格數(shù):%dn數(shù)字?jǐn)?shù):%dn其它字符數(shù):%dn”,letters,space,digit,other); return 0; } 5、求Sn=a+aa+aaa+??+aa??a之值,其中a是一個數(shù)字,n 表示a 的位數(shù)。n 由鍵盤輸入。#include } printf(“a+aa+aaa+...=%dn”,sn);return 0;} 6、求和:1!+2!+3!+??+20!。#include t=t*n; s=s+t;} printf(“1!+2!+...+20!=%22.15en”,s);return 0;} 7、求1+2+3+??+100+1+2^2+3^2+4^2++50^2+1+1/2+1/3+1/4+??+1/10。#include {s1=s1+k;} for(k=1;k<=n2;k++)/*計算1到50各數(shù)的平方和*/ {s2=s2+k*k;} for(k=1;k<=n3;k++)/*計算1到10的各倒數(shù)和*/ ? ? {s3=s3+1/k;} printf(“sum=%15.6fn”,s1+s2+s3);return 0;} 8、輸出所有的“水仙花數(shù)”,所謂“水仙花數(shù)”是指一個3位數(shù),其各位數(shù)字立方和等于該數(shù)本身。例如153是一位水仙花數(shù),因為153=13+53+33。#include } printf(“n”);return 0;i=n/100;j=n/10-i*10;k=n%10;if(n==i*i*i + j*j*j + k*k*k)printf(“%d ”,n);} 9、編程求1000之內(nèi)的完數(shù),并按下面格式輸出其因子:its factors are 1,2,3 #include s=0;for(i=1;i if((m%i)==0)s=s+i;if(s==m){ } printf(“%d,its factors are ”,m);for(i=1;i } return 0;} 10、有一個分?jǐn)?shù)序列: 2/1,3/2,5/3,8/5,13/8,21/13,?? 求出這個數(shù)列前20項之和。#include } printf(“sum=%16.10fn”,s);return 0;} 11、一個球從100米敢賭下落,每次反彈高度為原來的一半,在下落,在反彈。求第10次落地時共經(jīng)過多少米?第10次反彈多高? #include } printf(“第10次落地時共經(jīng)過%f米n”,sn);printf(“第10次反彈%f米n”,hn);return 0;} 12、猴子吃桃問題。猴子第1天摘了若干個桃子,當(dāng)即吃了一半零一個;第2剩下的吃了一半零一個,一次循環(huán)。到第十天時想吃就剩下一個桃子。求第一天摘了幾個桃子? #include /*第n次落地時共經(jīng)過的米數(shù)*/ hn=hn/2; /*第n次反跳高度*/ while(day>0){ x1=(x2+1)*2; /*第1天的桃子數(shù)是第2天桃子數(shù)加1后的2倍.*/ } printf(“total=%dn”,x1);return 0;} 16、輸出以下圖案: * *** ***** ******* ***** *** * #include 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”);} return 0;} 17、甲隊A,B,C 3 人,乙隊 X,Y,Z 3人。A不和X比;X,Z比,請編程找出3 對賽手的名單。#include int main(){ C不和 char i,j,k; /*是a的對手;j是b的對手;k是c的對手*/ for(i='x';i<='z';i++) } 第六章 1、用篩選法求100之內(nèi)的素數(shù)。#include for(i=1;i<=100;i++) a[i]=i; a[1]=0; for(i=2;i if(i!=j) for(k='x';k<='z';k++) if(i!=k && j!=k) if(i!='x' && k!='x' && k!='z') printf(“A--%cnB--%cnC--%cn”,i,j,k); return 0; for(j=i+1;j<=100;j++) { if(a[i]!=0 && a[j]!=0) if(a[j]%a[i]==0) a[j]=0; } printf(“n”); for(i=2,n=0;i<=100;i++){ if(a[i]!=0) { printf(“%5d”,a[i]); n++; } if(n==10) { printf(“n”); n=0; } } printf(“n”); return 0;} 2、用選擇法對10個整數(shù)排序。#include printf(“enter data:n”); for(i=1;i<=10;i++) { printf(“a[%d]=”,i); scanf(“%d”,&a[i]); } printf(“n”); printf(“The orginal numbers:n”); for(i=1;i<=10;i++) printf(“%5d”,a[i]); printf(“n”); for(i=1;i<=9;i++){ min=i; for(j=i+1;j<=10;j++) if(a[min]>a[j])min=j; temp=a[i]; a[i]=a[min]; a[min]=temp; } printf(“nThe sorted numbers:n”); for(i=1;i<=10;i++) printf(“%5d”,a[i]); printf(“n”); return 0;} 3、求一個3 x 3 的整型矩陣對角線元素之和。#include printf(“enter data:n”); for(i=0;i<3;i++) for(j=0;j<3;j++) scanf(“%3d”,&a[i][j]); for(i=0;i<3;i++) sum=sum+a[i][i]; printf(“sum=%6dn”,sum); return 0;} 4、有一個已排好序的數(shù)組,要求輸入一個數(shù)后,按原來排序的規(guī)律將它插入數(shù)組中。#include int temp1,temp2,number,end,i,j; printf(“array a:n”); for(i=0;i<10;i++) printf(“%5d”,a[i]); printf(“n”); printf(“insert data:”); scanf(“%d”,&number); end=a[9]; if(number>end) a[10]=number; else { for(i=0;i<10;i++){ if(a[i]>number) { temp1=a[i]; a[i]=number; for(j=i+1;j<11;j++) { temp2=a[j]; a[j]=temp1; temp1=temp2; } break; } } } printf(“Now array a:n”); for(i=0;i<11;i++) printf(“%5d”,a[i]); printf(“n”); return 0;} 5、將一個數(shù)組中的值按逆順序重新存放。例如:8,6,5,4,1。要求改為:1,4,5,6,8.。#include printf(“enter array a:n”); for(i=0;i scanf(“%d”,&a[i]); printf(“array a:n”); for(i=0;i printf(“%4d”,a[i]); for(i=0;i 素的值互換 { temp=a[i]; a[i]=a[N-i-1]; a[N-i-1]=temp; } printf(“nNow,array a:n”);for(i=0;i printf(“%4d”,a[i]); //循環(huán)的作用是將對稱的元 printf(“n”); return 0;} 6、輸出以下楊輝三角形(要求輸出10行)。1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 ???????????? #include for(i=0;i { a[i][i]=1; a[i][0]=1; } for(i=2;i for(j=1;j<=i-1;j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=0;i printf(“%6d”,a[i][j]); printf(“n”); } printf(“n”); return 0;} 7、輸出“魔方陣”。所謂魔方陣就是每行每列和對角線之和相等。例如: 1 6 3 5 7 4 9 2 要求輸出1~n^2的自然數(shù)構(gòu)成的魔方陣。#include p=1; while(p==1){ printf(“enter n(n=1--15):”); scanf(“%d”,&n); if((n!=0)&&(n<=15)&&(n%2!=0)) p=0; } for(i=1;i<=n;i++) for(j=1;j<=n;j++) a[i][j]=0; j=n/2+1; a[1][j]=1; for(k=2;k<=n*n;k++){ i=i-1; j=j+1; if((i<1)&&(j>n)) { i=i+2; j=j-1; } else { if(i<1)i=n; if(j>n)j=1; } if(a[i][j]==0) a[i][j]=k; else { i=i+2; j=j-1; a[i][j]=k; } } for(i=1;i<=n;i++) {for(j=1;j<=n;j++) printf(“%5d”,a[i][j]); printf(“n”); } return 0;} 9、有15個數(shù)按由大到小順序存放在一個數(shù)組中,輸入一個數(shù),要求折半查找法找出該數(shù)是數(shù)組中第幾個元素值。如果不在數(shù)組中則輸出“無此數(shù)”。#include int i,number,top,bott,mid,loca,a[N],flag=1,sign; char c; printf(“enter data:n”); scanf(“%d”,&a[0]); i=1; while(i { scanf(“%d”,&a[i]); if(a[i]>=a[i-1]) i++; else printf(“enter this data again:n”); } printf(“n”); for(i=0;i printf(“%5d”,a[i]); printf(“n”); while(flag){ printf(“input number to look for:”); scanf(“%d”,&number); sign=0; top=0; //top是查找區(qū)間的起始位置 bott=N-1; //bott是查找區(qū)間的最末位置 if((numbera[N-1]))//要查的數(shù)不在查找區(qū)間內(nèi) loca=-1; // 表示找不到 while((!sign)&&(top<=bott)) {mid=(bott+top)/2; if(number==a[mid]) { loca=mid; printf(“Has is %dn”,number,loca+1); sign=1; }