
原因在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语言题,为什么输出的结果为负数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)