高分网 > 答案大全 > 作业答案 > 课后作业答案 >

c语言程序设计课后习题答案

时间: 春燕2 课后作业答案

  课后作业是为巩固学习效果而安排的作业,是课堂教学过程中的非常重要的组成部分,是巩固新授知识,形成技能技巧,培养良好的思维品质,发展学生智力的重要途径,是课堂教学过程中不可跨越的一环。今天学习啦小编分享了c语言程序设计课后习题答案,一起来学习。

  c语言程序设计课后习题答案

  例1、求100到999之间的所有水仙花数。

  #include

  void main(void)

  {

  int n,b,s,g;

  for(n=100;n<=999;n++){

  b = n/100;

  s = (n-b*100)/10;

  g = (n%100)%10;

  if( b*b*b+s*s*s+g*g*g == n)printf("%d\n",n);

  }

  }

  例2、求两个整数的最大公约数和最小公倍数

  gcd(x,y) = gcd(x, x% y )

  lcm(x,y) =(x×y)/gcd(x,y)

  #include

  void main(void)

  {

  int x,y,r,n,gcd,lcm;

  scanf("%d%d",&x,&y);

  n = x*y;

  r=x%y;

  gcd=y;

  while(r!=0)

  {

  x=y;

  y=r;

  r=x%y;

  gcd=y;

  }

  lcm = n/gcd;

  printf("gcd=%d lcm=%d\n",gcd,lcm);

  }

  例3、将一张面值是100元的钱等值转换为5元、1元和0.5元的零钞,要求每种零钞至少一张,求所有的兑换方式。

  #include

  void main(void)

  {

  int i,j,k;

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

  for(j=1;j<=100;j++){

  for(k=1;k<=200;k++){

  if( i*5+j+0.5*k == 100 )

  printf("%d %d %d\n",i,j,k);

  }

  }

  }

  }

  例4、求爱因斯坦数学问题:有一条长台阶,若每步跨2阶,则最后剩余1阶,若每步跨3阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶,则最后剩5阶,若每步跨7阶,则最后正好一阶不剩。求台阶长度。

  #include

  void main(void)

  {

  int n;

  n=7;

  while(1){

  if( (n%2==1) && (n%3==2) &&

  (n%5==4) && (n%6==5) )break;

  n=n+7;

  }

  printf("%d\n",n);

  }

  例5、验证歌德巴赫猜想(任意一个大于6的偶数都可以分解为两个素数之和),验证范围是6~2000的偶数。

  #include

  #include

  void main(void){

  int n,i,k1,k2;

  int isPrimeFlag1,isPrimeFlag2;

  for(n=6;n<=100;n+=2){

  for(k1=3;k1

  isPrimeFlag1=1; //假设是素数

  for(i=3;i<=sqrt(k1);i+=2){

  if(k1%i==0){isPrimeFlag1=0;break;}

  }

  if( isPrimeFlag1==0 )continue;

  k2=n-k1;

  isPrimeFlag2=1; //假设k2是素数

  for(i=3;i<=sqrt(k2);i+=2){

  if(k2%i==0){isPrimeFlag2=0;break;}

  }

  if(isPrimeFlag1 && isPrimeFlag2 ){

  printf("%d=%d+%d\n",n,k1,k2);

  break;

  }

  }

  }

  }

  例6、已知一正整数递增等差数列,前5项的和是25,前5项的积是945,根据上述条件,输出该数列的前10项。

  #include

  void main(void)

  {

  int a,d,i,s,r,x;

  for(a=1;a<5;a++){

  for(d=1;d<5;d++){

  s=0; r=1;

  for(i=0;i<5;i++){

  x=a+d*i; s=s+x; r=r*x;

  }

  if(s==25 && r==945 )goto loop_exit;

  }

  }

  loop_exit:

  for(i=0;i<19;i++){

  x=a+d*i; printf("%d\n",x);

  }

  }

  例7、A、B、C、D和E合伙捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方休息。日上三竿,A第一个醒来,他将鱼分为五份,把多余的一条扔掉,拿走自己的一份。B第二个醒来,也将鱼分为五份,把多余的一条扔掉,拿走自己的一份。C、D、E依次醒来,也按同样的方法分鱼。求他们合伙至少捕了多少鱼。

  #include

  void main(void)

  {

  int zs,n,i,flag;

  zs=6;

  while(1){

  flag=1;n=zs;

  for(i=0;i<5;i++){

  if( n%5 !=1 ){flag=0;break;}

  n=n-(n-1)/5;

  }

  if(flag==1)break;

  n = ++zs;

  }

  printf("%d\n",zs);

  }

  例8、一辆卡车违反交通规则,撞人逃跑。现场有三个目击证人,但没有记住车号,只记下一些车号的特征。甲说:牌照的前两位数字相同;乙说:牌照的后两位数字是相同的;丙说:四位的车号刚好是一个整数的平方。根据上述线索求车号。

  #include

  #include

  void main(void)

  {

  int n,x,k1,k2,k3,k4;

  for(n=1000;n<=9999;n++){

  x=(int)sqrt(n);

  if(x*x != n)continue;

  k1 = n/1000;

  k2 = (n-k1*1000)/100;

  k3 = (n-k1*1000-k2*100)/10;

  k4 = (n-k1*1000-k2*100-k3*10);

  if(k1==k2 && k3==k4 )printf("%d\n",n);

  }

  }

  例9、某数组有20个元素,编程序将该数组中的所有元素逆序存储并输出。即用第一元素和最后一个元素对调,第二和最后一个对调。

  #include

  #include

  void main(void)

  {

  int a[20],i,j,t;

  for(i=0;i<20;i++)a[i]=i+1;

  for(i=0,j=19;i

  t=a[i];a[i]=a[j];a[j]=t;

  }

  for(i=0;i<20;i++)printf("%d\n",a[i]);

  }

  例10、编程序,输入一个十进制数,将其转换为二进制后存储到一个字符数组中。

  #include

  #include

  void main(void){

  int x,r,i=0,j;

  char a[100]={0},t;

  scanf("%d",&x);

  while(1){

  r=x%2; a[i++]=48+r; x=x/2;

  if(x==0)break;

  }

  for(i=0,j=strlen(a)-1;i

  t=a[i];a[i]=a[j];a[j]=t;

  }

  printf("%s\n",a);

  }

  例11、编程序求二维数组中最小元素所在的行和列。

  #include

  #include

  #include

  void main(void)

  {

  int a[4][5],i,j,max,row,col;

  srand( (unsigned)time( NULL ) );

  for(i=0;i<4;i++ )

  for(j=0;j<5;j++)a[i][j]=rand();

  max=a[0][0];row=0;col=0;

  for(i=0;i<4;i++){

  for(j=0;j<5;j++){

  if(max>a[i][j]){max=a[i][j];row=i;col=j;}

  }

  }

  printf("i=%d j=%d\,",i,j);

  }

  例12、编程产生3×4的矩阵A,并输出他经过行列互换后的矩阵B。

  #include

  #include

  #include

  void main(void)

  {

  int a[3][4],b[4][3],i,j;

  srand( (unsigned)time( NULL ) );

  for(i=0;i<3;i++ )

  for(j=0;j<4;j++)a[i][j]=rand();

  for(i=0;i<3;i++){

  for(j=0;j<4;j++){

  b[j][i]=a[i][j];

  }

  }

  for(i=0;i<3;i++){

  printf("\n");

  for(j=0;j<4;j++){

  printf("%6d",a[i][j]);

  }

  }

  printf("\n");

  for(i=0;i<4;i++){

  printf("\n");

  for(j=0;j<3;j++)printf("%6d",b[i][j]);

  }

  }

  例13、不使用字符串比较函数strcmp,实现两个字符串的比较。

  #include

  #include

  void main(){

  char s1[300], s2[300];

  int result, i=0;

  scanf("%s%s",s1, s2 );

  while( s1[i] && s2[i] && s1[i] == s2[i] ) i++;

  result = s1[i]-s2[i];

  if ( result == 0 ) printf(" s1等于s2 ");

  else if( result > 0 ) printf(" s1大于s2 ");

  else printf(" s1小于s2 ");

  }

  例14、判断字符串s1中是否包含字符串s2。

  #include

  #include

  void main(void){

  char s1[100],s2[100];

  int i,j,len,flag;

  gets(s1);gets(s2);

  len = strlen(s2);

  for(i=0;i<=strlen(s1)-len;i++){

  flag=1;

  for(j=0;j

  if( s1[i+j]!=s2[j] ){flag=0;break;}

  }

  }

  if(flag==1)printf("包含!\n");

  else printf("不包含!\n");

  }

  以上是学习啦小编整理了c语言程序设计课后习题答案,有帮助到你吗?

23310