1.已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录的产品代码dm(字符型4位)、产品名称mc(字符型10位)、单价dj(整型)、数量sl (整型)、金额je(长整型)几部分组成。其中:金额=单价*数量。函数readDat()的功能是读取这100个销售记录并存入结构数组sell中。请编制函数sortDat(),其功能要求:按产品名称从小到大进行排列,若产品名称相同,则按金额从小到大进行排列,最终排列结果仍存入机构数组sell中,最后调用函数writeDat()把结果输出到文件OUT.DAT中。
注意:部分源程序已给出。
请勿改动主函数main()、读函数ReadDat()和写函数writeDat()的内容。
#include
#include
#include
#include
#define MAX 100
typedef struct
{
char dm[5];
char mc[11];
int dj;
int sl;
long je;
}PRO;
PRO sell[MAX];
void readDat();
void writeDat();
void sortDat()
{
int i,j;
PRO temp;
for(i=0;i<99;i++)
for(j=i+1;j<100;j++)
if(strcmp(sell[i].mc,sell[j].mc)>0)
{
temp=sell[i];
sell[i]=sell[j];
sell[j]=temp;
}
else if(strcmp(sell[i].mc,sell[j].mc)==0)
if(sell[i].je>sell[j].je)
{
temp=sell[i];
sell[i]=sell[j];
sell[j]=temp;
}
}
void main()
{
memset(sell,0,sizeof(sell));
readDat();
sortDat();
writeDat();
}
void readDat()
{
FILE*fp;
char str[80],ch[11];
int i;
fp=fopen("IN.DAT","r");
for(i=0;i<100;i++)
{
fgets(str,80,fp);
memcpy(sell[i].dm,str,4);
memcpy(sell[i].mc,str+4,10);
memcpy(ch,str+14,4);
ch[4]=0;
sell[i].dj=atoi(ch);
memcpy(ch,str+18,5);
ch[5]=0;
sell[i].sl=atoi(ch);
sell[i].je=(long)sell[i].dj*sell[i].sl;
}
fclose(fp);
}
void writeDat()
{
FILE*fp;
int i;
fp=fopen("OUT.DAT","w");
for(i=0;i<100;i++)
{
fprintf(fp,"%s%s&4d%5d%10d\n",
sell[i].dm,sell[i].mc,
sell[i].dj,sell[i].sl,
sell[i].je);
}
fclose(fp);
}
2.已知数据文件IN.DAT中存有300个四位数,并已调用读函数readDat()把这些数存入数组a中.请编制一函数jsValue(),其功能是:求出千位数上的数加个位数上的数等于百位数上的数加十位数上的数的个数cnt,再把所有满足条件的四位数依次存入数组b中,然后对数组b的四位数按从小到大的顺序进行排序,最后调用写函数writeDat()把数组b中的数
输出到OUT.DAT文件.
例如:6712,6+2=7+1,则该数满足条件存入数组b中,且个数cnt=cnt+1 8129,8+9<>2+1,则该数不满足条件忽略.
注意:部分源程序已给出。
程序中已定义数组:a[300],已定义变量:cnt
请勿改动主函数main()、读函数ReadDat()和写函数writeDat()的内容。
#include
int a[300],b[300],cnt=0;
void readDat();
void writeDat();
void jsValue()
{
int i,j;
int a1,a2,a3,a4;
int temp;
for(i=0;i<300;i++)
{
a4=a[i]/1000;
a3=a[i]%1000/100;
a2=a[i]%100/10;
a1=a[i]%10;
if (a4+a1==a2+a3)
{
b[cnt]=a[i];cnt++;
}
}
for(i=0;i for(j=i+1;j if(b[i]>b[j]) { temp=b[i]; b[i]=b[j]; b[j]=temp; } } void main() { int i; readDat(); jsValue(); writeDat(); printf("cnt=%d\n",cnt); for(i=0;i printf("b[%d]=%d\n",i,b[i]); } void readDat() { FILE*fp; int i; fp=fopen("IN.DAT","r"); for(i=0;i<300;i++) fscanf(fp,"%d,",&a[i]); fclose(fp); } void writeDat() { FILE*fp; int i; fp=fopen("OUT.DAT","w"); fprintf(fp,”%d\n”,cnt);