鱼C论坛

 找回密码
 立即注册
查看: 5654|回复: 5

c语言项目案例

[复制链接]
发表于 2017-5-25 17:30:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

这个题,哪位大神能帮忙讲讲,分析一下.多谢了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-5-26 16:53:16 | 显示全部楼层
用一个for循环,循环因子i从x开始,每次自减2,i>0,然后24%i求余数,如果为0则把该数放到数组中,最后遍历该数组求个数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-29 17:49:54 | 显示全部楼层
本帖最后由 砚凉— 于 2017-5-29 17:59 编辑

试着将指针*n变成n返回 效果还不错
  1. #include<iostream>
  2. using namespace std;
  3. int pp(int x,int *p,int n);
  4. int main()
  5. {
  6.     int  *b;
  7.     int t=0;
  8.     int a;
  9.     cin>>a;
  10.     int *c=new int[2000];
  11.     b=c;
  12.     t=pp(a,b,t);
  13.     cout<<t<<endl;
  14.     for(int h=0;h<t;h++)
  15.         cout<<c[h]<<" ";
  16.     delete []c;
  17.     return 0;
  18. }

  19. int pp(int x,int *p,int n)
  20. {
  21.     for(int i=1;i<=x;i++)
  22.     {
  23.         if((x%i==0)&&(i%2==0))
  24.         {
  25.                     *p=i;
  26.                     p++;
  27.                     n++;
  28.         }
  29.     }
  30.     return n;
  31. }
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-5-29 18:09:41 | 显示全部楼层
void 函数里使用指针 如果指向数组 则可以传出改变量,如果指向一个值 则不能传出改变值 可能的原因是数组是直接指向地址 改变的量直接到达地址 不会因子函数程序的结束而释放
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-29 20:49:59 | 显示全部楼层
砚凉— 发表于 2017-5-29 17:49
试着将指针*n变成n返回 效果还不错

看了一下,思路很清晰,点赞
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-29 22:01:05 | 显示全部楼层
本帖最后由 bin554385863 于 2019-10-30 13:39 编辑
  1. #include <iostream>
  2. //获取偶数因子
  3. void func(int num, int * arr, int * n)
  4. {
  5.         int count = 0;
  6.         if (num <= 0)//排除负数
  7.         {
  8.                 std::cout << "DATE ERROR";
  9.                 *n = -1;
  10.                 arr[0] = -1;
  11.         }
  12.         else
  13.         {
  14.                 //查找偶数因子
  15.                 for (size_t i = num; i >= 1; i--)
  16.                 {
  17.                         if (num % (i * 2) == 0)
  18.                         {
  19.                                 count++;
  20.                         }
  21.                 }
  22.                 *n = count;
  23.                 count = 0;
  24.                 for (size_t i = num; i >= 1; i--)
  25.                 {
  26.                         if (num % (i * 2) == 0)
  27.                         {
  28.                                 int tmp = num / i;
  29.                                 arr[count] = tmp;
  30.                                 count++;
  31.                         }
  32.                         else if (num % (i * 2) != 0)
  33.                         {
  34.                                 arr[count] = 0;
  35.                         }
  36.                 }
  37.         }
  38. }
  39. //计算偶数因子的个数
  40. int arrsize(int num)
  41. {
  42.         int size = 0;
  43.         if (num % 2 != 0)
  44.         {
  45.                 size = 1;
  46.         }
  47.         else
  48.         {
  49.                 for (size_t i = 1; i <= num; i++)
  50.                 {
  51.                         if (num % (2 * i) == 0)
  52.                         {
  53.                                 size++;
  54.                         }
  55.                 }
  56.         }
  57.         return size;
  58. }
  59. int main(int argc, char const * argv[])
  60. {
  61.         int a = 1;
  62.         std::cin >> a;
  63.         for (int b = 0; a != 0; std::cin >> a)
  64.         {
  65.                 int s = arrsize(a);
  66.                 int ptr[s];
  67.                 func(a, ptr, &b);
  68.                 //std::cout<<b<<std::endl;
  69.                 std::cout << a << "有" << b << "偶数因子,分别是: ";
  70.                 for (size_t i = 0; i < s; i++)
  71.                 {
  72.                         std::cout << ptr[i] << "  ";
  73.                 }
  74.                 std::cout << '\n' << std::endl;
  75.         }
  76.         return 0;
  77. }

复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-6 11:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表