C语言第6—8章课后习题答案
第六章 循环语句
6.1输入两个正数,求最大公约数和最小公倍数. #include
{ int a,b,num1,num2,temp;
printf(\请输入两个正整数:\\n\ scanf(\ 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\ printf(\它们的最小公倍数为:%d\\n\ } 编译已通过 6.2输入一行字符,分别统计出其中英文字母,空格,数字和其它字符的个数. 解: #include int letters=0,space=0,degit=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(\其中:字母数=%d 空格数=%d 数字数=%d 其它字符数=%d\\n\digit,other); } 6.3求s(n)=a+aa+aaa+?+aa?a之值,其中a是一个数字,n表示a的位数。 解: void main() { int a,n,count=1,sn=0,tn=0; printf(\请输入a和n的值:\\n\ scanf(\ printf(\ while(count<=n) { tn=tn+a; sn=sn+tn; a=a*10; ++count; } printf(\\\n\ } 6.4 求 (即1+2!+3!+4!+?+20!) void main() { float n,s=0,t=1; for(n=1;n<=20;n++) { t=t*n; s=s+t; } printf(\\\n\ } 阶乘利用递归,再求和: #include if(1==n) return n; if(n>1) return n*Func(n-1); } main() { long s=0; int i=1; while (i<=6) { s=s+Func(i); i++; } cout< 6.5 求 。 void main() { int k,N1=100,N2=50,N3=10; float s1=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\ } 已通过 int main() { int k=1,i=11,j=51; float s=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 int i,j,k,n; printf(\水仙花数是:\\n\ for(n=100;n<1000;n++) { i=n/100; j=n/10-i*10; k=n; if(i*100+j*10+k==i*i*i+j*j*j+k*k*k) { printf(\ } } printf(\ } 编译已通过153 370 371 407 6.7一个数如果恰好等于它的因子之和,这个数就称为“完数”。编程序找出1000之内的所有完数,并按下面格式输出其因子。 #include #define M 1000 /*定义寻找范围*/ void main() { int k0,k1,k2,k3,k4,k5,k6,k7,k8,k9; int i,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*/ { case 1: k0=i; break; case 2: k1=i; break; case 3: k2=i; break; case 4: k3=i; break; case 5: k4=i; break; case 6: k5=i; break; case 7: k6=i; break; case 8: k7=i; break; case 9: k8=i; break; case 10: k9=i; break; } } } if(s==0) { printf(\是一个完数,它的因子是\ if(n>1) printf(\ if(n>2) printf(\ if(n>3) printf(\ if(n>4) printf(\ if(n>5) printf(\ if(n>6) printf(\ if(n>7) printf(\ if(n>8) printf(\ if(n>9) printf(\ printf(\ } } } 方法二:此题用数组方法更为简单. void main() { int k[10]; int i,j,n,s; for(j=2;j<=1000;j++) { n=-1; s=j; for(i=1;i