c语言函数调用问题

编译 链接 都没错 运行 输入68 以后出现 只出现计算一次的结果 没有得到回数(手算应该可以得到的) int ds(int x) 这个函数是求倒过来的数 返回值放到主函数中的x0中
int yz(int sum1)这个函数是求原数和倒过来的数之和是不是回数 是则返回1 不是则返回0
两个函数个人分析起来都没错 是函数定义和调用规则问题吗 如果是 应该会有报错啊 没有报错
为什么运行不出结果 是win7系统下的c++6.0 这和系统有关系吗 求解

如果有一个正整数从左、右来读都是一样的,则称为回文式数(简称回数) 比如:101 32123 999。
回数猜想:任取一个数,再把它倒过来,并把这两个数相加,然后把这个和数再倒过来,与原和数相加,重复此过程,一定能获得一个回数。
编程,输入任意整数,按上述方法产生一个回数,为简便起见,最多计算7步,看是否能得到一个回数。
要求:
主函数中接收键盘数据,必须用scanf(“%d”,&变量名)接收整型变量,显示该数与其倒数的和,输出每一步计算步骤。
子函数1,计算该数的倒数。
子函数2,验证和是否为回数,是则主函数打印“经过n次计算,得到回数”,超过7次未能得到回数,显示,“经过n次计算,未得到回数”
*/
#include<stdio.h>
#include<math.h>
/**/
int ds(int x)
{
int n=0,x0=0,i;
for(n=0;x/pow(10,n)!=0;n++);
for(i=1;i<=n;i++)
x0+=(x=x%10)*(int)pow(10,n-i);
return x0;
}
int yz(int sum1)
{
int n=0,sum2=0,i,sum;
sum=sum1;
for(n=0;sum1/pow(10,n)!=0;n++);
for(i=1;i<=n;i++)
sum2+=(sum1=sum1%10)*(int)pow(10,n-i);
if(sum==sum2)
return 1;
else return 0;
}
main()
{
int ds(int x);
int yz(int sum1);
int x,x0,i,sum=0,n=0;
printf("请输入一个正整数:");
scanf("%d",&x);
for(i=1;1;i++)
{
x0=ds(x);
sum=x+x0;
n++;
printf("第%d次计算%d+%d=%d\n",n,x,x0,sum);
if(yz(sum))
{
printf("经过%d次计算,得到回数%d\n",n,sum);
break;
}
else x=sum;
if(i>7)
printf("经过%d次计算,未得到回数\n",n);break;
}
}

优化了你的程序,问题好多,你自己研究一下吧
#include<stdio.h>
int ds(int x) //真心看不懂你的ds()函数思想!有那么复杂吗?
{
int x0=0;
while( x )
{
x0=x0*10+x%10 ;
x/=10 ;
}
return x0;
}
int yz(int sum1)
{
int sum;
sum=ds(sum1); //取该数的倒数,验证是否相等不就可以了?
if(sum==sum1)
return 1;
return 0;
}
int main()
{
int ds(int x);
int yz(int sum1);
int x,x0,i,sum=0,n=0;
printf("请输入一个正整数:");
scanf("%d",&x);
for(i=1;;i++)
{
if(yz(x)) //如果第一次就是回数,就不要算了!如果非要再算,可移到下边
{
printf("经过%d次计算,得到回数%d\n",n,x);
break;
}
/**如果不为显示中间结果,这些都可以省
x0=ds(x);
sum=x+x0;
n++;
printf("第%d次计算%d+%d=%d\n",n,x,x0,sum);
x=sum;
*****/
x+=ds(x);
n++;
/**不管第1次输入的是不是回数,都要算,就把上面的删除,放开此处
if(yz(x))
{
printf("经过%d次计算,得到回数%d\n",n,x);
break;
}
**/
if(i>7)
{ //没有加括号,所以,一次就break了
printf("经过%d次计算,未得到回数\n",n);
break;
}
}
return 0;
}追问

你这个思想不好想啊 不过能看明白 另外问下定义为整型的变量 用%lf的double型输出会怎么样 反过来呢 谢谢

追答

定义为整型的变量 用%lf的double型输出结果是个不确定的数,一般情况会是0

反之,如果double数据按%d输出也会是个不确定的数,一般会是个很大的数(这与大小端机器有关)
因为,double和int在数据存储上的规则是不一样的,因此,在输出时解析会出现问题。

温馨提示:答案为网友推荐,仅供参考
相似回答