栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言程序设计教程(第三版)李凤霞 第六章课后习题答案

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言程序设计教程(第三版)李凤霞 第六章课后习题答案

1、 下列程序执行的结果是( )。
a=1;b=2;c=3;
While(b printf(“%d,%d,%d”,a,b,c); a b c b A)1,2,0 B)2,1,0 C)1,2,1 D)2,1,1 1 2 3 0 1
2 1 2 1 1
1 2 1 0 1
2 1 0 0 0
2、 执行语句for(i=1;i++ <4;);后,i的值是( )。
A)3 B)4 C)5 D)不定
3、 下列程序段( )。
x=3;
do{y=x–;
if(!y){printf(“x”);continue;}
printf(“#”);
}while(1<=x<=2);
A输出 # # B)输出##x C)是死循环 D)有语法错
4、 若int x;则执行下列程序段后输出是( )。
for(x=10;x>3;x–)
{if(x%3)x–;–x;–x;
printf(“%d”,x);
}
A)63 B)74 C)62 D)73
5、 下列说法中正确的是( )。
A) break用在switch语句中,而continue用在循环语句中。
B) break用在循环语句中,而continue用在switch语句中。
C) break能结束循环,而continue只能结束本次循环。
D) continue能结束循环,而break只能结束本次循环。
6、 指出程序结束时,j、i、k的值分别是( )。
main()
{int a=10,b=5,c=5,d=5,i=0,j=0,k=0;
for(;a>b;++b )i++;
while(a> ++c)j++;
do k++;while(a>d++);
}
A)j=5,i=4,k=6; B)i=5,j=4,k=6; C)j=6,i=5,k=7 D)j=6,i=6,k=6;
7、 下面程序的输出结果是( )。
main()
{int i,j;float s;
for(i=6;i>4;i–)
{s=0.0;
for(j=i;j>3;j–)s=s+i*j;
}
printf(“%fn”,s);
}
A}135.000000 B)90.000000 C)45.000000 D)60.000000
8、 若有:do{i=a-b++;printf(“%d”,i);}while(!i);
则while中的!i可用( )代替。
A)i= =0 B)i!=1 C)i!=0 D)以上均不对
二、填空题
1、以下while循环执行的次数是________。(无限)

k=0;while(k=10)k=k+1;

2、 下列程序段的执行结果是________。(8)

int a,b;
for(a=1,b=1;a<=100;a++)
{if(b>=20)break;
 if(b%3==1)
   {b+=3;continut;}  
  b-=5;   
}
printf(“%dn”,a);

3、 以下循环语句执行________次循环;(5×4)

int i,j;
        for(i=5;i;i--)
        for(j=0;j<4;j++){……}

4、以下程序段的输出结果是________。(11)

int i=0,sum=1;
do{sum+=i++;}while(i<5);
printf(“%dn”,sum);

5、执行以下程序后,输出是________。(2.400000)

#include “math.h”
main()
{float x,y,z;
x=3.6;y=2.4;z=x/y;  
while(1) 
if(fabs(z)>1){x=y;y=x;z=x/y;} 
else break;
printf(“%fn”,y);}

