已知数据文件IN53.DAT中存有200个4位数,并已调用读函数readDat()把这些数存入数组a中,请编制一函数jsVal(),其功能是;依次从数组a中取出一个4位数,如果该4位数连续大于该4位数以前的5个数且该数是偶数,则统计出满足此条件的数个数cn

admin2009-02-19  34

问题 已知数据文件IN53.DAT中存有200个4位数,并已调用读函数readDat()把这些数存入数组a中,请编制一函数jsVal(),其功能是;依次从数组a中取出一个4位数,如果该4位数连续大于该4位数以前的5个数且该数是偶数,则统计出满足此条件的数个数cnt并把这些4位数按从大到小的顺序存入数组b中,最后调用写函数wilteDat()把结果cnt及数组b中符合条件的4位数输出到文件OUT53.DAT中。
   注意:部分源程序已给出。
   程序中已定义数组:a[200],b[200],已定义变量:Cnto
   请勿改动主函数main()、读函数readDat()和写函数wiltedat()的内容。
   试题程序:
       #include
       #define MAX 200
       int a[MAX],b[MAXl,cnt;0;
   
       void jsVal()
       {

       }
       void readDat()
       {
           int i;
           FILE *fp;
       fp=fopen("in53.dat","r");
      for(i=0;i<MAX;i++)
            fscanf(fp,"%d",&a);
      fclose(fp);
   }     
   void main()
   {
       int i;
       readDat();
       jsVal();
       printf ("满足条件的数=%d\n", cnt);
       for(i=0;i<cnt;i++)
            printf("%d",b);
       printf("\n");
       writeDat();
   }
   writeDat()
   {
     FILE *fp;
     int i;
     fp=fopen("out53.dat","w");
     fprintf(fp,"%d\n",cnt);
     for(i=0;i<cnt;i++)
            fprintf(fp,"%d\n",b);
     fclose(fp);
   }

选项

答案void jsVal() { int i,j,flag; for(i=5;i { for(j=i-5;j<i;j++) { if(a[i]>a[j]) /*如果该4位数连续大于它以前的5个数*/ flag=1; /*则置flag为1*/ else flag=0; /*否则置flag为0*/ if(a[i]%2!=0) /*如果该四位数为奇数*/ flag=0; /*则置flag为0*/ if(flag==0) break; /*如果flag为0,则退出循环*/ } if(flag==1) { b[cnt]=a[i]; /*把满足条件的数存入数组b中*/ cnt++; /*统计满足条件的数的个数*/ } } for(i=0;i<cnt-1;i++) /*将数组b中的数按从大到小的顺序排列*/ for(j=i+1;j<ont;j++) if(b[i]<b[j]) { flag=b[i]; b[i]=b[j]; b[j]=flag; } }

解析 本题考查的知识点如下;
(1)使用循环对数组的元素进行比较和排序。
(2)强行退出循环结构。
在本题中,数组b中的数据要满足的条件有两个。在这里,不再使用判断结构中条件的布尔运算,而采用一种新的方法——设置标志变量flag。当数据不满足某一条件时,如数据不是偶数,将flag设置为0;当flag等于0时,可直接退出本层循环结构,进入外层的循环中。否则,根据题意要求,将数据存入数组b中。对数组b中的数据排序,使用“选择排序法”。
转载请注明原文地址:https://kaotiyun.com/show/wZcZ777K
0

最新回复(0)