所属年份:2010.9;2012.3
请编写函数void fun (int x, int pp[], int *n),它的功能是:求出能整除x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。
例如,若x中的值为30,则有4个数符合要求,它们是1、3、5、15。
#include <conio.h> #include <stdio.h> #include <stdlib.h> void fun (int x, int pp[], int *n) { } void main () { FILE *wf; int x,aa[1000], n, i ; system("CLS"); printf("\nPlease enter an integer number : \n ") ; scanf ("%d", &x) ; fun (x, aa, &n) ; for (i=0 ; i<n ; i++) printf ("%d ", aa [i]); printf ("\n ") ; /******************************/ wf=fopen("out.dat","w"); fun (30, aa, &n) ; for (i=0 ; i<n ; i++) fprintf (wf,"%d ", aa [i]); fclose(wf); /*****************************/ }
【解题思路】
本题考查:偶数的判定方法;整除的实现。
本题题干信息是:能整除x且不是偶数的所有整数。循环语句中变量i从1开始且每次增2,所以i始终是奇数。
整除的方法,在前面已经讲过多次,这里就不再赘述了。对于本题目要求的不是偶数的判定方法,即该数对2求余不为0。除以上方法外,还可以通过for循环语句直接把偶数筛出去,确保参与操作的数均为奇数。
【参考答案】
void fun (int x, int pp[], int *n) { int i,j=0; for(i=1;i<=x;i=i+2) /*i的初始值为1,步长为2,确保i为奇数*/ if(x%i==0) /*将能整除x的数存入数组pp中*/ pp[j++]=i; *n=j; /*传回满足条件的数的个数*/ }