早教吧 育儿知识 作业答案 考试题库 百科 知识分享
早教吧考试题库频道 --> 计算机类考试 -->计算机三级 -->

已知文件IN16.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位)、产品名称mc

题目

已知文件IN16.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位)、产品名称mc(字符型10位)、单价dj(整型)、数量sl(整型)、金额je(长整型)几部分组成。其中:金额=单价×数量。函数ReadDat()的功能是读取这100个销售记录并存入结构数组sell中。请编制函数 SortDat(),其功能要求:按产品名称从大到小进行排列,若产品名称相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT16.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 sl; /* 数量 */

long je; /* 金额 */

} PRO;

PRO sell [MAX];

void ReadDat ();

void WriteDat ();

void SortDat ()

{

}

main ( )

{

memset(sell, 0, sizeof(sell));

ReadDat ( );

SertDat ( );

WriteDat ( );

}

veld ReadDat ()

{

FILE *fp;

char str[80] , ch[ill;

int i;

fp = fopen("IN16.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("OUT16.DAT", "w");

for(i = 0; i〈 100; i++)

{

fprintf(fp, "%s %s %4d %5d %101dkn", sell[i] .dm, sell[i] .mc,

sell[i].dj, sell[i].sl, sell[i].je);

}

fclose(fp);

}

参考答案
正确答案:void SortDat() { int i j; PRO xy; for(i=0; i〈MAX-1; i++) for(j=i+1; j〈MAX; i++) if (strcmp(sell[i].mc sell[j].mc)〈0) /*按产品名称从大到小进行排列*/ { xy=sell[i]; sell [i]=sell[j]; sell [i]=xy; } else if(strcmp (sell[i].mc sell[j].mc)==0) /*若产品名称相同则按金额从大到小进行排列*/ if(sell[i].je〈sell[j].je) { xy=sell[i]; sell [i]=sell [j]; sell [j]=xy; } }
void SortDat() { int i, j; PRO xy; for(i=0; i〈MAX-1; i++) for(j=i+1; j〈MAX; i++) if (strcmp(sell[i].mc, sell[j].mc)〈0) /*按产品名称从大到小进行排列*/ { xy=sell[i]; sell [i]=sell[j]; sell [i]=xy; } else if(strcmp (sell[i].mc, sell[j].mc)==0) /*若产品名称相同,则按金额从大到小进行排列*/ if(sell[i].je〈sell[j].je) { xy=sell[i]; sell [i]=sell [j]; sell [j]=xy; } } 解析:本题是有关结构体数组的排序问题。可以用选择法来实现,即用第一个元素的产品名称依次和它后面的元素的产品名称进行比较,如果发现当前元素的产品名称比后面的某个元素的产品名称的对应位置的字符的ASCII码小(这里用到了字符串比较函数strcmp()),则交换这两个元素的位置,继续和后面的其他元素进行比较,最终在第一个元素中存放的是产品名称最大的元素。以此类推,就实现了从大到小排序的功能。
注意:这里要进行交换的是两个结构体变量,而不是它们的某一个域,因此,要借助第三个结构体变量来充当中间容器。若发现产品名称是相同的,则要按照金额从大到小进行排序。
看了已知文件IN16.DAT中存有...的网友还看了以下:

沐阳特产专卖店销售某种物产,其进价为每千克40元,若按每千克50元出售,则平均每天可售出60千克, 数学 2020-05-13 …

某商场今年5月份销售一种新产品,其进价是每件80元,售价是每件120元,当月销售600件.6月份, 数学 2020-06-26 …

此时每日销售利润是多少元?某产品每件成本10元,在试销阶段每件产品的日销售价x(元)与产品的日销售 数学 2020-06-26 …

商店试销某种产品,每件的综合成本为5元.若每件产品的售价不超过10元,每天可销售400件,设每件产 数学 2020-06-26 …

商店试销某种产品,每件的综合成本为5元.若每件产品的售价不超过10元,每天可销售400件,设每件产 其他 2020-06-26 …

Java编程制作一份销售额统计表.某公司有4个销售员(代号1-4),负责销售5种产品(代号1-5) 其他 2020-07-17 …

某产品每千克的成本为20元,其销售价不低于成本价.当每千克销售价为50元时,它的日销售量为100千 数学 2020-07-26 …

某公司主要生产和销售A产品,每件产品的成本为200元,销售单价为260元,顾客一次购买A产品不超过1 数学 2020-11-28 …

莫产品每千克的成本为20员.起销售价格不低与成本,当每千克50员时.每天可以售出100千克.若销售加 数学 2020-12-10 …

某工厂出售一种产品.其成本价为每件28元,如果直接由厂家门市出售、每件产品售价是35元.每月还要支付 数学 2020-12-30 …