2
题目:
请编写函数fun,它的功能是:求出1到1000之内能被7或11整除、但不能同时被7和11整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。
注意:部分源程序如fill.c给出。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所填写的若干语句。
#include
#include
void fun(int * a, int * n)
{
}
main()
{
int aa[1000],n,k;
clrscr();
fun(aa,&n);
for(k=0;k
if((k+1)%10==0)
printf("\n");
else printf("%5d,",aa[k]);
printf("\n");
}
2
分析:
题目要求编写fun函数求出1到1000之内能被7或11整除、但不能同时被7和11整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。
要实现以上要求,只要使用循环从1至1000逐个地检查在这个范围之内的所有整数是否能被7或11整除、但不能同时被7和11整除。如果符合能被7或11整除、但不能同时被7和11整除的要求,则将这个符合条件的整数放入a数组中。
另外能被7或11整除、但不能同时被7和11整除的条件可以分为两大条件:
(1)能被7或11整除
(2)但不能同时被7和11整除
以上两个条件的关系是并且的关系,在C语言中可以使用&&连接这两个条件。
第一个条件"能被7或11整除"可以使用(i%7==0 ||
i%11==0)来表示,其中i表示要检查的整数。
第二个条件"但不能同时被7和11整除"可以使用(i%7!=0
&&
i%11!=0)来表示。下面给出的答案使用了i%77!=0来表示这个条件,这也是可以的。因为不能整除77的整数当然也不能同时整除7和11。
官方答案注解如下:
#include
#include
void fun(int * a, int * n)
{
int i,j=0;
for(i=2;i<1000;i++)
if
((i%7==0||i%11==0)&&i%77!=0)
a[j++]=i;
*n=j;
}
main()
{
int aa[1000],n,k;
clrscr();
fun(aa,&n);
for(k=0;k
if((k+1)%10==0)
printf("\n");
else printf("%5d,",aa[k]);
printf("\n");
}