先看一个例子
请帮老师写一个程序,要求存储本年级100个学生的姓名、学号、语文、数学、英语三门课程的成绩,并根据语文成绩递减排序,按名字输出所有学生的信息。
我们看下面这个程序代码
#include<stdio.h>
#include<stdlib.h>
int main()
{
const int n=100,m=20; //const定义只读变量
char name[n][m];
int id[n],i,j,max;
float chinese[n],math[n],english[n],tem;
for(i=0;i<n;++i)
{
scanf_s("%s%d%f%f%f",name[i],m-1,&id[i],&chinese[i],math[n],english[i]😉;
}
for(i=0;i<n;++i)
{
max=i;
for(j=i+1;j<n;++j)
if(chinese[j]>chinese[max])
max=j;
tmp=chinese[i]=chinese[max];
chinese[max]=tmp;
}
for(i=0;i<n;++i)
printf("%s %d %2f %2f %2f\n",name[i],,id[i],chinese[i],math[i],english[i]);
return 0;
}
运行结果如下

我们可以发现输入的时候语文成绩没有顺序,输出的时候语文成绩的确降序排列,但是语文成绩对应的人并没有进行相应的调整,这是为什么呢?
这个时候我们需要把每个人的各种信息放到一起形成一种新的数据类型。这种情况下我们就可以采用结构。
struct student //自定义数据类型,名称叫“student”
{
char name[20];
int id;
float chinese;
float english;
float math;
}; //此处的“;”(分号)不能省
结构式一个或者多个变量的集合,结构中的变量可能为不同的类型,将这些变量组织在一个名字之下。
由于结构将一组相关的变量看做一个存储单元,而不是各自独立的实体,因此结构有助于组织复杂的数据。
结构及结构变量的定义
结构类型定义的一般格式为
struct 结构类型名
{
类型名1 成员名1;
类型名2 成员名2;
…
类型名n 成员名n;
}
注意:
结构类型名不得与其他变量的名字相同
结构成员名可以与其他变量的名字相同
结构类型定义之后一定要跟一个分号
结构类型是自定义数据类型不是变量
定义好结构类型,定义了结构变量后,就可以引用结构变量了。
结构变量中各成员的引用方式为: 结构变量名.成员名
一般形式: 结构变量名.结构成员名
例如: stu1.name-------表示结构变量stu1的name成员。
这里的“.”是成员运行算符号,为了便于记忆,不妨将“.”读作“的”
结构变量的初始化
与数组类似,在定义结构变量的同时可以给其各个成员赋初值,这称为结构变量的初始化,结构变量初始化的一般形式是:
struct 结构类型 结构变量名={初始化数据};
花括号中的初值赋予结构变量各成员,其数据类型、顺序要与结构类型说明的成员相匹配,数据之间用“,”隔开
例如: struct weather today={32.5,5};
数组不能彼此赋值,但同类型的结构变量可以彼此赋值。
结构变量同其他变量一样也具有存储类型
不同类型的结构变量不允许相互赋值
结构类型名必须包含关键字struct
结构变量的初始化与数组变量的初始化相同
学习完结构,想必你已经对开始的那道例题有了新的理解,让我们重新写一下程序代码
#include<stdio.h>
#include<stdlib.h>
const int n=4,m=20;
typedef struct student
{
char name[m];
int id;
float chinese,english,math;
} ;
int main()
{
student s[n],tmp;
int i,max,j;
for(i=0;i<n;++i)
scanf_s("%s %d %f %f %f",s[i].name
,&s[i].id,&s[i].chinese,&s[i].english,&s[i].math);
for(i=0;i<n;++i)
}
max=i;
for(j=i+1;j<n;++j)
if(s[j].chinese>s[max].chinese)
max=j;
tmp=s[i];
s[i]=s[max];
s[max]=tmp;
{
for(i=0;i<n;++i)
printf("%s %d %2f %2f %2f\n",s[i].name,s[i].id,s[i].chinese,s[i].enhlish,s[i].math);
system("pause");
return 0;
}
重新运行之后,就可以循环输入并且每个人的信息都会绑定在一起了!这就是结构的用法
本文深入探讨了C语言中结构体的使用,包括定义、初始化、成员引用以及如何利用结构体解决具体问题,如学生信息管理。通过实例,读者可以学习到如何创建结构体变量,进行初始化,并实现数据的有序存储。
1083

被折叠的 条评论
为什么被折叠?



