【全国计算机等级考试二级教程——C语言程序设计(2021年版)编程题答案-第9章】

全国计算机等级考试二级教程——C语言程序设计(2021年版)

编程题答案(第9章):

[9.27]

输入一行数字字符,请用数组元素作为计数器来统计每个数字字符的个数。用下标为0的元素统计字符’0’的个数,用下标为1的元素统计字符1的个数……

#include<stdio.h>
#include<ctype.h>
main()
{char c;
 int k,a[10]={0};
 while((c=getchar())!='\n')
 if(isdigit(c)) a[c-'0']+=1;
 /*isdigit见附录6*/
 for(k=0;k<10;k++)
 printf("%d的个数:%d\n",k,a[k]);
 } 

[9.28]

编写函数,对具有10个整数的数组进行如下操作:从下标为n的元素开始直到最后一个元素,依次向前移动一个位置。输出移动后的结果。

#include<stdio.h>
void fun(int a[],int n)
{int i,t; 
 for(i=n;i<10;i++)
 a[i-1]=a[i]; 
}
main()
{int a[10]={0,1,2,3,4,5,6,7,8,9},n,i;
 scanf("%d",&n);
 fun(a,n);
 for(i=0;i<9;i++)
 printf("a[%d]=%d\n",i,a[i]);
}

[9.29]

编写函数,把数组中所有奇数放在另一个数组中返回。

#include<stdio.h>
#define N 10/*用10替换N*/
int fun(int a[],int b[])
{int i,k=0;
 for(i=0;i<N;i++)
 if(a[i]%2)/*判断奇数*/ 
 {b[k]=a[i];
  k++;	
 }
 return k;/*k是b[]实际大小*/
}
main()
{int a[N]={0,1,2,3,4,5,6,7,8,9};
 int b[N],k,i;
 k=fun(a,b);
 for(i=0;i<k;i++)
 printf("b[%d]=%d\n",i,b[i]);
}

[9.30]

编写函数,对字符数组中的字母按由大到小的字母顺序进行排序。

#include<stdio.h>
#include<ctype.h>
int fun(char a[],char b[])
{int i,j,n,k=0;
 char m;
 for(i=0;i<9;i++)
  {if(isalpha(a[i]))/*判断字母*/
   b[k]=a[i],k++;  
  } /*将是字母的a[]赋值给b[]*/
 for(j=0;j<k;j++)
  {for(n=j+1;n<k;n++)
   {if(b[j]<b[n])
    m=b[j],b[j]=b[n],b[n]=m;
   }
  }/*b[]大小排序*/
 return k;
}
main()
{char b[9],a[9]={'a','9','d','8','g','h','j','k','6'};
 int n,k;
 k=fun(a,b);
 for(n=0;n<k;n++)
 printf("b[%d]=%c\n",n,b[n]);
}

[9.31]

输入若干有序数放在数组中。然后输入一个数,插入到此有序数列中,插入后,数组中的数仍然有序。请对插在最前,插在最后,插在中间三种情况运行程序,以便验证程序是否正确。

#include<stdio.h>
void fun(int [],int);
main()
{int i,x,k,a[10];
 printf("请输入9个有序数:");/*留一个位置*/ 
 for(i=0;i<9;i++)
 scanf("%d",&a[i]);/*a[]赋值*/
 for(k=0;k<9;k++)
 printf("a[%d]=%d\n",k,a[k]);
 printf("请输入一个数:"); 
 scanf("%d",&x);
 fun(a,x);
 for(k=0;k<10;k++)
 printf("a[%d]=%d\n",k,a[k]);
}
/*只考虑了从小到大的情况*/
void fun(int a[],int x)
{int i,j=0,k;
 for(i=0;i<9;i++)
  {if(x>a[i]) j++;/*判断插入位置*/
  }
 for(k=8;k>=j;k--)
  a[k+1]=a[k];/*后移*/
 a[j]=x;
}

[9.32]

编写函数,把任意十进制正整数转换成二进制数。提示:把十进制数不断被2除的余数放在一个一维数组中,直到商数为零。在主函数中进行输出,要求不得按逆序输出。

#include<stdio.h>
int fun(int ,int []);
main()
{int x,n,k,a[35];
 printf("十进制数:");
 scanf("%d",&x);
 n=fun(x,a);
 printf("二进制数:");
 for(k=0;k<n;k++)
 printf("%d",a[k]);
}
int fun(int x,int a[])
{int i,j,k,t;
 for(i=0,j=x;j!=0;j/=2)
 a[i]=j%2,i++;
 for(k=0;k<i/2;k++)
 t=a[k],a[k]=a[i-k-1],a[i-k-1]=t;
 return i;
}

[9.33]

编写函数,调用随机函数产生0到19之间的随机数,在数组中存入15个互不重复的整数。要求在主函数中进行输出结果。若已定义x为int类型,调用随机函数步骤如下:

#include<stdlib.h>

x=rand()%20;/*产生0到19的随机数*/

#include<stdio.h>
#include<stdlib.h>
void fun(int a[])
{int i,j,k,x;
 for(i=0;i<15;)
  {for(j=0,k=0,x=rand()%20;j<i;j++)
   {if(x!=a[j]) k++;}
  if(k==j) a[i]=x,i++;
  }
}
main()
{int i,a[15]={0};
 fun(a);
 for(i=0;i<15;i++)
 printf("a[%d]=%d\n",i,a[i]);
}

