2021.1.7输入数据求出偶数因子并排序

编写函数void fun(int x, int *pp, int *n)它的功能是:求出x的偶数因子,并按从小到大的顺序存放在pp所指的数组中,这些因子的个数通过形参n返回。如,若x中的值为24,则有6个数符合要求,它们是2、4、6、8、12、24。主函数中输入一个小于等于1000的正整数,调用fun函数之后按顺序输出该正整数的所有偶数因子。
输入输出形式如:

Input number:512
2 4 8 16 32 64 128 256 512
最后以回车结束。

本题的要求有两个:一是求出x的偶数因子,二是对偶数因子进行排序这两步均需要在函数里完成。

void fun(int x, int *pp, int *n)
{
	int i,j = 0;//i作为x的因数,j即因数的个数;
	for(i=1;i<=x;i++)
	{
		if(x%i == 0)//首先判断i是不是x的因子;
		{
			if(i%2 == 0;//判断i是不是x的偶数因子;
			{
				*(pp + j) = i;//相当于pp[j]=i,
				j++; //把偶数因子存储到数组pp中;
			}
		}
	}
	*n = j;//因子的个数通过形参n返回.
}

主函数部分只需要调用函数即可:

#include
void fun(int x, int *pp, int *n);
int main()
{
	int i, pp[100], n, x;
	printf("Input number:");
	scanf("%d", &x);
	fun(x, pp, &n);//调用函数;
	for(i=0;i<n;i++)
	{
		printf(" %d",*(pp+i));//用数组pp输出x的因子;
	}//pp数组内的值在函数部分已经确定为n,这里执行的是从
	//0-n输出pp数组内的数字.
	return 0;
}

本题比较令我费解的点是“因子的个数通过形参n返回”的要求。n是一个指针,指针指向的是地址。在函数中,pp数组已经从小到大将x的因子录入了,且因子个数j已赋给指针n返回主函数。因此,只需要在主函数中插入一个从0-(n-1)的循环即可读取pp数组中的值并将其输出得出结果.
完整代码如下:

#include 
#define N 100
void fun(int x, int *pp, int *n);
int main(void)
{
	int i, n, x, pp[N];
	printf("Input number:");
	scanf("%d", &x);
	fun(x, pp, &n);
	for(i=0;i<n;i++)
		printf(" %d",*(pp+i));
	return 0;
	
}
void fun(int x, int *pp, int *n)
{
	int i, j = 0;
	for(i=1;i<=x;i++)
	{
		if(x%i == 0)
		{
			if(i%2 == 0)
			{
				*(pp+j) = i;
				j++;
			}
		}
	}
	*n = j;
}

在这里插入图片描述

peace.

你可能感兴趣的:(C,learning,c语言)