首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
已知在文件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
36
问题
已知在文件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全国计算机三级
相关试题推荐
下列术语中,哪一个属于数据库三级模式结构中的内模式?
在下面列出的条目中,哪个(些)是当前应用开发工具的发展趋势?()Ⅰ.采用三层或多层Client/Server结构Ⅱ.支持Web应用Ⅲ.支持开放的、构件式的分布式计算环境
计算机网络使用的通信介质包括______。
当对视图进行UPDATE、INSERT和DELETE操作时,为了保证被操作的行满足视图定义中子查询语句的谓词条件,应在视图定义语句中使用可选择项_____。
数据结构包括3个方面的内容是数据的______、数据的逻辑结构、数据的运算。
以下关于链式存储结构的叙述中哪一条是错误的?______。
设平衡的二叉排序树(AVL树)的节点个数为n,则其平均检索长度为______。
事务的持久性是指________。
关系模式R的码是______。R的规范化程度最高达到______。
在Oracle公司的开发工具Developer/2000中,用于生成联机文档的工具是
随机试题
Americanssufferfromanoverdoseofwork.Regardless【C1】______whotheyareorwhattheydo,Americansspend【C2】______timeatwo
女,55岁。腋下淋巴结肿大1个月。疑为淋巴瘤,下列哪项不符合其肿大的淋巴结特点
A、《英国国家处方集》B、《药物事实与比较》C、《美国药典药物信息》D、《马丁代尔药物大典》E、《美国医院处方集服务:药物信息》提供临床专家最新治疗意见,有《护士处方集》的是()。
A、卫食健字+4位年代号第XXXX号B、国食健注G+4位年代号+4位顺序号C、食健备J+4位年代号+00+6位顺序号D、卫进食健字+4位年代号第XXXX号国产保健食品批准文号格式是
下列属于复合材料的是()。
A公司发行优先股,按季度永久支付优先股股利,每季度每股支付的优先股股利为2元,优先股年报价资本成本率为8%。每股优先股价值为()元。
党的十九大报告把防范化解重大风险放在了三大攻坚战之首,并且强调防范金融风险是防范化解重大风险攻坚战的重点。在日常生活中,人们进行风险管理的方式主要包括风险规避、损失预防与控制、风险保留和风险转移,在金融体系发挥作用的主要是风险转移。以下表述正确的是(
下列桥梁属于索桥的有()。
NOW账户
中国实行单一制国家结构形式的主要原因有()。
最新回复
(
0
)