有5个学生,每个学生的数据项包括学号、姓名、3门课的成绩,初始化数据并输出 要求运用结构体。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
struct Stu
{int ID;
char name[20];
int sub1;
int sub2;
int sub3;
};
int main()
{
    printf("以下是五位同学的学号、姓名以及三科成绩:\n");
    struct Stu One = { 1,"李华",103,80,90};
    struct Stu Two = { 2,"梨花",106,60,65 };
    struct Stu Three = { 3,"立花",146,68,87 };
    struct Stu Four = { 4,"丽华",133,83,96 };
    struct Stu Five = { 5,"李桦",121,110,130 };
    printf("%d %s %d %d %d\n", One.ID, One.name, One.sub1, One.sub2, One.sub3);
    printf("%d %s %d %d %d\n", Two.ID, Two.name, Two.sub1, Two.sub2, Two.sub3);
    printf("%d %s %d %d %d\n", Three.ID, Three.name, Three.sub1, Three.sub2, Three.sub3);
    printf("%d %s %d %d %d\n", Four.ID, Four.name, Four.sub1, Four.sub2, Four.sub3);
    printf("%d %s %d %d %d\n", Five.ID, Five.name, Five.sub1, Five.sub2, Five.sub3);
    return 0;
}

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个比较典型的C语言程序设计题目,需要考虑数据结构设计、文件读写和菜单实现等方面。下面是一个简单的程序框架,供参考: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_STUDENTS 100 #define MAX_COURSES 10 #define MAX_NAME_LEN 20 #define MAX_ID_LEN 10 #define MAX_PASSWD_LEN 10 // 学生结构 typedef struct student { char id[MAX_ID_LEN]; // 学号 char name[MAX_NAME_LEN]; // 姓名 float grades[MAX_COURSES]; // 成绩数组 } student_t; // 成绩统计结构 typedef struct stats { float max_grades[MAX_COURSES]; // 每程的最高成绩 float avg_grades[MAX_COURSES]; // 每程的平均成绩 int count_above_avg[MAX_COURSES]; // 超过平均成绩学生数 } stats_t; // 全局变量 student_t students[MAX_STUDENTS]; // 学生数组 int num_students = 0; // 学生数目 char passwd[MAX_PASSWD_LEN]; // 修改密码 stats_t stats; // 成绩统计信息 // 函数声明 void input_grades(); void display_grades(); void save_grades(); void sort_grades(); void modify_grades(); void show_stats(); int main() { // 初始化成绩统计信息 memset(&stats, 0, sizeof(stats_t)); // 主循环 while (1) { // 显示菜单 printf("请选择系统功能项:\n"); printf("a、成绩录入\nb、成绩显示\nC、成绩保存\nd、成绩排序\ne、成绩修改(要求先输入密码)\nf、成绩统计\n"); printf("g、退出系统\n"); // 读取用户输入 char choice; scanf("%c", &choice); getchar(); // 消耗回车符 // 根据用户选择执行对应的操作 switch (choice) { case 'a': input_grades(); break; case 'b': display_grades(); break; case 'C': save_grades(); break; case 'd': sort_grades(); break; case 'e': modify_grades(); break; case 'f': show_stats(); break; case 'g': printf("Goodbye!\n"); return 0; default: printf("Invalid choice!\n"); break; } } } // 录入成绩 void input_grades() { printf("请输入学生数目:"); scanf("%d", &num_students); // 逐个录入学生信息 for (int i = 0; i < num_students; i++) { printf("请输入第%d个学生学号:", i+1); scanf("%s", students[i].id); printf("请输入第%d个学生姓名:", i+1); scanf("%s", students[i].name); for (int j = 0; j < MAX_COURSES; j++) { printf("请输入第%d个学生的第%d成绩:", i+1, j+1); scanf("%f", &students[i].grades[j]); // 更新成绩统计信息 if (students[i].grades[j] > stats.max_grades[j]) { stats.max_grades[j] = students[i].grades[j]; } stats.avg_grades[j] += students[i].grades[j]; } } // 计算平均成绩 for (int j = 0; j < MAX_COURSES; j++) { stats.avg_grades[j] /= num_students; } } // 显示成绩 void display_grades() { printf("学号\t姓名\t"); for (int j = 0; j < MAX_COURSES; j++) { printf("程%d\t", j+1); } printf("\n"); for (int i = 0; i < num_students; i++) { printf("%s\t%s\t", students[i].id, students[i].name); for (int j = 0; j < MAX_COURSES; j++) { printf("%.2f\t", students[i].grades[j]); } printf("\n"); } } // 保存成绩到文件 void save_grades() { FILE *fp = fopen("grades.dat", "wb"); if (fp == NULL) { printf("Cannot open file!\n"); return; } fwrite(students, sizeof(student_t), num_students, fp); fclose(fp); printf("Save grades to file successfully!\n"); } // 从文件读取成绩 void load_grades() { FILE *fp = fopen("grades.dat", "rb"); if (fp == NULL) { printf("Cannot open file!\n"); return; } num_students = fread(students, sizeof(student_t), MAX_STUDENTS, fp); fclose(fp); printf("Load grades from file successfully!\n"); } // 按成绩排序 void sort_grades() { // TODO: 实现排序算法 printf("Sort grades successfully!\n"); } // 修改成绩 void modify_grades() { printf("请输入修改密码:"); scanf("%s", passwd); if (strcmp(passwd, "123456") != 0) { printf("密码错误,不能修改成绩!\n"); return; } printf("请输入要修改成绩学生学号:"); char id[MAX_ID_LEN]; scanf("%s", id); int found = 0; for (int i = 0; i < num_students; i++) { if (strcmp(students[i].id, id) == 0) { printf("请输入新的成绩:"); scanf("%f", &students[i].grades[0]); // 假设只修改第一程的成绩 found = 1; break; } } if (!found) { printf("找不到该学生成绩!\n"); } } // 显示成绩统计信息 void show_stats() { printf("每成绩最高的学生信息:\n"); for (int j = 0; j < MAX_COURSES; j++) { float max_grade = 0; int max_student_index = -1; for (int i = 0; i < num_students; i++) { if (students[i].grades[j] > max_grade) { max_grade = students[i].grades[j]; max_student_index = i; } } if (max_student_index >= 0) { printf("程%d: %s\t%s\t%.2f\n", j+1, students[max_student_index].id, students[max_student_index].name, max_grade); } } printf("每程平均成绩:"); for (int j = 0; j < MAX_COURSES; j++) { printf("程%d: %.2f\t", j+1, stats.avg_grades[j]); } printf("\n"); printf("超过平均成绩学生数:"); for (int j = 0; j < MAX_COURSES; j++) { int count = 0; for (int i = 0; i < num_students; i++) { if (students[i].grades[j] > stats.avg_grades[j]) { count++; } } stats.count_above_avg[j] = count; printf("程%d: %d\t", j+1, count); } printf("\n"); } ``` 需要注意的一些细节: 1. 学生数目和程数目都是预先定义好的宏,可以根据实际情况进行调整。 2. 录入成绩时需要逐程输入,成绩统计信息也需要在录入时同时更新。 3. 保存成绩到文件时使用二进制文件格式,读取时使用相同的方式进行读取。 4. 成绩排序和成绩修改需要根据具需求进行实现,本例中只提供了框架。 5. 成绩统计信息包括程的最高成绩、平均成绩和超过平均成绩学生数,需要在每次录入或修改成绩时更新。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值