1、三级数据库技术机试-192 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.已知在文件 IN. dat 中存有 100 个产品销售记录,每个产品销售记录由产品代码 code(字符型 4 位)、产品名称 name(字符型 10 位)、单价 uprice(整型)、数量 amount(整型)、金额 sum(长整型)5 部分组成。其中:金额=单价数量。函数 Rdata()是读取这 100 个销售记录并存入结构数组 sell 中。请编写函数SortDat(),其功能要求:按金额从小到大进行排列,若金额相等,则按产品代码从小到大进行排列,最终排列结果仍
2、存入结构数组 sell 中。最后调用函数 Wdata(),把结果输出到 OUT. dat 文件中。注意:部分源程序已经给出。请勿改动主函数 main()、读数据函数 Rdata()和输出数据函数 Wdata()的内容。#include stdio. h#include string. h#include conio. h#include stdlib. h#define MAX 100typedef structchar code5; /* 产品代码 */char name11; /* 产品名称 */int uprice; /* 单价 */int amount; /* 数量 */long su
3、m; /* 金额 */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 str80, ch11;int i;fp = fopen(“IN. dat“, “r“);for (i=0; i100; i+)fgets(str, 80, fp);memcpy(selli.code, str, 4);memcpy(selli.name, str+4, 10);
4、memcpy(ch, str+14, 4);ch4 = 0;selli.uprice = atoi(ch);memcpy(ch, str+18, 5);ch5 = 0;selli. amount = atoi(ch);selli.sum = (long)selli. uprice * selli. amount;fclose(fp);void Wdata()FILE *fp;int i;fp = fopen(“OUT. dat“, “w“);for (i=0; i100; i+)printf(“%s %s %4d %5d %5d/n“, selli. code, selli.name,sell
5、i.uprice, selli. amount, selli. sum);fprintf(fp, “%s %s %4d %5d %5d/n“, selli. code,selli. name, selli. uprice, selli. amount, selli. sum);fclose(fp);(分数:100.00)_三级数据库技术机试-192 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.已知在文件 IN. dat 中存有 100 个产品销售记录,每个产品销售记录由产品代码 code(字符型 4 位)、产品名称 name(字符型 10
6、 位)、单价 uprice(整型)、数量 amount(整型)、金额 sum(长整型)5 部分组成。其中:金额=单价数量。函数 Rdata()是读取这 100 个销售记录并存入结构数组 sell 中。请编写函数SortDat(),其功能要求:按金额从小到大进行排列,若金额相等,则按产品代码从小到大进行排列,最终排列结果仍存入结构数组 sell 中。最后调用函数 Wdata(),把结果输出到 OUT. dat 文件中。注意:部分源程序已经给出。请勿改动主函数 main()、读数据函数 Rdata()和输出数据函数 Wdata()的内容。#include stdio. h#include stri
7、ng. h#include conio. h#include stdlib. h#define MAX 100typedef structchar code5; /* 产品代码 */char name11; /* 产品名称 */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
8、Rdata()FILE *fp;char str80, ch11;int i;fp = fopen(“IN. dat“, “r“);for (i=0; i100; i+)fgets(str, 80, fp);memcpy(selli.code, str, 4);memcpy(selli.name, str+4, 10);memcpy(ch, str+14, 4);ch4 = 0;selli.uprice = atoi(ch);memcpy(ch, str+18, 5);ch5 = 0;selli. amount = atoi(ch);selli.sum = (long)selli. upric
9、e * selli. amount;fclose(fp);void Wdata()FILE *fp;int i;fp = fopen(“OUT. dat“, “w“);for (i=0; i100; i+)printf(“%s %s %4d %5d %5d/n“, selli. code, selli.name,selli.uprice, selli. amount, selli. sum);fprintf(fp, “%s %s %4d %5d %5d/n“, selli. code,selli. name, selli. uprice, selli. amount, selli. sum);
10、fclose(fp);(分数:100.00)_正确答案:(void SortDat() int i, j;PRO xy;for (i=0; i99; i+)for (j=i+1; j100; j+)if (selli .sum sellj .sum) xy = selli;selli = sellj;sellj = xy;else if (selli.sum = sellj.sum) if (strcmp (sell i . code, sellj. code) 0) xy = selli;selli = sellj;sellj = xy;)解析:解题思路 这里我们通过一个双重循环来实现,首先按产品的金额进行比较,如果前一个产品的金额大于后一个产品的金额,则这两个产品进行数据交换;如果两个产品的金额相等,用字符串比较函数strcmp()比较两个产品的产品代码,如果前一个产品的代码大于后一个产品的代码,则这两个产品进行数据交换。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1