【C】C语言复习_第九天_结构体和共用体

学习内容:

9、结构体和共用体


学习时间:

2020年12月07日17:30-18:30

学习产出:

/*
结构体和共用体
	结构体类型和结构体变量
		结构体类型定义
			struct 结构体类型名称
			{
				数据类型 成员名1;
				数据类型 成员名2;
				.....
			}
		结构体变量的定义
			先定义结构体类型,再定义结构体变量
				struct 结构体类型名 结构体变量名
			在定义结构体类型的同时定义结构体变量
				struct 结构体类型名称
				{
					数据类型 成员名1;
					数据类型 成员名2;
					....
				}
			直接定义结构体变量
				struct
				{
					数据类型 成员名1;
					数据类型 成员名2;
					....
				}结构变量名列表;
		结构体变量的内存分配
			结构体变量占据的内存大小是按照字节对齐的机制来分配的
			对齐满足两个原则
				结构体的每个成员变量相对于结构体首地址的偏移量,是该成员变量的基本数据类型(不包括结构体、数组等)大小的整数倍,如果不够,编译器会在成员之间加上填充字节
				结构体变量的总大小为结构体最宽基本类型成员大小的整数倍,如果不够,编译器会在最末一个成员之后加上填充字节
		结构体变量的初始化
			在定义结构体类型和结构体变量的同时,对结构体变量初始化
			定义好结构体类型后,对结构体变量初始化
		结构体变量的引用
			结构体变量名.成员名;
	结构体数组
		结构体数组的定义
			先定义结构体类型,后定义结构体数组
			在定义结构体类型的同时定义结构体数组
			直接定义结构体数组
		结构体数组的初始化
			先定义结构体数组类型,然后初始化结构体数组
			在定义结构体数组的同时,对结构体数组初始化
		结构体数组的引用
			数据元素名称.成员名;
	结构体指针变量
		结构体指针变量概述
		结构体数组指针
	结构体类型数据在函数间的传递
		结构体变量作为函数参数
		结构体数组作为函数参数
		结构体指针作为函数参数
	union共用体
		共用体数据类型的定义
			union 共用体类型名称
			{
				数据类型 成员名1;
				数据类型 成员名2;
				....
			}
		共用体变量的定义
			先定义共用体类型,再定义共同体变量
			再定义共用体类型的同时定义共用体变量
			直接定义共用体类型变量
		共用体变量的初始化和引用
			union 共用体类型名 共用体变量={其中一个成员的类型值}
	typedef-给数据类型取名
		typedef 数据类型 别名;
		为基本类型取别名
		为数组类型取别名
		为结构体取别名
*/
/*
1、如果你在学校超市买了香皂、水笔、毛巾,请定义结构体,赋初值(物品、数量、单价),之后输出。
*/
#include<stdio.h>
struct goods{
	char name[20];
	int number;
	float price;
};
int main()
{
	struct goods a[3]={{"肥皂",2,5.2},{"水笔",6,1.2},{"毛巾",3,20}};
	int i;
	float sum=0;
	printf("六亿超市欢迎你\n");
	printf("物品\t数量\t单价\t金额\n");
	for(i=0;i<=2;i++)
	{
		printf("%s\t%d\t%.2f\t%.2f\n",a[i].name,a[i].number,a[i].price,a[i].number*a[i].price);
		sum+=a[i].number*a[i].price;
	}
	printf("总计\t\t\t%.2f\n",sum); 
	return 0;
}

/*
2、有三个学生,每个学生的数据包括学号、姓名、三门课程的成绩。从键盘输入3个学生的数据,要求印出这三个学生的总平均成绩,以及最高分的学生的数据(包括学号、姓名、总分)。
*/
#include<stdio.h>
struct student{
	char id[20];
	char name[20];
	int score[3];
	float avg;
};
int main()
{
	int i,j;
	float sum,avg=0;
	struct student stu[3];
	for(i=0;i<=2;i++)
	{
		printf("请输入第%d个学生的成绩\n",i+1);
		printf("学号:");
		scanf("%s",stu[i].id);
		printf("姓名:"); 
		scanf("%s",stu[i].name);
		for(j=0;j<=2;j++)
		{
			printf("第%d门成绩",j+1);
			scanf("%d",&stu[i].score[j]);
		}
	}
	printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t平均值\n");
	for(i=0;i<=2;i++)
	{
		sum=0;
		printf("%s\t%s\t",stu[i].id,stu[i].name);
		for(j=0;j<=2;j++)
		{
			printf("%d\t",stu[i].score[j]);
			sum+=stu[i].score[j];
		}
		stu[i].avg=sum/3.0;
		printf("%f\n",stu[i].avg);
	}
	printf("全班平均成绩是%f",(stu[1].avg+stu[2].avg+stu[0].avg)/3);
	return 0;
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值