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

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

题目

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

SortDat ();

WriteDat ();

}

void ReadDat ()

{

FILE *fp;

char str[80], ch[ill;

int i;

fp = fopen("IN19.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[ii.si = atoi(ch);

sell[i].je = (long) sell[i].dj * sell[i].sl;

}

fclose (fp);

}

void WriteDat()

{

FILE *fp;

int i;

fp = fopen("OUT19.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);

}

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

会计分录,要详细点1.销售A产品600件,每件售价150元,价款90000元,销项增值税15300 其他 2020-05-17 …

某生产企业为增值税一般纳税企业,生产销售A产品增值税税率为17%;生产的B产品属于免税产品.某生产 其他 2020-06-08 …

1、出售A产品一批,售价1000000元,贷款收到并存入银行.2、结转已销售A产品的成本65000 其他 2020-06-20 …

帮忙解答一个财务管理题1、某公司销售A产品,单位变动成本为每件10元,变动成本率为40%,变动成本 其他 2020-06-26 …

增值税计算题15、某商场开展“买一送一”促销活动销售货物。本期销售A商品30台,零售价为3510元 其他 2020-07-05 …

合并报表-存货跌价准备的问题(涉及递延所得税).(1)2011年乙公司从甲公司购进A商品400件, 其他 2020-07-08 …

求解一题财务管理习题啊,各位大大拜托了某企业只生产和销售A产品,其总成本习性模型为Y=10000+ 其他 2020-07-16 …

会计从业资格证考试财经法规题帮忙解答谢谢!某一般纳税企业,2011年5月,销售A产品,不含税销售额为 其他 2020-11-07 …

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

计算增值税买一送一某商场以“买一送一”方式销售货物,销售A商品50台,每台售价(含税)23400元, 其他 2020-12-05 …