首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
已知文件IN21.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位)、产品名称mc(字符型10位)、单价dj(整型)、数量sl(整型)、金额je(长整型)几部分组成。其中:金额:单价X数量。函数ReadDat()的功能是读取这1
已知文件IN21.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位)、产品名称mc(字符型10位)、单价dj(整型)、数量sl(整型)、金额je(长整型)几部分组成。其中:金额:单价X数量。函数ReadDat()的功能是读取这1
admin
2009-02-19
65
问题
已知文件IN21.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位)、产品名称mc(字符型10位)、单价dj(整型)、数量sl(整型)、金额je(长整型)几部分组成。其中:金额:单价X数量。函数ReadDat()的功能是读取这100个销售记录并存入结构数组sell中。请编制函数 SortDat(),其功能要求:按产品名称从大到小进行排列,若产品名称相同,则按金额从小到大进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT21.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[11];
int i;
fp = fopen("IN21.DAT", "r");
for(i=0; i〈100; i++)
{
fgets(str, 80, fp) ;
memcpy(sell
.dm, str, 4);
memcpy(sell
.mc, str + 4, 10);
memcpy(ch, str + 14, 4);
ch[4] = 0;
sell
.dj = atoi(ch);
memcpy(ch, str +18, 5);
ch[5] = 0;
sell
.sl = atoi(ch);
sell
.je = (long)sell
.dj * sell
.sl;
}
fclose(fp);
}
void WriteDat()
{
FILE *fp;
int i;
fp = fopen("OUT21.DAT", "w");
for(i = 0; i〈 100; i++)
{
fprintf(fp, "%s %s %4d %5d %101d\n", sell
.dm, sell
.mc,
sell
.dj, sell
.sl, sell
.je);
}
fclose (fp);
}
选项
答案
void SortDat() { int i, j; PRO xy; for(i=0; i〈99; i++) for(j=i+1; j〈100; j++) if (strcmp(sell[i].mc, sell[j].mc)〈0) /*按产品名称从大到小进行排列*/ { xy=sell[i]; sell [i]=sell [j]; sell [j]=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()),则交换这两个元素的位置,继续和后面的其他元素进行比较,最终在第一个元素中存放的是产品名称最大的元素。以此类推,就实现了从大到小排序的功能。
注意:这里需要进行交换的是两个结构体变量,而不是它们的某一个域,因此,要借助第三个结构体变量来充当中间容器。若发现产品名称是相同的,则要按照金额从小到大进行排序。
转载请注明原文地址:https://kaotiyun.com/show/cpcZ777K
本试题收录于:
三级数据库技术题库NCRE全国计算机三级分类
0
三级数据库技术
NCRE全国计算机三级
相关试题推荐
下面是关于CPU与主存储器之间的cache的叙述,其中正确的是:( )。
汇编语言源程序经汇编后不能直接生成( )。
计算机技术与通信技术的结合是时代的热点,为此Windows98提供了多种不同的( )位通信服务。
在Windows98环境下,下列有关磁盘存储结构和管理的叙述中,正确的是______。
在ARM汇编语言中,小端模式下,通过伪指令MyDataDCD0x01234567在内存中定义了1个32位操作数,已知R0=0x56000012,则依次执行:LDRR1,=MyDataLDRHR0,[R1,#2]两条指令后,R0的值
小端模式下如果从0x60000010开始到0x60000017存放的一个双字为0x123456789ABCDEF0,且R1=0x60000010,则加载指令LDRBR0,[R1]使R0=【53】、LDRHR2,[R1,#2]使R2=【54】。
在采用ADS1.2集成开发工具软件开发基于ARM微处理器的嵌入式系统软件时,下面有关地址映射的说明中,不正确的是()。
GNU开发工具套件中的C语言编译器,其英文简称是【79】。它所能编译的目标机处理器包括X86、ARM、PowerPC等体系结构的处理器。针对于ARM体系结构的目标机而言,该C语言编译器的命令书写格式中,其带前缀的命令是【80】。
局域网指较小地域范围内的计算机网络,最流行的局域网是以太网。以太网采用的通信协议是【47】,连接在以太网中的每台计算机必须至少有一个全球唯一的【48】地址。
按照内核结构分类,Android属于【59】操作系统,这类内核的特点是各个模块之间的耦合度很【60】,通过函数调用实现模块之间的通信。
随机试题
关于LH和FSH的说法正确的是:
计量溯源链是指用于将测量结果与()联系起来的测量标准和校准次序。
我国目前采用的保险监管方式是()
下列各项中,属于税务咨询形式的有()。
某汽车制造企业为增值税一般纳税人,生产销售小汽车(消费税税率为5%),每辆不含税销售价格统一为10万元,2017年5月发生如下业务:(1)与某特约经销商签订了40辆小汽车的销售协议,协议规定该小汽车制造企业按含税销售额的5%支付给经销商商业折扣,当月收
在行进间低手投篮第一课时教学中,田老师首先对动作要领进行了详细的讲解,然后做了完整的动作示范,并传授了动作口诀:“一跨大步接球牢,二跨小步用力跳,三要翻腕托球举球高,四要指腕用力柔和巧。”在学生练习过程中,田老师进行了巡回指导,重点关注了“接球牢、用力跳、
根据宪法和法律,下列选项中构成违宪行为的是( )。
甲因侵占罪被判处有期徒刑1年,同时宣告缓刑2年,缓刑考验期满后第三年,甲又犯间谍罪,则甲()。
Ashipwasreportedtobeindistressafewmilesoutatsea.
A、Thefunnydialogues.B、Thespecialeffects.C、Theoutstandingactors.D、Themysteriousroles.B
最新回复
(
0
)