首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
已知文件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
33
问题
已知文件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://jikaoti.com/ti/XeC7FFFM
本试题收录于:
三级数据库技术题库NCRE全国计算机三级分类
0
三级数据库技术
NCRE全国计算机三级
相关试题推荐
COM文件只有一个段并限制在64KB之内,COM程序的堆栈是由【 】自动产生的,数据定义在代码段内。
若被连接的程序模块有相同的数据段定义,则这两个程序的数据段应选用下列( )类型才比较合理?
在下列有关声卡的叙述中,错误的是
嵌入式系统是一类特殊的计算机系统。下列产品中不属于嵌入式系统的是()。
假设数码相机使用的存储卡容量是2GB,数据压缩比平均是4,那么它一次可连续拍摄1600万色(真彩色)的4096×3072分辨率的彩色相片大约多少张?()。
下列选项中用于完成创建任务的自用栈空间的μC/OS—Ⅱ程序源代码的是()。
假设一台数码相机一次可连续拍摄24位色(真彩色)的4096×4096的彩色相片160张,数据压缩比平均是4,则它使用的存储器容量大约是()。
对于嵌入式Linux而言,Bootloader完成的工作步骤不包括如下()项。
下面是关于AMBA的叙述:Ⅰ.AMBA由系统总线和外围总线两部分组成,系统总线和外围总线通过桥接器连接Ⅱ.不同版本的AMBA的主要区别在于系统总线性能的变化,而外围总线的发展主要体现在总线所支持的外围硬件组件的增加Ⅲ.ARM处理器的高带宽高性能外
对象—关系数据系统具有的基本特征有______。Ⅰ.SQL环境中对基本数据类型扩充的支持Ⅱ.SQL环境中对复杂对象的支持Ⅲ.SQL环境中对继承性的支持Ⅳ.对规则系统的支持
随机试题
压力容器炉外热处理的方法有哪些?
波长为λ的单色光垂直照射在折射率为n的劈尖薄膜上,在由反射光形成的干涉条纹中,第五级明条纹与第三级明条纹所对应的薄膜厚度差为()。
为了清晰反映经济业务的来龙去脉,企业只能编制一借一贷、一借多贷、多借一贷的会计分录,不能编制多借多贷的会计分录。()
打印管理器收集每一个打印请求,并将它们按接收到的顺序排成一个“打印队列”,再依次送到打印机打印,用户不能任意改变打印顺序。()
风险识别的主要方法有()。
在封建社会,()每三年一次在省城举行,取中者称“举人”。
根据以下资料。回答下列问题。2013年1—9月,某省各种运输方式累计完成旅客运输量10.43亿人次、旅客周转量1329.33亿人公里,分别比上年同期增长10.2%和11.7%。其中,铁路旅客运输量9435.2万人、周转量597.8亿人公里,同比分
Ifitwerepossibletoexpandindefinitelywhatconsciousnessisabletoencompass,oneofthemostfundamentaldreamsofhumank
Madewithwildsementrichosanthis(—食品名)growingintheremotemountainsatthesouthbankofTaihuLake,theproducthasfragra
IsRichSecondGenerationtheFallenGeneration?1.新闻舆论使“富二代”一词进入人们的视线2.有人认为富二代是堕落的一代3.我的看法
最新回复
(
0
)