点点like 发表于 2017-5-25 17:30:21

c语言项目案例

、编写函数voidfun (int x, int * pp, int *n),它的功能是:求出x的偶数因子,并按从小到大的顺序放在pp所指的数组中,这些因子的个数通过形参n返回(假设pp指向足够大的空间)。如,若x中的值为24,则有6个数符合要求,它们是2,4,6,8,12,24。

这个题,哪位大神能帮忙讲讲,分析一下.多谢了

heblhc 发表于 2017-5-26 16:53:16

用一个for循环,循环因子i从x开始,每次自减2,i>0,然后24%i求余数,如果为0则把该数放到数组中,最后遍历该数组求个数

砚凉— 发表于 2017-5-29 17:49:54

本帖最后由 砚凉— 于 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;
}

砚凉— 发表于 2017-5-29 18:09:41

void 函数里使用指针 如果指向数组 则可以传出改变量,如果指向一个值 则不能传出改变值 可能的原因是数组是直接指向地址 改变的量直接到达地址 不会因子函数程序的结束而释放

海-啵啵鱼 发表于 2019-10-29 20:49:59

砚凉— 发表于 2017-5-29 17:49
试着将指针*n变成n返回 效果还不错

看了一下,思路很清晰,点赞

bin554385863 发表于 2019-10-29 22:01:05

本帖最后由 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]
查看完整版本: c语言项目案例