就业数据资源平台
当前位置:首页 > 网络技术
2013计算机等级考试三级网络技术上机试题及答案12

 下列程序的功能是:选出100~1000间的所有个位数字与十位数字之和被10除所得余数恰是百位数字的素数(如293)。计算并输出上述这些素数的个数cnt,以及这些素数值的和sum。请编写函数countValue()实现程序要求,最后调用函数writeDAT()把结果cnt和sum输出到文件OUT90.DAT中。
  注意:部分源程序已给出。
  请勿改动主函数main()和写函数writeDAT()的内容。
  试题程序:
  #include <stdio.h>
  int cnt, sum;
  void writeDAT();
  void countValue()
  {
  }
   void main()
  {
  cnt=sum=0;
  countValue();
  printf("素数的个数=%d\n", cnt);
  printf("满足条件素数值的和=%d", sum);
  writeDAT();
   }
  void writeDAT()
  {
  FILE *fp;
  fp=fopen("OUT90.DAT", "w");
  fprintf(fp, "%d\n%d\n", cnt, sum);
  fclose(fp);
  }
【答案】
  void countValue()
  {
  int i,j; /*定义循环控制变量*/
  int a3,a2,a1; /*定义变量存储3位数每位的数字*/
  int half;
  for(i=101;i<1000;i++) /*在该范围内寻找符合条件的数*/
  {
  a3=i/100; /*求百位数字*/
  a2=i%100/10; /*求十位数字*/
  a1=i%10; /*求个位数字*/
  if(a3==(a2+a1)%10) /*如果个位数字与十位数字之和被10除所得余数恰是百位数字*/
  {
  half=i/2;
  for(j=2;j<=half;j++) /*进一步判断该数是否为素数*/
  if(i%j==0) break; /*如果不是素数,则跳出循环,接着判断下一个数*/
  if(j>half) /*如果是素数*/
  {
  cnt++; /*计算这些素数的个数cnt*/
  sum+=i; /*计算这些素数的和值sum*/
  }
  }
  }
  }
  【解析】本题的解题思路是利用一个for循环依次取得100到1000之间的数,接着求得当前所取得的数的各个数位上的数字,然后判断该数个位数字与十位数字之和被10除所得的余数是否恰好等于百位上的数字。如果该条件成立,接着去判断原数是否是素数。最后将满足以上两个条件的数累加到变量sum(素数的和值)中,同时通过计数器变量cnt统计出素数的个数。
就业数据资源平台