6、以下程序的输出结果是________。(##*#$)

main()
{int i;
for(i=1;i<=5;i++)
{if(i%2)printf(“*”); 
else continue;        
printf(“#”);}      
printf(“$n”);   
}

7、以下程序段的输出结果是________。(8 5 2)

main()
{int y=10;
for(;y>0;y--)
{if(y%3)continue;
printf(“%4d”,--y);
  }
 }

8、 以下程序段:
s=1.0;
for(k=1;k<=n;k++)s=s+1.0/(k*(k+1)); /计算 s=1+1/(12)+1/(23)+……/
printf(“%fn”,s);
请填空,使下面的程序段的功能完全与之等同。
s=0.0;k=0;________ ; (d=1.0;)
do
{s=s+d;
________ ; (k++)
d=1.0/(k*(k+1));
}while( ________ ) ; (k<=n)
printf(“%fn”,s);
9、 以下程序的功能:从键盘上输入若干学生的成绩,统计并输出最高成绩和最低成绩,当输入负数是结束输入。填空,使程序正确。
main()
{float x,amax,amin;
scabf(“%f”,&x);
amax=x;amin=x;
while( ________ ) (x>=0)
{if(x>amax)amax=x;
if( ______ )amin=x; (x scanf(“%f”,&x);
}
printf(“namax=%fnamin=%fn”,amax,amin);
}
三、编程题
1、求1-3+5-7+…-99+100的值。
(1)

main( )                                                          
{  int i, k, s=0;                         
for ( i=1,k=1; i<=101;i +=2,k*=-1 )   
s = s+i*k;                             
printf (“%dn”, s);                     
}                         

(2)

  main()
   {int s=0,i;
    foa(i=1;n<=101;i=i+4)
       s=s+i;
    for(i=3;i<=100;i=i+4)
     s=s-i;
    printf(“%dn”,s);    
    }

(3)

main()
  {int s=0,i;
   for(i=1;i<=101;i=i+2)
     if(i%4==1)s=s+i;
     else s=s-i;
   printf(“s=%dn”,s);
    }

2、任意输入10个数,计算所有正数的和、负数的和以及这10个的总和。

main( )
{ int i, k, p=0, n=0, s=0;
for ( i=1; i<=10; i++ )
{ printf (“i=%d:  “,i);
scanf (“%d”,&k);
s += k; 
if ( k>0 ) p += k;
if ( k<0 ) n += k;
         }
printf (“s=%d,p=%d,n=%dn”, s, p, n);
}

3、任意输入小余32768的正整数s,从s的个位开始输出每一位数字,用逗号分开。

main( )
{ int i;
printf(“Please Enter Number:”);
scanf(“%d”,&i);
while ( i > 0 )
{ printf (“%d,”,i%10);
i /= 10;
       }
}

main()
{long s,n,k=1;
 printf("Input s:");
 scanf("%ld",&s);
 n=s;
while(n>0)
{n=n/10;
 k=k*10;}
 k=k/10;
 for(;k>0;k=k/10)
 {printf("%3d,",s/k);
  s=s%k;
  }
 printf("n");
}

4、对输入的正整数a,b,求ab的最后三位数。
(1) 注释:此题的关键是要保证乘积不超过int型允许的最大数。由于仅要求结果的最后三位,被乘数的后三位参加运算;则将乘数后三位的每一位分别和被乘数相乘,然后部分积再相加。

main( )
{ int i, a, b, c1, c2, c3, y, y1, y2, y3;
printf (“Please Enter a,b:”); 
scanf (“%d,%d”,&a,&b); y = a;
      c1 = a%10;                          
      c2 = a/10%10;                       
      c3 = a/100%10;                      
      for ( i=1; i y %= 1000;                              
         y1 = y*c1;                         
         y2 = y*c2%100;       
         y3 = y*c3%10;        
         y = y1+y2*10+y3*100;                        
        }
printf (“%dn”,y%1000);
}

(2) 解法2。

main ( )
{   int a, b, k;
    long last;
    scanf (“%d%d”, &a, &b);
    for ( last=k=1; k<=b; k++)
       last = last * (a%1000) % 1000;
    printf (“last=%ldn”, last );
}

5、输入6个学生5门课的成绩,分别求出每个学生的平均成绩。

main()
{int i,j;
 float x,s;
 printf("Input data:n");
 for(i=1;i<=6;i++)
  {s=0;
   for(j=1;j<=5;j++)
    {scanf("%f",&x);
     s=s+x;
     }
   printf("average=%6.2fn",s/5);
  }
}

6、编修程序,求e的近似值。
e≈1+1/1!+1/2!+1/3!+…+1/n!
(1)计算前20项。
(2)计算各项,直到最后一项的值小于10-4为止(计算的项均大于等于10-4)。
(1)注释:变量t储存阶乘,20!已经超出单精度实型数的范围,所以t被说明为double型。

main( )
{  int    i=1;
double t=1; float  e=1;
do
       { t = t*i;   
         e = e+1./t;
} while ( i++ <20 );
printf(“%fn”,e);
}

(2)

main( )                               
{  int i=1;                           
double t=1;                       
float e=1;                         
do                                   
   {   e = e+1/t;                        
       t = t*++i;                           
} while ( 1/t >= 1.0e-4 );             
printf (“%fn”,e);                 
}     

(3)

 main()
 {int i,j;
  float s,e=1;
  for(i=1;i<=20;i++)
    {s=1;
    for(j=1;j<=i;j++)
       s=s*j;
      e=e+1.0/s;
     }
   printf(“e=%fn”,e);
   }                

7、设X数列定义如下:

  Xn=   n ,n=1,2,3
       xn-1+xn-2+xn-3 , n>3
  编写程序,对输入的正整数n,输出数列的前n项。
main( )
{  int n, x1, x2, x3, xn, i;
printf(“Enter n:”); scanf (“%d”,&n); if ( n<=3 )
xn=n;
else
   { x1=1; x2=2; x3=3;
     for ( i=4; i<=n; i++ )
      { xn=x1+x2+x3;
	    x1=x2;
	    x2=x3;
	    x3=xn;
       }
    }
printf (“Xn=%dn”,xn);
}

8、输入所有大于1010的4位偶数,且该数的各位数字两两不相同。

main( )
{ int i, j, k, l;
for ( i=1; i<=9; i++ )
for ( j=0; j<=9; j++ )
{ if ( j==i )  continue;
for ( k=1; k<=9; k++ )
{ if ( k==i || k==j ) continue;
for ( l=0; l<=9; l+=2 )
	     {if ( l==i || l==j || l == k )  continue;
	      printf (“%dn”,i*1000+j*100+k*10+l);
	       }
	    }
    }
}

9、用40元买苹果、西瓜和梨,三种水果都要。已知苹果0.4元一个,西瓜4元一个,梨方
0.2元一个。问可以各买多少个?输出全部购买方案。
注释:题中水果的价格以元计价,为了避免计算中出现实数,则改为以角为计价单位。
法1:

 main( )
{int i, j, k;
for ( i=0; i<=100; i++ )
for( j=0; j<=100-i; j++ )
if ( i*4+j*40+(100-i-j)*2 == 400 )
printf (“apple=%d watermelon=%d pear=%dn”,i,j,100-i-j);
}

方法2:

#include "math.h"
main()
{int a,b,c;
 float s;
 printf("n");
 for(a=1;a<25;a++)
   for(b=1;b<100;b++)
    {c=100-a-b;
     s=a*4+b*.4+c*.2;
     if(a+b+c==100&&fabs(s-40)<1e-4)printf("a=%d,b=%d,c=%d,s=%fn",a,b,c,s);
     }
 }

10、编写程序,输出以下图案。
*
* * *
* * * * *
* * * * * * *
* * * * *
* * *
*

main( )
{int i, j, n;
printf(”nPlease Enter n: ”);
scanf (”%d”,&n);
for ( i=1;i<=n;i++ )
{for ( j=1;j<=n+i-1;j++ )
if ( j > n-i )  printf (”* ”);
else          printf (”  ”);
printf (”n”);
    }
for ( i=1;ifor ( j=1;j<=2*n-i-1;j++ )
if ( j>i )  printf(”* ”);
else        printf(”  ”);
printf(”n”);
   }
}

方法2

#include "math.h"
main()
{int n,i,j,k;
 printf("Input n(1,3,5,7,9...):");
 scanf("%d",&n);
 k=n/2+1;
 for(i=-k;ifor(j=1;j<=40-k+abs(i);j++)
   printf(" ");
   for(j=1;j<2*k-2*abs(i);j++)
   printf("*");
   printf("n");
   }
  }
#include "math.h"
main()
{int n,i,j;
 scanf("%d",&n);
 n=n/2+1;
 for(i=-n;i<=n;i++)
  {for(j=1;j<40+n-abs(i)-1;j++)
   if(j<40-n+abs(i))printf(" ");
   else printf("*");
  printf("n");
   }
 } 
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/980279.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号