问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c语言程序 调错 运行出负数

发布网友 发布时间:2024-09-28 22:05

我来回答

5个回答

热心网友 时间:2024-09-28 22:32

楼上的并没有找到错误。x只是应该最好用实型,不过你用整型也没所谓,当表达式中出现浮点数与整数的二元运算时编译器会自动将整型转换为浮点类型在进行运算。所以楼主的程序的问题并不在这儿。而在数组访问越界。楼主,C语言里面数组的下标是从0开始的。所以一个10元素的数组,合法的下标是从0到9。a[0]是第一个元素,a[9]是第十个元素。你的while循环和for循环里面数组的下标都是从1开始的,所以不管是你往数组里面存东西还是从数组里面取东西,你都是从a[1](因为你写的都是a[i])开始的,也就是说数组的第一个元素a[0]你都没有用,然后一直到a[10],而本来a[9]才是你的数组的最后一个元素,结果你非法访问了你的数组的有效范围以外的一个内存单元,即所谓的a[10],这个单元里本来就不在你的数组有小范围之内,所以它里面的值是垃圾值,你打印出来当然就可能是任意值了(这个在不同的运行环境下可能有不同的表现,比如说打印一个很大的值或者一个负数,反正不是你想要的值)。你的程序有两种改法:
1. i=0; while( i < 10 )
for ( i = 0; i < 10; i++ )

2. 把循环体里面的a[i]改成a[i-1],这样你的数组访问就不会越界了,i=1的时候,刚好是a[0],i=9的时候,刚好到最后一个元素a[9]。

另外,楼上的说得也没错,你最好把你的运算操作数都改成浮点类型(float或者double),不要依赖编译器帮你做类型转换

热心网友 时间:2024-09-28 22:28

哦,提个建议啊??
首先我觉得出现负数,
1.是数组越界,多调试可以发现是否越界
2.是由于非法数字出现了!
你的程序结构不合理!
1.c语言中主要是函数,把处理的部分独立出一个函数来!
2.用switch case 语句替代那么多的if语句
这样的话,结构清晰,也不容易出错误.
就剩下很多事情了,那会出现什么错误啊?

热心网友 时间:2024-09-28 22:30

void main()
{
long int x1,x2,x4,x6,x10,x;
long int m;
printf("please input this month's profit:\n");
scanf("%ld",&m);
x1=100000*0.1;
x2=x1+100000*0.075;
x4=x2+200000*0.05;
x6=x4+200000*0.03;
x10=x6+400000*0.015;
if(m<=100000)
x=m*0.1;
else if(m<=200000)
x=x1+(m-100000)*0.075;
else if(m<=400000)
x=x2+(m-200000)*0.05;
else if(m<=600000)
x=x4+(m-400000)*0.03;
else if(m<=1000000)
x=x6+(m-600000)*0.015;
else
x=x10+(m-1000000)*0.01;
printf("x=%ld\n",x);
getchar();
getchar();
}

热心网友 时间:2024-09-28 22:30

void
main()
{
long
int
x1,x2,x4,x6,x10,x;
long
int
m;
printf("please
input
this
month's
profit:\n");
scanf("%ld",&m);
x1=100000*0.1;
x2=x1+100000*0.075;
x4=x2+200000*0.05;
x6=x4+200000*0.03;
x10=x6+400000*0.015;
if(m<=100000)
x=m*0.1;
else
if(m<=200000)
x=x1+(m-100000)*0.075;
else
if(m<=400000)
x=x2+(m-200000)*0.05;
else
if(m<=600000)
x=x4+(m-400000)*0.03;
else
if(m<=1000000)
x=x6+(m-600000)*0.015;
else
x=x10+(m-1000000)*0.01;
printf("x=%ld\n",x);
getchar();
getchar();
}

热心网友 时间:2024-09-28 22:30

long int x1,x2,x4,x6,x10,x;
int i;
long int a[10];
i=1;
while(i<=10)
{
scanf("%d",&a[i]);
改为float int x1,x2,x4,x6,x10,x;
int i;
float a[10];
i=1;
while(i<=10)
{
scanf("%f",&a[i]);
就可以了,调试过,已经通过,运行正常
补充:刚才看了楼下day9981 的回答,首先我同意他说的应该说用long int也没有关系,但是我不同意他所说的问题出现在下标越界一说。不信的话你可以在scanf语句下面紧跟着加一句printf("%d",a[i]);让程序把你刚刚输入存入数组的每一个元素都输出来看看?你会发现输出的每个数都不是你输入的数。这应该不是越界造成的吧。
至于为什么long int从理论上讲是可以的,但是这段程序中不行,要改成float才行,我水平有限解释不来了,请高手作答!

第二次补充:
刚才又进行了调试,发现原来是这么低级的一个错误,就是scanf语句中的格式符应该改为%ld而不是%d,还有下标越界也是要改的
最后给一段修改好的吧:
void main()
{
long int x1,x2,x4,x6,x10,x;
int i;
long int a[10];
i=0; (原来是i=0)
while(i<=9) (原来是i<=10)
{
scanf("%ld",&a[i]);(原来是%d)
i++;
}
x1=100000*0.1;
x2=x1+100000*0.075;
x4=x2+200000*0.05;
x6=x4+200000*0.03;
x10=x6+400000*0.015;
for(i=0;i<=9;i++)
{
if(a[i]<=100000)
x=a[i]*0.1;
else if(a[i]<=200000)
x=x1+(a[i]-100000)*0.075;
else if(a[i]<=400000)
x=x2+(a[i]-200000)*0.05;
else if(a[i]<=600000)
x=x4+(a[i]-400000)*0.03;
else if(a[i]<=1000000)
x=x6+(a[i]-600000)*0.015;
else
x=x10+(a[i]-1000000)*0.01;
printf("x=%ld\n",x);
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么电脑主机后面会有电? 电脑主机后面有是电什么情况?? 十三香小龙虾的教程有哪些? 英文的7是怎么拼的? 1~13的英文单词怎么写? ie浏览器总跳转到谷歌浏览器怎么办? 小名大全女孩虎宝宝820个_虎年宝宝小名洋气女 属虎女孩最吉利的小名属虎女孩小名萌一点的洋气 多多支付限时返18.5元是真的吗 限时返活动介绍 多多支付为什么有优惠?使用时有风险吗? 7.2x10的负七次方m=多少微米 ...开发,签劳动合同时"职位"一栏怎么填?公司说是软件开发工程师... 如何看待支付宝"敬业福"只有80万 上海市区到虹桥机场有没有什么便捷交通? 请问从制造局路到交大新村怎么乘车啊 大伙给个游世博的经验吧? elena的电影人物 玫瑰花怎么养才不会枯萎 玫瑰花的作用 香水玫瑰花的养殖方法 富平哪个村好玩 专科生怎样才能上211 院校? "hence","thus","therefore"的用法及区别有哪些? 惠普电脑bios怎么修改uei模式? ipad型号a1893 你我终将淡去的txt全集下载地址 洛阳龙门石窟在哪里 2021龙门石窟旅游攻略 我的太平车险索赔申请已通过审核,赔款已进入支付环节,但现在保险快到期... 人体呼吸系统的主要器官是( ) A.气管 B.肺 C.支气管 D.呼吸_百度... 肺结构和功能的基本单位是( ) A.肺泡 B.细胞 C.细支气管 D.肺泡 ...单位是( ) A.肺泡 B.肺部毛细血管 C.细支气管 D.肺泡 新君越28t发动机异响 百蕊颗粒宝宝能吃吗 百蕊颗粒孕妇可以吃吗 玄关放什么植物最旺风水好 玄关适合摆放的植物介绍 玄关摆放什么植物旺财 家里门口玄关放什么植物合适 浦东机场到上海七天连锁酒店斜土东路世博店坐哪个机场大巴 上海东鼎宾馆交通路线 为什么坐在沙发上要比坐在硬木头椅子上感 进口羊奶粉有哪些牌子 中国十大羊奶粉品牌 入秋了想喝点羊奶粉补充营养,有推荐的‏品牌吗? 蓝河、佳贝艾特、蓓康僖……宝宝羊奶粉哪个品牌好?看这篇你就懂_百度... 王者荣耀青铜用什么英雄上分快 王者荣耀,新手青铜到白金用什么英雄上分好? 王者荣耀青铜上分选什么英雄好 飞鸽电动车右把上有个按钮,为充电和高速2个档,什么时候用充电,什么时 ... 借呗封号是什么样子 陕西有哪些瑜伽馆 西安市高新区千水莲瑜伽馆千水莲瑜伽简介