已知在文件IN34.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位)、产品名称
已知在文件IN34.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位)、产品名称mc(字符型10位)、单价dj(整型)、数量s1(整型)、金额je(长整型)几部分组成。其中,金额=单价×数量可计算得出。函数ReadDat()的功能是读取这100个销售记录并存入数组sell中。请编制函数SortDat(),其功能要求:按产品代码从大到小进行排列,若产品代码相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat( )把结果输出到文件OUT34.DAT中。
注意:部分源程序已给出。
请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。
试题程序:
include<stdio.h>
include<mem.h>
include<string.h>
include<conio.h>
include<stdlib.h>
define MAX 100
typedef struct
{
char dm[5];
char mc[11];
int dj;
int s1;
long je;
}PRO;
PRO sell[MAX];
void ReadDat();
void WriteDat();
void SortDat()
{
}
void main ()
{
memset(sell,0,sizeof sell));
ReadDat();
SortDat();
WriteDat();
}
void ReadDat ()
{
FILE *fp;
char str[80],ch[11];
int i;
fp=fopen ( "IN34. 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] . s1=atoi (ch);
sell [i] .je=(long)sell[i].dj*sell[i] .s1;
}
fclose (fp);
}
void WriteDat ()
{
FILE *fp;
int i ;
fp=fopen ( "OUT34. DAT", "w" );
for (i=0; i<100; i++)
{
fprintf(fp,"%s %s %4d %5d %101d\n", sell Ii] .dm, sell [i] .mc, sell [i] .dj,
sell[i] .s1,sell [i] .je);
}
fclose (fp);
}
void SortDat () { int i,j; PRO xy; for (i=0; i99; i++) for (j=i+1; j100; 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]. jesell [j] . je) /*则按金额从大到小进行排列*/ { xy=sell [i]; sell [i] =sell [j]; sell [j] =xy; } } } 解析:本题考查的知识点如下:
(1)结构体及结构数组。
(2)结构数组的排序。
(3)字符型数组的比较。
本题着重考查结构体变量的访问、赋值,包括结构体本身及结构体中各个成员的访问和赋值。根据题意要求,我们首先要比较产品代码。因为产品代码为字符型,所以不能使用简单的比较运算符进行比较。在这里,我们使用了字符串处理函数strcmp(char*str11,char*str12,unsignedintcout)对其进行比较。对于比较结果,若是代码相同,则要按照金额进行新的比较,否则可直接存入数组。因为己定义了结构数组,就可以使用循环进行比较排序。排序同样采用前面介绍的“选择排序法”。
某公司生产一种产品每年需投入固定成本为0.5万元,此外每生产100件这种产品还需要增加投入0.25 其他 2020-05-13 …
某商场在“五•一”期间对A,B两种商品搞促销活动.打折前,买6件A商品和3件B商品共用了108元, 数学 2020-06-06 …
(2014•福州)现有A,B两种商品,买2件A商品和1件B商品用了90元,买3件A商品和2件B商品 数学 2020-06-18 …
某商店购买60件A商品和30件B商品共用了1080元,购买50件A商品和20件B商品共用了880元 数学 2020-06-19 …
某服装店出售A、B两种T恤衫,A种T恤衫每件400元,B种T恤每件600元,现已售出A种T恤X件, 数学 2020-06-22 …
设n阶矩阵A=E-a*a^T,其中a是n维非零列向量,证明1.A^2=A的充要条件是a^T*a设n 数学 2020-06-23 …
某厂家拟举行大型的促销活动,经测算某产品当促销费用为x万元时,销售量t万件满足t=5-92(x+1 数学 2020-07-09 …
某专卖店有A,B两种商品,已知在打折前,买60件A商品和30件B商品用了1080元,买50件A商品 数学 2020-07-18 …
某商店购买60件A商品和30件B商品共用了1080元,购买50件A商品和20件B商品共用了880元. 数学 2020-11-19 …
某厂家拟在暑期举行大型的促销活动,经测算某产品当促销费用为x万元时,销售量t万件满足t=5-2x(其 数学 2020-12-15 …