一个C语言的小问题~~~求救

来源:百度知道 编辑:UC知道 时间:2024/05/31 16:33:39
#include<stdio.h>

#include<stdlib.h>

int Convert(int x)

int main(void)
{
int m;
int n;

int top;
int bottom;
int step;

top=0;
bottom=99;
step=1;
n=top;

printf("n\tm\n");
while (n<=bottom);
m=Convert(n);
printf("%d\t%d\n",n,m);
n=n+stop;

system("PAUSE");
return 0;

}

int Concert(int x)

{
int z;
z=1+3*x+3*x*x+x*x*x;
return 0;
}

在VC++中运行的结果:

n m
0 1
1 8
. .
. .
. .
99 10000
这是正确的结果.
可是在WIN-TC中运行的结果会出现错误!请问为什么?要怎么改才能在WIN-TC中的结果也正确?
就是两个运行的结果不一样啦,我们老师说需要改动下在WIN-TC中的结果才会和VC++的一样

问题很简单。因为win-tc中int只用2个字节表示,故它只能表示-32768-32767之间的数值,而在vc++或dev-c++中int要用4个字节表示,故它可以表示-2147483648-2147483647之间的数。你的程序中当x等于99时,z=1+3*x+3*x*x+x*x*x=1000000早就超过了win-tc下int的范围,所以结果错误。
将数据类型改为无符号长整型unsigned long即可。
本题的一个完整的c程序如下,程序在win-tc和Dev-c++下都调试通过。
#include<stdio.h>
#include<stdlib.h>

unsigned long Convert(unsigned long x);

int main(void)
{
unsigned long m;
unsigned long n,top,bottom,step;
top=0;
bottom=99;
step=1;
n=top;
while(n<=bottom)/*注意这里没有分号*/
{m=Convert(n);
printf("%ld\t%ld\n",n,m);/*注意这里输出格式为%ld*/
n=n+step;
}
system("PAUSE"); /*暂停,按任一键继续*/
return 0;
}

unsigned long Convert(unsigned long x)
{
unsigned long z;
z=1+3*x+3*x*x+x*x*x;
return z;
}

可以问一下是什么错误吗
那就没有办法了,我没有安装TC