100题第14题
14:已知数据文件IN.DAT中存有200个四位数, 并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是: 依次从数组a中取出一个四位数,如果该数连续大于该四位数以后的5个数且该数是奇数, 则统计出满足此条件的个数cnt, 并把这些四位数按从小到大的顺序存入数组b中。 并要计算满足上述条件的四位数的个数cnt。最后main()函数调用写函数writeDat( )把结果cnt以及数组b中符合条件的四位数输出到OUT.DAT文件中。注意: 部分源程序存在文件PROG1.C文件中。
程序中已定义数组: a[200], b[200], 已定义变量: cnt
请勿改动数据文件IN.DAT中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。
-------------------------
void jsVal()
{
int I,j,flag=0;
int k;
for(I=0;I<MAX-5;I++) /*原程序中,已定义MAX为整型变量,且初值为200 0-194,5个数*/
{
for(j=I+1;j<=I+5;j++) /*1-199*/
{
if (a[I]>a[j]) /*如果前一个数大于后一个数*/
flag=1; /*标记置1*/
else
{
flag=0;break; /*如果不是这样,那么标记置0,且跳出循环*/
}
if (a[I]%2==0) /*如果a[I]能被2整除,即不是奇数*/
flag=0;
}
if (flag==1) /*如果标记为1*/
{
b[cnt]=a[I]; cnt++; /*把a[I]存入b数组中*/
}
}
for(I=0;I<cnt-1;I++) /*以下为从小到大排序*/
for(j=I+1;j<cnt;j++)
if (b[I]>b[j]) /*注意:这是排序经常要用到的,如果要求从小到大,那么条件必须是前者大于后者,反之一样*/
{
k=b[I];
b[I]=b[j];
b[j]=k;
}
}
----------------解决方案--------------------------------------------------------