1、国家三级信息管理技术机试模拟试卷 12及答案与解析 一、程序设计题 1 下列程序的功能是:在 3位整数 (100至 999)中寻找符合下面条件的整数,并依次从小到大存入数组 b中;它既是完全平方数,又有两位数字相同,例如 144,676等。 请编制函数 int jsValue(int bb)实现此功能,满足该条件的整数的个数通过所编制的函数返回。 最后调用函数 writeDat()把结果输出到文件 OUT12.DAT中。 注意:部分源程序已给出。 请勿改动主函数 main()和写函数 writeDat()的内容。 试题程序: #include Stdio.h int jsValue(int b
2、b ) main() int b20, num; num = jsValue(b); writeDat(num, b); writeDat(int num, int b) FILE * out; int i; out = fopen(“OUT12.DAT“, “W“); fprintf (out, “%dn“, num); for(i=0; i num; i+) fprintf(out, “%dn“, bi); fclose(out); 国家三级信息管理技术机试模拟试卷 12答案与解析 一、程序设计题 1 【正确答案】 int jsValue(int bb ) int i,j,k=0; int
3、 hun, ten, data; for (i=100; i =999; i+) j=10; while (j * j =i) if (i=j*j) / * 如果该数是完全平方数 * / hun=i/100; /*求该数的百位数字 */ data=i-hun * 100; /*得到的两位数 */ ten=data/10; /*求该数的十位数字 * / data=data-ten*10; /*求该数的个位数字 */ if(hun=ten | hun=data | ten=data) /*有两位数字相同 * / bb k =i; /*则把该数存入数组 bb中 */ k+; ) /*统计满足条件的数
4、的个数 */ j+; return k; /* 返回满足该条件的整数的个数 */ 【试题解析】 解答本题,首先应该考虑用一个 for环来依次取得 100到 999之间的各个数,并对当前所取得的数进行两个条件判断:一是判断该数是否是完全平方数:二是判断该数是否有两位数字相同。如果以上两个条 件同时满足,则把该数存放到 b数组中,尽管题目要求所存的数必须从小到大,但我们取数的过程本身就是从小到大取得,因此,排序工作是没有必要做的,按照取数的顺序,把满足条件的数值存放到数组 b中就可以了。判断某个数是否是完全平方数的方法是看该数是否可以拆成完全相同的两个数的积 (当然要拆成的两个数一定是两位数 ),因此,我们再利用一个循环用 10以上的两位数逐个去拆被判断的数,如果被判断的数恰好可以被完全拆分,则第一个条件成立,接着就开始依次取得被判断的数的百位、十位、个位上的数字值,看是否有两位数字相同。取得每一位上的数 字值可以用 “hun=i/100; data=i-hun*100: ten=data/10: data=data-ten*10”几条语句来实现, hun变量得到的是百位上的数字, ten变量得到的是十位上的数字, data变量得到的是个位上的数字。