《三级网络技术机试真题2009年9月.pdf》由会员分享,可在线阅读,更多相关《三级网络技术机试真题2009年9月.pdf(3页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 真题 三级网络技术机试真题2009 年 9 月计算机三级网络技术(机试)第 1 题:已知在文件 IN.DAT 中存有 100 个产品销售记录,每个产品销售记录由产品代码DM(字符型,4位)、产品名称 MC(字符型,10位)、单价 DJ(整型)、数量 SL(整型)、金额 JE(长整型)五部分组成。其中:金额=单价数量。函数ReadDat()读取这 100 个销售记录并将其存入结构数组SELL中。请编制函数 SortDat(),其功能要求为:按金额从小到大进行排列,若金额相同,则按产品代码从大到小进行排列,最终排列结果仍存入结构数组距SELL中,最后调用函数WriteDat()把结果输出到文件
2、OUT.DAT 中。注意:部分源程序给出如下。请勿改动主函数 main()、读数据函数 ReadDat()和输出数据函数 WriteDat()的内容。_ 试题源程序#include Stdio.h#include string.h#include conio.h#include stdlib.h#define MAX 100 typedef Struct char dm5;/*产品代码*/char mc11;/*产品名称*/int dj;/*单价*/int Sl;/*数量*/long je;/*金额*/PRO;PRO SeiiMAX;void ReadDat();void WriteDat()
3、;void SortDat()void main()memset(sell,0,sizeof(sell);ReadDat();SortDat();WriteDat();void ReadDat()2 FILE*fp;char str80,ch11;int i;if(fp=fopen(IN.DAT,r)=NULL)return;for(i=0;i100;i+)fgets(str,80,fp);memcpy(selli.dm,str,4);memcpy(selli.mc,str+4,10);memcpy(ch,Str+14,4);ch4=0;Selli.dj=atoi(ch);memcpy(ch,
4、str+18,5);ch5=0;Selli.sl=atoi(ch);selli.je=(long)Selli.dj*selli.sl;fclose(fp);void WriteDat()FILE*fp;int i;if(fp=fopen(OUT.DAT,w)=NULL)return;for(i=0;i100;i+)printf(%s%s%4d%5d%5dn,selli.dm,selli.mc,selli.dj,selli.sl,selli.je);fprintf(fp,%S%S%4d%5d%10ldn,selli.dm,selli.mc,selli.dj,selli.sl,selli.je);
5、fclose(fp);参考答案:void SortDat()int i,j;PRO swap;for(i=0;i MAX-1;i+)for(j=i+1;jMAX;j+)if(selli.Jesellj.je)swap=selli;selli=sellj;sellj=swap;elSe if(selli.je=sellj.je)if(strcmp(selli.dm,sellj.dm)0)swap=selli;selli=sellj;sellj=swap;详细解答:本题主要考查的是产品因素的比较排列问题。和冒泡排序法相似,用一个两重 for 循环来实现。第一个 for 循环用来遍历每个结构体(除了最后一个),第二个 for 循环用来遍历某个结构体selli之后的每个结构体sellj,将两者的3 je 进行比较。如果selli.je大,则使用临时变量swap来交换两者的位置;如果相等,则再比较selli.dm和 selli.dm,如果前者小,则交换位置。字符串的比较通过 strcmp()函数进行,若两个字符串相等则返回0,如果前者大于后者则返回一个正整数,否则返回一个负整数。
限制150内