admin 管理员组文章数量: 1086019
2024年8月27日发(作者:网页有效)
P140 0.4 判断一串输入的字符.
#include
int main()
{
char ch;
int a=0,b=0,c=0,d=0,e=0;
printf("Please input the stringn");
while((ch=getchar())!='n') //直到回车.
{
if(ch<='z'&&ch>='a')
{
a++;
}
else if(ch==' ')
{
c++;
}
else if(ch<58&&ch>47)
{
d++;
}
else if(ch<='Z'&&ch>='A')
{
b++;
}
else
{
e++;
}
}
printf("大写%d 小写%d 空格%d 数字%d 其它%dn",a,b,c,d,e);
}
P140 0.5 2+22+222+2222系列的和.
#include
int main() //想办法既快速做完,又要消化理解
{
int temp,i,a,n,sum=0; //主逻辑,友好性暂时放松.
scanf("%d %d",&a,&n); //a是数字,n是要乘的个数.
temp=a; //先把第一阶的值存起来.
for(i=0;i { sum=sum+a; printf("%d + ",a); //事关布局. a=a*10+temp; //重点是每次乘,然后加上上一个数. } printf("= %d .",sum); return 0; } P140 0.6 1!+2!+3!+4!.....的值. #include int main() //1!+2!+3!+4!..... { int i,j,k,sum=0,m=1; scanf("%d",&k); //比如设定为,值为. for(i=1;i<=k;i++) //第一层循环,指定到. { for(j=1;j<=i;j++) //第二层循环,指定至当前数. { m=m*j; } //到此是阶乘的结构. sum=sum+m; m=1; } printf("%d",sum); //完全不理解时,搜索并参考. return 0; //尝试自己做,第一次做出来就是自己的东西了. } P140 0.7 1至100,1至50平方,1至10倒数的总和. #include int main() { int a,b; double c,asum=0,bsum=0,csum=0; for(a=1;a<=100;a++) //三个块分别注释验证结果. { asum=asum+a; } for(b=1;b<=50;b++) //在VS运行中,注意*.cpp为C++语言. { bsum=bsum+b*b; //为了避免语言差别,请注意文件名为*.c. } for(c=1;c<=10;c++) //c作浮点运算,所以定义在double类型中. { csum=csum+1/c; } printf("%lf",asum+bsum+csum); return 0; } P P #include #include int main() { int j,k,s[6],x=100,y,sum=0; for(j=153;j<=154;j++) { for(k=2;k>=0;k--) { s[k]=j%(int)pow(10,k+1)/(int)pow(10,k); y=pow(s[k],3); sum+=y; printf("%d-%d--%dt",k,s[k],j); } printf("%dn",sum); } return 0; } P140 0.8 水仙花数. //#include // //int main() //在%和/号之间,以前pow.以后再做. //{ // int i,j,k,a,b,c,sum=0; //这里逻辑对,算出来却错了. // for(i=2;i<=4;i++) //计算机在想什么,看来它的大脑难以模拟. // { // for(j=pow(10,i);j<=pow(10,i+1)-1;j++) //我不完全明白它遵守的逻辑. // { // for(k=0;k<=i;k++) // { // sum+=pow((j%pow(10,i+1)/pow(10,i)),3); // } // if(sum==j) // { // printf("%d 是水仙花数!n",j); // } // sum=0; // } // } // return 0; //} //为什么还是无法实现?! #include #include int main() { int a,b,c,i,sum=0; //这里只计算三位数的. for(i=100;i<1000;i++) { a=i/100; b=i%100/10; c=i%10; sum+=a*a*a+b*b*b+c*c*c; if(sum==i) { printf("%d 是水仙花数.n",i); } sum=0; } return 0; } P141 0.9 完数. #include int main() { int i,j,r; for(i=1;i<=1000;i++) { //零是个临界值,不能包括它. r=0; //每次清零重来.类似水仙中的sum. for(j=1;j { if(i%j==0) //除得尽即是因子. { r=r+j; //然后累加进去. } } if(r==i) //若相等. { printf("%d 是完数.n",i); } } return 0; } P141 0.10 2/1+3/2+5/3+8/5+13/8… #include int main() //10.007051 { double i,a=2,b=1,c,s=0; //a是分子,b是分母. for(i=0;i<6;i++) //二十可以用户指定. { s+=a/b; //中间储值变量. c=a+b; b=a; a=c; } printf("%lfn",s); return 0; } P141 0.11 球落地并反弹问题. #include int main() //从一百开始,减一半再自加两次,下降一次,反弹一次. { double sum=100,high=100,up,donw,i; for(i=1;i<10;i++) //不管指定到哪个数,都不会超过三百. { up=high/2; donw=up; high=donw; //自咬尾巴问题. sum+=donw*2; } printf("%lf %lfn",donw,sum); return 0; } P141 0.12 猴子吃桃子. #include int main() //从一百开始,减一半再自加两次,下降一次,反弹一次. { int i,sum=1; for(i=1;i<=10;i++) //临界要清楚,结果要与手算的前几个实例相匹配. { printf("倒数第%d天还剩有%d个桃子.n",i,sum); sum=(sum+1)*2; } //printf("%dn",sum); return 0; } P141 0.16 输出星号棱形图案. #include #include main() //只关注左半部分.右半部分无视空格. { int i,j,k,m=6; //m可指定,指定中心点位置.可任意奇偶. for(i=1;i<=m;i++) //上半部分.其实也是正三角. { for(j=1;j<=m-i;j++) //一到中心点前i个位置填充空格. printf(" "); for(k=1;k<2*i;k++) //空格后向前填充星号的个数.是奇数.一,三,五... printf("*"); printf("n"); } for(i=m-1;i>0;i--) //下半部分.其实也是倒三角. { //减一是因为行数问题.这是中心行以下的. for(j=m-1;j>=i;j--) printf(" "); for(k=1;k<2*i;k++) printf("*"); printf("n"); } getch(); //用户反应后结束.但,没必要. } 第六章 第六章 循环控制 6.1输入两个正整数m和n,求其最大公约数和最小公倍数。 main() {long m,n,i=1,j,s; scanf("%ld,%ld",&m,&n); 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("s=%ld,j=%ldn",s,j); } 6.2输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。 #include"stdio.h" 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("i=%d,j=%d,k=%d,l=%dn",i,j,k,l); } 6.3求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字。例如: 2+22+222+2222+22222(n=5),n由键盘输入。 #include"math.h" main() {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;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<=10;k++) s3=s3+1/k; sum=s1+s2+s3; printf("sum=%fn",sum); } 6.6打印出所有"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于 该本身。例如:153是一个水仙花数,因为153=1^3+5^3+3^3。 #include"math.h" 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("%5d",x);x++;} } 6.7一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如,6的因子为1、 2、3,而6=1+2+3,因此6是"完数"。编程序找出1000之内的所有完数,并按下面格 式输出其因子: 6 its factors are 1、2、3 main() {int m,i,j,s; for(m=6;m<10000;m++) {s=1; for(i=2;i if(m%i==0) s=s+i; if(m-s==0) {printf("%5d its fastors are 1 ",m);for(j=2;j printf("%d ",j);printf("n");} } } 或 main() {int m,i,j,s; for(m=6;m<1000;m++) {s=m-1; for(i=2;i if(m%i==0) s=s-i; if(s==0) {printf("%5d its fastors are 1 ",m);for(j=2;j printf("%d ",j);printf("n");} } } 6.8有一分数序列: 求出这个数列的前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次落地时共经过多少米?第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<=10;sum=2*sum+1,i++); printf("sum=%dn",sum); } 6.11用迭代法求 。求平方根的迭代公式为: 要求前后两次求出的得差的绝对值少于0.00001。 #include"math.h" main() {float x0,x1,a; scanf("%f",&a); x1=a/2; do {x0=x1;x1=(x0+a/x0)/2;} while(fabs(x0-x1)>=0.00001); printf("%.3fn",x1); } 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("x=%.3fn",x); } 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("x1=%.3f,x2=%.3fn",x1,x2); } 6.14打印以下图案 * * * * * * * * * * * * * * * * * * * * * * * * #include"math.h" 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("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"); } } 第七章 第七章 数组 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("%5d",a[i]); } } printf("n"); } 或 #include"math.h" main() {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 break; if(j>=k+1) printf("%5d",a[i]); } printf("n"); } 7.2用选择法对10个整数从小到大排序。 main() { int i,j,a[10],t; for(i=0;i<10;i++) scanf("%d",&a[i]); 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("%5d",a[i]); } 或 main() {static int a[10],i,j,k,t; for(i=1;i<11;i++) scanf("%d",&a[i]); 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("%d",a[i]); printf("n"); } 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("%d",&a[i][j]); s1=a[0][0]+a[1][1]+a[2][2]; s2=a[0][2]+a[1][1]+a[2][0]; printf("s1=%d,s2=%dn",s1,s2); } 或 main() { static int i,j,s1,s2,a[3][3]; for(i=1;i<=3;i++) for(j=1;j<=3;j++) scanf("%d",&a[i][j]); s1=a[1][1]+a[2][2]+a[3][3]; s2=a[1][3]+a[2][2]+a[3][1]; printf("%d,%dn",s1,s2); } 7.4已有一个已排好的数组今输入一个数要求按原来排序的规律将它插入数组中。 main() { static int a[10]={1,7,8,17,23,24,59,62,101};int i,j,t; scanf("%d",&a[9]); for(i=9;i>0;i--)
版权声明:本文标题:C程序设计(第四版)(谭浩强)完整版 课后习题答案 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/p/1724695103a811522.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论