首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-03-23 
问一道三级考试题目~~~题目:已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符

问一道三级考试题目~~~
题目:已知在文件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。


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

热点排行