请编写函数countValue(),它的功能是:求出1~1000之内能被7或11整除但不能同时被7或11整除的所有整数,将它们放在数组a中,并通过n返回这些数的个数。主函数最后调用函数Wdata()把计算结果输出到OUT.dat中。
注意:部分源程序已经给出。请勿改动主函数main()和输出数据函数Wdata()的内容。
#include <conio.h>
#include <stdio.h>
void countValue(int *a, int *n)
{
}
void Wdata()
{ int aa[1000], n, k;
FILE *fp;
fp = fopen("out.dat", "w");
countValue(aa, &n);
for (k=0; k<n; k++)
if ((k+1)%10 == 0)
fprintf(fp, "%5d\n", aa[k]);
else
fprintf(fp, "%5d", aa[k]);
fprintf(fp, "\n");
fclose(fp);
}
main()
{ int aa[1000], n, k;
countValue(aa, &n);
for (k=0; k<n; k++)
if ((k+1)%10 == 0)
printf("%5d\n", aa[k]);
else
printf("%5d", aa[k]);
Wdata();
}
试题答案及详解
【审题分析】分析题目可知,本题只要实现countValue()函数的功能即可。countValue()要实现的功能是:求出1到1000之内能被7或11整除但不能同时被7和11整除的所有整数,将它们放在数组a中,并通过n返回这些数的个数。因此解答本题的关键在于如何将一个指定的关系转换为C语言表达式。
【解题思路】这里我们首先在for循环语句中当自变量i从1递增到1000时,对每一个数进行i%7==0 && i%11或i%7 && i%11==0的逻辑判断,如果其中一个表达式成立,则把数字i输入数组a中,整型指针变量n加1,数组指针a向后移动一位。
【参考答案】
void countValue(int *a, int *n)
{ int i;
*n = 0;
for (i=1; i<=1000; i++)
if (i%7==0 && i%11)
{ *a = i;
*n = *n+1;
a++;
}
else if (i%7 && i%11==0)
{ *a = i;
*n = *n+1;
a++;
}
}
【易错分析】能被7或11整除但不能同时被7和11整除的整数的条件为:i%7==0 && i%11或i%7 && i%11==0,其一定成立即可。
【考点链接】求余运算、指针变量的应用。
责任编辑:小草