c语言问题,为什么会输出负数

2025-03-09 22:44:40
推荐回答(5个)
回答1:

这个问题有多种可能,不一而足。

  1. 算法有错误,最终计算结果是负数。输出自然会是负数。

    例如:

    int a=1;
    int b=a-2;
    printf("b=%d",b);
    //输出结果:b=-1
  2. 超过变量类型的最大取值范围,发生溢出。

    例如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

回答2:

我的感觉是,在你执行printf
这个过程中,输出%d的时候,其实你的a的值已经出问题了,所以后面也会有错。你可以试试看,把%d放到第二个输出,你就会发现,第一个问题,后两个出问题了。你可以改成这样。
当你在执行第二个printf的时候,你的a的值就是为double
型等于1.550000,然后再开始执行第二个
printf

回答3:

在你的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都是什么。再帮你看

回答4:

把用float定义的变量全改成double定义,把用%f全改成%lf

回答5:

溢出了,把数据类型定大一些