1、计算机三级数据库技术-98 及答案解析(总分:100.00,做题时间:90 分钟)1.下列程序的功能是选出 5000 以下符合条件的自然数。条件是:千位数字与百位数字之和等于十位数字与个位数字之和,且千位数字与百位数字之和等于个位数字与千位数字之差的 10 倍。计算并输出满足条件的 4 位自然数的个数 cnt 及它们的和 sum。请编写函数 countValue()实现程序功能,最后调用函数writeDAT(),把结果 cnt 和 sum 输出到文件 OUT.DAT 中。 请勿改动主函数 main()和写函数 writeDAT()的内容。 试题程序 #includestdio.h int cn
2、t, sum; void writeDat(); void countValue() void main() cnt=sum=0; countValue(); printf(“满足条件的自然数的个数=%dn“, cnt); printf(“满足条件的自然数的和=%dn“, sum); writeDAT(); void writeDAT() FILE*fp; fp=fopen(“OUT.DAT“, “w“); fprintf(fp, “%dkn%dn“, cnt, sum); fclose(fp); (分数:100.00)_计算机三级数据库技术-98 答案解析(总分:100.00,做题时间:90
3、 分钟)1.下列程序的功能是选出 5000 以下符合条件的自然数。条件是:千位数字与百位数字之和等于十位数字与个位数字之和,且千位数字与百位数字之和等于个位数字与千位数字之差的 10 倍。计算并输出满足条件的 4 位自然数的个数 cnt 及它们的和 sum。请编写函数 countValue()实现程序功能,最后调用函数writeDAT(),把结果 cnt 和 sum 输出到文件 OUT.DAT 中。 请勿改动主函数 main()和写函数 writeDAT()的内容。 试题程序 #includestdio.h int cnt, sum; void writeDat(); void countVa
4、lue() void main() cnt=sum=0; countValue(); printf(“满足条件的自然数的个数=%dn“, cnt); printf(“满足条件的自然数的和=%dn“, sum); writeDAT(); void writeDAT() FILE*fp; fp=fopen(“OUT.DAT“, “w“); fprintf(fp, “%dkn%dn“, cnt, sum); fclose(fp); (分数:100.00)_正确答案:()解析:void countValue() int i; /*循环控制变量*/ int a1, a2, a3, a4; /*定义变量保
5、存 4 位数的每位数字*/ for(i=5000; i=1000; i-) /*依次取每一个数进行判断*/ a4=i/1000; /*求 4 位数的千位数字*/ a3=i%1000/100; /*求 4 位数的百位数字*/ a2=i%100/10; /*求 4 位数的十位数字*/ a1=i%10; /*求 4 位数的个位数字*/ if(a4+a3=a2+a1 /*则统计满足条件的数的个数*/ sum+=i; /*将满足条件的数求和*/ 考点 本题考查对多个整数的筛选以及统计。考查的知识点主要包括:多位整数的分解算法,逻辑表达式。 此题属于 4 位数的筛选类题型。解此题需主要解决 2 个问题:问题 1 如何取得 4 位数的各个数位数字;问题 2 如何通过条件(千位数字与百位数字之和等于个位数字与十位数字之差的 10 倍)筛选出满足条件的数并计算个数及和值;分析题意“5000 以下的自然数”,“该数存在千位数字”可知:本题的查找范围为“1000i5000”。通过问题分析,得出解此题的思路为:先求出每个数的各位数字,再根据各数位数字筛选出满足条件的数,对满足条件的数进行统计个数和累加和的运算。对于问题 1 通过算术运算取余和除法可以分解得到 4 位数的各个数位上的数字;问题 2 通过 if 条件判断语句和逻辑表达式可以实现。