学习日志 (十五)
结构体基本概念
结构体属于用户自定义的数据类型允许用户存储不同的数据类型
结构体定义和使用
语法:struct结构体名(结构体成员列表);
通过结构体创建变量的方式有三种:
1.struct 结构体名 变量名
2.struct 结构体名 变量名={成员1值, 成员2值 ..}
3.定义结构体时顺便创建变量
创建结构体变量时可以省略struct,定义结构体的时候不可以省略结构体变量通过"."访问成员
结构体数组
作用:将自定义的结构体放入数组中便于维护
语法:struct结构体名数组名[元素个数]={{},{},{}};
结构体和指针
作用:通过指针访问结构体成员;
利用操作符>通过结构体指针访问结构体属性。
结构体指针通过﹣>访问结构体成员
做错的题目:成绩排序
输入n个学生的姓名和三科(编程,数学,英语)的成绩,按照三科的总分从高到低排序输出姓名和总分,如果总分相同,姓名按照字典序排序输出。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
structstudent{
charname[101];
intscore1,score2,score3,total;
};
intcompare(constvoid*a,constvoid*b) {
student*studentA=(student*)a;
student*studentB=(student*)b;
if(studentA->total>studentB->total)
return-1;
elseif(studentA->total<studentB->total)
return1;
else{
returnstrcmp(studentA->name,studentB->name);
}
}
intmain() {
intn;
scanf("%d",&n);
student students[n];
for(inti=0;i<n;i++) {
scanf("%s%d%d%d",students[i].name,&students[i].score1,&students[i].score2,&students[i].score3);
students[i].total=students[i].score1+students[i].score2+students[i].score3;
}
qsort(students,n,sizeof(student),compare);
for(inti=0;i<n;i++) {
printf("%s %d\n",students[i].name,students[i].total);
}
return0;
}