您的位置:首页 > 娱乐 > 明星 > 360网站运营_近期网络舆情热点事件_长沙seo推广_杭州seo

360网站运营_近期网络舆情热点事件_长沙seo推广_杭州seo

2025/3/11 4:02:41 来源:https://blog.csdn.net/2301_79063670/article/details/145969449  浏览:    关键词:360网站运营_近期网络舆情热点事件_长沙seo推广_杭州seo
360网站运营_近期网络舆情热点事件_长沙seo推广_杭州seo

综合案例:学生成绩管理系统

需求:

1.存储最多50名学生的信息(不使用结构体)

2.每个学生包含

  • 学号(字符数组)
  • 姓名(字符数组)
  • 3门课程成绩(一维数组)

3.实现功能菜单

  • 添加学生信息
  • 显示所有学生信息
  • 计算学生平均分
  • 查找最高分科目
  • 退出系统

代码:

#include <stdio.h>
#include <string.h>
// 常量定义
#define MAX_STU 50  // 定义学生数量
#define NAME_LEN 20 // 名字的最大长度
#define ID_LEN 8   // 学号的最大长度
#define COURSE_NUM 3 // 课程数量
// 全局数组实现数据存储
char stu_id[MAX_STU][ID_LEN];      
// 学号二维数组  
char stu_name[MAX_STU][NAME_LEN];  // 姓名二维数组
int scores[MAX_STU][COURSE_NUM];   // 成绩二维数组
int stu_count = 0;                 
// 当前实际学生数
/*** 输入校验成绩* course 课程名称*/ 
int get_valid_score(const char* course) // const修饰的变量,值不能改变
{int score;while(1){printf("请输入%s成绩(0~100):",course);if(scanf("%d",&score) == 1 && score >=0 && score <= 100) // 校验:1. 校验输入的数据的格式正确  2. 成绩范围:0 <= score <= 100{return score;// 成绩ok,就返回给调用着}// 输入有误while(getchar() != '\n'); // 清空输入缓冲区printf("成绩输入有误!\n");}
}
/*** 添加学生信息*/ 
void add_student()
{// 判断:判断数组是否已经存满if(stu_count >= MAX_STU){printf("存储已满!\n");return;// 函数返回,后续代码不再执行}printf("\n--- 添加第%d个学生 ---\n",stu_count + 1);// 输入学号printf("请输入学号:");scanf("%s",stu_id[stu_count]);// 输入姓名printf("请输入姓名:");getchar();scanf("%[^\n]",stu_name[stu_count]); // %[^\n] 匹配除了\n以外的输入// 输入各科成绩scores[stu_count][0] = get_valid_score("语文");scores[stu_count][1] = get_valid_score("数学");scores[stu_count][2] = get_valid_score("英语");stu_count++;
}
/*** 显示所有学生信息*/ 
void show_all()
{if(stu_count == 0){printf("暂无学生信息!\n");return;// 跳出函数,后续代码不执行}// 格式化输出信息printf("\n%-12s%-20s%-12s%-12s%-12s\n","学号","姓名","语文","数学","英语");for(int i = 0; i < stu_count; i++){// 获取学号和姓名printf("%-12s%-20s",stu_id[i],stu_name[i]);for(int j = 0; j < COURSE_NUM; j++){printf("%-12d",scores[i][j]);}printf("\n");}printf("\n");
}
/*** 计算平均分(带流程控制)*/
void calc_average() {if(stu_count == 0) {printf("暂无数据!\n");return;}char target_id[ID_LEN];printf("请输入要查询的学号: ");scanf("%s", target_id);for(int i=0; i<stu_count; i++) {if(strcmp(stu_id[i], target_id) == 0) {// 校验控制台输入学号是否匹配到数组中已存在学号float sum = 0;for(int j=0; j<COURSE_NUM; j++) {sum += scores[i][j];}printf("平均分: %.2f\n", sum/COURSE_NUM);return;}}printf("未找到该学生!\n");
}
/*** 查找最高分科目(二维数组遍历)*/
void find_max() {int max_score = -1;char max_course[20];char max_stu[NAME_LEN];for(int i=0; i<stu_count; i++) {// 遍历学生for(int j=0; j<COURSE_NUM; j++) {// 遍历每个学生的成绩if(scores[i][j] > max_score) {// 求最高成绩max_score = scores[i][j];// 最高成绩对应的姓名strcpy(max_stu, stu_name[i]);switch(j) {case 0: strcpy(max_course, "语文"); break;case 1: strcpy(max_course, "数学"); break;case 2: strcpy(max_course, "英语"); break;}}}}if(max_score != -1) {printf("最高分记录: %s 的 %s 获得 %d 分\n", max_stu, max_course, max_score);} else {printf("暂无数据!\n");}
}
int main(int argc,char *argv[])
{// 定义一个变量,用来接收用户的输入int choice;while(1){// 设计头printf("\n=== 学生成绩管理系统 v1.0 ===\n");printf("1. 添加学生信息\n");printf("2. 显示所有学生信息\n");printf("3. 查看平均分\n");printf("4. 查找最高分\n");printf("5. 退出系统\n");printf("请选择操作:");// 过滤掉非数字int result = scanf("%d",&choice);if(result != 1)  // 该判断的作用,检测是否输入的是整数,输入的数据匹配scanf() == 1,不匹scanf() != 1{// 如果输入的不是数字,就执行这个判断// 清空输入缓冲区while(getchar() != '\n');  printf("输入有误!\n");continue;}// 过滤掉1~5以外的数字// 校验switch(choice){case 1:// 添加学生信息add_student();break;case 2:// 显示所有学生信息show_all();break;case 3:// 查看平均分calc_average();break;case 4:// 查找最高分find_max();break;case 5:// 退出系统(结束这个函数)printf("系统已退出!\n");  return 0;// 跳出函数default:printf("无效的选项!\n");}}return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com