全国计算机等级考试三级C语言上机题81-90

互联网 | 编辑: uker编辑2 2007-03-22 00:00:00转载

 ☆题目81   已知数据文件in.dat中存有300个四位数,并已调用读函数ReadDat()把这些数存入数组a中,请编制一函数jsValue(),其功能是:求出千位数上的数加百位数等于十位数上的数加个位数上的数的个数cnt,再求出所有满足此条件的四位数平均值pjz1,以及不满足此条件的四

 ☆题目81
  已知数据文件in.dat中存有300个四位数,并已调用读函数ReadDat()把这些数存入数组a中,请编制一函数jsValue(),其功能是:求出千位数上的数加百位数等于十位数上的数加个位数上的数的个数cnt,再求出所有满足此条件的四位数平均值pjz1,以及不满足此条件的四位数平均值pjz2,最后调用写函数writeDat()把结果输出到out.dat文件。
   例如:7153,7+1=5+3,则该数满足条件计算平均值pjz1,且个数cnt=cnt+1。8129,8+1<>2+9,则该数不满足条件计算平均值pjz2。
   部分源程序存在文件prog1.c中。
   程序中已定义数组:a[300],已定义变量:cnt,pjz1,pjz2。
   请勿改动主函数main()、读函数ReadDat()和写函数writeDat()的内容。
  #include
  int a[300],cnt=0;
  double pjz1=0.0,pjz2=0.0;
  
  jsValue()
  {int i,thou,hun,ten,data,n=0;
   for(i=0;i<300;i++)
   {thou=a[i]/1000; hun=a[i]%1000/100;
   ten=a[i]%100/10; data=a[i]%10;
   if(thou+hun==ten+data) {cnt++;pjz1+=a[i];}
   else {n++;pjz2+=a[i];}
   }
   if(cnt==0) pjz1=0;
   else pjz1/=cnt;
   if(n==0) pjz2=0;
   else pjz2/=n;
  }
  
  main()
  {
   int i;
  
   readDat();
   jsValue();
   writeDat();
   printf("cnt=%d\n满足条件的平均值pzj1=%7.2f\n不满足条件的平均值pzj2=%7.2f\n",cnt,pjz1,pjz2);
  }
  
  readDat()
  {
   FILE *fp;
   int i;
   fp=fopen("in.dat","r");
   for(i=0;i<300;i++)fscanf(fp,"%d,",&a[i]);
   fclose(fp);
  }
  
  writeDat()
  {
   FILE *fp;
   int i;
   fp=fopen("out.dat","w");
   fprintf(fp,"%d\n%7.2f\n%7.2f\n",cnt,pjz1,pjz2);
   fclose(fp);
  }
  
  
  ★题目82
  已知数据文件in.dat中存有300个四位数,并已调用读函数ReadDat()把这些数存入数组a中,请编制一函数jsValue(),其功能是:求出所有这些四位数是素数的个数cnt,再求出所有满足此条件的四位数平均值pjz1,以及不满足此条件的四位数平均值pjz2,最后调用写函数writeDat()把结果cnt,pjz1,pjz2输
  出到out.dat文件。
   例如:5591是素数,则该数满足条件计算平均值pjz1,且个数cnt=cnt+1。
   9812是非素数,则该数不满足条件计算平均值pjz2。
   部分源程序存在文件prog1.c中。
   程序中已定义数组:a[300],已定义变量:cnt,pjz1,pjz2
   请勿改动主函数main()、读函数ReadDat()和写函数writeDat()的内容。
  #include
  int a[300],cnt=0;
  double pjz1=0.0,pjz2=0.0;
  
  int isP(int m)
  {int i;
  
   for(i=2;i   if(m%i==0)return 0;
   return 1;
  }
  
  jsValue()
  {int i;
   for(i=0;i<300;i++)
   if(isP(a[i])) {pjz1+=a[i];cnt++;}
   else pjz2+=a[i];
   if(cnt==0) pjz1=0;
   else pjz1/=cnt;
   if(300-cnt==0) pjz2=0;
   else pjz2/=(300-cnt);
  }
  
  main()
  {
   int i;
  
   readDat();
   jsValue();
   writeDat();
   printf("cnt=%d\n满足条件的平均值pzj1=%7.2f\n不满足条件的平均值pzj2=%7.2f\n",cnt,pjz1,pjz2);
  }
  
  readDat()
  {
   FILE *fp;
   int i;
   fp=fopen("in.dat","r");
   for(i=0;i<300;i++)fscanf(fp,"%d",&a[i]);
   fclose(fp);
  }
  
  writeDat()
  {
   FILE *fp;
   int i;
   fp=fopen("out.dat","w");
   fprintf(fp,"%d\n%7.2f\n%7.2f\n",cnt,pjz1,pjz2);
   fclose(fp);
  }
    
  
  ☆题目83
  请编制函数ReadDat()实现从文件IN.DAT中读取1000个十进制整数到数组xx中;请编制函数Compute()分别计算出xx中奇数的个数odd,奇数的平均值ave1,偶数的平均值ave2以及所有奇数的方差totfc的值,最后调用函数WriteDat()把结果输出到OUT.DAT文件中。
   计算方差的公式如下:
   N 2
   totfc=1/N ∑ (xx[i]-ave1)
   i=1
   设N为奇数的个数,xx[i]为奇数,ave1为奇数的平均值。
   原始数据文件存放的格式是:每行存放10个数,并用逗号隔开。(每个数均大于0且小于等于2000)

   部分源程序存在文件prog1.c中。
   请勿改动主函数main()和输出数据函数writeDat()的内容。
  #include
  #include
  #include
  #define MAX 1000
  
  int xx[MAX],odd=0,even=0;
  double ave1=0.0,ave2=0.0,totfc=0.0;
  void WriteDat(void);
  
  int ReadDat(void)
  {
   int i;
   FILE *fp;
  
   if((fp=fopen("IN.DAT","r"))==NULL) return 1;
  
  /*********编制函数ReadDat()的部分************/
  for(i=0;i   {fscanf(fp,"%d,",&xx[i]);
   if((i+1)%10==0)
   fscanf(fp,"\n");
   }
  /*******************************************/
  
   fclose(fp);
   return 0;
  }
  
  void Compute(void)
  { int i,yy[MAX];
   for(i=0;i   yy[i]=0;
   for(i=0;i   if(xx[i]%2) { yy[odd++]=xx[i]; ave1+=xx[i];}
   else { even++; ave2+=xx[i];}
   if(odd==0) ave1=0;
   else ave1/=odd;
   if(even==0) ave2=0;
   else ave2/=even;
   for(i=0;i   totfc+=(yy[i]-ave1)*(yy[i]-ave1)/odd;
  }
  
  void main()
  {
   int i;
  
   for(i=0;i   if(ReadDat()){
   printf("数据文件IN.DAT不能打开!\007\n");
   return;
  }
   Compute();
   printf("ODD=%d\nAVE1=%f\nAVE2=%f\nTOTFC=%f\n",odd,ave1,ave2,totfc);
   WriteDat();
  }
  
  void WriteDat(void)
  {
   FILE *fp;
   int i;
  
   fp=fopen("OUT.DAT","w");
   fprintf(fp,"%d\n%f\n%f\n%f\n",odd,ave1,ave2,totfc);
   fclose(fp);
  }
  
  
  ☆题目84
  现有一个10个人100行的选票数据文件IN.DAT,其数据存放的格式是每条记录的长度均为10位,第一位表示第一个人的选中情况,第二位表示第二个人的选中情况,依此类推 :内容均为字符0和1,1表示此人被选中,0表示此人未被选中,若一张选票人数大于5个人时被认为无效的选票。给定函数ReadDat()的功能是把选票数据读入到字符串数组xx中。请编制函数CountRs()来统计每个人的选票数并把得票数依次存入yy[0]到yy[9]中。把结果yy输出到文件OUT.DAT中。
   部分源程序存在文件prog1.c中。
   请勿改动主函数main()、读数据函数ReadDat()和输出数据函数writeDat()的内容。
  #include
  
  char xx[100][11];
  int yy[10];
  int ReadDat(void);
  void WriteDat(void);
  
  void CountRs(void)
  { int i,j,count;
   for(i=0;i<100;i++)
   { count=0;
   for(j=0;j<10;j++)
   if(xx[i][j]=='1') count++;
   if(count>5) continue;
   for(j=0;j<10;j++)
   if(xx[i][j]=='1') yy[j]++;
   }
  }
  
  
  void main()
   {
   int i;
  
   for(i=0;i<10;i++)yy[i]=0;
   if(ReadDat()){
   printf("选票数据文件IN.DAT不能打开!\n\007");
   return;
   }
   CountRs();
   WriteDat();
  }
  
  int ReadDat(void)
  {
   FILE *fp;
   int i;
  
   if((fp=fopen("IN.DAT","r")) == NULL) return 1;
   for(i=0;i<100;i++){
   if(fgets(xx[i],12,fp)==NULL)return 1;
   xx[i][10]='\0';
   }
  
  fclose(fp);
  return 0;
  }
  
  void WriteDat(void)
  {
   FILE *fp;
   int i;
  
   fp=fopen("OUT.DAT","w");
   for(i=0;i<10;i++){
   fprintf(fp,"%d\n",yy[i]);
   printf("第%d个人的选票数=%d\n",i+1,yy[i]);
   }
   fclose(fp);
  }
  
  
  
  ☆题目85
  已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是:把一个四位数的个位数字上的值减去千位数字上的值再减去百位数字上的值最后减去十位数字上的值,如果得出的值大于等于零且原四位数是偶数,则统计出满足此条件的个数cnt并把这些四位数按从小到大的顺序存入数组b中,最后调用写函数writeDat( )把结果cnt以及数组b中符合条件的四位数输出到OUT.DAT文件中。
   注意:部分源程序存在文件prog1.c中。
   程序中已定义数组:a[200],b[200],已定义变量:cnt

请勿改动数据文件IN.DAT中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。
  
  #include
  #define MAX 200
  int a[MAX], b[MAX], cnt = 0 ;
  
  void jsVal()
  {int i,j,thou,hun,ten,data;
   for(i=0;i   {thou=a[i]/1000; hun=a[i]/100%10;
   ten=a[i]%100/10; data=a[i]%10;
   if(data-thou-hun-ten>=0&&a[i]%2==0) b[cnt++]=a[i];
   }
   for(i=0;i   for(j=i+1;j   if(b[i]>b[j]) {thou=b[i];b[i]=b[j];b[j]=thou;}
  }
  
  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() ;
  }
  
  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) ;
  }
  
    
  题目86
  已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是:把千位数字和十位数字重新组成一个新的十位数ab(新十位数的十位数字是原四位数的千位数字,新十位数的个位数字是原四位数的十位数字),以及把个位数字和百位数字组成另一个新的十位数cd(新十位数的十位数字是原四位数的个位数字,新十位数的个位数字是原四位数的百位数字),如果新组成的两个十位数ab>cd,ab必须是偶数且能被5整除,cd必须是奇数,同时两个新数的十位数字均不为零,则将满足此条件的四位数按从大到小的顺序存入数组b中,并要计算满足上述条件的四位数的个数cnt。最后main()函数调用写函数writeDat( )把结果cnt以及数组b中符合条件的四位数输出到OUT.DAT文件中。
   注意:部分源程序存在文件prog1.c中。
   程序中已定义数组:a[200],b[200],已定义变量:cnt
   请勿改动数据文件IN.DAT中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。
  #include
  #define MAX 200
  int a[MAX], b[MAX], cnt = 0 ;
  
  void jsVal()
  {int i,j,thou,hun,ten,data,ab,cd;
   for(i=0;i   {thou=a[i]/1000; hun=a[i]%1000/100;
   ten=a[i]%100/10; data=a[i]%10;
   ab=10*thou+ten; cd=10*data+hun;
   if((ab-cd)>0&&(ab%2!=1&&ab%5==0)&&cd%2==1&&ab>=10&&cd>=10)
   {b[cnt]=a[i];cnt++;}
   }
   for(i=0;i   for(j=i+1;j   if(b[i]  }
  
  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() ;
  }
  
  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) ;
  }
  
  
  
  ☆题目87已知数据文件in.dat中存有300个四位数,并已调用读函数ReadDat()把这些数存入数组a中,请编制一函数jsValue(),其功能是:求出千位数上的数加个位数等于百位数上的数加十位数上的数的个数cnt,再求出所有满足此条件的四位数平均值pjz1,以及不满足此条件的四位数平均值pjz2,最后调用写函数把结果输出到out.dat文件。
   例如:6712,6+2=7+1,则该数满足条件计算平均值pjz1,且个数cnt=cnt+1。8129,8+9<>1+2,则该数不满足条件计算平均值pjz2。
   部分源程序存在文件prog1.c中。

 程序中已定义数组:a[300],已定义变量:cnt,pjz1,pjz2。
   请勿改动主函数main()、读函数ReadDat()和写函数writeDat()的内容。
  #include
  int a[300],cnt=0;
  double pjz1=0.0,pjz2=0.0;
  
  jsValue()
  { int i,gw,sw,bw,qw,cnt2=0;
   for(i=0;i<300;i++)
   {gw=a[i]%10; sw=a[i]/10%10;
   bw=a[i]/100%10; qw=a[i]/1000;
   if((qw+gw)==(sw+bw)) { cnt++;pjz1+=a[i]; }
   else { cnt2++;pjz2+=a[i]; }
   }
   if(cnt==0) pjz1=0;
   else pjz1/=cnt;
   if(cnt2==0) pjz2=0;
   else pjz2/=cnt2;
  }
  
  
  main()
  {
   int i;
  
   readDat();
   jsValue();
   writeDat();
   printf("cnt=%d\n满足条件的平均值pzjl=%7.2f\n不满足条件的平均值pzj2=%7.2f\n",cnt,pjz1,pjz2);
  }
  
  readDat()
  {
   FILE *fp;
   int i;
   fp=fopen("in.dat","r");
   for(i=0;i<300;i++)fscanf(fp,"%d,",&a[i]);
   fclose(fp);
  }
  
  writeDat()
  {
   FILE *fp;
   int i;
   fp=fopen("out.dat","w");
   fprintf(fp,"%d\n%7.2f\n%7.2f\n",cnt,pjz1,pjz2);
   fclose(fp);
  }
    
  
  题目88
  函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中,请编制函数SortCharA(),其函数的功能是:以行为单位对字符按从小到大的顺序进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数writeDat()把结果xx输出到文件OUT1.DAT中。
   例:原文:dAe,BfC.
   CCbbAA
   结果:,.ABCdef
   AACCbb
   原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。
   部分源程序存在文件prog1.c中。
   请勿改动主函数main()、读数据函数ReadDat()和输出数据函数writeDat()的内容。
  #include
  #include
  #include
  
  char xx[50][80];
  int maxline=0;/*文章的总行数*/
  
  int ReadDat(void);
  void WriteDat(void);
  
  void SortCharA(void)
  {int i,j,k,strl;
   char ch;
   for(i=0;i   {strl=strlen(xx[i]);
   for(j=0;j   for(k=j+1;k   if(xx[i][j]>xx[i][k])
   {ch=xx[i][j]; xx[i][j]=xx[i][k]; xx[i][k]=ch;}
   }
  }
  
  void main()
   {
   clrscr();
   if(ReadDat()){
   printf("数据文件IN.DAT不能打开!\n\007");
   return;
   }
   SortCharA();
   WriteDat();
  }
  
  int ReadDat(void)
  {
   FILE *fp;
   int i=0;
   char *p;
  
   if((fp=fopen("IN.DAT","r"))==NULL) return 1;
   while(fgets(xx[i],80,fp)!=NULL){
   p=strchr(xx[i],'\n');
   if(p)*p=0;
   i++;
   }
  maxline=i;
  fclose(fp);
  return 0;
  }
  
  void WriteDat(void)
  {
   FILE *fp;
   int i;
  
   clrscr();
   fp=fopen("OUT1.DAT","w");
   for(i=0;i   printf("%s\n",xx[i]);
   fprintf(fp,"%s\n",xx[i]);
   }
   fclose(fp);
  }
  
  
  题目89
  已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是:把一个四位数的千位数字上的值加上个位数字上的值恰好等于百位数字上的值加上十位数字上的值,并且原四位数是奇数,则统计出满足此条件的个数cnt并把这些四位数按从小到大的顺序存入数组b中,最后调用写函数writeDat( )把结果cnt以及数组b中符合条件的四位数输出到OUT.DAT文件中。
   注意:部分源程序存在文件prog1.c中。
   程序中已定义数组:a[200],b[200],已定义变量:cnt
   请勿改动数据文件IN.DAT中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。
  #include
  #define MAX 200
  int a[MAX], b[MAX], cnt = 0 ;
  
  void jsVal()
  {
   int i,j,gw,sw,bw,qw;
   for(i=0;i   {gw=a[i]%10; sw=a[i]/10%10;
   bw=a[i]/100%10; qw=a[i]/1000;
   if((qw+gw)==(sw+bw)&&a[i]%2) b[cnt++]=a[i];
   }
   for(i=0;i   for(j=i+1;j   if(b[i]>b[j]) { qw=b[i]; b[i]=b[j]; b[j]=qw;}
  }
  
  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() ;
  }
  
  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) ;
  }
  
  
  ★题目90 下列程序的功能是:将一正整数序列{K1,K2,...,K9}重新排列成一个新的序列。新序列中,比K1小的数都在K1的前面(左面),比K1大的数都在K1的后面(右面)。要求编写函数jsValue()实现此功能,最后调用writeDat()函数将新序列输出到文件out.dat中。
   说明:在程序中已给出了10个序列,每个序列有9个正整数,并存入数组a[10][9]中,分别求出这10个新序列。
   例:序列{6,8,9,1,2,5,4,7,3}
   经重排后成为{3,4,5,2,1,6,8,9,7}
   部分源程序存在文件prog1.c中。
   请勿改动主函数main()和写函数writeDat()的内容。
  #include
  
  jsValue(int a[10][9])
  { int i,j,k,val,num;
   for(i=0;i<10;i++)
   { val=a[i][0];
   for(j=0;j<9;j++)
   if(a[i][j]   { num=a[i][j];
   for(k=j;k>0;k--)
   a[i][k]=a[i][k-1];
   a[i][0]=num;
   }
   }
  }
  
  main()
  {
   int a[10][9]={{6,8,9,1,2,5,4,7,3},
   {3,5,8,9,1,2,6,4,7},
   {8,2,1,9,3,5,4,6,7},
   {3,5,1,2,9,8,6,7,4},
   {4,7,8,9,1,2,5,3,6},
   {4,7,3,5,1,2,6,8,9},
   {9,1,3,5,8,6,2,4,7},
   {2,6,1,9,8,3,5,7,4},
   {5,3,7,9,1,8,2,6,4},
   {7,1,3,2,5,8,9,4,6},
   };
   int i,j;
   jsValue(a);
   for(i=0;i<10;i++){
   for(j=0;j<9;j++) {
   printf("%d",a[i][j]);
   if(j<=7)printf(",");
   }
   printf("\n");
   }
   writeDat(a);
  }
  
  writeDat(int a[10][9])
  {
   FILE *fp;
   int i,j;
  
   fp=fopen("out.dat","w");
   for(i=0;i<10;i++){
   for(j=0;j<9;j++){
   printf("%d",a[i][j]);
   fprintf(fp,"%d",a[i][j]);
   if(j<=7) fprintf(fp,",");
   }
   printf("\n");
   fprintf(fp,"\n");
  }
   fclose(fp);
  }
如果想了解更多相关信息以及详细咨询,欢迎点击中英网http://www.uker.net/,或发email至:echo@uker.net,UKer.net资深编辑将为您详细解答。

相关阅读

每日精选

点击查看更多

首页 手机 数码相机 笔记本 游戏 DIY硬件 硬件外设 办公中心 数字家电 平板电脑