C语言答案第4章
第4章4.1分析下面程序的结果:(1)#include
voidmain(){inti,t,sum=0;for(t=i=1;i<=10;){sum+=t;++i;if(i%3==0)t=-i;elset=i;}printf("sum=%d",sum);}运行结果:sum=19分析:该数列为sum=1+2-3+4+5-6+7+8-9+10(2)#includevoidmain(){inti;for(i=1;i<=5;i++){switch(i%2){case0:i++;printf("#");break;case1:i+=2;printf("*");default:printf("n");}}printf("i=%d",i);}运行结果:*#i=6(3)#includevoidmain(){inty=10;do{y--;}while(--y);printf("%dn",y--);}运行结果:0n分析:循环体共执行5次(4)#includevoidmain(){intm,n;printf("Enterm,n;");scanf("%d%d",&m,&n);while(m!=n){while(m>n)m-=n;while(n>m)n-=m;}printf("m=%dn",m);}运行结果:m=14.2求自然数1~100的累加和,分别用三种循环控制语句实现。方法1(for循环)#includevoidmain(void){inti,sum=0;for(i=0;i<=100;i++)sum+=i;printf("%d",sum);}方法2(while循环)#includevoidmain(void){inta=1,sum=0;while(a<=100){sum+=a;a++;}printf("%d",sum);}方法3(do-while循环)#includevoidmain(void){inti,sum=0;i=1;don{sum=sum+i;i++;}while(i<=100);printf("%d",sum);}4.3计算1-3+5-7+…-99+101的值。解1:#includevoidmain(){inti,t=1,s=0;for(i=1;i<=101;i=i+2){t=t*i;s=s+t;t=-t/i;}printf("%d",s);}解2:#include#includevoidmain(){intn,t,pi,s;s=t=n=1;pi=0;for(n=1;n<=101;){pi=pi+t;n=n+2;s=-s;t=s*n;}printf("PI=%dn",pi);}4.4根据公式,求e的近似值,精度要求为10-6。#includevoidmain(){inti;doublee,f;e=1.0;nf=1.0;for(i=1;f>=1e-6;i++){f/=(double)i;e+=f;}printf("e=%fn",e);}4.5用公式:求∏的近似值,直到最后一项的值小于10-6为止。#include#includevoidmain(){longi=1;doublepi=0;while(i*i<=10e+6){pi=pi+1.0/(i*i);i++;}pi=sqrt(6.0*pi);printf("pi=%10.6lfn",pi);}4.6编写程序,求下面和式的值。#includevoidmain(){doubles=0,t=1;intn;for(n=1;n<=20;n++){t=t*n;s=s+t;}printf("1!+2!+…+20!=%en",s);}4.7将从键盘输入的一对数,由小到大排序输出。当输入一对相等数时结束循环。#includenvoidmain(){inta,b,t;scanf("%d,%d",&a,&b);while(a!=b){if(a>b){t=a;a=b;b=t;}printf("%d,%dn",a,b);scanf("%d,%d",&a,&b);}}4.8从键盘输入的一组字符中统计出大写字母的个数m和小写字母的个数n,并输出m、n中的较大者。#includevoidmain(){intm=0,n=0;charc;while((c=getchar())!='n'){if(c>'A'&&c<='Z')m++;if(c>='a'&&c<='z')n++;}printf("m=%d,n=%d,max=%dn",m,n,mvoidmain(){intn,i,max,min,a;floats;scanf("%d,%d",&n,&a);s=max=min=a;for(i=1;ia)min=a;}printf("Max=%d,Min=%d,avg=%f",max,min,s/n);n}4.10输出显示自然数1~100之间的素数。#include#includevoidmain(){intn,i,j,l=0;for(n=2;n<=100;n++){i=sqrt(n);for(j=2;j<=i;j++)if(!(n%j))break;if(j>=i+1)if(l<5){printf("%dt",n);l++;}else{printf("%dn",n);l=0;}}}4.11一个数如果恰好等于它的因子之和,就把它称为“完数”。例如,28的因子为1、2、4、7、14,而28=1+2+4+7+14,因此28是“完数”。编程序找出10000以内的所有“完数”并输出其因子。#includevoidmain(){intm,s,i;for(m=2;m<10000;m++){s=0;for(i=1;ivoidmain(){intx,y,z,i,result=999;for(x=1;x<10;x++)for(y=1;y<10;y++)for(z=0;z<10;z++){i=100*x+10*y+z+100*y+10*z+z;if(i==result)printf("x=%d,y=%d,z=%dn",x,y,z);}}4.13有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,编程统计卖完所需的天数。#includevoidmain(){intday,x1,x2;day=0;x1=1020;while(x1){x2=x1/2-2;/*每天卖完剩下的西瓜总数*/x1=x2;day++;}printf("day=%dn",day);}4.14已知鸡兔共有30只,脚共有90只,编程计算鸡兔各有多少只。#includevoidmain(){intx,y;for(x=0;x<=30;x++){y=30-x;if((2*x+y*4)==90)printf("%d,%dn",x,y);}n}4.15编写程序,找出1-99之间的全部同构数。(同构数的定义:出现在平方数的右边。例如:5是25右边的数,25是625右边的数,5和25都是同构数)解1:#includevoidmain(){inti;for(i=1;i<100;i++)if(i*i%10==i||i*i%100==i)printf("%3d",i);}解2:#includevoidmain(){inti;for(i=1;i<100;i++)if(i*i%10==i)printf("%3d",i);elseif(i*i%100==i)printf("%3d",i);else;}4.16使用嵌套循环输出下列图形:****************#includevoidmain(){inti,j;for(i=0;i<=3;i++){for(j=0;j<=5;j++)if(i==0||j==0||i==3||j==5)printf("*");elseprintf("");printf("n");}}4.17使用嵌套循环输出下列图形:####n###*##**#***#includevoidmain(){inti,j;for(i=4;i>=1;i--){for(j=1;j<=i;j++)printf("#");for(j=1;j<=4-i;j++)printf("*");printf("n");}}4.18编写一程序,根据用户输入的不同的边长,输出其菱形。例如,边长为3的菱形为:*************#includevoidmain(){inta,i,j,k;printf("pleaseenterthenumber");scanf("%d",&a);for(i=0;i<=a-1;i++){for(j=0;j<=a-2-i;j++)printf("");for(k=0;k<=2*i;k++)printf("*");printf("n");}for(i=0;i<=a-2;i++){for(j=0;j<=i;j++)printf("");for(k=0;k<=2*a-4-2*i;k++)printf("*");printf("n");}}4.19假设x,y是整数,编程求xy的最后3位数,要求x、y从键盘输入。#includevoidmain(){ninti,x,y;longlast=1;printf("Inputxandy:");scanf("%d,%d",&x,&y);for(i=1;i<=y;i++)last=last*x%1000;printf("Thelast3digits:%ldn",last);}4.20用牛顿迭代法解方程2x3-4x2+3x-6=0在x=1.5附近的实根,精度要求ε=10-5。#include#includemain(){doublex0,x=1.5;do{x0=x;x=x0-(2*pow(x0,3)-4*pow(x0,2)+3*x0-6)/(6*pow(x0,2)-8*x0+3);}while(fabs(x-x0)>1e-5);printf("x=%f",x);}4.21编程实现输出一个正整数等差数列的前10项,此数列前四项之和及之积分别是26和880。#includevoidmain(){inta,d,i,s,f,x;/*a是第一项*/for(a=1;a<30;a++)for(d=1;d<=5;d++){s=0;f=1;x=a;for(i=1;i<=4;i++){s=s+x;f=f*x;x=x+d;}if(s==26&&f==880){for(i=0;i<10;i++)printf("%3d",a+i*d);}}printf("n");}4.22n编程实现从键盘输入若干学号,然后输出学号中十位数字是9的学号(输入0时结束循环)。#includevoidmain(){longintnum;scanf("%ld",&num);do{if(num/10%10==9)printf("%ld",num);scanf("%ld",&num);}while(num!=0);}4.23编程实现将从键盘输入的偶数写成两个素数之和。#include#includevoidmain(){inta,b,c,d;scanf("%d",&a);for(b=3;b<=a/2;b+=2){for(c=2;c<=sqrt(b);c++)if(b%c==0)break;if(c>sqrt(b))d=a-b;elsecontinue;for(c=2;c<=sqrt(d);c++)if(d%c==0)break;if(c>sqrt(d))printf("%d=%d+%dn",a,b,d);}}