好文档 - 专业文书写作范文服务资料分享网站

C语言程序设计第三版谭浩强课后习题答案完整版 

天下 分享 时间: 加入收藏 我要投稿 点赞

5.10 有4个圆塔,圆心分别为(2,2)、(-2,2)、(2,-2)、(-2,-2),圆半径为1。这4个塔的高度分别为10m。塔以外无建筑物。今输入任一点的坐标,求该点的建筑高度(塔外的高度为零)。

程序如下:

#include main() { 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(\

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(d1>1&&d2>1&&d3>1&&d4>1) h=0; /*判断该点是否在塔外*/

printf(\该点高度为%d\\n\ }

第六章 循环控制

6.1输入两个正整数m和n,求其最大公约数和最小公倍数。 main()

{long m,n,i=1,j,s;

scanf(\ for(;i<=m&&i<=n;i++)

{if(m%i==0&&n%i==0) s=i;} if(m>=n) j=m; else j=n;

for(;!(j%m==0&&j%n==0);j++); printf(\ }

6.2输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。 #include\ main()

{char c;int i=0,j=0,k=0,l=0; while((c=getchar())!=?\\n?)

{if(c>=65&&c<=90||c>=97&&c<=122) i++; else if(c>=48&&c<=57) j++; else if(c==32) k++; else l++;}

printf(\ }

6.3求Sn=a+aa+aaa+?+aa?aaa(有n个a)之值,其中a是一个数字。例如:2+22+222+2222+22222(n=5),n由键盘输入。

#include\ main()

{int n,sum=0,i=1,s=2; scanf(\ while(i<=n)

{sum=sum+s;s=s+2*pow(10,i); i++;}

printf(\ }

6.4 求 ,(即求1!+2!+3!+4!+5!+?+20!) main()

{int n,i=1;long sum=0,s=1; scanf(\

while(i<=n) {s=s*i;sum=sum+s;i++;} printf(\ }

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<=10;k++) s3=s3+1/k; sum=s1+s2+s3;

printf(\ }

6.6打印出所有\水仙花数\,所谓\水仙花数\是指一个三位数,其各位数字立方和等于该本身。例如:153是一个水仙花数,因为153=1^3+5^3+3^3。 #include\ main()

{int x=100,a,b,c;

while(x>=100&&x<1000)

{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(\ }

6.7一个数如果恰好等于它的因子之和,这个数就称为\完数\。例如,6的因子为1、2、3,而6=1+2+3,因此6是\完数\。编程序找出1000之内的所有完数,并按下面格式

6

输出其因子:

6 its factors are 1、2、3 main() {int m,i,j,s;

for(m=6;m<10000;m++)

6.10猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下{s=1;

for(i=2;i

{printf(\its fastors are 1 \if(m%j==0)

printf(\ } } 或 main() {int m,i,j,s;

for(m=6;m<1000;m++) {s=m-1;

for(i=2;i

{printf(\its fastors are 1 \if(m%j==0)

printf(\ } }

6.8有一分数序列:

求出这个数列的前20项之和。 main()

{int i=1,n;double t,x=1,y=2,s,sum=0; scanf(\

while(i<=n) {s=y/x;sum=sum+s;t=y;y=y+x;x=t;i++;} printf(\ }

6.9一球从100米高度自由下落,每次落地后返回原高度的一半,再落下。求它在第10次落地时共经过多少米?第10次反弹多高? main()

{int i,n;double h=100,s=100; scanf(\ for(i=1;i<=n;i++)

{h*=0.5;if(i==1) continue;s=2*h+s;} printf(\ }

一个桃子了。求第一天共摘多少桃子。 main()

{int i=1,sum=0;

for(;i<=10;sum=2*sum+1,i++); printf(\ }

6.11用迭代法求 。求平方根的迭代公式为:

要求前后两次求出的得差的绝对值少于0.00001。#include\ main()

{float x0,x1,a; scanf(\ x1=a/2; do

{x0=x1;x1=(x0+a/x0)/2;} while(fabs(x0-x1)>=0.00001); printf(\ }

6.12 用牛顿迭代法求方程在1.5附近的根。

main()

{double x,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(\ }

6.13用二分法求方程在(-10,10)之间的根

main()

{double x1,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(\

7

}

6.14打印以下图案

*

* * *

* * * * *

* * * * * * * {static int i,j,k,a[98]; for(i=2;i<100;i++) {a[i]=i;k=sqrt(i); for(j=2;j<=a[i];j++) if(j

if(j>=k+1)

* * * * * * * * *

#include\ main() {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(\ }

for(i=0;i<=2;i++) {for(j=0;j<=i;j++) printf(\

for(k=0;k<=4-2*i;k++) printf(\ printf(\ } }

第七章 7.1 用筛法求之内的素数。 main()

{ int i,j,a[100]; for(i=2;i<100;i++) { a[i]=i;

for(j=2;j<=i;j++) {if(j

if(a[i]%j==0) break; if(a[i]-j==0)

printf(\ } }

printf(\ } 或

#include\ main()

数组

printf(\ }

printf(\ }

7.2用选择法对10个整数从小到大排序。 main()

{ int i,j,a[10],t; for(i=0;i<10;i++) scanf(\ for(j=1;j<10;j++) for(i=0;i<=9-j;i++) if(a[i]>a[i+1])

{t=a[i+1];a[i+1]=a[i];a[i]=t;} for(i=0;i<10;i++) printf(\ } 或 main()

{static int a[10],i,j,k,t; for(i=1;i<11;i++) scanf(\ for(j=1;j<10;j++) for(i=1;i<=10-j;j++) if (a[i]>a[i+1])

{t=a[i+1];a[i+1]=a[i];a[i]=t;} for(i=1;i<11;i++) printf(\ printf(\ }

7.3求一个3×3矩阵对角线元素之和。 main()

{int i=0,j=0,a[3][3],s1,s2; for(i=0;i<3;i++) for(j=0;j<3;j++)

scanf(\

s1=a[0][0]+a[1][1]+a[2][2]; s2=a[0][2]+a[1][1]+a[2][0]; printf(\ } 或

8

main() {

static int i,j,s1,s2,a[3][3]; for(i=1;i<=3;i++) for(j=1;j<=3;j++) scanf(\

s1=a[1][1]+a[2][2]+a[3][3]; s2=a[1][3]+a[2][2]+a[3][1]; printf(\ }

7.4已有一个已排好的数组今输入一个数要求按原来排序的规律将它插入数组中。 main()

{ static int a[10]={1,7,8,17,23,24,59,62,101};int i,j,t; scanf(\ for(i=9;i>0;i--) if(a[i]

{t=a[i-1];a[i-1]=a[i];a[i]=t;} for(i=0;i<10;i++)

printf(\ } 或 main() {

static int a[5]={1,4,5,6,7}; int i,t,b;

scanf(\ for(i=0;i<5;i++) {if(b<=a[i])

{t=a[i];a[i]=b;b=t;} printf(\ printf(\ }

7.5将一个数组的值按逆序重新存放,例如,原来顺序为:8,6,5,4,1。要求改为:1,4,5,6,8。 main()

{ int i,b[10];

for(i=0;i<10;i++) scanf(\ for(i=9;i>-1;i--) printf(\ printf(\

7.6打印出以下杨辉三角形(要求打印出10行)。 1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1 ∶ ∶ main()

{ static int m,n,k,b[15][15]; b[0][1]=1;

for(m=1;m<15;m++) {for(n=1;n<=m;n++)

{ b[m][n]=b[m-1][n-1]+b[m-1][n]; printf(\ } } } 或 main()

{ int i,j,n,k,a[10][10];

static a[][1]={{1},{1},{1},{1},{1},{1},{1},{1},{1},{1}}; a[1][1]=1;

for(k=2,k<11;k++) for(i=2;i<=k;i++) for(j=2;j<=i;j++)

a[i][j]=a[i-1][j-1]+a[i-1][j]; for(k=1;k<11;k++) for(i=1;i<=k;i++) for(j=1;j<=i;j++) printf(\ }

7.7 打印“魔方阵”,所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。例如,三阶魔方阵为 8 1 6 3 5 7 4 9 2

要求打印出由1~n2的自然数构成的魔方阵。 解:

#include main()

{ int a[16][16],i,i,k,p,m,n; p=1;

while(p==1) /*要求阶数为1~15的商数*/

{ printf(\~15):\ scanf(\

if((n!=0)&&(n<=15)&&(n%2!=0)) p=0; }

for(i=1;i<=n;i++) /*初始化*/

9

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(\ printf(\ } }

7.8找出一个二位数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点。 main()

{int a[5][5],b[5],c[5],d[5][5],k=0,l=0;int i,j; for(i=0;i<5;i++) for(j=0;j<5;j++)

scanf(\ for(i=0;i<5;i++)

for(j=0;j<5;j++,a[i][j]=d[i][j]); for(i=0,k=0;i<5;i++,k++) for(j=0;j<4;j++)

{if(a[i][j]>=a[i][j+1]) b[k]=a[i][j+1]=a[i][j]; else

b[k]=a[i][j+1]; }

for(j=0,l=0;j<5;j++,l++) for(i=0;i<4;i++)

{if(a[i][j]<=a[i+1][j]) c[l]=a[i+1][j]=a[i][j]; else

c[l]=a[i+1][j]; }

for(i=0,k=0;i<5;i++,k++) for(j=0,l=0;j<5;j++,l++) if(d[i][j]-b[k]==0) {if(d[i][j]-c[l]==0)

printf(\ else

printf(\ } }

7.9有个15数按由小到大顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数组中第几个元素的值。如果该数不在数组中,则打印出\无此数\ #include\ main() {static int i,j,m,a[15]={1,4,9,13,21,34,55,89,144,233,377,570,671,703,812};

scanf(\ for(j=0;j<15;j++) printf(\ printf(\ i=7;

while(fabs(i-7)<8) {if(m

{printf(\ else if(m>a[7]) {if(a[i]-m==0)

{printf(\ else

printf(\ }

if(fabs(i-7)-8==0)

printf(\ }

7.10有一篇文章,共有3行文字,每行有个80字符。要求分别统计出其中英文大写字母、小写字母、空格以及其它字符的个数。 main() {int i,j=0,k=0,l=0,m=0,n=0;char str0[301],str1[100],str2[100],str3[100];

10

C语言程序设计第三版谭浩强课后习题答案完整版 

5.10有4个圆塔,圆心分别为(2,2)、(-2,2)、(2,-2)、(-2,-2),圆半径为1。这4个塔的高度分别为10m。塔以外无建筑物。今输入任一点的坐标,求该点的建筑高度(塔外的高度为零)。程序如下:#includemain(){inth=10;floatx1=2,y1=2,x2=
推荐度:
点击下载文档文档为doc格式
1ogc78lgwy37lyd0yejc
领取福利

微信扫码领取福利

微信扫码分享