1.定义结构体
例 1:把一个学生的信息(包括学号、姓名、性别、住址等 4 项信息) 放在一个结构体变量中,然后输出这个学生的信息。
c
#include <stdio.h>
struct Student {
int student_id;
char name[30];
char gender;
char address[60];
};
int main() {
struct Student a = {1, "Houge", 'M', "Hua Guo Shan"};
printf("学号: %d\n", a.student_id);
printf("名字: %s\n", a.name);
printf("性别: %c\n", a.gender);
printf("住址: %s\n", a.address);
return 0;
}
运行结果:
例 2:输入两个学生的学号、姓名和成绩,输出成绩较高者的学号、姓名和成绩。若二者相等,则输出两个学生的全部信息。
c
#include <stdio.h>
struct student
{
int xuehao;
char name[30];
float chengji;
} a, b;
int main()
{
printf("请输入第一个学生的学号、姓名和成绩:\n");
scanf("%d,%s,%f", &a.xuehao, a.name, &a.chengji);
printf("请输入第二个学生的学号、姓名和成绩:\n");
scanf("%d,%s,%f", &b.xuehao, b.name, &b.chengji);
printf("成绩较高者的信息如下:\n");
if (a.chengji > b.chengji)
printf("%d\t%s\t%f\n", a.xuehao, a.name, a.chengji);
else if (a.chengji < b.chengji)
printf("%d\t%s\t%f\n", b.xuehao, b.name, b.chengji);
else
{
printf("%d\t%s\t%f\n", a.xuehao, a.name, a.chengji);
printf("%d\t%s\t%f\n", b.xuehao, b.name, b.chengji);
}
return 0;
}
运行结果:
2.结构体数组
例 1:有三名学生的 3 项信息:学号、姓名和成绩。请编程按成绩由高到低输出各学生的信息。
c
#include <stdio.h>
struct student
{
int xuehao;
char name[30];
float chengji;
} xuesheng[3] = {{001, "HouBoShi", 99}, {002, "ShaPaoZi", 20}, {003, "ShaLeBaJi", 90}};
int main()
{
struct student linshi;
int i, j;
for (i = 0; i < 2; i++)
{
for (j = i + 1; j < 3; j++)
{
if (xuesheng[j].chengji > xuesheng[i].chengji)
{
linshi = xuesheng[i];
xuesheng[i] = xuesheng[j];
xuesheng[j] = linshi;
}
}
}
printf("排序后的各学生信息如下:\n");
for (i = 0; i < 3; i++)
{
printf("%d\t%s\t%f\n", xuesheng[i].xuehao, xuesheng[i].name, xuesheng[i].chengji);
}
return 0;
}
运行结果:
3.使用结构体变量与指针变量
例 1:键盘输入五名学生的信息(包括学号、姓名和 2 门课程的成绩),并输出平均分最高的学生的信息。
c
#include <stdio.h>
struct student
{
int xuehao;
char name[30];
float fen1;
float fen2;
} sheng[5];
int main()
{
struct student max(struct student a[]);
struct student xueba;
int i;
for (i = 0; i <= 4; i++)
{
printf("请输入第%d 名学生的学号、姓名和 2 门成绩:\n", i + 1);
scanf("%d,%s,%f,%f", &sheng[i].xuehao, sheng[i].name, &sheng[i].fen1, &sheng[i].fen2);
}
xueba = max(sheng);
printf("平均分最高的学生的信息如下:\n");
printf("学号:%d\n 姓名:%s\n2 门成绩:%f,%f\n", xueba.xuehao, xueba.name, xueba.fen1, xueba.fen2);
return 0;
}
struct student max(struct student a[])
{
float pingjunfen[5];
int i, zuigao;
for (i = 0; i <= 4; i++)
{
pingjunfen[i] = (a[i].fen1 + a[i].fen2) / 2;
}
for (zuigao = 0, i = 1; i <= 4; i++)
{
if (pingjunfen[zuigao] < pingjunfen[i])
{
zuigao = i;
}
}
return (a[zuigao]);
}
运行结果:
4.结构体变量做函数参数
例 1:把一个学生的信息(包括学号、姓名、性别 3 项信息)放在一个结构体变量中,然后输出这个学生的信息。
c
#include <stdio.h>
struct student
{
int xuehao;
char name[30];
char xingbie;
} a = {001, "Houge", 'M'};
int main()
{
struct student *p;
p = &a;
printf("学号:%d\n 姓名:%s\n 性别:%c\n", p->xuehao, p->name, p->xingbie);
return 0;
}
运行结果:
例 2:有三名学生的 3 项信息:学号、姓名和成绩。请编程按成绩由高到低输出各学生的信息。
c
#include <stdio.h>
struct student
{
int xuehao;
char name[30];
float chengji;
} xuesheng[3] = {{001, "HouBoShi", 99}, {002, "ShaPaoZi", 20}, {003, "ShaLeBaJi", 90}};
int main()
{
struct student linshi, *p;
p = &xuesheng[0];
int i, j;
for (i = 0; i < 2; i++)
{
for (j = i + 1; j < 3; j++)
{
if ((*(p + j)).chengji > (*(p + i)).chengji)
{
linshi = *(p + i);
*(p + i) = *(p + j);
*(p + j) = linshi;
}
}
}
printf("排序后的各学生信息如下:\n");
for (i = 0; i < 3; i++)
{
printf("%d\t%s\t%f\n", (*(p + i)).xuehao, (*(p + i)).name, (*(p + i)).chengji);
}
return 0;
}
运行结果:
七天完结,本专栏只是根据所学进行整合,可不能作为学会C语言的依据哦,请大家期待下一个专栏~