首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
已知在文件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
25
问题
已知在文件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全国计算机三级
相关试题推荐
下列条目中哪些是数据库管理系统的基本功能模块?Ⅰ.数据库定义Ⅱ.数据库存取Ⅲ.数据库运行和管理Ⅳ.数据组织、存储和管理Ⅴ.数据库建立和维护
下列关于分布式数据库系统的叙述正确的是()。
设关系模式R(A,B,C)有函数依赖集F={A→B,B→C),则关系R的规范化程度至多达到()。
ROM中的信息是______。
Sybase公司目前的企业级服务器ASE支持下述哪些功能?()Ⅰ.Java语言和XML语言Ⅱ.服务器之间的失败转移Ⅲ.保证分布式事务处理的完整性
在虚拟段式存储管理中,若逻辑地址的段内地址大于段表中该段的段长,则发生【】。
如下解除死锁的方法可行的是()。
操作系统主要功能是对系统的资源进行有效管理,包括处理机管理、存储器管理、I/O设备管理、作业管理和______。
数据库运行控制功能包括数据的【】控制、【】控制、【】和数据恢复等4个方面。
随机试题
宋代由于战乱,有大量因为农民流亡而造成的无主荒地,因此官府为了鼓励垦荒,规定事实上对土地占有并耕种达()且没有原主返回主张土地权利的,即承认其事实占有人对该土地的所有权。
大量饮清水后,尿量增多的主要原因是()(2003年)
心脏的兴奋传导途径是
视网膜母细胞瘤在声像图上表现为“钙斑”,“钙斑”的超声检出率是
建设项目经济费用效益分析使用的影子价格的正确含义是()。
根据《建设工程安全生产管理条例》的规定,建设单位的安全责任包括()。
情景描述:某高层商业综合楼地上30层、地下2层,建筑高度为108.5m,总建筑面积为85000m2,地下一层至地上三层为商场,建筑面积35000m2,地上四层至十层为餐饮与休闲娱乐场所,地上十层以上为普通住宅,地下二层为汽车库。该商业综合楼内设有室内外消火
赵文和周成共同出资购买了一间房并将其出租给郑流。在租赁期间,周成欲转让自己的共同份额。现赵文和郑流都表示愿意购买,该房屋应当卖给谁?()
Sybase公司的企业级服务器ASE支持()机制。I.数据页锁II.数据字段锁III.数据行锁Ⅳ.所有页锁
Thetemperatureofthesunismorethan5,000degreesFahrenheitatthesurface,butitrisestoperhapsmorethansixteenmilli
最新回复
(
0
)