1、国家三级(数据库技术)机试模拟试卷 117及答案与解析 一、程序设计题 1 已知数据文件 IN.dat中存有 200个四位数,并已调用读函数 Rdata()把这些数存入数组 a中,请编写函数 NumCal(),其功能是:把一个四位数的千位数字上的值加上个位数字上的值恰好等于百位数字上的值加上十位数字上的值,并且原四位数是奇数,则统计出满足此条件的个数 count并把这些四位数按从小到大的顺序存入数组 b中。最后调用写函数 Wdata(),把结果 count以及数组 b中符合条件的四位数输出到 OUT.dat文件中。 注 意:部分源程序已经给出。程序中已定义数组 a200 b200,已定义变量c
2、ount。请勿改动数据文件 IN.dat中的任何数据及主函数 main()、读函数 Rdata()和写函数 Wdata()的内容。 #include stdio.h #define MAX 200 int aMAX, bMAX, count = 0; void NumCal () void Rdata () int i; FILE *fp; fp = fopen(“IN. dat“, “r“); for (i=0; i MAX; i+) fscanf(fp, “%d,“, fclose (fp); void Wdata () FILE *fp; int i; fp = fopen(“OUT.
3、dat“, “w“); fprintf(fp, “%dn“, count); for (i=0; i count; i+) fprintf(fp, “%dn“, bi); fclose (fp); void main () int i; Rdata (); NumCal (); printf(“满足条件的数 =%dn“, count); for (i=0; i count; i+) printf(“%d “, bi); printf (“n“); Wdata (); 国家三级(数据库技术)机试模拟试卷 117答案与解析 一、程序设计题 1 【正确答案】 void NumCal() int i,
4、 thou, hun, ten, data, j; for (i=0; i MAX; i+) thou = ai/1000; hun = ai%1000/100; ten = ai%100/10; data = ai%10; if (thou +data = hun +ten) count+; for (i=0; i count-1; i+) for (j=i+1; j count; j+) if (bi bj) data = bi; bi = bj; bj = data; 解题思路 对于每一个四位数,用这个四位数除以 1000,可得到这个四位数千位上的数字输给变量 thou;这个四位数对 1000求余数然后再除以 100,可得到这个四位数百位上的数字输给变量 hun;这个四位数对 100求余数然后再除以 10,可得到这个四 位数十位上的数字输给变量 ten;这个四位数对 10求余数,可得到这个四位数个位上的数字输给变量 data。 然后判断表达式 (thou+ data=hun+ ten) &ai%2 1是否成立,如果成立,则把这个数赋给数组 b,同时计数变量 count加 1。最后对数组 b中元素进行从小到大的排序。 【知识模块】 三级数据库技术机试模拟