c语言项目案例
、编写函数voidfun (int x, int * pp, int *n),它的功能是:求出x的偶数因子,并按从小到大的顺序放在pp所指的数组中,这些因子的个数通过形参n返回(假设pp指向足够大的空间)。如,若x中的值为24,则有6个数符合要求,它们是2,4,6,8,12,24。这个题,哪位大神能帮忙讲讲,分析一下.多谢了 用一个for循环,循环因子i从x开始,每次自减2,i>0,然后24%i求余数,如果为0则把该数放到数组中,最后遍历该数组求个数 本帖最后由 砚凉— 于 2017-5-29 17:59 编辑
试着将指针*n变成n返回 效果还不错
#include<iostream>
using namespace std;
int pp(int x,int *p,int n);
int main()
{
int*b;
int t=0;
int a;
cin>>a;
int *c=new int;
b=c;
t=pp(a,b,t);
cout<<t<<endl;
for(int h=0;h<t;h++)
cout<<c<<" ";
delete []c;
return 0;
}
int pp(int x,int *p,int n)
{
for(int i=1;i<=x;i++)
{
if((x%i==0)&&(i%2==0))
{
*p=i;
p++;
n++;
}
}
return n;
}
void 函数里使用指针 如果指向数组 则可以传出改变量,如果指向一个值 则不能传出改变值 可能的原因是数组是直接指向地址 改变的量直接到达地址 不会因子函数程序的结束而释放 砚凉— 发表于 2017-5-29 17:49
试着将指针*n变成n返回 效果还不错
看了一下,思路很清晰,点赞 本帖最后由 bin554385863 于 2019-10-30 13:39 编辑
#include <iostream>
//获取偶数因子
void func(int num, int * arr, int * n)
{
int count = 0;
if (num <= 0)//排除负数
{
std::cout << "DATE ERROR";
*n = -1;
arr = -1;
}
else
{
//查找偶数因子
for (size_t i = num; i >= 1; i--)
{
if (num % (i * 2) == 0)
{
count++;
}
}
*n = count;
count = 0;
for (size_t i = num; i >= 1; i--)
{
if (num % (i * 2) == 0)
{
int tmp = num / i;
arr = tmp;
count++;
}
else if (num % (i * 2) != 0)
{
arr = 0;
}
}
}
}
//计算偶数因子的个数
int arrsize(int num)
{
int size = 0;
if (num % 2 != 0)
{
size = 1;
}
else
{
for (size_t i = 1; i <= num; i++)
{
if (num % (2 * i) == 0)
{
size++;
}
}
}
return size;
}
int main(int argc, char const * argv[])
{
int a = 1;
std::cin >> a;
for (int b = 0; a != 0; std::cin >> a)
{
int s = arrsize(a);
int ptr;
func(a, ptr, &b);
//std::cout<<b<<std::endl;
std::cout << a << "有" << b << "偶数因子,分别是: ";
for (size_t i = 0; i < s; i++)
{
std::cout << ptr << "";
}
std::cout << '\n' << std::endl;
}
return 0;
}
页:
[1]