注册 登录
编程论坛 C语言论坛

如果说,将代码中while循环中的for循环中参数的s改成c会怎么样为什么

暴君Dentiny 发布于 2019-09-11 11:49, 1982 次点击
程序代码:
//输出学生信息要求从大到小
#include<stdio.h>
#define miun 5
int main()
{
    struct stend
    {
        char name[20];
        int strd;
        float v;
    }vs[miun] = { {"李楠",10001,78.4},{"张敏",10002,98.5},{"刘晓丽",10003,89.3},{"美琪",10004,60.2},{"美雪",10005,99} };
    struct stend sm;
    printf("成绩排行\n");
    int s=0, c=0, f=0,ss;
    while (s < miun)
    {
        ss = s;
        for (c=s+1; c < miun; c++)  //c=s+1改成c=c+1;
        {
            if (vs[s].v < vs[c].v)
                ss = c;
            sm = vs[ss];
            vs[ss] = vs[s];
            vs[s] = sm;
        }
        s++;
    }
    while (f < miun)
    {
        printf("名字:%s\t学号:%d\t成绩:%3.2f\n", vs[f].name, vs[f].strd, vs[f].v);
        f++;
    }
}

只有本站会员才能查看附件,请 登录
3 回复
#2
c小白23332019-09-12 08:55
s改成c后
c无法进行初始值化
运行完第一个for (c=c+1; c < miun; c++)循环后
c>=miun 无法再次进入循环了
接下来进行的不过是s++
直到s>=miun退出while循环
#3
bcbbcclbbc2019-09-12 09:49
也可以改成c++或(++c),不过前提是:要让c跟着s走,可以将s的值赋给c。

[此贴子已经被作者于2019-9-12 09:52编辑过]

#4
沈和2019-09-12 13:04
楼上答主说的很对,我对代码的格式有一些建议。
可以用for 来代替while,这样循环变量就不用提前定义,代码看起来更简练一些。
变量名如果起得能看到它的作用,就更好了。
如果一行代码比较长,你可以换行。

我把代码整理了下,给题主作为参考。
程序代码:

#include <stdio.h>

#define COUNT 5

int main(void)
{
    struct student
    {
        char name[20];
        int student_no;
        float score;
    };

    struct student students[COUNT] = {
        {"李楠", 10001, 78.5},
        {"张敏", 10002, 98.5},
        {"刘晓丽", 10003, 89},
        {"美琪", 10004, 60},
        {"美雪", 10005, 99}
    };

    // 按成绩排序,使用选择排序算法
    for(int i = 0; i < COUNT; ++i)
    {
        int stored = i;
        for(int j = i+1; j < COUNT; ++j)
        {
            if(students[i].score < students[j].score)
                stored = j;
        }

        if (stored != i)
        {
            struct student stu = students[i];
            students[i] = students[stored];
            students[stored] = stu;
        }
    }

    // 按成绩由高到低打印学生信息
    for(int i = 0; i < COUNT; ++i)
    {
        printf("名字:%4s\t学号:%d\t成绩:%f\n",
                students[i].name,
                students[i].student_no,
                students[i].score);
    }

    return 0;
}
1