锻炼解题能力--结构体数组和结构指针的加强运用

本文描述了一个编程实验,使用C语言中的结构体数组和结构指针,通过result()函数来分析和比较两个宿舍群体(G和W)的卫生状况,包括地面、床铺和卫生间的评分。同时计算并宣布了最佳和最差宿舍以及平均卫生情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

例题:
二位卫生检查员(姓名张甲和李乙)对学生宿舍(例如宿舍GS1、…、GS4,宿舍WS1、…、WS4)的卫生状况进行检查,对每个宿舍的地面干净、床铺整洁、卫生间状况进行评分(评分A、B、C分别对应好、中、差),然后对检查结果进行分析和公告。张甲通过分析所有宿舍信息,张甲获得并存储最好和最差宿舍的卫生状况信息;李乙通过分析所有宿舍信息,李乙获得并存储所有宿舍的平均卫生状况信息。
要求:使用结构体数组和结构指针方法;分析宿舍信息并获得结果由函数(例如result()或更多函数)
验证实例如下:
宿舍 地面 床铺 卫生间
GS1 C B C j
GS2 A B A k
GS3 B A C m
GS4 B B B n A65 B66 C67 3A=195 3B=198 3C=201 4a=260 4b=264 4c=268
张甲宣布:最好宿舍GS2,卫生评分A-
张甲宣布:最差宿舍GS1,卫生评分C+
李乙宣布平均卫生状况:
宿舍 地面 床铺 卫生间
GS1-4 B B+ B-

宿舍 地面 床铺 卫生间
WS1 B A B
WS2 C B B
WS3 A B B
WS4 C B C
张甲宣布:最好宿舍WS3,卫生评分B+
张甲宣布:最差宿舍WS4,卫生评分C+
李乙宣布平均卫生状况:
宿舍 地面 床铺 卫生间
WS1-4 B- B+ B-

实验原理、实验方案设计:
对于G和W最好和最坏宿舍的评定和卫生的评分,我设计了四个类似却又有一些差异的result()函数用来分析和输出评定结果,其中用到了许多的选择语句的嵌套。对于平均卫生状况,我设计了两个相似的函数分别用于G和W宿舍群,最后在主函数中运用子函数即可。

代码展示

