11—结构体

写在这里的初衷,一是备忘,二是希望得到高人指点,三是希望能遇到志同道合的朋友。

目录

  • 结构体
    • 1.定义结构体
    • 2.结构体数组
    • 3.使用结构体变量做函数参数
    • 4.结构体变量与指针变量


结构体

1.定义结构体

struct student
{
   int xuehao;
   char name[30];   //字符串
   char xingbie;
   float chengji;
};                  //;不能丢
struct student a={001,"Houge",'M',99};

11—结构体_第1张图片

struct student
{
   int xuehao;
   char name[30];  
   char xingbie;
   float chengji;
}a={001,"Houge",'M',99};

例1
在这里插入图片描述

#include
struct student
{
   int xuehao;
   char name[30];  
   char xingbie;
   char zhuzhi[60];
}a={001,"Houge",'M',"Hua Guo Shan"};
int main()
{
    printf("学号:%d\n姓名:%s\n性别:%c\n住址:%s\n",a.xuehao,a.name,a.xingbie,a.zhuzhi);
	return 0;
}

运行结果:
11—结构体_第2张图片

例2在这里插入图片描述

#include
struct student
{
	int xuehao;
	char name[30];
	float chengji;
}a, b;
int main()
{
	printf("请输入第一个学生的学号、姓名和成绩:\n");
	scanf_s("%d,%s,%f", &a.xuehao, a.name, &a.chengji);
	printf("请输入第二个学生的学号、姓名和成绩:\n");
	scanf_s("%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.结构体数组

struct student
{
   int xuehao;
   char name[30];  
   float chengji;
}xuesheng[3]={{001,"HouBoShi",99},{002,"ShaPaoZi",20},{003,"ShaLeBaJi",90}};

11—结构体_第3张图片
练习在这里插入图片描述

#include
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;
}

运行结果:
11—结构体_第4张图片

3.使用结构体变量做函数参数

例3
在这里插入图片描述

#include
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\n 2门成绩:%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>结构体变量与指针变量相关联
例4
在这里插入图片描述

#include
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",a.xuehao,a.name,a.xingbie);  //a=(*p)
    //可以写成:(*p).xuehao,(*p).name,(*p).xingbie
    //还可以写成:p->xuehao,p->name,p->xingbie
	return 0;
}
struct student *p;
p=&a;
以下三种形式等价:
a.xuehao,a.name,a.xingbie
(*p).xuehao,(*p).name,(*p).xingbie
p->xuehao,p->name,p->xingbie

<2>结构体数组与指针变量相关联
例5
在这里插入图片描述

#include
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;
}

当题干要求用指针:
11—结构体_第5张图片

#include
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)  //xuesheng[i]=(*(p+i))
			{
				linshi = *(p+i); *(p+i)= *(p+j); *(p+j)= linshi; //xuesheng[i]=*(p+i)
			}
	printf("排序后的各学生信息如下:\n");
	for(i=0;i<3;i++)
		printf("%d\t%s\t%f\n", (*(p+i)).xuehao, (*(p+i)).name, (*(p+i)).chengji);  //xuesheng[i]=(*(p+i))
	return 0;
}

以上是自己通过学习整理所得,大家有相关问题,可以留言,一起交流学习!

转载或者引用本文内容请注明来源及原作者

参考
《C语言》4小时不挂科【猴博士爱讲课】——第4~7课

你可能感兴趣的:(C语言学习,c语言,开发语言)