C语言中结构体指针运用(包含结构体的数组长度求解)

#include <stdio.h>

struct stu{
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在小组
    float score;  //成绩
}stus[] = {
    {"Zhou ping", 5, 18, 'C', 145.0},
    {"Zhang ping", 4, 19, 'A', 130.5},
    {"Liu fang", 1, 18, 'A', 148.5},
    {"Cheng ling", 2, 17, 'F', 139.0},
    {"Wang ming", 3, 17, 'B', 144.5}
}, *ps;

int main(){
    //求数组长度
    int len = sizeof(stus) / sizeof(struct stu);
    printf("Name\t\tNum\tAge\tGroup\tScore\t\n");
    for(ps=stus; ps<stus+len; ps++){
        printf("%s\t%d\t%d\t%c\t%.1f\n", ps->name, ps->num, ps->age, ps->group, ps->score);
    }

    return 0;
}

规范结构体中的数组长度:数组占内存总空间除以单个元素占内存空间大小,即等于元素个数

int len = sizeof(stus) / sizeof(struct stu);

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,请看下面的代码实现: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> // 定义学生信息结构体 struct student { char name[20]; // 学生姓名 char id[10]; // 学生学号 float score[3]; // 学生三科成绩 float total_score; // 学生总分 float avg_score; // 学生平均分 }; // 比较函数,用于快速排序 int cmp(const void *a, const void *b) { struct student *s1 = (struct student *)a; struct student *s2 = (struct student *)b; return (int)(s2->total_score - s1->total_score); } int main() { int i, j; struct student stu[30]; // 定义结构体类型的数组,存储学生信息 // 输入学生信息 for (i = 0; i < 30; i++) { printf("请输入第%d个学生的姓名:", i + 1); scanf("%s", stu[i].name); printf("请输入第%d个学生的学号:", i + 1); scanf("%s", stu[i].id); printf("请输入第%d个学生的三科成绩:", i + 1); scanf("%f%f%f", &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]); // 计算学生的总分和平均分 stu[i].total_score = stu[i].score[0] + stu[i].score[1] + stu[i].score[2]; stu[i].avg_score = stu[i].total_score / 3.0; } // 按照学生的总分从高到低排序 qsort(stu, 30, sizeof(struct student), cmp); // 输出学生信息 printf("按总分排序如下:\n"); printf("姓名\t学号\t成绩1\t成绩2\t成绩3\t总分\t平均分\n"); for (i = 0; i < 30; i++) { printf("%s\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n", stu[i].name, stu[i].id, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].total_score, stu[i].avg_score); } return 0; } ``` 这段代码,我们首先定义了一个名为 `student` 的结构体类型,包含了学生的姓名、学号、三科成绩以及总分和平均分等属性。然后,我们定义了一个长度为 30 的 `student` 类型的数组,用于存储 30 个学生的信息。 接下来,我们利用循环语句逐个输入每个学生的信息,并且计算每个学生的总分和平均分。最后,我们利用 `qsort` 函数对学生信息数组按照总分从高到低进行排序,并且输出每个学生的姓名、学号、三科成绩以及总分和平均分等信息。 需要注意的是,在 `qsort` 函数,我们使用了一个自定义的比较函数 `cmp`,用于比较两个学生的总分大小。该函数,我们首先将输入的两个参数强制转换为 `student` 类型的指针,然后比较它们的总分大小即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值