[9.34]

求任意方阵每行,每列,两对角线上元素之和。

#include<stdio.h>
#define n 3
void fun1(int a[][n])
{int i,j,s=0;
 for(i=0;i<n;i++,s=0)
  for(j=0;j<n;j++)
  {s+=a[i][j];
   if(j==2) printf("第%d行的和:%d\n",i+1,s);
  }
}
void fun2(int a[][n])
{int i,j,s=0;
 for(i=0;i<n;i++,s=0)
  for(j=0;j<n;j++)
  {s+=a[j][i];
   if(j==2) printf("第%d列的和:%d\n",i+1,s);
  }
}
void fun3(int a[][n])
{int i,j,s;
 for(i=0,j=0,s=0;i<n;i++,j++)
 {s+=a[i][j];
  if(i==2) printf("正对角线的和:%d\n",s);
 }
 for(i=0,j=2,s=0;i<n;i++,j--)
 {s+=a[i][j];
  if(i==2) printf("副对角线的和:%d\n",s);
 }
}
main()
{int i,j,a[n][n];
 printf("a[3][3]:\n");
 for(i=0;i<n;i++)
  for(j=0;j<n;j++)
  scanf("%d",&a[i][j]);
 for(i=0;i<n;i++)
  for(j=0;j<n;j++)
  {printf("a[%d][%d]=%d ",i,j,a[i][j]);
   if(j==n-1) printf("\n");
  }
 fun1(a); 
 fun2(a);
 fun3(a);
} 

[9.35]

求两个矩阵的和。

#include<stdio.h>
#define n 3
void fun(int a[][n],int b[][n],int c[][n])
{int i,j;
 for(i=0;i<n;i++)
  for(j=0;j<n;j++)
  c[i][j]=a[i][j]+b[i][j];
 printf("a[3][3]+b[3][3]=\n");
 for(i=0;i<n;i++)
  for(j=0;j<n;j++)
  {printf("%-5d",c[i][j]);
   if(j==n-1) printf("\n");
  }
}
main()
{int a[n][n],b[n][n],c[n][n],i,j;
 printf("a[3][3]:\n");
 for(i=0;i<n;i++)
  for(j=0;j<n;j++)
  scanf("%d",&a[i][j]);
 printf("b[3][3]:\n");
 for(i=0;i<n;i++)
  for(j=0;j<n;j++)
  scanf("%d",&b[i][j]);
 fun(a,b,c);  
}

#include<stdio.h>
#define n 9
main()
{int i,j,a[n][n];
 printf("    ** A MULTIPLICATION TABLE **\n   ");
 for(i=1;i<10;i++)
 printf(" (%d)",i);
 printf("\n----------------------------------------\n");
 for(i=0;i<9;i++)
  for(j=0;j<9;j++)
  a[i][j]=(i+1)*(j+1);
 for(i=0;i<9;i++)
 {printf("(%d)  ",i+1);
  for(j=0;j<9;j++)
  printf("%-4d",a[i][j]);
  printf("\n"); 
 }  
}

 

[9.37]

调用随机函数为5×4的矩阵置100以内的整数,输出该矩阵,求出每行元素之和,并把和值最大的那一行与第一行上的元素对调。若以定义x为int类型,请参考习题9.33调用随机函数。

#include<stdio.h>
#include<stdlib.h>
#define m 5
#define n 4
main()
{int a[m][n],s[m]={0},b,i,j,k;
 for(i=0;i<m;i++)/*矩阵赋值*/
  for(j=0;j<n;j++)
  a[i][j]=rand()%100;
 for(i=0;i<m;i++)/*矩阵输出*/
  {for(j=0;j<n;j++)
  printf("%-2d ",a[i][j]);
  printf("\n");
  }
 for(i=0;i<m;i++)/*每行求和*/
  for(j=0;j<n;j++)
  {s[i]+=a[i][j];
   if(j==3) printf("第%d行的和:%d\n",i+1,s[i]);
  }
 for(i=1,k=0;i<m;i++)/*找最大行*/
 if(s[i]>s[k])    k=i;
 for(i=0;i<n;i++)/*行替换*/
 {b=a[0][i];
  a[0][i]=a[k][i];
  a[k][i]=b;
 }
 for(i=0;i<m;i++)/*输出矩阵*/
  {for(j=0;j<n;j++)
  printf("%-2d ",a[i][j]);
  printf("\n");
  }
}

 

[9.38]

调用随机函数为5×5的矩阵置100以内的整数,输出该矩阵,然后逆置该矩阵,即将第一列的元素放到第一行上,将第二列的元素放到第二行上,其他以此类推。

#include<stdio.h>
#include<stdlib.h>
#define m 5
#define n 5
main()
{int a[m][n],i,j,k;
 for(i=0;i<m;i++)
  for(j=0;j<n;j++)
  a[i][j]=rand()%100;
 for(i=0;i<m;i++)
  {for(j=0;j<n;j++)
  printf("%-2d ",a[i][j]);
  printf("\n");
  }
 for(i=0;i<m;i++)
  for(j=i;j<n;j++)
  {k=a[i][j];
   a[i][j]=a[j][i];
   a[j][i]=k;
  }
 printf("逆置\n");
 for(i=0;i<m;i++)
  {for(j=0;j<n;j++)
  printf("%-2d ",a[i][j]);
  printf("\n");
  }
}

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值