我爱学习学习学习呀 2021-09-11 20:20 采纳率: 100%
浏览 58
已结题

调试成功,但运行后的结果不符合逻辑不正确。



#include <stdio.h>
#define N 10
typedef struct    
{    
/*学号*/    
      int id;        
/*各科成绩*/    
    float math;    
    float physics;    
    float English;
    float  Chinese;    
    float  PE;    
}student;
student s[]={{1,90,76,82,85,88},
{2,79,96,53,82,47},
{3,66,79,58,92,78},
{4,87,92,83,76,67},
{5,67,95,62,54,57},
{6,60,54,53,87,66},
{7,54,87,50,76,55},
{8,80,80,88,83,87},
{9,87,85,86,84,87},
{10,90,89,96,81,89}};
float math_average(student s[],int n)
{    int i;
    float sum_math=0,average_math=0;
    for(i=0;i<N;i++)                //求10名学生数学成绩的平均值
    sum_math+=s[i].math;
    average_math=sum_math/n;    
return average_math;
}
void fail(student s[],int n)
{    
        int flag=0,i;
    float average;
    for(i=0;i<n;i++)        //找出10名学生中有两门以上成绩不及格的学生
    {
        average=(s[i].English+s[i].math+s[i].Chinese+s[i].PE+s[i].physics)/5;
        if(s[i].Chinese<60)
            flag++;    
    if(s[i].English<60)
            flag++;    
    if(s[i].math<60)
            flag++;    
    if(s[i].physics<60)    
        flag++;    
    if(s[i].PE<60)    
        flag++;    
    if(flag>2)    
        printf("\n学号为:%d\n语文成绩为:%.2f\t数学成绩为:%.2f\t英语成绩为:%.2f\t物理成绩为:%.2f\t体育成绩为:%.2f\t平均成绩为:%.2f\n",s[i].id,s[i].Chinese,s[i].math,s[i].English,s[i].physics,s[i].PE,average);
    }
}
void success(student s[],int n)
{
    int flag=0,i;
    float average;
    for(i=0;i<n;i++)
    {
                average=(s[i].English+s[i].math+s[i].Chinese+s[i].PE+s[i].physics)/5;                   //找出成绩优良的学生(平均成绩在85分以上或全部成绩在80分以上)            
                        if(s[i].English>80)    
            flag++;
            if(s[i].math>80)
                flag++;    
        if(s[i].Chinese>80)    
            flag++;
            if(s[i].PE>=80)    
            flag++;    
        if(s[i].physics>80)    
            flag++;    
    if(flag==5||average>85)    
        printf("\n学号:%d\n语文成绩:%.2f\t英语成绩:%.2f\t数学成绩:%.2f\t体育成绩:%.2f\t物理成绩:%.2f\t平均成绩:%.2f\n",s[i].id,s[i].Chinese,s[i].English,s[i].math,s[i].PE,s[i].physics,average);
    }
}
void main() 
{
/*调用求数学平均值函数*/
    printf("数学的平均成绩为:\n%.2f\n",math_average(s,N));
/*挂科两门以上的人*/    
printf("\n/*************************************/\n");    
printf("两门成绩不合格的学生");
    fail(s,N);
/*输出优良学生*/
    printf("\n/*************************************/\n");    
printf("成绩优良的学生");
    success(s,N);    
getchar();
}

