有c语言设计一个可以录入学生学号,姓名,期末成绩和平时成绩,并且可以计算总分,平均分,最高分,最低分,及格率,还可按学号和姓名查找到某学生的所有信息,还可以按总分将学生成绩信息由高到低排序的,最后统计各个分段的人数并显示的学生成绩管理系统
时间: 2023-08-31 21:38:16 浏览: 120
### 回答1:
以下是一个基本的实现,使用结构体存储学生信息:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 100
struct student {
int id;
char name[100];
float final_grade;
float midterm_grade;
float total_grade;
};
struct student students[MAX_STUDENTS];
int num_students = 0;
void add_student() {
struct student new_student;
printf("Enter student ID: ");
scanf("%d", &new_student.id);
printf("Enter student name: ");
scanf("%s", new_student.name);
printf("Enter final grade: ");
scanf("%f", &new_student.final_grade);
printf("Enter midterm grade: ");
scanf("%f", &new_student.midterm_grade);
new_student.total_grade = new_student.final_grade + new_student.midterm_grade;
students[num_students] = new_student;
num_students++;
}
void print_student(struct student s) {
printf("%d\t%s\t%.2f\t%.2f\t%.2f\n", s.id, s.name, s.final_grade, s.midterm_grade, s.total_grade);
}
void print_all_students() {
printf("ID\tName\tFinal Grade\tMidterm Grade\tTotal Grade\n");
for(int i = 0; i < num_students; i++) {
print_student(students[i]);
}
}
void search_by_id(int id) {
for(int i = 0; i < num_students; i++) {
if(students[i].id == id) {
print_student(students[i]);
return;
}
}
printf("Student with ID %d not found.\n", id);
}
void search_by_name(char name[]) {
for(int i = 0; i < num_students; i++) {
if(strcmp(students[i].name, name) == 0) {
print_student(students[i]);
}
}
}
void sort_by_total_grade() {
for(int i = 0; i < num_students; i++) {
for(int j = i + 1; j < num_students; j++) {
if(students[i].total_grade < students[j].total_grade) {
struct student temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
}
void print_statistics() {
float total_score = 0.0;
float max_score = 0.0;
float min_score = 100.0;
int num_passed = 0;
int num_failed = 0;
int num_a = 0;
int num_b = 0;
int num_c = 0;
int num_d = 0;
int num_f = 0;
for(int i = 0; i < num_students; i++) {
total_score += students[i].total_grade;
if(students[i].total_grade > max_score) {
max_score = students[i].total_grade;
}
if(students[i].total_grade < min_score) {
min_score = students[i].total_grade;
}
if(students[i].total_grade >= 60.0) {
num_passed++;
} else {
num_failed++;
}
if(students[i].total_grade >= 90.0) {
num_a++;
} else if(students[i].total_grade >= 80.0) {
num_b++;
} else if(students[i].total_grade >= 70.0) {
num_c++;
} else if(students[i].total_grade >= 60.0) {
num_d++;
} else {
num_f++;
}
}
printf("Average score: %.2f\n", total_score / num_students);
printf("Highest score: %.2f\n", max_score);
printf("Lowest score: %.2f\n", min_score);
printf("Pass rate: %.2f%%\n", (float)num_passed / num_students * 100);
printf("A: %d\n", num_a);
printf("B: %d\n", num_b);
printf("C: %d\n", num_c);
printf("D: %d\n", num_d);
printf("F: %d\n", num_f);
}
int main() {
int choice = 0;
while(1) {
printf("\n1. Add student\n");
printf("2. Print all students\n");
printf("3. Search by ID\n");
printf("4. Search by name\n");
printf("5. Sort by total grade\n");
printf("6. Print statistics\n");
printf("7. Exit\n");
printf("Enter your choice: ");
scanf("%d", &choice);
printf("\n");
switch(choice) {
case 1:
add_student();
break;
case 2:
print_all_students();
break;
case 3:
printf("Enter student ID to search: ");
int id;
scanf("%d", &id);
search_by_id(id);
break;
case 4:
printf("Enter student name to search: ");
char name[100];
scanf("%s", name);
search_by_name(name);
break;
case 5:
sort_by_total_grade();
break;
case 6:
print_statistics();
break;
case 7:
exit(0);
break;
default:
printf("Invalid choice.\n");
break;
}
}
return 0;
}
```
这个程序使用了一个循环菜单,用户可以选择添加学生、打印所有学生、按ID或姓名搜索学生、按总分排序、打印统计信息和退出程序。
### 回答2:
以下是一个简化的C语言程序设计,实现了学生成绩管理系统的基本功能:
```c
#include <stdio.h>
#include <string.h>
struct Student {
int id;
char name[20];
float finalScore;
float regularScore;
float totalScore;
};
void calculateScore(struct Student *student) {
student->totalScore = student->finalScore + student->regularScore;
}
void sortByTotalScore(struct Student students[], int count) {
for (int i = 0; i < count - 1; i++) {
for (int j = 0; j < count - i - 1; j++) {
if (students[j].totalScore < students[j + 1].totalScore) {
struct Student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
}
void printStudent(struct Student student) {
printf("学号:%d\n", student.id);
printf("姓名:%s\n", student.name);
printf("期末成绩:%f\n", student.finalScore);
printf("平时成绩:%f\n", student.regularScore);
printf("总分:%f\n", student.totalScore);
}
int main() {
int num;
printf("请输入学生人数:");
scanf("%d", &num);
struct Student students[num];
for (int i = 0; i < num; i++) {
printf("请输入学生学号:");
scanf("%d", &students[i].id);
printf("请输入学生姓名:");
scanf("%s", students[i].name);
printf("请输入学生期末成绩:");
scanf("%f", &students[i].finalScore);
printf("请输入学生平时成绩:");
scanf("%f", &students[i].regularScore);
calculateScore(&students[i]);
}
sortByTotalScore(students, num);
printf("学生成绩从高到低排序如下:\n");
for (int i = 0; i < num; i++) {
printStudent(students[i]);
}
float passRate = 0;
int passCount = 0;
int failCount = 0;
for (int i = 0; i < num; i++) {
if (students[i].totalScore >= 60) {
passCount++;
} else {
failCount++;
}
}
passRate = (float)passCount / num * 100;
printf("及格率:%.2f%%\n", passRate);
printf("总人数:%d\n", num);
printf("及格人数:%d\n", passCount);
printf("不及格人数:%d\n", failCount);
return 0;
}
```
这个程序实现了学生成绩管理系统的基本功能。用户输入学生人数后,按照提示输入学生的学号、姓名、期末成绩和平时成绩,系统会自动计算总分,并将学生信息按照总分从高到低排序输出。程序还会统计及格率、总人数、及格人数和不及格人数,并将其显示出来。请注意,这只是一个简化版的例子,没有包含完整的输入验证和错误处理。
### 回答3:
下面是一个用C语言设计的学生成绩管理系统的简单实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 100
typedef struct {
char id[10];
char name[20];
float finalScore;
float regularScore;
float totalScore;
} Student;
void calculateScores(Student students[], int numStudents) {
float sum = 0.0;
float highestScore = students[0].totalScore;
float lowestScore = students[0].totalScore;
int passCount = 0;
for (int i = 0; i < numStudents; i++) {
students[i].totalScore = students[i].finalScore + students[i].regularScore;
sum += students[i].totalScore;
if (students[i].totalScore > highestScore) {
highestScore = students[i].totalScore;
}
if (students[i].totalScore < lowestScore) {
lowestScore = students[i].totalScore;
}
if (students[i].totalScore >= 60.0) {
passCount++;
}
}
float averageScore = sum / numStudents;
float passRate = (float) passCount / numStudents * 100;
printf("平均分:%.2f\n", averageScore);
printf("最高分:%.2f\n", highestScore);
printf("最低分:%.2f\n", lowestScore);
printf("及格率:%.2f%%\n", passRate);
}
void sortScores(Student students[], int numStudents) {
for (int i = 0; i < numStudents; i++) {
for (int j = i + 1; j < numStudents; j++) {
if (students[i].totalScore < students[j].totalScore) {
Student temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
}
void searchStudentById(Student students[], int numStudents, char id[]) {
for (int i = 0; i < numStudents; i++) {
if (strcmp(students[i].id, id) == 0) {
printf("学号:%s\n", students[i].id);
printf("姓名:%s\n", students[i].name);
printf("期末成绩:%.2f\n", students[i].finalScore);
printf("平时成绩:%.2f\n", students[i].regularScore);
printf("总分:%.2f\n", students[i].totalScore);
return;
}
}
printf("未找到该学号的学生!\n");
}
void searchStudentByName(Student students[], int numStudents, char name[]) {
for (int i = 0; i < numStudents; i++) {
if (strcmp(students[i].name, name) == 0) {
printf("学号:%s\n", students[i].id);
printf("姓名:%s\n", students[i].name);
printf("期末成绩:%.2f\n", students[i].finalScore);
printf("平时成绩:%.2f\n", students[i].regularScore);
printf("总分:%.2f\n", students[i].totalScore);
return;
}
}
printf("未找到该姓名的学生!\n");
}
void displayStudents(Student students[], int numStudents) {
for (int i = 0; i < numStudents; i++) {
printf("学号:%s 姓名:%s 总分:%.2f\n", students[i].id, students[i].name, students[i].totalScore);
}
}
int main() {
Student students[MAX_STUDENTS];
int numStudents;
printf("请输入学生人数:");
scanf("%d", &numStudents);
for (int i = 0; i < numStudents; i++) {
printf("请输入学号:");
scanf("%s", students[i].id);
printf("请输入姓名:");
scanf("%s", students[i].name);
printf("请输入期末成绩:");
scanf("%f", &students[i].finalScore);
printf("请输入平时成绩:");
scanf("%f", &students[i].regularScore);
}
calculateScores(students, numStudents);
sortScores(students, numStudents);
printf("按总分由高到低排序后的学生信息如下:\n");
displayStudents(students, numStudents);
char searchId[10];
printf("请输入要查找的学生学号:");
scanf("%s", searchId);
searchStudentById(students, numStudents, searchId);
char searchName[20];
printf("请输入要查找的学生姓名:");
scanf("%s", searchName);
searchStudentByName(students, numStudents, searchName);
return 0;
}
```
这个程序可以让用户输入学生的学号、姓名、期末成绩和平时成绩,并可以根据这些信息计算总分、平均分、最高分、最低分和及格率。还可以通过学号和姓名查找某个学生的所有信息,并可以将学生成绩按总分由高到低排序。最后,它还会统计各个分段的人数并显示。
阅读全文