计算机三级机试问题

来源:百度知道 编辑:UC知道 时间:2024/05/27 04:04:06
已知数据文件IN29.DAT中存有200个4位数,并已调用读函数readDat( )把这些数存入数组a中,请编制一函数jsVal( ),其功能是:把个位数字和千位数字重新组合成一个新的十位数ab(新十位数的十位数字是原4位数的个位数字,新十位数的个位数字是原4位数的千位数字),以及把百位数字和十位数字组成另一个新的十位数cd(新十位数的十位数字是原4位数的百位数字,新十位数的个位数字是原4位数的十位数字),如果新组成的两个数均为偶数且两个十位数中至少有一个数能被9整除,同时两个新十位数字均不为零,则将满足此条件的4位数按从大到小的顺序存入数组b中,并计算满足上述条件的4位数的个数cnt,最后调用写函数writeDat( )把结果cnt及数组b中符合条件的4位数输出到OUT29.DAT文件中。
注意:部分源程序已给出。
程序中已定义数组:a[200],b[200],已定义变量:cnt。
请勿改动主函数main()、读函数readDat()和写函数writeDat()的内容。
试题程序:
#include <stdio.h>
#define MAX 200
int a[MAX],b[MAX],cnt=0;
void writeDat();

void jsVal( )
{

}

void readDat( )
{
int i;
FILE *fp;
fp=fopen("IN29.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\n",

#include <stdio.h>
#define MAX 200
int a[MAX], b[MAX], cnt = 0;
void jsVal()
{
int i,thou,hun,ten,data,j;
int ab,cd;
for(i=0;i<200;i++)
{
thou=a[i]/1000; /*求千位数字*/
hun=a[i]%1000/100; /*求百位数字*/
ten=a[i]%100/10; /*求十位数字*/
data=a[i]%10; /*求个位数字*/
ab=10*thou+data; /*把千位数字和个位数字重新组成一个新的十位数*/
cd=10*hun+ten; /*把百位数字和十位数字组成另一个新的十位数*/
if (ab%2==1 && cd%2==1 && (ab%5==0 || cd%5==0)&& ab!=0 && cd!=0)
{ /*如果这两个十位数均是奇数并且两个十位数中至少有一个数能被5整除,同时两个新十位数字均不为零*/
b[cnt]=a[i]; /*则把满足条件的数存入数组b中*/
cnt++; /*统计满足条件的数的个数*/
}
}
for(i=0;i<cnt-1;i++) /*将数组b中的数按从大到小的顺序排列*/
for(j=i+1;j<cnt;j++)
if(b[i]<b[j])
{
data=b[i];