P092 求出能整除x且不是偶数的各整数 ★

03-程序设计题 软件121, 唐鼎威 636浏览

所属年份: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;              /*传回满足条件的数的个数*/
}