首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
已知文件IN16.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位)、产品名称mc(字符型10位)、单价dj(整型)、数量sl(整型)、金额je(长整型)几部分组成。其中:金额=单价×数量。函数ReadDat()的功能是读取这1
已知文件IN16.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位)、产品名称mc(字符型10位)、单价dj(整型)、数量sl(整型)、金额je(长整型)几部分组成。其中:金额=单价×数量。函数ReadDat()的功能是读取这1
admin
2009-02-19
96
问题
已知文件IN16.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位)、产品名称mc(字符型10位)、单价dj(整型)、数量sl(整型)、金额je(长整型)几部分组成。其中:金额=单价×数量。函数ReadDat()的功能是读取这100个销售记录并存入结构数组sell中。请编制函数 SortDat(),其功能要求:按产品名称从大到小进行排列,若产品名称相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT16.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 ( );
SertDat ( );
WriteDat ( );
}
veld ReadDat ()
{
FILE *fp;
char str[80] , ch[ill;
int i;
fp = fopen("IN16.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("OUT16.DAT", "w");
for(i = 0; i〈 100; i++)
{
fprintf(fp, "%s %s %4d %5d %101dkn", sell
.dm, sell
.mc,
sell
.dj, sell
.sl, sell
.je);
}
fclose(fp);
}
选项
答案
void SortDat() { int i, j; PRO xy; for(i=0; i〈MAX-1; i++) for(j=i+1; j〈MAX; i++) if (strcmp(sell[i].mc, sell[j].mc)〈0) /*按产品名称从大到小进行排列*/ { xy=sell[i]; sell [i]=sell[j]; sell [i]=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/BzSZ777K
本试题收录于:
三级数据库技术题库NCRE全国计算机三级分类
0
三级数据库技术
NCRE全国计算机三级
相关试题推荐
串行通信中,若收发双方的动作由同一个时序信号控制,则称为( )串行通信。
操作系统是管理计算机软硬件资源、控制程序运行、改善人机界面和为应用软件提供支持的一种系统软件。下面是有关操作系统的一些叙述: ①从1946年的ENIAC计算机开始,计算机都必须配有操作系统才能工作 ②操作系统与计算机硬件无关,任何计算机
计算机中有多种总线,按照层次结构可以分为处理器总线、存储器总线、系统总线和【 】。
既可以支持人机交互,又使得计算机系统可以高效地使用处理机的操作系统是( )。
下面对ADS1.2集成开发环境进行描述的语句中,正确的是()。
Linux内核由若干个子系统组成,一般来说下面哪一个不是Linux内核的子系统()。
下面有关嵌入式系统开发过程的描述语句中,不恰当的是()。
带云台的视频摄像机(示意图如下图所示)可以由云台控制旋转,因而可以从不同角度来进行视频监控,若以S3C2410芯片为核心来设计其控制系统,其基本功能描述如下:a.支持嵌入式Web的访问方式,即连接在因特网上的远程PC机可以通过浏览器观察视频监控画面,并控
在实时系统中,系统运行的正确性是同其响应时限紧密相关的。根据截止时间约束的软硬属性划分,视频播放系统属于【67】实时系统,自动驾驶系统属于【68】实时系统。
Armstrong公理系统中有一条推理规则为:若X→Y为F所逻辑蕴涵,且,则XZ→YZ为F所逻辑蕴涵。这条推理规则称作【】
随机试题
法国批判现实主义的代表人物______作品有《石工》。
A.全心衰竭B.左心衰竭C.左房衰竭D.右房衰竭E.右心衰竭患者男性,60岁,主动脉瓣狭窄合并关闭不全病史30余年,出现夜间阵发性呼吸困难
轻度肾损伤时,首先给予的检查是()
回归检验法可以处理回归模型中常见的()问题。
在金融衍生品市场上,以风险对冲为主要交易目的的市场参与者是()。
企业持有现金主要基于以下一些动机()。
(2014年)甲系A公司业务员,负责A公司与B公司的业务往来事宜。2014年2月,甲离职,但A公司并未将这一情况通知B公司。2014年3月3日,甲仍以A公司业务员的名义到B公司购货,并向B公司交付了一张出票人为A公司、金额为30万元的支票,用于支付货款,但
骨骼肌的收缩形式有哪几种?
地方性法规是行政法的重要渊源之一。下列国家机关中,有权制定地方性法规的是()。
【B1】【B16】
最新回复
(
0
)