一道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多的一个负数,找不到原因。求高手!
展开
 我来答
百度网友fc027fc
2015-06-07 · TA获得超过1.1万个赞
知道大有可为答主
回答量:3160
采纳率:83%
帮助的人:785万
展开全部

你的主要原因是变量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;
}

编译运行后的结果如下:

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

朋友想念你
2013-11-02 · TA获得超过1.1万个赞
知道大有可为答主
回答量:1916
采纳率:0%
帮助的人:1153万
展开全部
#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财富值。

  • 你的采纳将是我继续努力帮助他人的最强动力!

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式