《浙工大C语言课本习题答案》 下载本文

⑸ 循环程序段“k=5; for(;k<0;k--);”执行后,k的值为 5 。 2. 改写下列程序段,去掉continue语句,使结构更为合理。 ⑴ while(A) { 解答: while(A) if(!B) C; if(B) continue; C; }

⑵ do { 解答: while(A) { B; C;} if(!A) continue; else B; C; } while(A);

3. 写出下列程序的输出结果 程序⑴ #include void main()

{ char x; int n=0,k=0;

while((x=getchar())!='.') { switch(x) {

case 't': k++; break;

case 'h': if(k==1) k++; break; case 'e': if(k==2) k++; break; default: k=0; }

if(k==3) n++; }

printf(\ }

运行时输入:a the asdftheth e there. 输出结果: 3 程序⑵ #include 输出结果: A #include BBB void main() CCCCC { char a,b,x; int i; DDDDDDD while(!isupper(x=getchar())); EEEEEEEEE for(a='A';a<=x;a++) {

for(b='A';b<'A'+x-a;b++) putchar(' '); for(i=1;i<=2*(a-'A')+1;i++) putchar(a); putchar('\\n') } }

运行时输入:35dffE

4. 程序填空题,根据下列各题题意,将程序补充完整。

⑴ 下列程序在输入m后求n使 n!≤m≤(n+1)!(例如输入726,应输出n=6) #include void main()

{ int m,n,jc=1 ;

9

scanf( \

for(n=2;jc<=m;n++) jc=jc*n; printf(\ }

⑵ 下列程序输出6至10000之间的亲密数对。

【说明】若a、b是亲密数对,则a的因子和等于b、b的因子和等于a且a不等于b。 #include void main() { int a,b,c,i;

for(a=6;a<=10000;a++) {

b=1; for(i=2;i<=a/2;i++) if( a%i==0 ) b+=i; c=1 ; for(i=2;i<=b/2;i++) if(b%i==0) c+=i; if( c==a &&a!=b) printf(\ } }

5.根据下列各小题题意编程。

⑴ 编程,输入x后按下式计算y值并输出。

解答: #include #include void main()

{ float x,y; scanf(\

if(x>=0 && x<=1) y=x+sin(x); else y=x+sin(x); printf(\ }

⑵ 输入一个百分制的成绩t后,按下式输出它的等级,要求分别写作if结构和switch结构。等级为:90~100为A,80~89为B,70~79为C,60~69为D,0~59为E。 解答: #include void main()

{ int t; char x; scanf(\

if(t>=90) x='A'; switch((int)t/10) {

else if(t>=80) x='B'; case 9: case 10: x='A'; break; else if(t>=70) x='C'; case 8: x='B'; break; else if(t>=60) x='D'; case 7: x='C'; break; else x='E'; case 6: x='D'; break; printf(\ } } ⑶ 输入10个学生的成绩,输出最低分数和最高分数。 解答: #include void main()

{ int x,max=0,min=101,i;

10

for(i=1;i<=10;i++) {

scanf(\ if(x

printf(\ }

⑷ 按公式 1+1/1!+1/2!+1/3!+...+1/n!+... 计算e的值,要求误差小于给定的ε。 解答: #include void main()

{ float s=2,eps,t=1; int i=2; scanf(\

while(t>=eps) { t/=i++; s+=t; } printf(\ }

⑸ 统计输入的若干个数中负数、零及正数的个数(输入^z控制循环结束)。 解答: #include void main()

{ float x; int zs=0,lin=0,fs=0; while(scanf(\

if(x>0) zs++; else if(x<0) fs++; else lin++;

printf(\正数%d个,零%d个,负数%d个\\n\ }

⑹ 输入k,利用下列迭代公式计算k的近似值,要求计算结果具14位有效位数。

2xn?1?xn?(k/xn?xn)/3 解答: #include #include void main()

{ int k; double x,x0; scanf(\ while(1) {

x0=x; x=x0+(k/(x0*x0)-x0)/3;

if(fabs(x-x0)<1e-14) { printf(\ } }

⑺ 编程,输入n后,计算下列表达式的值。

1?2?3?4?...n?1?n1/3

解答: #include #include void main()

{ int i,n; float y=0; scanf(\

for(i=n;i>=1;i--) y=sqrt(i+y); printf(\

11

}

⑻ 编程,输入x、n后,计算下列表达式的值。

a0?a1x?a2x23n?a3x???anx

解答: #include void main()

{ float x,y,a; int i,n; scanf(\

for(i=0; i<=n; i++) { scanf(\ printf(\ }

⑼ 当x为-2、-1.5、...、1.5、2时,求f(x)=x-3.14·x-6所取最大值、最小值。 解答: #include void main()

{ float x,y,max,min;

x=-2; max=min=x*x-3.14159*x-6; for(x=-1.5; x<=2; x=x+0.5) { y=x*x-3.14159*x-6;

if(y>max) max=y; else if(y

printf(\ }

⑽ 编程,输入两个正整数x和y,求它们的最大公约数和最小公倍数。 解答: #include void main() { int x,y,a;

scanf(\ while(a%y!=0) a+=x;

printf(\最小公倍数%d,最大公约数%d\\n\ }

⑾ 编程,输出1~5000之间的同构数(就是出现在其平方数右边的那些数,如 5、6、25均为同构数)。

解答: #include #include void main() { int k,kk,n;

for(k=1;k<=5000;k++) { n=log10(k)+1;

if((k*k-k)%(int)pow(10,n)==0) printf(\ } }

⑿ 参照例25编程,输出下列形式的九九乘法表。

2

12