读书人

问一道三级考试题目~解决办法

发布时间: 2012-03-23 12:06:21 作者: rapoo

问一道三级考试题目~~~
题目:已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)五部分组成。其中:金额=单价*数量。函数readdat()用于读取这100个销售记录并存入结构数组sell中。请编制函数sortdat(),其功能要求:按产品代码从大到小进行排序,若产品代码相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数writedat()把结果输出到文件out10.dat中。

提问:我想问一下此程序有些不明白的语句,谢谢回答~~~~

#include "stdio.h "
#include "mem.h "
#include "string.h "
#include "conio.h "
#include "stdlib.h "
#define MAX 100
typedef struct{ <-请问typedef在这里有什么作用?可以不用吗?
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 xy; <-这样定义也可以吗?我上机随便试了一下好像不行?
for (i=0;i <99;i++)
for (j=i+1;j <100;j++)
if (strcmp(sell[i].dm,sell[j].dm) <0)
{xy=sell[i];
sell[i]=sell[j];
sell[j]=xy;}
else if(strcmp(sell[i].dm,sell[j].dm)==0)
if(sell[i].je <sell[j].je)
{xy=sell[i];
sell[i]=sell[j];
sell[j]=xy;}
}
void main()
{
memset(sell,0,sizeof(sell)); <-这是开辟内存吗?可以用malloc代替吗?
readdat();
sortdat();
writedat();
}

void readdat()
{
FILF *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); <-mencpy什么意思?可以用strcpy代替吗?
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(void)
{
FILF *fp;
int i;
fp=fopen( "OUT10.DAT ", "w ");


for (i=0;i <100;i++)
{ fprintf(fp, "%s%s%4d%5d%101d\n ",sell[i].dm,sell[i].mc,
sell[i].dj,sell[i].sl,sell[i].je);
}
fclose(fp);
}








[解决办法]
typedef struct{ <-请问typedef在这里有什么作用?可以不用吗?
——————————————————————————————
换个名字而已,可以不用,但你下面定义得改。

PRO sell[MAX]; <-请问这里可以直接用结构变量给一个数组定义吗?
——————————————————————————————
可以,struct sell[MAX];

PRO xy; <-这样定义也可以吗?我上机随便试了一下好像不行?
_________________________________________________________
PRO *xy;

memset(sell,0,sizeof(sell)); <-这是开辟内存吗?可以用malloc代替吗?
___________________________________________________________________
不是开辟内存,是给sell前sizeof(sell)设置为0。

memcpy(sell[i].dm,str,4); <-mencpy什么意思?可以用strcpy代替吗?
———————————————————————————————————
把str的前四个字符赋给sell[i].dm。不可以用strcpy,那样把整个str都copy过去了

sell[i].dj=atoi(ch); <-这个语句什么意思?
————————————————————————
把字符串ch转换成整型数赋给sell[i].dj。


回去好好看下书吧,先把基础知识搞清楚,光做题也没多大作用。

读书人网 >C语言

热点推荐