当前位置: 代码迷 >> C语言 >> 我想请教哪位老师都是一个 C 语言编程的简单问题
  详细解决方案

我想请教哪位老师都是一个 C 语言编程的简单问题

热度:159   发布时间:2005-05-28 00:09:00.0
我想请教哪位老师都是一个 C 语言编程的简单问题
我是一名C 语言初学者,我想请哪位老师帮忙看一下,当我输入 110000 , 结果是10749而不是10750呢?让我百思不解。为什么?能告诉学生一下吗?
main()
{
long int i;
int bonus1,bonus;
bonus1=100000*0.1;
scanf("%ld",&i);
if(i<=100000)
  bonus=i*0.1;
   else if(i<=200000)
    bonus=bonus1+(i-100000)*0.075;
    printf("bonus=%d",bonus);
  }
搜索更多相关的解决方案: bonus  语言  简单问题  老师  int  

----------------解决方案--------------------------------------------------------
这应该是数据溢出所造成的,
您所定义的 bonus1 变量装不下超过 32767 的数值。
是以,100000 这个数容纳不下。

建议使用更大存储能力的数据类型。
----------------解决方案--------------------------------------------------------

我对程序进行了一些修改,希望这正是你所满足的。 main() { long int i; double bonus1,bonus; /*修改了变量的数据类型,定义为 double 的好处是它比 float 少了一个转换过程,且能更精确地存储数据*/

bonus1=100000*0.1; scanf("%ld",&i);

if(i<=100000) bonus=i*0.1; else if(i<=200000) bonus=bonus1+(i-100000)*0.075;

printf("bonus=%lf",bonus); /*修改了输出类型,原来为整型,使用这个类型输出可能会对结果进行截取*/ getch(); }

[此贴子已经被作者于2005-5-28 0:58:46编辑过]


----------------解决方案--------------------------------------------------------
以下是引用ChenMo在2005-5-28 0:45:54的发言: 这应该是数据溢出所造成的, 您所定义的 bonus1 变量装不下超过 32767 的数值。 是以,100000 这个数容纳不下。 建议使用更大存储能力的数据类型。
如上!!!1
----------------解决方案--------------------------------------------------------
下图为本人上述程序运行结果的一个测试显示:



[此贴子已经被作者于2005-5-28 0:57:14编辑过]



----------------解决方案--------------------------------------------------------
Data Flow
----------------解决方案--------------------------------------------------------
谢谢大家,有时间来北戴河玩。
----------------解决方案--------------------------------------------------------

----------------解决方案--------------------------------------------------------
北戴河、虎头山?你是茂名电白人?

那里不大好玩,我去过几次,
----------------解决方案--------------------------------------------------------
  相关解决方案