m0_69026749
2022-05-15 00:21
采纳率: 0%
浏览 20

为什么最后李四的数据出现两次,王五的数据不出现

typedef struct Student
{
unsigned long int id;
char name[21];
float score;
}STUDENT;
#define N 5
int main(void)
STUDENT st[]={ {2022001,"张三",55.5f},
{2022002,"李四",78.5f},
{2022003,"王五",88.8f}
{2022004,"小明",96.5f},
{2022005,"李华",69.5f}},st1;
for (int i=0;i<5;i++)

for (int j=0;j<5-i;j++)
if(st[j].score<st[j+1].score)
stl=st[j];
st[j]=st[j+1];
st[j+1]=st1;
}
printf("学号:%lu,姓名:%s,成绩:%1f\n”,st[i].id,st[i].name, st[i].score);
return 0;
}

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

1条回答 默认 最新

  • 青椒*^_^*凤爪爪 2022-05-15 09:52
    1. 首先不太清楚你上面的这个程序是怎么运行的哈,大眼看过来好几处语法错误。错误太多就不一一列举了。
    2. 在程序中你用到的一些符号没有区分全教半角,可以在仔细一点。比如最后一个printf中的第二个引号。
    3. 从你后面的逻辑来看你应该采用的是一个冒泡排序的方法,那么问题就是for循环在后面不跟随花括弧“{}”的情况只认为后面遇到的第一个分号“;”为有效的执行体。
    4. 至于你说描述的现象的原因,其实就是因为在排序的算法中加入的输出,此时的结果并非为最终结果,中间涉及到数据的交换,正好在应该输出王五的那个地方数据被交换,输出成了李四(大概意思,不太准确)。
    5. 所以,根据你的大致意思,我帮你修改了一下可以作为参考。
    
    #include <stdio.h>
    
    #define N 5
    
    typedef struct Student
    {
        unsigned long int id;
        char name[21];
        float score;
    } STUDENT;
    
    int main(void)
    {
        STUDENT st[] = {
            {2022001, "张三", 55.5f},
            {2022002, "李四", 78.5f},
            {2022003, "王五", 88.8f},
            {2022004, "小明", 96.5f},
            {2022005, "李华", 69.5f},
        },   st1;
    
        for (int i = 0; i < 5; i++)
        {
            for (int j = 0; j < 5 - 1 - i; j++)
            {
                if (st[j].score < st[j + 1].score)
                {
                    st1 = st[j];
                    st[j] = st[j + 1];
                    st[j + 1] = st1;
                }
            }
        }
        for (i = 0; i < 5; i++)
        {
            printf("学号:%lu,姓名:%s,成绩:%1f\n", st[i].id, st[i].name, st[i].score);
        }
        return 0;
    }
    

    如果解决你的问题,还请采纳!

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题