C语言程序设计第三版谭浩强主编第68章课后习题答案.docx
- 文档编号:15028990
- 上传时间:2023-06-29
- 格式:DOCX
- 页数:70
- 大小:35.64KB
C语言程序设计第三版谭浩强主编第68章课后习题答案.docx
《C语言程序设计第三版谭浩强主编第68章课后习题答案.docx》由会员分享,可在线阅读,更多相关《C语言程序设计第三版谭浩强主编第68章课后习题答案.docx(70页珍藏版)》请在冰点文库上搜索。
C语言程序设计第三版谭浩强主编第68章课后习题答案
C语言第6—8章课后习题答案
第六章循环语句
6.1输入两个正数,求最大公约数和最小公倍数.
#include
voidmain()
{inta,b,num1,num2,temp;
printf("请输入两个正整数:
\n");
scanf("%d,%d",&num1,&num2);
if(num1 { temp=num1; num1=num2; num2=temp; } a=num1,b=num2; while(b! =0) { temp=a%b; a=b; b=temp; } printf("它们的最大公约数为: %d\n",a); printf("它们的最小公倍数为: %d\n",num1*num2/a); } 编译已通过 6.2输入一行字符,分别统计出其中英文字母,空格,数字和其它字符的个数. 解: #include voidmain() { charc; intletters=0,space=0,degit=0,other=0; printf("请输入一行字符: \n"); while((c=getchar())! ='\n') { if(c>='a'&&c<='z'||c>'A'&&c<='Z') letters++; elseif(c=='') space++; elseif(c>='0'&&c<='9') digit++; else other++; } printf("其中: 字母数=%d空格数=%d数字数=%d其它字符数=%d\n",letters,space,digit,other); } 6.3求s(n)=a+aa+aaa+…+aa…a之值,其中a是一个数字,n表示a的位数。 解: voidmain() { inta,n,count=1,sn=0,tn=0; printf("请输入a和n的值: \n"); scanf("%d,%d",&a,&n); printf("a=%dn=%d\n",a,n); while(count<=n) { tn=tn+a; sn=sn+tn; a=a*10; ++count; } printf("a+aa+aaa+…=%d\n",sn); } 6.4求(即1+2! +3! +4! +…+20! ) voidmain() { floatn,s=0,t=1; for(n=1;n<=20;n++) { t=t*n; s=s+t; } printf("1! +2! +…+20! =%e\n",s); } 阶乘利用递归,再求和: #include usingnamespacestd; longFunc(intn) { if(1==n) returnn; if(n>1) returnn*Func(n-1); } main() { longs=0; inti=1; while(i<=6) { s=s+Func(i); i++; } cout< } 6.5求。 voidmain() { intk,N1=100,N2=50,N3=10; floats1=0.0,s2=0.0,s3=0.0; for(k=1;k<=N1;k++)/*计算1到100的和*/ { s1=s1+k; } for(k=1;k<=N2;k++)/*计算1到50各数平方和*/ { s2=s2+k*k; } for(k=1;k<=N3;k++)/*计算1到10各数倒数之和*/ { s3=s3+1.0/k; } printf("总和=%8.2f\n",s1+s2+s3); } 已通过 intmain() { intk=1,i=11,j=51; floats=0.0; while(k<=10) { s=s+k+k*k+1.0/k; while(k==10&&i<=50) { s=s+i+i*i; while(i=50&&j<=100) { s=s+j; j++; } i++; } k++; }} 6.6所谓“水仙开数”是指一个3位数,其个位数字立方和等于该数本身。 #include voidmain() { inti,j,k,n; printf("水仙花数是: \n"); for(n=100;n<1000;n++) { i=n/100; j=n/10-i*10; k=n%10; if(i*100+j*10+k==i*i*i+j*j*j+k*k*k) { printf("%d\n",n); } } printf("\n"); } 编译已通过153370371407 6.7一个数如果恰好等于它的因子之和,这个数就称为“完数”。 编程序找出1000之内的所有完数,并按下面格式输出其因子。 #include #defineM1000/*定义寻找范围*/ voidmain() { intk0,k1,k2,k3,k4,k5,k6,k7,k8,k9; inti,j,n,s; for(j=2;j<=M;j++) { n=0;s=j; for(i=1;i { if((j%i)==0) { n++; s=s-i; switch(n)/*将每个因子赋给k0,k1…k9*/ { case1: k0=i;break; case2: k1=i;break; case3: k2=i;break; case4: k3=i;break; case5: k4=i;break; case6: k5=i;break; case7: k6=i;break; case8: k7=i;break; case9: k8=i;break; case10: k9=i;break; }}} if(s==0) { printf("%d是一个完数,它的因子是",j); if(n>1) printf("%d,%d",k0,k1); if(n>2) printf(",%d",k2); if(n>3) printf(",%d",k3); if(n>4) printf(",%d",k4); if(n>5) printf(",%d",k5); if(n>6) printf(",%d",k6); if(n>7) printf(",%d",k7); if(n>8) printf(",%d",k8); if(n>9) printf(",%d",k9); printf("\n"); }}} 方法二: 此题用数组方法更为简单. voidmain() {intk[10]; inti,j,n,s; for(j=2;j<=1000;j++) { n=-1; s=j; for(i=1;i { if((j%i)==0) { n++; s=s-i; k[n]=i;/*将每个因子赋给k0,k1...k9*/ } } if(s==0) { printf("%d是一个完数,它的因子是: ",j); for(i=0;i printf("%d,",k[i]); printf("%d\n",k[n]); }}} 6.8有一个分数序列: 2/1,3/2,5/3,8/5,13/8,21/13,…求出这个数列的前20项之和. 解: #include voidmain() { intn,t,number=20; floata=2,b=1,s=0; for(n=1;n<=number;n++) { s=s+a/b; t=a,a=a+b,b=t; } printf("总和=%9.6f\n",s); } 编译已通过=32.660259 6.9球反弹问题 #include voidmain() { floatsn=100.0,hn=sn/2; intn; for(n=2;n<=10;n++) { sn=sn+2*hn;/*第n次落地时共经过的米数*/ hn=hn/2;/*第n次反跳高度*/ } printf("第10次落地时共经过%f米\n",sn); printf("第10次反弹%f米.\n",hn); } 编译已通过 经过299.609375m 反弹0.097656m 6.10猴子吃桃问题 #include voidmain() { intday,x1,x2; day=9; x2=1; while(day>0) { x1=(x2+1)*2; x2=x1; day--; } printf("桃子总数=%d\n",x1); } 编译已通过=1534 上面的程序是从最后一天计算,一直到第一天。 当while第一次循环,既day=9的时候,X1此时计算的是第9天的桃子数。 而X2既是X1前一天的桃子数。 计算出第9天的桃子数后,把X1的值赋值给X2,那么X2此时X2就表示第9天的桃子数,再通过while的循环,可以逐步求出第7天,第6天...一直到第一天的桃子数.这里X2=X1,就是一个赋值的过程,为的是求前一天的桃子数. 6.11用迭代法求x=。 求平方根的迭代公式为: 要求前后两次求出的差的绝对值小于0.00001。 #include #include voidmain() { floatx0,x1,a; scanf("%f",&a); x1=a/2; do { x0=x1; x1=(x0+a/x0)/2; }while(fabs(x0-x1)>=0.00001); printf("%.3f\n",x1); }编译已通过 6.12用牛顿迭代法求方程在1.5附近的根。 #include voidmain() { doublex,y;x=1.5; do { y=2*x*x*x-4*x*x+3*x-6; x=x-y/(6*x*x-8*x+3); }while(y! =0); printf("x=%.3f\n",x); }编译已通过x=2.000 6.13用二分法求方程在(-10,10)之间的根: #include voidmain() { doublex1,x2,y1,y2;x1=-10;x2=10; do { y1=2*x1*x1*x1-4*x1*x1+3*x1-6; x1=x1-y1/(6*x1*x1-8*x1+3); }while(y1! =0); do { y2=2*x2*x2*x2-4*x2*x2+3*x2-6; x2=x2-y2/(6*x2*x2-8*x2+3); }while(y2! =0); printf("x1=%.3f,x2=%.3f\n",x1,x2); } 编译已通过 x1=2.000,x2=2.000 6.14打印图案 #include voidmain() { inti,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"); }} 编译已通过 6.15乒乓比赛 #include voidmain() { chari,j,k;/*i是a的对手;j是b的对手;k是c的对手*/ for(i='x';i<='z';i++) { for(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("顺序为: \na--%c\tb--%c\tc--%c\n",i,j,k); }}}} }编译已通过 7.1用筛选法求100之内的素数. /*用筛选法求100之内的素数*/ #include #defineN101 voidmain() {inti,j,line,a[N]; for(i=2;i 6for(i=2;i for(j=i+1;j {if(a[i]! =0&&a[j]! =0) if(a[j]%a[i]==0) a[j]=0; 11printf("\n"); for(i=2,line=0;i {if(a[i]! =0) {printf("%5d",a[i]); line++; if(line==10) {printf("\n"); line=0;} } 21} 6,11,21没通过 7.2用选择法对10个数排序. /*选择法排序.*/ #include #defineN10 voidmain() {inti,j,min,temp,a[N]; /*输入数据*/ printf("请输入十个数: \n"); for(i=0;i {printf("a[%d]=",i); scanf("%d",&a[i]); } printf("\n"); for(i=0;i printf("%5d",a[i]); printf("\n"); /*排序*/ for(i=0;i {min=i; for(j=i+1;j if(a[min]>a[j])min=j; temp=a[i]; a[i]=a[min]; a[min]=temp; } /*输出*/ printf("\n排序结果如下: \n"); for(i=0;i printf("%5d",a[i]); } 编译已通过 7.3对角线和: /*计算矩阵对角线元素之和*/ #include #include voidmain() { inta[3][3]; inti,j;//i为行j为列 intsum=0; intsum1=0; //输入 for(i=0;i<=2;i++) { for(j=0;j<=2;j++) { printf("请输入第%d行第%d列的数: ",i+1,j+1); scanf("%d",&a[i][j]); } printf("\n"); } //求和 for(i=0;i<=2;i++) { for(j=0;j<=2;j++) { if(i==j) sum=sum+a[i][j]; if(i+j==2) sum1=sum1+a[i][j]; }} 7.4插入数据到数组 /*插入数据到数组*/ #include voidmain() { inta[11]={1,3,6,9,13,15,19,27,30,80}; inttemp1,temp2,number,end,i,j; printf("初始数组如下: "); for(i=0;i<10;i++) printf("%5d",a[i]); printf("\n"); printf("输入插入数据: "); 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; }}} for(i=0;i<11;i++) printf("%6d",a[i]); printf("\n"); }编译已通过 7.5将一个数组逆序存放。 /*数组逆序存放*/ #include #defineN5 voidmain() { inta[N]={8,6,5,4,1},i,temp; printf("\n初始数组: \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("\n交换后的数组: \n"); for(i=0;i printf("%4d",a[i]); }无错误 7.6杨辉三角 /*打印杨辉三角形*/ #include #defineN10 voidmain() { inti,j,a[N][N]; 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 { for(j=0;j<=i;j++) printf("%6d",a[i][j]); printf("\n"); } printf("\n"); } 7.8鞍点 /*查找鞍点*/ #defineN10 #defineM10 main() {inti,j,k,m,n,flag1,flag2,a[N][M],max,maxi,maxj; printf("\n输入行数n: "); scanf("%d",&n); printf("\n输入列数m: "); scanf("%d",&m); for(i=0;i {printf("第%d行? \n",i); for(j=0;j scanf("%d",&a[i][j]; } for(i=0;i {for(j=0;j printf("%5d",a[i][j]); pritf("\n"); } flag2=0; for(i=0;i {max=a[i][0]; for(j=0;j if(a[i][j]>max) {max=a[i][j]; maxj=j; } for(k=0,flag1=1;k if(max>a[k][max]) flag1=0; if(flag1) {printf("\n第%d行,第%d列的%d是鞍点\n",i,maxj,max); flag2=1; }} if(! flag2) printf("\n矩阵中无鞍点! \n"); } 7.9变量说明: top,bott: 查找区间两端点的下标;loca: 查找成功与否的开关变量. /*折半查找*/ #include #defineN15 main() {inti,j,number,top,bott,min,loca,a[N],flag; charc; printf("输入15个数(a[i]>[i-1])\n); scanf("%d",&a[0]); i=1; while(i {scanf("%d",&a[i]); if(a[i]>=a[i-1]) i++; esle {printf("请重输入a[i]"); printf("必须大于%d\n",a[i-1]); } } printf("\n"); for(i=0;i printf("%4d",a[i]); printf("\n"); flag=1; while(flag) { printf("请输入查找数据: "); scanf("%d",&number); loca=0; top=0; bott=N-1; if((numbera[N-1])) loca=-1; while((loca==0)&&(top<=bott)) {min=(bott+top)/2; if(number==a[min]) {loca=min; printf("%d位于表中第%d个数\n",number,loca+1); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 第三 版谭浩强 主编 68 课后 习题 答案