为什么在测试过程中使用菜单1.,2,3都是直接关闭程序?求帮忙修改!
#include <stdio.h>
#define N 3 // 学生数量
#define M 3 // 课程数量
// 学生结构体
struct student {
char name[20]; // 姓名
int id; // 学号
int score[M]; // 成绩
float avg_score; // 平均成绩
};
// 计算每个学生的平均成绩
void calc_avg_score(struct student *s) {
int i;
float sum = 0;
for (i = 0; i < M; i++) {
sum += s->score[i];
}
s->avg_score = sum / M;
}
// 计算每门课的平均成绩、最高分、最低分
void calc_course_stat(struct student s[], float course_avg[], int course_max[], int course_min[]) {
int i, j;
for (i = 0; i < M; i++) {
float sum = 0;
int max = 0, min = 100;
for (j = 0; j < N; j++) {
sum += s[j].score[i];
if (s[j].score[i] > max) {
max = s[j].score[i];
}
if (s[j].score[i] < min) {
min = s[j].score[i];
}
}
course_avg[i] = sum / N;
course_max[i] = max;
course_min[i] = min;
}
}
int main() {
int choice;
struct student stu[N];
float course_avg[M];
int course_max[M], course_min[M];
int i, j;
// 输入每个学生的信息
for (i = 0; i < N; i++) {
printf("请输入第%d个学生的姓名:", i + 1);
scanf("%s", stu[i].name);
printf("请输入第%d个学生的学号:", i + 1);
scanf("%d", &stu[i].id);
for (j = 0; j < M; j++) {
printf("请输入第%d个学生的%s成绩:", i + 1, j == 0 ? "语文" : (j == 1 ? "数学" : "英语"));
scanf("%d", &stu[i].score[j]);
}
calc_avg_score(&stu[i]);
}
// 计算每门课的平均成绩、最高分、最低分
calc_course_stat(stu, course_avg, course_max, course_min);
// 显示菜单
printf("\n");
printf("********** 菜单 **********\n");
printf("1. 显示每个学生的姓名、学号及三科成绩\n");
printf("2. 显示每个学生的平均成绩\n");
printf("3. 显示每门课的平均成绩、最高分、最低分\n");
printf("4. 退出\n");
printf("***************************\n");
printf("请输入选项(1-4):");
scanf("%d", &choice);
// 根据用户选择执行相应操作
switch (choice) {
case 1:
// 显示每个学生的姓名、学号及三科成绩
printf("\n");
printf("姓名\t学号\t语文\t数学\t英语\n");
for (i = 0; i < N; i++) {
printf("%s\t%d\t", stu[i].name, stu[i].id);
for (j = 0; j < M; j++) {
printf("%d\t", stu[i].score[j]);
}
printf("\n");
}
break;
case 2:
// 显示每个学生的平均成绩
printf("\n");
printf("姓名\t学号\t平均成绩\n");
for (i = 0; i < N; i++) {
printf("%s\t%d\t%.2f\n", stu[i].name, stu[i].id, stu[i].avg_score);
}
break;
case 3:
// 显示每门课的平均成绩、最高分、最低分
printf("\n");
printf("课程\t平均成绩\t最高分\t最低分\n");
for (i = 0; i < M; i++) {
printf("%s\t%.2f\t%d\t%d\n", i == 0 ? "语文" : (i == 1 ? "数学" : "英语"), course_avg[i], course_max[i], course_min[i]);
}
break;
case 4:
// 退出
return 0;
default:
printf("无效选项!\n");
}
return 0;
}
打印的界面看看
外面整体加个循环 while(true)
不知道你这个问题是否已经解决, 如果还没有解决的话:核心:从数据的第一个元素开始,依次比较,直到找到目标数据或查找失败。
1.从表中的第一个元素开始,依次与关键字比较。
2.若某个元素匹配关键字,则 查找成功。
3.若查找到最后一个元素还未匹配关键字,则 查找失败。
顺序查找对表中元素的排序无要求,这些元素在表中可以任意排序,这使得顺序查找的适应性很高。顺序查找的实现很简单,其示例代码如下:
#include "stdio.h"
void main(){
int a[10],num,i,flag; /*变量定义*/
printf("Please input numbers: ");
for(i=0;i<=9;i++){
scanf("%d",&a[i]); /*接收输入的数组*/
}
printf("Please finding numbers: ");
scanf("%d", &num); /*接收关键字*/
for(i=0;i<=9;i++){
if(a[i]=num){ //查找到所需的元素,跳出循环
flag=1;
break;
}
}
if(i==10){
flag=0;
}
if(flag){
printf("The numbers find!\n");
}
else{
printf("The numbers No find!\n");
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载