为啥我编这个程序算出来是负数呢

为啥我编这个程序算出来是负数呢,第1张

原因在scanf("%f,%d",&r,&h);

你在格式字符串"%f%d"里加了个逗号,如果有像这种非空字符,那么在手工输入时也必须照样输。

比如,你想让r=5,h=6就要输入:5,6 。这样才行,而输:5 6是不行的,这样的话,就只给r赋值为5,而没有遇到格式串的逗号,所以没有给h赋值,h就是一个随机的很大的负数结果就出现负数了。

#include<stdioh>

void main()

{

float r,x=314,L,S,S1,V,V1;

int h;

scanf("%f %d",&r,&h);

L=2xr;

S=xrr;

S1=4xrr;

V=xrrr4/3;

V1=Sh;

printf("圆周长=%2f\n圆面积=%2f\n圆球表面积=%2f\n圆球体积=%2f\n圆柱体积=%2f\n",L,S,S1,V,V1);

}

因为s=(a+b+c)/2,是a,b,c的平均值。这个平均值可能比a,b,c大,也可能小于a,b,c。

所以s-a,s-b,s-c可能出现负值。

sqrt的输入参数就可能是一个负数,是一个非法值,它的计算结果就依赖各个平台的异常处理,所以可能输出一个很大的负数了。

请采纳,谢谢

你的主要原因是变量w没有初始化,是内存中的遗留值,导致最后输出的结果中全部学生的平均值为2000多的一个负数。

修改后源码软下:

#include <stdioh>

#include <stdlibh>

#define input scanf

struct student

{

    char num[10];

    char name[10];

    int score[3];

    int total;

    float avr;

}stu[10];

 

main()

{

    int i,j,w,max,maxi,sum;

    float avr;

    printf("Please input 3 students data\n");

    for(i=0;i<3;i++)

    {

        printf("The NO%1d number:",i+1);

        input("%s",&stu[i]num);    

        printf("name:");

        input("%s",&stu[i]name);   

        for(j=0;j<3;j++)

        {

            printf("score%1d:",j+1);

            scanf("%d",&stu[i]score[j]);

        }

    }

    max=0;

    maxi=0;

    w=0;//w赋值为0

    for(i=0;i<3;i++)

    {

        sum=0;

        for(j=0;j<3;j++)

            sum+=stu[i]score[j];

        stu[i]total=sum;

        stu[i]avr=(float)sum/30;

        if(sum>max)

        {

            max=sum;

            maxi=i;

        }

        w+=stu[i]total;

        avr=w/3;

    }

    printf("number   name  score1  score2  score3   total  average\n");

    for(i=0;i<3;i++)

    {

        printf("%6s%7s",stu[i]num,stu[i]name);

        for(j=0;j<3;j++)

            printf("%8d",stu[i]score[j]);

        printf("%8d",stu[i]total);

        printf("%82f\n",stu[i]avr);

    }

    printf("All students' average=%82f\n",avr);

    printf("The best student is %s\nName:%s\nTotal=%d\n",stu[maxi]num,stu[maxi]name,max);

    system("pause");

    return 0;

}

编译运行后的结果如下:

其中源程序和可执行程序均可从附件中下载。

do{

int i=ConsoleReadLine();

if(i<0){

Console。WriteLine("请输入正整数")

}

}while(i<0)//如果i是负数则继续输入

以上就是关于为啥我编这个程序算出来是负数呢全部的内容,包括:为啥我编这个程序算出来是负数呢、帮忙指点一下,程序显示无问题,输出为啥是很大的负值,,感谢、一道C语言题,为什么输出的结果为负数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9681254.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存