```c

数学的平均成绩为:
76.00

/*************************************/
两门成绩不合格的学生
学号为:3
语文成绩为:92.00        数学成绩为:66.00        英语成绩为:58.00        物理成绩为:79.00        体育成绩为:78.00
        平均成绩为::74.60

学号为:4
语文成绩为:76.00        数学成绩为:87.00        英语成绩为:83.00        物理成绩为:92.00        体育成绩为:67.00
        平均成绩为::81.00

学号为:5
语文成绩为:54.00        数学成绩为:67.00        英语成绩为:62.00        物理成绩为:95.00        体育成绩为:57.00
        平均成绩为::67.00

学号为:6
语文成绩为:87.00        数学成绩为:60.00        英语成绩为:53.00        物理成绩为:54.00        体育成绩为:66.00
        平均成绩为::64.00

学号为:7
语文成绩为:76.00        数学成绩为:54.00        英语成绩为:50.00        物理成绩为:87.00        体育成绩为:55.00
        平均成绩为::64.40

学号为:8
语文成绩为:83.00        数学成绩为:80.00        英语成绩为:88.00        物理成绩为:80.00        体育成绩为:87.00
        平均成绩为::83.60

学号为:9
语文成绩为:84.00        数学成绩为:87.00        英语成绩为:86.00        物理成绩为:85.00        体育成绩为:87.00
        平均成绩为::85.80

学号为:10
语文成绩为:81.00        数学成绩为:90.00        英语成绩为:96.00        物理成绩为:89.00        体育成绩为:89.00
        平均成绩为::89.00

/*************************************/
成绩优良的学生
学号:9
语文成绩:84.00 英语成绩:86.00 数学成绩:87.00 体育成绩:87.00 物理成绩:85.00 平均成绩:85.80

学号:10
语文成绩:81.00 英语成绩:96.00 数学成绩:90.00 体育成绩:89.00 物理成绩:89.00 平均成绩:89.00


  • 写回答

2条回答 默认 最新

  • qzjhjxj 2021-09-12 00:10
    关注

    两门以上不及格,是不包含2门,如果包含2门,则判断改为if(flag >=2)。两个函数修改如下,主要问题是统计完一个同学后,flag没有置零归位,把值带入了下一个人的统计中,供参考:

    void fail(student s[],int n)
    {    
        int flag=0,i;
        float average=0;
        for(i=0;i<n;i++,flag=0,average=0) //找出10名学生中有两门以上成绩不及格的学生
        {
            average=(s[i].English+s[i].math+s[i].Chinese+s[i].PE+s[i].physics)/5;
            if(s[i].Chinese<60)
                flag++;    
            if(s[i].English<60)
                flag++;    
            if(s[i].math<60)
                flag++;    
            if(s[i].physics<60)
                flag++;
            if(s[i].PE<60)
                flag++;
            if(flag > 2) //若包含2门,这句判断则改为:if(flag >= 2)
            printf("\n学号为:%d\n语文成绩为:%.2f\t数学成绩为:%.2f\t英语成绩为:%.2f\t"
                    "物理成绩为:%.2f\t体育成绩为:%.2f\t平均成绩为:%.2f\n",
                   s[i].id,s[i].Chinese,s[i].math,s[i].English,s[i].physics,s[i].PE,average);
        }
    }
    void success(student s[],int n)
    {
        int flag=0,i;
        float average=0;
        for(i=0;i<n;i++,flag=0,average=0)
        {         //找出成绩优良的学生(平均成绩在85分以上或全部成绩在80分以上)
            average=(s[i].English+s[i].math+s[i].Chinese+s[i].PE+s[i].physics)/5;
            if(s[i].English>80)
                    flag++;
            if(s[i].math>80)
                    flag++;
            if(s[i].Chinese>80)
                    flag++;
            if(s[i].PE>=80)
                    flag++;
            if(s[i].physics>80)
                    flag++;
            if(flag==5||average>85)
            printf("\n学号:%d\n语文成绩:%.2f\t英语成绩:%.2f\t数学成绩:%.2f\t"
                   "体育成绩:%.2f\t物理成绩:%.2f\t平均成绩:%.2f\n",
                   s[i].id,s[i].Chinese,s[i].English,s[i].math,s[i].PE,s[i].physics,average);
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月20日
  • 已采纳回答 9月12日
  • 修改了问题 9月11日
  • 修改了问题 9月11日
  • 展开全部

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