一道C语言题,为什么输出的结果为负数?
#include<stdio.h>#defineinputscanfstructstudent{charnum[10];charname[10];intscore[3];...
#include<stdio.h>
#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 10 students data\n");
for(i=0;i<10;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;
for(i=0;i<10;i++)
{sum=0;
for(j=0;j<3;j++)
sum+=stu[i].score[j];
stu[i].total=sum;
stu[i].avr=(float)sum/3;
if(sum>max)
{max=sum;
maxi=i;
}
w+=stu[i].total;
avr=w/10;
}
printf("number name score1 score2 score3 total average\n");
for(i=0;i<10;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("%8.2f\n",stu[i].avr);
}
printf("All students' average=%8.2f\n",avr);
printf("The best student is %s\nName:%s\nTotal=%d\n",stu[maxi].num,stu[maxi].name,max);
}
最后输出的结果中全部学生的平均值位2000多的一个负数,找不到原因。求高手! 展开
#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 10 students data\n");
for(i=0;i<10;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;
for(i=0;i<10;i++)
{sum=0;
for(j=0;j<3;j++)
sum+=stu[i].score[j];
stu[i].total=sum;
stu[i].avr=(float)sum/3;
if(sum>max)
{max=sum;
maxi=i;
}
w+=stu[i].total;
avr=w/10;
}
printf("number name score1 score2 score3 total average\n");
for(i=0;i<10;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("%8.2f\n",stu[i].avr);
}
printf("All students' average=%8.2f\n",avr);
printf("The best student is %s\nName:%s\nTotal=%d\n",stu[maxi].num,stu[maxi].name,max);
}
最后输出的结果中全部学生的平均值位2000多的一个负数,找不到原因。求高手! 展开
2个回答
展开全部
你的主要原因是变量w没有初始化,是内存中的遗留值,导致最后输出的结果中全部学生的平均值为2000多的一个负数。
修改后源码软下:
#include <stdio.h>
#include <stdlib.h>
#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/3.0;
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("%8.2f\n",stu[i].avr);
}
printf("All students' average=%8.2f\n",avr);
printf("The best student is %s\nName:%s\nTotal=%d\n",stu[maxi].num,stu[maxi].name,max);
system("pause");
return 0;
}
编译运行后的结果如下:
其中源程序和可执行程序均可从附件中下载。
展开全部
#include<stdio.h>
#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 10 students data\n");
for(i=0;i<10;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;
for(i=0;i<10;i++)
{
sum=0;
for(j=0;j<3;j++)
sum+=stu[i].score[j];
stu[i].total=sum;
stu[i].avr=(float)sum/3;
if(sum>max)
{
max=sum;
maxi=i;
}
w+=stu[i].total;
avr=w/10;
}
printf("number name score1 score2 score3 total average\n");
for(i=0;i<10;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("%8.2f\n",stu[i].avr);
}
printf("All students' average=%8.2f\n",avr);
printf("The best student is %s\nName:%s\nTotal=%d\n",stu[maxi].num,stu[maxi].name,max);
}
请放心使用,有问题的话请追问
满意请及时采纳,谢谢,采纳后你将获得5财富值。
你的采纳将是我继续努力帮助他人的最强动力!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询