首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
已知在文件IN. dat中存有100个产品销售记录,每个产品销售记录由产品代码code(字符型4位)、产品名称name(字符型10位)、单价uprice(整型)、数量amount(整型)、金额sum(长整型)5部分组成。其中:金额=单价×数量。函数Rdat
已知在文件IN. dat中存有100个产品销售记录,每个产品销售记录由产品代码code(字符型4位)、产品名称name(字符型10位)、单价uprice(整型)、数量amount(整型)、金额sum(长整型)5部分组成。其中:金额=单价×数量。函数Rdat
admin
2010-09-05
31
问题
已知在文件IN. dat中存有100个产品销售记录,每个产品销售记录由产品代码code(字符型4位)、产品名称name(字符型10位)、单价uprice(整型)、数量amount(整型)、金额sum(长整型)5部分组成。其中:金额=单价×数量。函数Rdata()是读取这100个销售记录并存入结构数组sell中。请编写函数SortDat(),其功能要求:按金额从小到大进行排列,若金额相等,则按产品代码从小到大进行排列,最终排列结果仍存入结构数组sell中。最后调用函数Wdata(),把结果输出到OUT. dat文件中。
注意:部分源程序已经给出。请勿改动主函数main()、读数据函数Rdata()和输出数据函数Wdata()的内容。
#include <stdio. h>
#include <string. h>
#include <conio. h>
#include <stdlib. h>
#define MAX 100
typedef struct
{ char code[5]; /* 产品代码 */
char name[11]; /* 产品名称 */
int uprice; /* 单价 */
int amount; /* 数量 */
long sum; /* 金额 */
} PRO;
PRO sell [MAX];
void Rdata();
void Wdata();
void SortDat()
{
}
void main ()
{ memset(sell, 0, sizeof(sell)
Rdata();
SortDat();
Wdata();
}
void Rdata()
{ FILE *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
.code, str, 4);
memcpy(sell
.name, str+4, 10);
memcpy(ch, str+14, 4);
ch[4] = 0;
sell
.uprice = atoi(ch);
memcpy(ch, str+18, 5);
ch[5] = 0;
sell
. amount = atoi(ch);
sell
.sum = (long)sell
. uprice * sell
. amount;
}
fclose(fp);
}
void Wdata()
{ FILE *fp;
int i;
fp = fopen("OUT. dat", "w");
for (i=0; i<100; i++)
{ printf("%s %s %4d %5d %5d\n", sell
. code, sell
.name,
sell
.uprice, sell
. amount, sell
. sum);
fprintf(fp, "%s %s %4d %5d %5d\n", sell
. code,
sell
. name, sell
. uprice, sell
. amount, sell
. sum);
}
fclose(fp);
}
选项
答案
void SortDat() { int i, j; PRO xy; for (i=0; i<99; i++) for (j=i+1; j<100; j++) if (sell[i] .sum > sell[j] .sum) { xy = sell[i]; sell[i] = sell[j]; sell[j] = xy; } else if (sell[i].sum == sell[j].sum) { if (strcmp (sell [i] . code, sell[j]. code) >0) { xy = sell[i]; sell[i] = sell[j]; sell[j] = xy; } } } [解题思路] 这里我们通过一个双重循环来实现,首先按产品的金额进行比较,如果前一个产品的金额大于后一个产品的金额,则这两个产品进行数据交换;如果两个产品的金额相等,用字符串比较函数strcmp()比较两个产品的产品代码,如果前一个产品的代码大于后一个产品的代码,则这两个产品进行数据交换。
解析
转载请注明原文地址:https://kaotiyun.com/show/AuvZ777K
本试题收录于:
三级数据库技术题库NCRE全国计算机三级分类
0
三级数据库技术
NCRE全国计算机三级
相关试题推荐
一个关系模式为Y(X1,X2,X3,X4),假定该关系存在如下函数依赖:(X1,X2)→X3,X2→X4,则该关系属于【】,因为它存在着【】。
文件的存取方式是由文件的性质和用户使用文件的情况而确定的,一般有两种存取方式,它们是______。
对以下条目中属于设计概念结构策略的有()。Ⅰ.自顶向下Ⅱ.自底向上Ⅲ.自里向外Ⅳ.混合策略
关系模式的任何属性()。
计算机网络使用的通信介质包括______。
从学生选课信息表中“找出无成绩的元组”的SQL语句是______。在“查询选修课程号为4,且成绩在80分以上的所有学生的学号和姓名”的SQL语句中,将使用的表是______。
一棵有n个结点的树,该树中所有结点的入度之和为______。
数据库管理系统管理并且控制_____资源的使用。
在虚拟段式存储管理中,若逻辑地址的段内地址大于段表中该段的段长,则发生【】。
下列关于链式存储结构的叙述中,哪一(些)条是正确的?Ⅰ.逻辑上相邻的结点物理上不必邻接Ⅱ.每个结点都包含恰好一个指针域Ⅲ.用指针来体现数据元素之间逻辑上的联系Ⅳ.结点中的指针都不能为空Ⅴ.可以通过计算直接确
随机试题
A.甘氨酸B.缬氨酸C.酪氨酸D.精氨酸可在尿素合成过程中生成的是
患者,女,40岁。肾衰竭8年多,腰背痛3年多,伴有身高减低2个月余。临床诊断为继发性甲状旁腺亢进症。X线提示多个椎体骨骼密度明显减低,腰椎多发压缩骨折。该病骨质硬化的X线表现在椎体中主要为1.椎体骨赘形成2.椎体内骨岛形成3.近终板处浓淡交替的横
下列哪项不是缩窄性心包炎的症状或体征?
Computerized tomograhy是
A.推动功能B.温煦功能C.防御功能D.固摄功能E.气化功能易于外感病邪。是指气的何种功能减弱
水喷雾灭火系统验收时,应由()提供验收申请报告等资料。
(2015年)企业为外购存货发生的下列各项支出中,应计入存货成本的有()。
甲公司设立于2005年12月31日,预计2006年年底投产。假定目前的证券市场属于成熟市场,根据等级筹资理论的原理,甲公司在确定2006年筹资顺序时,应当优先考虑的筹资方式是()。
义务感、责任感、是非感、善恶感属于()。
A、Therearetoomanypeopleinthesmallcornershop.B、Theyarealwaysfriendlytocustomersandreadytohelp.C、Theyalwayss
最新回复
(
0
)