计算机三级网络技术的上机题

 

下列程序的功能是:计算500-800区间内素数的个数cnt,并按所求素数的值从大到小的顺序,再计算其间隔加、减之各,即第1个素数-第2个素数+第3个素数-第4个素数+第5个素数……的值sum。请编写函数countvalue()实现程序的要求,最后调用函数writedat()把结果cnt和sum,输出到文件out11.dat中。
    注意:部分源程序已给出。
    请勿改动主函数main()和输出数据函数writedat()的内容。

#include <stdio.h>
int cnt,sum;

void countvalue()
{
}

void main()
{cnt=sum=0;
countvalue();
printf("素数的个数=%d\n",cnt);
printf("按要求计算的值=%d\n",sum);
writeDat();
system("pause");
}

writeDat()
{FILE *fp;
fp=fopen("OUT11.DAT","w");
fprintf(fp,"%d\n%d\n",cnt,sum);
fclose(fp);}

   
--------------------------
void countValue() /*标准答案,有问题*/
{int I,j,half,yy[100];
 for(I=500;I<=800;I++)
 {half=I/2;
  for(j=2;j<half;j++)
  if (I%j==0) break;
  if (j>=half) {yy[cnt]=I;cnt++;}
  }
for (I=0,j=-1;I<cnt;I++)
 {j=j*-1;  sum+=j*yy[I];} /*此处有误!!!应为:{sum+=j*yy[I];j=j*-1; }*/
}
或者:
本题要求从大到小的顺序进行加减运算,因此这里采用从800开始循环到500这样就能保证出来的素数就是从大到小,内嵌的for()再加上if()是用来判断是否为素数。其中k用来控制加减运算。
void countValue()
{int i,j,k=1;
for(i=800;i>=500;i--)
{for(j=2;j<i;j++)
if(i%j==0) break;
if(j>=i)
{cnt++;sum+=k*i;k=-1*k;}
}
}

int ss(int m)
{ int i,k=1;
 for(i=2;i<m/2;i++)
 if(m%i==0) k=0;
 return k;     }
void countvalue()
{ int i,j=0,a[300],k=1;
 cnt=0;
 sum=0;
 for(i=800;i>500;i--)
 if(ss(i))
 { cnt++;
   a[j++]=i;  }
 for(i=0;i<cnt;i++)
 { sum+=k*a[i];
   k=-k;         }}
 

 

先出5000以下符合条件的自然数。条件是:千位数字与百位数字之和等于十位数字与个位数字之和,且千位数字与百位数字之和等于个位数字与千位数字之差的确10倍。计算并输出这些四位自然数的个数cnt以及这些数的和sum。请编写函数countvalue()实现程序的要求,最后调用函数writedat()把结果cnt和sum,输出到文件out13.dat中。
    注意:部分源程序已给出。
    请勿改动主函数main()和输入输出数据函数writeDAT()的内容。

#include <stdio.h>
int cnt,sum;

void countvalue()
{
}

void main()
{cnt=sum=0;
countvalue();
printf("满足条件的自然数的个数=%d\n",cnt);
printf("满足条件的自然数的个数=%d\n",sum);
writeDat();
 system("pause");
}

writeDat()
{FILE *fp;
fp=fopen("OUT13.DAT","w");
fprintf(fp,"%d\n%d\n",cnt,sum);
fclose(fp);
}

 


----------------------------
void countValue() /*标准答案*/
{int I,thou,hun,ten,data;
 for(I=5000;I>=1000;I--)
 {thou=I/1000;
  hun=I%1000/100;
  ten=I%100/10;
  data=I%10;
  if (thou+hun==ten+data&&thou+hun==(data-thou)*10)
  {cnt++;sum+=I;}
 }
}
或者:
void countvalue()
{ int i,a,b,c,d;
 for(i=1000;i<5000;i++)
 { a=i/1000;
   b=(i%1000)/100;
   c=(i%100)/10;
   d=i%10;
   if((a+b==c+d)&&((a+b)==10*(d-a)))
   { cnt++;
     sum+=i;  } }
 }

 

 

已知数据文件IN.DAT中存有200个四位数, 并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是: 如果四位数各位上的数字均是奇数, 则统计出满足此条件的个数cnt, 并把这些四位数按从大到小的顺序存入数组b中。最后main()函数调用写函数writeDat( )把结果cnt以及数组b中符合条件的四位数输出到OUT.DAT文件中。
    注意: 部分源程序存在文件PROG1.C文件中。
    程序中已定义数组: a[200], b[200], 已定义变量: cnt
    请勿改动数据文件IN.DAT中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。
-------------------------

 

#include <stdio.h>
#define MAX  200
int a[MAX], b[MAX], cnt = 0;

void jsVal()
{
}

void readDat()
{  int i ;
  FILE *fp ;
  fp = fopen("in.dat", "r") ;
  for(i = 0 ; i < MAX ; i++) fscanf(fp, "%d", &a[i]) ;
  fclose(fp) ;
}

void main()
{  int i ;
  readDat() ;
  jsVal() ;
  printf("满足条件的数=%d\n", cnt) ;
  for(i = 0 ; i < cnt ; i++) printf("%d ", b[i]) ;
  printf("\n") ;
  writeDat() ;
system("pause");
}

writeDat()
{ FILE *fp ;
  int i ;
  fp = fopen("out.dat", "w") ;
  fprintf(fp, "%d\n", cnt) ;
  for(i = 0 ; i < cnt ; i++) fprintf(fp, "%d\n", b[i]) ;
  fclose(fp) ;
}


void jsVal() /*标准答案*/
void jsVal()
{
int I,thou,hun,ten,data,j;
for(I=0;I<200;I++)
 {thou=a[I]/1000;  hun=a[I]%1000/100;
  ten=a[I]%100/10;  data=a[I]%10;
  if (thou%2!=0&&hun%2!=0&&ten%2!=0&&data%2!=0)
  {b[cnt]=a[I];cnt++;}
 }
for(I=0;I<cnt-1;I++)
  for(j=I+1;j<cnt;j++)
   if(b[I]<b[j])
    {data=b[I];b[I]=b[j];b[j]=data;}
}

你可能感兴趣的:(计算机三级网络技术的上机题)