例题:
二位卫生检查员(姓名张甲和李乙)对学生宿舍(例如宿舍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;
}
运行结果: