问答题
请编写函数countValue(),它的功能是:求出1~1000之间能被7或11整除但不能同时被7和11整除的所有整数,将结果按从小到大的顺序存放在数组a中,并通过n计算出这些数的个数。
注意:请勿改动主函数main()和写函数writeDAT()的内容。
【试题程序】
#include < stdlib.h >
#include < stdio.h >
void writeDAT () ;
void countValue (int * a,int * n)
{
}
void main ()
{
int aa[1000],n, k;
system ("CLS") ;
countValue (aa, &n) ;
for (k=0;k <n;k ++ )
if ( (k+1) %10==0)
{
printf ("%5d",aa[k]) ;
printf ("\n") ;
}
else
printf ("%5d", aa[k] );
writeDAT ();
void writeDAT ()
{
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", aa[k] );
fprintf (fp, "\n");
}
else
fprint f (fp, "%d", aa[k] );
fclose (fp);
}
【正确答案】
【答案解析】void countValue(int *a,int *n)
{ int i; /*定义循环控制变量*/
*n=0 ; /*初始化计数器变量*/
for(i=1;i<=1000;i++) /*在这个范围内寻找符合条件的数*/
if((i%7==0 && i%11!=0)||(i%7!=0 && i%11==0))
/*如果当前的数可以被7整除而不可以被11整除,或者可以被11整除而不可以被7整除*/
{
*a=i; /*保存符合条件的数*/
*n=*n+1; /*统计个数*/
a++;
}
}
[考点] 本题考查对一定范围内整数的筛选。考查的知识点主要包括:if判断语句和逻辑表达式,指针对存储单元的访问。
[解析] 此题属于数学类问题。分析题干,本题存在2个关键点:关键点1判断条件"能被7或11整除但不能同时被7和11整除";关键点2统计满足条件的数的数量。
本题的解题思路为:通过循环控制,依次判断1至1000内的数是否满足关键点1中的条件。如果满足,则将数据保存到数组中,并统计其数量。
if判断语句中表达式; 指针对存储单元的访问。