我爱学习学习学习呀 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日
  • 展开全部

悬赏问题

  • ¥65 Tree 树形控件实现单选功能,可以使用element也可以手写一个,实现全选为全选状态
  • ¥60 寻抓云闪付tn组成网页付款链接
  • ¥20 如何通过sentry收集上传Android ndk的崩溃?
  • ¥30 有关数值生成的稳健性探讨
  • ¥20 关于C/C++图形界面设计问题
  • ¥15 QT+Gstreamer框架开发视频采集,无法将waylandsink视频绑定qt窗口
  • ¥15 vs2010开发 WFP(windows filtering platform)异常
  • ¥30 8*8*25的矩阵和1*8*25的矩阵相乘
  • ¥15 Ubuntu20.04主机有两个网口,如何配置将其中一个网口用来接入外网,另一个网口用来给其他设备上网
  • ¥15 ml307r-dl如何实现录音功能