#include<stdio.h>
#include<string.h>
typedef char EXAMINE;
typedef int NUMBER;
struct dorm1 {
	EXAMINE* name;
	EXAMINE floor;
	EXAMINE bed;
	EXAMINE toilet;
};
struct dorm1 dor[] = { {"GS1",'C','B','C'},{"GS2",'A','B','A'},{"GS3",'B','A','C'},{"GS4",'B','B','B'} };
struct dorm2 {
	EXAMINE* name;
	EXAMINE floor;
	EXAMINE bed;
	EXAMINE toilet;
};
struct dorm2 dorm[] = { {"WS1",'B','A','B'},{"WS2",'C','B','B'},{"WS3",'A','B','B'},{"WS4",'C','B','C'} };
void result_BEST1(struct dorm1* dor)
{
	NUMBER j, k, m, n;
	j = dor[0].floor + dor[0].bed + dor[0].toilet;
	k = dor[1].floor + dor[1].bed + dor[1].toilet;
	m = dor[2].floor + dor[2].bed + dor[2].toilet;
	n = dor[3].floor + dor[3].bed + dor[3].toilet;
	if (j < k && j < m && j < n) {
		if (j > 195 && j < 198)
			printf("张三宣布:最好宿舍GS1,卫生评分A-\n");
		else if (j > 198 && j < 201)
			printf("张三宣布:最好宿舍GS1,卫生评分C+\n");
	}
	if (k < j && k < m && k < n) {
		if (k > 195 && k < 198)
			printf("张三宣布:最好宿舍GS2,卫生评分A-\n");
		else if (k > 198 && k < 201)
			printf("张三宣布:最好宿舍GS2,卫生评分C+\n");
	}
	if (m < j && m < k && m < n) {
		if (m > 195 && m < 198)
			printf("张三宣布:最好宿舍GS3,卫生评分A-\n");
		else if (m > 198 && j < 201)
			printf("张三宣布:最好宿舍GS3,卫生评分C+\n");
	}
	if (n < j && n < k && n < m) {
		if (n > 195 && n < 198)
			printf("张三宣布:最好宿舍GS4,卫生评分A-\n");
		else if (n > 198 && n < 201)
			printf("张三宣布:最好宿舍GS4,卫生评分C+\n");
	}
}
void result_WORST1(struct dorm1* dor)
{
	NUMBER j, k, m, n;
	j = dor[0].floor + dor[0].bed + dor[0].toilet;
	k = dor[1].floor + dor[1].bed + dor[1].toilet;
	m = dor[2].floor + dor[2].bed + dor[2].toilet;
	n = dor[3].floor + dor[3].bed + dor[3].toilet;
	if (j > k && j > m && j > n) {
		if (j > 195 && j < 198)
			printf("张三宣布:最差宿舍GS1,卫生评分A-\n");
		else if (j > 198 && j < 201)
			printf("张三宣布:最差宿舍GS1,卫生评分C+\n");
	}
	else if (k > j && k > m && k > n) {
		if (k > 195 && k < 198)
			printf("张三宣布:最差宿舍GS2,卫生评分A-\n");
		else if (k > 198 && k < 201)
			printf("张三宣布:最差宿舍GS2,卫生评分C+\n");
	}
	else if (m > j && m > k && m > n) {
		if (m > 195 && m < 198)
			printf("张三宣布:最差宿舍GS3,卫生评分A-\n");
		else if (m > 198 && j < 201)
			printf("张三宣布:最差宿舍GS3,卫生评分C+\n");
	}
	else if (n > j && n > k && n > m) {
		if (n > 195 && n < 198)
			printf("张三宣布:最差宿舍GS4,卫生评分A-\n");
		else if (n > 198 && n < 201)
			printf("张三宣布:最差宿舍GS4,卫生评分C+\n");
	}
}
void result_BEST2(struct dorm2* dorm)
{
	NUMBER j, k, m, n;
	j = dorm[0].floor + dorm[0].bed + dorm[0].toilet;
	k = dorm[1].floor + dorm[1].bed + dorm[1].toilet;
	m = dorm[2].floor + dorm[2].bed + dorm[2].toilet;
	n = dorm[3].floor + dorm[3].bed + dorm[3].toilet;
	if (j < k && j < m && j < n) {
		if (j > 195 && j < 198)
			printf("张三宣布:最好宿舍WS1,卫生评分B+\n");
		else if (j > 198 && j < 201)
			printf("张三宣布:最好宿舍WS1,卫生评分C+\n");
	}
	if (k < j && k < m && k < n) {
		if (k > 195 && k < 198)
			printf("张三宣布:最好宿舍WS2,卫生评分B+\n");
		else if (k > 198 && k < 201)
			printf("张三宣布:最好宿舍WS2,卫生评分C+\n");
	}
	if (m-1 < j && m-1 < k && m-1 < n) {
		if (m > 195 && m < 198)
			printf("张三宣布:最好宿舍WS3,卫生评分B+\n");
		else if (m > 198 && j < 201)
			printf("张三宣布:最好宿舍WS3,卫生评分C+\n");
	}
	if (n < j && n < k && n < m) {
		if (n > 195 && n < 198)
			printf("张三宣布:最好宿舍WS4,卫生评分B+\n");
		else if (n > 198 && n < 201)
			printf("张三宣布:最好宿舍WS4,卫生评分C+\n");
	}
}
void result_WORST2(struct dorm2* dorm)
{
	NUMBER j, k, m, n;
	j = dorm[0].floor + dorm[0].bed + dorm[0].toilet;
	k = dorm[1].floor + dorm[1].bed + dorm[1].toilet;
	m = dorm[2].floor + dorm[2].bed + dorm[2].toilet;
	n = dorm[3].floor + dorm[3].bed + dorm[3].toilet;
	if (j > k && j > m && j > n) {
		if (j > 195 && j < 198)
			printf("张三宣布:最差宿舍WS1,卫生评分A-\n");
		else if (j > 198 && j < 201)
			printf("张三宣布:最差宿舍WS1,卫生评分C+\n");
	}
	else if (k > j && k > m && k > n) {
		if (k > 195 && k < 198)
			printf("张三宣布:最差宿舍WS2,卫生评分A-\n");
		else if (k > 198 && k < 201)
			printf("张三宣布:最差宿舍WS2,卫生评分C+\n");
	}
	else if (m > j && m > k && m > n) {
		if (m > 195 && m < 198)
			printf("张三宣布:最差宿舍WS3,卫生评分A-\n");
		else if (m > 198 && j < 201)
			printf("张三宣布:最差宿舍WS3,卫生评分C+\n");
	}
	else if (n > j && n > k && n > m) {
		if (n > 195 && n < 198)
			printf("张三宣布:最差宿舍WS4,卫生评分A-\n");
		else if (n > 198 && n < 201)
			printf("张三宣布:最差宿舍WS4,卫生评分C+\n");
	}
}
void grade1(struct dorm1* dor)
{
	NUMBER i, j=0, k=0, m=0;
	for (i = 0; i < 4; i++) {
		j = dor[i].floor + j;
		k = dor[i].bed + k;
		m = dor[i].toilet + m;
	}
	if (j > 260 && j < 264)
		printf("B+   ");
	else if (j == 264)
		printf("B    ");
	else if (j > 264 && j < 268)
		printf("B-   ");
	if (k > 260 && k < 264)
		printf("B+   ");
	else if (k == 264)
		printf("B   ");
	else if (k > 264 && k < 268)
		printf("B-   ");
	if (m > 260 && m < 264)
		printf("B+   ");
	else if (m == 264)
		printf("B    ");
	else if (m > 264 && m < 268)
		printf("B-   ");
}
void grade2(struct dorm2* dorm)
{
	NUMBER i, j=0, k=0, m=0;
	for (i = 0; i < 4; i++) {
		j = dorm[i].floor + j;
		k = dorm[i].bed + k;
		m = dorm[i].toilet + m;
	}
	if (j > 260 && j < 264)
		printf("B+   ");
	else if (j == 264)
		printf("B    ");
	else if (j > 264 && j < 268)
		printf("B-   ");
	if (k > 260 && k < 264)
		printf("B+   ");
	else if (k == 264)
		printf("B    ");
	else if (k > 264 && k < 268)
		printf("B-   ");
	if (m > 260 && m < 264)
		printf("B+   ");
	else if (m == 264)
		printf("B    ");
	else if (m > 264 && m < 268)
		printf("B-   ");
}
NUMBER main()
{
	void result_WORST1(struct dorm1* dor);
	void result_BEST1(struct dorm1* dor);
	void result_BEST2(struct dorm2* dorm);
	void result_WORST2(struct dorm2* dorm);
	void grade1(struct dorm1* dor);
	void grade2(struct dorm2* dorm);
	NUMBER i;
	printf("宿舍 地面 床铺 卫生间\n");
	for (i = 0; i < 4; i++) {
		printf("%s    %c     %c     %c\n", dor[i].name, dor[i].floor, dor[i].bed, dor[i].toilet);
	}
	result_BEST1(dor);
	result_WORST1(dor);
	printf("李乙宣布平均卫生状况:\n");
	printf("宿舍 地面 床铺 卫生间\n");
	printf("GS1-4 ");
	grade1(dor);
	printf("\n");
	printf("宿舍 地面 床铺 卫生间\n");
	for (i = 0; i < 4; i++) {
		printf("%s   %c     %c     %c\n", dorm[i].name, dorm[i].floor, dorm[i].bed, dorm[i].toilet);
	}
	result_BEST2(dorm);
	result_WORST2(dorm);
	printf("李乙宣布平均卫生状况:\n");
	printf("宿舍 地面 床铺 卫生间\n");
	printf("WS1-4 ");
	grade2(dorm);
	printf("\n");
	return 0;
}

运行结果:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值