facebeside1998 2017-12-01 17:34 采纳率: 100%
浏览 1120
已采纳

c语言中的结构体和数组结合,不知道错在哪儿

#include
struct Student
{
int num;
char name[20];
int banji;
char sex;
int math;
int english;
int chinese;
int sum[2];
}s[2],temp;
main()
{
int i,j,k;

printf("请输入学生的学号,姓名,班级,性别,数学成绩,英语成绩,语文成绩\n");
scanf("%d%s%d%s%d%d%d",&s[0].num,&s[0].name,&s[0].banji,&s[0].sex,&s[0].math,&s[0].english,&s[0].chinese);
scanf("%d%s%d%s%d%d%d",&s[1].num,&s[1].name,&s[1].banji,&s[1].sex,&s[1].math,&s[1].english,&s[1].chinese);
scanf("%d%s%d%s%d%d%d",&s[2].num,&s[2].name,&s[2].banji,&s[2].sex,&s[2].math,&s[2].english,&s[2].chinese);

s[0].sum[0]=s[0].math+s[0].english+s[0].chinese;
s[1].sum[1]=s[1].math+s[1].english+s[1].chinese;
s[2].sum[2]=s[2].math+s[2].english+s[2].chinese;

for(i=0;i<1;i++)
{
    k=i;
    for(j=i+1;j<2;j++)
    if(s[j].sum[j]>s[k].sum[k])
    k=j;
    temp=s[k];
    s[k]=s[i];
    s[i]=temp;

}
for(i=0;i<2;i++)
{

// printf("%d",s[i].sum[i]);
printf("%d%s%d%s%d%d%d%d\n",s[i].num,s[i].name,s[i].banji,s[i].sex,s[i].math,s[i].english,s[i].chinese,s[i].sum);
}
}

  • 写回答

6条回答 默认 最新

  • 码农u号 2017-12-02 02:49
    关注

    scanf里面的数组名已经代表地址了,不用再加取地址符&了。
    sum代表一个学生的成绩总和,为什么要定义成数组?
    如果sum[0]是存放成绩总和,那sum[1]存放什么?
    数组的存放是从下标为0的元素开始的,s[2]和sum[2]明显是错的。
    数组越界了,基本不存在这两个元素。
    s[2]要改为s[3]。
    for(i = 0; i < 1; i++)什么意思?就循环一次。
    你想一下,这一句要与不要有区别吗?
    交换两个结构体居然用二重循环,完全没必要!
    从你的代码可以看出你对数组和循环还是没掌握。
    还需要弄明白什么是数组?什么是数组元素?如何表示数组元素?数组名代表什么?
    数组地址代表什么?数组与指针的关系是什么?什么是数组指针?什么是指针数组?
    不要以为数组很简单,数组还是有必要去深究的。

     #include <stdio.h>
    
    struct Student
    {
        int num;
        char name[20];
        char class[7];
        char sex[3];
        float math;
        float english;
        float chinese;
        float sum;
    }s[3],temp;
    int main()
    {
        int i,j,k;
        printf("请输入学生的学号,姓名,班级,性别,数学成绩,英语成绩,语文成绩\n");
        scanf("%d%s%s%s%f%f%f",&s[0].num,s[0].name,s[0].class,s[0].sex,&s[0].math,&s[0].english,&s[0].chinese);
        scanf("%d%s%s%s%f%f%f",&s[1].num,s[1].name,s[1].class,s[1].sex,&s[1].math,&s[1].english,&s[1].chinese);
        scanf("%d%s%s%s%f%f%f",&s[2].num,s[2].name,s[2].class,s[2].sex,&s[2].math,&s[2].english,&s[2].chinese);
        s[0].sum = s[0].math+s[0].english+s[0].chinese;
        s[1].sum = s[1].math+s[1].english+s[1].chinese;
        s[2].sum = s[2].math+s[2].english+s[2].chinese;
    
        if(s[0].sum > s[1].sum )
        {
            temp = s[0];
            s[0] = s[1];
            s[1] = temp;
        }
        else if(s[0].sum > s[2].sum)
        {
            temp = s[0];
            s[0] = s[2];
            s[2] = temp;
        }
        else if(s[1].sum > s[2].sum)
        {
            temp = s[1];
            s[1] = s[2];
            s[2] = temp;
        }
        for(i = 0;i <= 2;i++)
        {
            printf("%d %s %s %s %.1f %.1f %.1f %.1f\n",s[i].num,s[i].name,s[i].class,s[i].sex,s[i].math,s[i].english,s[i].chinese,s[i].sum);
        }
        return 0;
    }
    
    运行结果:
    请输入学生的学号,姓名,班级,性别,数学成绩,英语成绩,语文成绩
    1 li class1 M 80 70 80
    2 xi class1 M 70 70 70
    3 qi class1 M 90 90 90
    
    2 xi class1 M 70.0 70.0 70.0 210.0
    1 li class1 M 80.0 70.0 80.0 230.0
    3 qi class1 M 90.0 90.0 90.0 270.0
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题