1、国家三级(网络技术)机试模拟试卷 80及答案与解析 一、程序设计题 1 已知数据文件 in80. dat中存有 300个 4位数,并已调用函数 readDat()把这些数存入数组 a中,请编制一函数 isValue(),其功能是:求出个位数上的数减千位数上的数减百位数上的数减十位数上的数大于 0的个数 cnt,再求出所有满足此条件的4位数平均值 pjz1,以及所有不满足此条件的 4位数平均值 pjz2,最后调用函数 writeDat()把结果 cnt, pjz1, pjz2输出到 out80. dat文件。 例如: 1239, 9-1-2-3 0,则该数满足条件,计算平均值 pjz1,且个数c
2、nt=cnt+1。 8129, 9-8-1-2 0,则该数不满足条件,计算平均值 pjz2。 注意:部分源程序已给出。 程序中已定义数组: a300, b300, 定义变量: cnt, pjz1, pjz2。 请勿改动主函数 main()、读函数 readDat()和写函数 writeDa()的内容。 试题程序: #include stdio.h int a300, cnt=0; double pjzl=0.0,pjz2=0.0; void jsValue() main ( ) int i; readDat(); jsValue(); writeDat(); printf (“cnt=%dn
3、满足条件的平均值 pjz1=%7.2Ifn 不满足条件的平均值 pjz2=%7.2Ifn“,cnt,pjz1,pjz2); readDat() FILE *fp; int i; fp=fopen “in80.dat“,“r“); for(i=0;i 300;i+) fscanf(fp,“%d,“, fclose(fp); writeDat () FILE *fp; int i; fp=fopen(“out80.dat“,“w“); fprintf(fp,“%dn%7.21fn%7.21fn“,cnt ,pjzl,pjz2); fclose(fp); 国家三级(网络技术)机试模拟试卷 80答案与
4、解析 一、程序设计题 1 【正确答案】 void jsValue() int i, thou, hun, ten, data, n=0; for(i=O;i 300;i+) thou=a i /1000; /*求四位数的千位数字 */ hun=a i %1000/100; /*求四位数的百位数字 */ ten=a i %100/10; /*求四位数的十位数字 */ data=a i %10; /*求四位数的个位数字 */ if (data-thou-hun-ten 0) /*如果个位数减千位数减百位数大于 0*/ cnt+; /*统计满足条件的数的个数 */ pjz1+=a i; /*将满足条
5、件的数求和 */ else n+; /*否则统计不满足条件的数的个数 */ pjz2+=a Ii; /*将不满足条件的数求和 */ pjz1/=cnt; /求满足条件的数的平均值 */ pjz2/=n; /* 求不满足条件的数的平均值 */ 【试题解析】 本题考查的知识点如下: (1)特殊运算符 “%” 及 “/”的使用。 (2)循环结构及选择结构的使用 ? 在本题中,首先要将一个 4位数的千位、百位、十位、个位拆成独立的数字。这里借助特殊运算符号 “%” ( 取余 )和 “/” (整除 ),拆分方法略。然后判断 “个位数 -千位数 -百位数 -十位数 ”的值是否大于 0。依次求得符合条件的数的和及其平均值。