C中的冰雹序列

时间:2014-09-27 12:01:38

标签: c function sequence

我正在参加C课程(这是我的第一周),我需要编写一个打印出冰雹数字序列的程序。 我期望建立一个能够做到这一点的功能。

下一个号码被打印出来但就是这样。例如,当我输入58时,我得到29.但是我想打印出9个下一个数字的整个序列。

如果你能指导正确的方向,我会永远感激。

#include <stdio.h>
#include <stdlib.h>

int Hailstone (int n)
{
  if (n % 2 == 0) {
    return n /= 2;
  }
  else {
    return n = 3 * n + 1;
  }
  return n;
}

int main (void)
{
  int start, result;

  printf("Input a number: ");
  scanf("%d", &start);
  result = Hailstone(start);

  printf("%d\n", result);

  return 0;
}

2 个答案:

答案 0 :(得分:3)

你想要的是迭代。你不需要result变量;你只需插入新值:

while (start > 1) {
     start = Hailstone(start);
     printf ("%d\n", start);
}

还有一点可以改进,例如return n;无法访问,n的分配无用:

int Hailstone (int n)
{
  if (n % 2 == 0) {
    return n / 2;
  }
  else {
    return 3 * n + 1;
  }
}

如果您想提交专业版Hailstone(),您甚至可以将其写为

int Hailstone (int n)
{
   return n % 2 ? 3 * n + 1 : n / 2;
}

答案 1 :(得分:0)

看,在你的程序中,你试图只返回一个值到main..Hence打印所有数字只需写一个循环如下..

 #include <stdio.h>
#include <string.h>

int Hailstone(int n)
{
if(n % 2 == 0) {
return n /=2;
}
else {
return n = (3 * n) + 1;
}
 }

int main (void)
{
int start;

 printf("Input a number: ");
scanf("%d", &start);
while(start!=1)
{
  start = Hailstone(start);
printf("%d\n", start);
}
}