一个C语言的程序怎么完善?

来源:百度知道 编辑:UC知道 时间:2024/06/06 17:37:16
/*******************************************************************
作者:网构一
目的:练习
时间:2008.11.01
编号0260:验证角谷猜想。
问题:从1到n的任何一个自然数, 只要对n反复进行下列两种运算:

1)如果n是偶数, 就除以2 ;

2)如果n是奇数, 就乘以3加1,

最后的结果总是1。
例如输入22 输出 22,11,34,17,52,26,13,40,20,10,5,16

,8,4,2,1
*******************************************************************/
#include<stdio.h>
main()
{
int n;
printf("输入一个正整数:");
scanf("%d",&n);
while(n>1)

{
if(n%2==0)
{
n/=2;
printf("%d\n",n);

}

else
{

n=3*n+1;
printf("%d\n",n);

}
}
}

正整数有包括“1”。 如果把while(n>1)换成大于零又会导致死循环。。郁闷。。
3楼的你N=1的时候不是程序结束了吗?什么都没有执行。。。我问过老师,他说不用这么考虑那个了。。

#include<stdio.h>
main()
{
int n;
printf("输入一个正整数:");
scanf("%d",&n);
if( n == 1 )
{
printf( "1\n" );
return;
}
while(1)

{
if( n == 1 )
{
printf( "1\n" );
return;
}

if(n%2==0)
{
n/=2;
printf("%d\n",n);

}

else
{

n=3*n+1;
printf("%d\n",n);

}
}
}

加一个if判断可以吗?

if(n=1)
//直接输出1;
else
{
//把你的while循环放进来;
}

我上面不是写了if的位置了吗?

while ( n>0 ) {
if ( n%2==0 ) {
n/=2;
printf( "%d\n",n );
}else {
n=3*n+1;
printf( "%d\n",n );
}
if (n==1) break;
}
while条件改成n>0,再在最后加一个判断就可以了,不能加在前面,否则1,4,2,1这个循环就没了

--------
没有意思相反啊,你输入1,输出4,2,1,正好啊,你加进去看