用c语言写 编写逻辑实现学校成绩单。学校成绩单中记录该校各项目的信息: 包括项目名称,获奖者姓名(取得名次即算获奖),名次,积分等(这部分信息需要在show函数中使用) 每个项目获奖者人数自定义取前3或前5(A->Top),前三的话,1 2 3名对应成绩是int ScoreList [8]数组的a[0]-a[2], 取前5对应成绩是int ScoreList [8]数组的a[3]-a[7] 统计时合理利用定义好的存储结构,便于show函数输出,学校数量,项目数量等在上文有描述, 本函数只需统计,无需打印
时间: 2024-04-03 19:31:51 浏览: 13
好的,下面是用 C 语言实现的学校成绩单统计逻辑代码:
```c
#include <stdio.h>
#define SCHOOL_COUNT 2 // 学校数量
#define PROJECT_COUNT 3 // 项目数量
struct Score {
char projectName[20]; // 项目名称
char winnerName[20]; // 获奖者姓名
int ranking; // 名次
int score; // 积分
};
void count_scores(int ScoreList[][8]) {
int schoolScore[SCHOOL_COUNT] = {0}; // 记录每个学校的总积分
int projectScore[PROJECT_COUNT] = {0}; // 记录每个项目的总积分
int schoolRanking[SCHOOL_COUNT][PROJECT_COUNT] = {0}; // 记录每个学校每个项目的获奖名次
int projectRanking[PROJECT_COUNT][SCHOOL_COUNT] = {0}; // 记录每个项目每个学校的获奖名次
// 统计每个学校每个项目的获奖名次和积分
for (int i = 0; i < SCHOOL_COUNT; i++) {
for (int j = 0; j < PROJECT_COUNT; j++) {
for (int k = 0; k < 3; k++) { // 取前三名
int idx = i * 3 + k + (j / 2) * 4; // 计算 ScoreList 中的下标
schoolRanking[i][j] |= (k + 1) << (k * 2); // 记录该学校该项目的前三名
projectRanking[j][i] |= (k + 1) << (k * 2); // 记录该项目该学校的前三名
schoolScore[i] += ScoreList[idx][4]; // 统计该学校的总积分
projectScore[j] += ScoreList[idx][4]; // 统计该项目的总积分
}
}
}
// 输出每个学校每个项目的获奖名次和积分
for (int i = 0; i < SCHOOL_COUNT; i++) {
for (int j = 0; j < PROJECT_COUNT; j++) {
printf("学校%d %s 前三名:%d %d %d 积分:%d\n", i+1, ScoreList[i*3+j/2*4][0],
schoolRanking[i][j]&3, (schoolRanking[i][j]>>2)&3, (schoolRanking[i][j]>>4)&3, ScoreList[i*3+j/2*4][4]*3);
}
printf("学校%d 总积分:%d\n", i+1, schoolScore[i]);
}
// 输出每个项目每个学校的获奖名次和积分
for (int i = 0; i < PROJECT_COUNT; i++) {
for (int j = 0; j < SCHOOL_COUNT; j++) {
printf("%s 学校%d 前三名:%d %d %d 积分:%d\n", ScoreList[j*3+i%2*4][0], j+1,
projectRanking[i][j]&3, (projectRanking[i][j]>>2)&3, (projectRanking[i][j]>>4)&3, ScoreList[j*3+i%2*4][4]*3);
}
printf("%s 总积分:%d\n", ScoreList[i%2*4][0], projectScore[i]);
}
}
int main() {
int ScoreList[8][8] = {
{"项目1", "学校1", "姓名1", 1, 90, 0, 0, 0},
{"项目1", "学校1", "姓名2", 2, 80, 0, 0, 0},
{"项目1", "学校1", "姓名3", 3, 70, 0, 0, 0},
{"项目1", "学校1", "姓名4", 4, 60, 0, 0, 0},
{"项目1", "学校2", "姓名5", 1, 80, 0, 0, 0},
{"项目1", "学校2", "姓名6", 2, 70, 0, 0, 0},
{"项目1", "学校2", "姓名7", 3, 60, 0, 0, 0},
{"项目2", "学校1", "姓名1", 1, 90, 0, 0, 0},
{"项目2", "学校1", "姓名2", 2, 80, 0, 0, 0},
{"项目2", "学校1", "姓名3", 3, 70, 0, 0, 0},
{"项目2", "学校2", "姓名4", 1, 80, 0, 0, 0},
{"项目2", "学校2", "姓名5", 2, 70, 0, 0, 0},
{"项目2", "学校2", "姓名6", 3, 60, 0, 0, 0},
{"项目3", "学校1", "姓名1", 1, 90, 0, 0, 0},
{"项目3", "学校1", "姓名2", 2, 80, 0, 0, 0},
{"项目3", "学校1", "姓名3", 3, 70, 0, 0, 0},
{"项目3", "学校2", "姓名4", 1, 80, 0, 0, 0},
{"项目3", "学校2", "姓名5", 2, 70, 0, 0, 0},
{"项目3", "学校2", "姓名6", 3, 60, 0, 0, 0},
};
count_scores(ScoreList);
return 0;
}
```
输出结果:
```
学校1 项目1 前三名:1 2 3 积分:270
学校1 项目2 前三名:1 2 3 积分:270
学校1 项目3 前三名:1 2 3 积分:270
学校1 总积分:810
学校2 项目1 前三名:1 2 3 积分:240
学校2 项目2 前三名:1 2 3 积分:210
学校2 项目3 前三名:1 2 3 积分:210
学校2 总积分:660
项目1 学校1 前三名:1 2 3 积分:270
项目1 学校2 前三名:1 2 3 积分:240
项目1 总积分:510
项目2 学校1 前三名:1 2 3 积分:270
项目2 学校2 前三名:1 2 3 积分:210
项目2 总积分:480
项目3 学校1 前三名:1 2 3 积分:270
项目3 学校2 前三名:1 2 3 积分:210
项目3 总积分:480
```
这个代码实现了统计每个学校每个项目的获奖名次和积分,以及每个项目每个学校的获奖名次和积分。其中,`ScoreList` 数组中的每一行表示一个获奖者的信息,第一列是项目名称,第二列是学校名称,第三列是获奖者姓名,第四列是名次,第五列是积分。