这个问题有多种可能,不一而足。
算法有错误,最终计算结果是负数。输出自然会是负数。
例如:
int a=1;
int b=a-2;
printf("b=%d",b);
//输出结果:b=-1
超过变量类型的最大取值范围,发生溢出。
例如Turbo C里int是16位,取值范围-32768~32767。如果计算过程当中,数值超过32767,由于补码的关系。结果就有可能是负数。这种情况,就需要使用取值范围更大的数据类型。
例程:
#include
void main(){
int a,b,ch;
a=32767;
b=a+1;
printf("a=%d,b=%d",a,b);
ch=getch();
}
//输出结果:a=32767,b=-32768
我的感觉是,在你执行printf
这个过程中,输出%d的时候,其实你的a的值已经出问题了,所以后面也会有错。你可以试试看,把%d放到第二个输出,你就会发现,第一个问题,后两个出问题了。你可以改成这样。
当你在执行第二个printf的时候,你的a的值就是为double
型等于1.550000,然后再开始执行第二个
printf
在你的switch语句最后都加一个default:看一下
switch(d)
{
case 'a': printf("%f\n",p=1.50);break;
case 'b': printf("%f\n",p=1.35);break;
case 'c': printf("%f\n",p=1.18);break;
default:
printf("error d:%c\n", d );
}
switch(u)
{
case 'f': printf("%f\n",p=1);break;
case 'm': printf("%f\n",p=0.95);break;
case 'e': printf("%f\n",p=0.90);break;
default:
printf("error u:%c\n", u );
}
如果出现error这行,说明你的fflush()没有起作用,改正方法是在scanf()函数后,加一个getchar();
如果没有出现,把你的输入信息粘出来,即x d u都是什么。再帮你看
把用float定义的变量全改成double定义,把用%f全改成%lf
溢出了,把数据类型定大一些