这个代码每次统计男生人数和女生都是错误的,总是把女生人数加到男生人数上去,求解答?
我想把统计部分的代码改为统计各个班级的总人数,以及各个班级的男生人数和女生人数,可以帮忙改一下吗?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 100
struct Student {
char name[50];
int studentID;
int classID;
int gender;
};
// 全局学生数组和当前学生数量
struct Student students[MAX_STUDENTS];
int numStudents = 0;
// 函数声明
void addStudent();
void searchStudent();
void modifyStudent();
void deleteStudent();
void statistics();
int main() {
int choice;
while (1) {
printf("\n请选择操作:\n");
printf("1. 信息输入\n");
printf("2. 信息查找\n");
printf("3. 信息修改\n");
printf("4. 信息删除\n");
printf("5. 信息统计\n");
printf("0. 退出\n");
printf("请输入选项:");
scanf("%d", &choice);
switch (choice) {
case 0:
// 退出程序
exit(0);
break;
case 1:
// 信息输入
addStudent();
break;
case 2:
// 信息查找
searchStudent();
break;
case 3:
// 信息修改
modifyStudent();
break;
case 4:
// 信息删除
deleteStudent();
break;
case 5:
// 信息统计
statistics();
break;
default:
printf("无效的选项!\n");
break;
}
}
return 0;
}
// 信息输入
void addStudent() {
if (numStudents >= MAX_STUDENTS) {
printf("学生数量已达上限!\n");
return;
}
printf("请输入学生姓名:");
scanf("%s", students[numStudents].name);
printf("请输入学生性别:");
scanf("%d", &students[numStudents].studentID);
printf("请输入学生学号:");
scanf("%d", &students[numStudents].studentID);
printf("请输入学生班级:");
scanf("%d", &students[numStudents].classID);
numStudents++;
printf("学生信息添加成功!\n");
}
// 信息查找
void searchStudent() {
int choice;
printf("请选择查找方式:\n");
printf("1. 按学号查找\n");
printf("2. 按班级查找\n");
printf("请输入选项:");
scanf("%d", &choice);
if (choice == 1) {
int studentID;
printf("请输入要查找的学号:");
scanf("%d", &studentID);
for (int i = 0; i < numStudents; i++) {
if (students[i].studentID == studentID) {
printf("学生姓名:%s\n", students[i].name);
printf("学生性别:%d\n", students[i].gender);
printf("学生学号:%d\n", students[i].studentID);
printf("学生班级:%d\n", students[i].classID);
return;
}
}
printf("未找到匹配的学生!\n");
}
else if (choice == 2) {
int classID;
printf("请输入要查找的班级:");
scanf("%d", &classID);
for (int i = 0; i < numStudents; i++) {
if (students[i].classID == classID) {
printf("学生姓名:%s\n", students[i].name);
printf("学生性别:%d\n", students[i].gender);
printf("学生学号:%d\n", students[i].studentID);
printf("学生班级:%d\n", students[i].classID);
return;
}
}
printf("未找到匹配的学生!\n");
}
else {
printf("无效的选项!\n");
}
}
// 信息修改
void modifyStudent() {
int choice;
printf("请选择修改方式:\n");
printf("1. 按学号修改\n");
printf("2. 按班级修改\n");
printf("请输入选项:");
scanf("%d", &choice);
if (choice == 1) {
int studentID;
printf("请输入要修改的学号:");
scanf("%d", &studentID);
for (int i = 0; i < numStudents; i++) {
if (students[i].studentID == studentID) {
printf("请输入新的学生姓名:");
scanf("%s", students[i].name);
printf("请输入新的学生性别:");
scanf("%d", &students[i].gender);
printf("请输入新的学生班级:");
scanf("%d", &students[i].classID);
printf("学生信息修改成功!\n");
return;
}
}
printf("未找到匹配的学生!\n");
}
else if (choice == 2) {
int classID;
printf("请输入要修改的班级:");
scanf("%d", &classID);
for (int i = 0; i < numStudents; i++) {
if (students[i].classID == classID) {
printf("请输入新的学生姓名:");
scanf("%s", students[i].name);
printf("请输入新的学生性别:");
scanf("%d", &students[i].gender);
printf("请输入新的学生班级:");
scanf("%d", &students[i].classID);
printf("学生信息修改成功!\n");
return;
}
}
printf("未找到匹配的学生!\n");
}
else {
printf("无效的选项!\n");
}
}
// 信息删除
void deleteStudent() {
int choice;
printf("请选择删除方式:\n");
printf("1. 按学号删除\n");
printf("2. 按班级删除\n");
printf("请输入选项:");
scanf("%d", &choice);
if (choice == 1) {
int studentID;
printf("请输入要删除的学号:");
scanf("%d", &studentID);
for (int i = 0; i < numStudents; i++) {
if (students[i].studentID == studentID) {
for (int j = i; j < numStudents - 1; j++) {
students[j] = students[j + 1];
}
numStudents--;
printf("学生信息删除成功!\n");
return;
}
}
printf("未找到匹配的学生!\n");
}
else if (choice == 2) {
int classID;
printf("请输入要删除的班级:");
scanf("%d", &classID);
for (int i = 0; i < numStudents; i++) {
if (students[i].classID == classID) {
for (int j = i; j < numStudents - 1; j++) {
students[j] = students[j + 1];
}
numStudents--;
printf("学生信息删除成功!\n");
return;
}
}
printf("未找到匹配的学生!\n");
}
else {
printf("无效的选项!\n");
}
}
// 信息统计
void statistics() {
int numMales = 0;
int numFemales = 0;
int classCounts[MAX_STUDENTS];
memset(classCounts, 0, sizeof(classCounts));
for (int i = 0; i < numStudents; i++) {
if (students[i].classID < 1 || students[i].classID > MAX_STUDENTS) {
printf("班级信息错误,请重新输入学生信息!\n");
return;
}
if (students[i].classID > 0) {
classCounts[students[i].classID - 1]++;
}
// 统计男女人数
// 假设性别用'0'表示男性,'1'表示女性
if (students[i].gender == 0) {
numMales++;
}
else if (students[i].gender == 1) {
numFemales++;
}
}
// 输出统计结果
printf("班级人数统计:\n");
for (int i = 0; i < MAX_STUDENTS; i++) {
if (classCounts[i] > 0) {
printf("班级 %d 人数:%d\n", i + 1, classCounts[i]);
}
}
printf("男生人数:%d\n", numMales);
printf("女生人数:%d\n", numFemales);
}
【以下回答由 GPT 生成】
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 100
#define MAX_CLASSES 10
#define MAX_NAME_LENGTH 50
struct Student {
char name[MAX_NAME_LENGTH];
int studentID;
int classID;
int gender;
};
// 全局学生数组和当前学生数量
struct Student students[MAX_STUDENTS];
int numStudents = 0;
// 函数声明
void addStudent();
void searchStudent();
void modifyStudent();
void deleteStudent();
void statistics();
int main() {
int choice;
while (1) {
printf("\n请选择操作:\n");
printf("1. 信息输入\n");
printf("2. 信息查找\n");
printf("3. 信息修改\n");
printf("4. 信息删除\n");
printf("5. 信息统计\n");
printf("0. 退出\n");
printf("请输入选项:");
scanf("%d", &choice);
switch (choice) {
case 0:
// 退出程序
exit(0);
break;
case 1:
// 信息输入
addStudent();
break;
case 2:
// 信息查找
searchStudent();
break;
case 3:
// 信息修改
modifyStudent();
break;
case 4:
// 信息删除
deleteStudent();
break;
case 5:
// 信息统计
statistics();
break;
default:
printf("无效选项,请重新输入!\n");
break;
}
}
return 0;
}
void addStudent() {
if (numStudents >= MAX_STUDENTS) {
printf("学生数量已达上限,无法继续添加!\n");
return;
}
struct Student newStudent;
printf("请输入学生姓名:");
scanf("%s", newStudent.name);
printf("请输入学生学号:");
scanf("%d", &newStudent.studentID);
printf("请输入学生班级:");
scanf("%d", &newStudent.classID);
printf("请输入学生性别(0表示男,1表示女):");
scanf("%d", &newStudent.gender);
students[numStudents] = newStudent;
numStudents++;
printf("学生信息添加成功!\n");
}
void searchStudent() {
int studentID;
int found = 0;
printf("请输入要查找的学生学号:");
scanf("%d", &studentID);
for (int i = 0; i < numStudents; i++) {
if (students[i].studentID == studentID) {
printf("学生姓名:%s\n", students[i].name);
printf("学生学号:%d\n", students[i].studentID);
printf("学生班级:%d\n", students[i].classID);
printf("学生性别:%s\n", students[i].gender == 0 ? "男" : "女");
found = 1;
break;
}
}
if (!found) {
printf("未找到该学生!\n");
}
}
void modifyStudent() {
int studentID;
int found = 0;
printf("请输入要修改的学生学号:");
scanf("%d", &studentID);
for (int i = 0; i < numStudents; i++) {
if (students[i].studentID == studentID) {
printf("请输入新的学生姓名:");
scanf("%s", students[i].name);
printf("请输入新的学生学号:");
scanf("%d", &students[i].studentID);
printf("请输入新的学生班级:");
scanf("%d", &students[i].classID);
printf("请输入新的学生性别(0表示男,1表示女):");
scanf("%d", &students[i].gender);
printf("\n学生信息修改成功!\n");
found = 1;
break;
}
}
if (!found) {
printf("未找到该学生!\n");
}
}
void deleteStudent() {
int studentID;
int found = 0;
printf("请输入要删除的学生学号:");
scanf("%d", &studentID);
for (int i = 0; i < numStudents; i++) {
if (students[i].studentID == studentID) {
for (int j = i; j < numStudents - 1; j++) {
students[j] = students[j + 1];
}
numStudents--;
printf("学生信息删除成功!\n");
found = 1;
break;
}
}
if (!found) {
printf("未找到该学生!\n");
}
}
void statistics() {
int classCounts[MAX_CLASSES] = {0};
int maleCounts[MAX_CLASSES] = {0};
int femaleCounts[MAX_CLASSES] = {0};
for (int i = 0; i < numStudents; i++) {
struct Student student = students[i];
int classID = student.classID;
classCounts[classID]++;
if (student.gender == 0) {
maleCounts[classID]++;
} else {
femaleCounts[classID]++;
}
}
for (int i = 1; i < MAX_CLASSES; i++) {
printf("班级%d:\n", i);
printf("总人数:%d\n", classCounts[i]);
printf("男生人数:%d\n", maleCounts[i]);
printf("女生人数:%d\n\n", femaleCounts[i]);
}
}
【相关推荐】
修改如下,改动处见注释,供参考:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 100
#define MAX_ClassID 11 // 修改
struct Student {
char name[50];
int studentID;
int classID;
int gender;
};
// 全局学生数组和当前学生数量
struct Student students[MAX_STUDENTS];
int numStudents = 0;
// 函数声明
void addStudent();
void searchStudent();
void modifyStudent();
void deleteStudent();
void statistics();
int main() {
int choice;
while (1) {
printf("\n请选择操作:\n");
printf("1. 信息输入\n");
printf("2. 信息查找\n");
printf("3. 信息修改\n");
printf("4. 信息删除\n");
printf("5. 信息统计\n");
printf("0. 退出\n");
printf("请输入选项:");
scanf("%d", &choice);
switch (choice) {
case 0:
// 退出程序
exit(0);
break;
case 1:
// 信息输入
addStudent();
break;
case 2:
// 信息查找
searchStudent();
break;
case 3:
// 信息修改
modifyStudent();
break;
case 4:
// 信息删除
deleteStudent();
break;
case 5:
// 信息统计
statistics();
break;
default:
printf("无效的选项!\n");
break;
}
}
return 0;
}
// 信息输入
void addStudent() {
if (numStudents >= MAX_STUDENTS) {
printf("学生数量已达上限!\n");
return;
}
printf("请输入学生姓名:");
scanf("%s", students[numStudents].name);
printf("请输入学生性别(0:男 1:女):"); // 修改
scanf("%d", &students[numStudents].gender); // 修改
//scanf("%d", &students[numStudents].studentID);
printf("请输入学生学号:");
scanf("%d", &students[numStudents].studentID);
printf("请输入学生班级号(1 - 10):"); // 修改
scanf("%d", &students[numStudents].classID);
numStudents++;
printf("学生信息添加成功!\n");
}
// 信息查找
void searchStudent() {
int choice;
printf("请选择查找方式:\n");
printf("1. 按学号查找\n");
printf("2. 按班级查找\n");
printf("请输入选项:");
scanf("%d", &choice);
if (choice == 1) {
int studentID;
printf("请输入要查找的学号:");
scanf("%d", &studentID);
for (int i = 0; i < numStudents; i++) {
if (students[i].studentID == studentID) {
printf("学生姓名:%s\n", students[i].name);
printf("学生性别:%d\n", students[i].gender);
printf("学生学号:%d\n", students[i].studentID);
printf("学生班级:%d\n", students[i].classID);
return;
}
}
printf("未找到匹配的学生!\n");
}
else if (choice == 2) {
int classID;
printf("请输入要查找的班级:");
scanf("%d", &classID);
for (int i = 0; i < numStudents; i++) {
if (students[i].classID == classID) {
printf("学生姓名:%s\n", students[i].name);
printf("学生性别:%d\n", students[i].gender);
printf("学生学号:%d\n", students[i].studentID);
printf("学生班级:%d\n", students[i].classID);
return;
}
}
printf("未找到匹配的学生!\n");
}
else {
printf("无效的选项!\n");
}
}
// 信息修改
void modifyStudent() {
int choice;
printf("请选择修改方式:\n");
printf("1. 按学号修改\n");
printf("2. 按班级修改\n");
printf("请输入选项:");
scanf("%d", &choice);
if (choice == 1) {
int studentID;
printf("请输入要修改的学号:");
scanf("%d", &studentID);
for (int i = 0; i < numStudents; i++) {
if (students[i].studentID == studentID) {
printf("请输入新的学生姓名:");
scanf("%s", students[i].name);
printf("请输入新的学生性别:");
scanf("%d", &students[i].gender);
printf("请输入新的学生班级:");
scanf("%d", &students[i].classID);
printf("学生信息修改成功!\n");
return;
}
}
printf("未找到匹配的学生!\n");
}
else if (choice == 2) {
int classID;
printf("请输入要修改的班级:");
scanf("%d", &classID);
for (int i = 0; i < numStudents; i++) {
if (students[i].classID == classID) {
printf("请输入新的学生姓名:");
scanf("%s", students[i].name);
printf("请输入新的学生性别:");
scanf("%d", &students[i].gender);
printf("请输入新的学生班级:");
scanf("%d", &students[i].classID);
printf("学生信息修改成功!\n");
return;
}
}
printf("未找到匹配的学生!\n");
}
else {
printf("无效的选项!\n");
}
}
// 信息删除
void deleteStudent() {
int choice;
printf("请选择删除方式:\n");
printf("1. 按学号删除\n");
printf("2. 按班级删除\n");
printf("请输入选项:");
scanf("%d", &choice);
if (choice == 1) {
int studentID;
printf("请输入要删除的学号:");
scanf("%d", &studentID);
for (int i = 0; i < numStudents; i++) {
if (students[i].studentID == studentID) {
for (int j = i; j < numStudents - 1; j++) {
students[j] = students[j + 1];
}
numStudents--;
printf("学生信息删除成功!\n");
return;
}
}
printf("未找到匹配的学生!\n");
}
else if (choice == 2) {
int classID;
printf("请输入要删除的班级:");
scanf("%d", &classID);
for (int i = 0; i < numStudents; i++) {
if (students[i].classID == classID) {
for (int j = i; j < numStudents - 1; j++) {
students[j] = students[j + 1];
}
numStudents--;
printf("学生信息删除成功!\n");
return;
}
}
printf("未找到匹配的学生!\n");
}
else {
printf("无效的选项!\n");
}
}
// 信息统计
void statistics() {
int numMales[MAX_ClassID] = { 0 }; //int numMales = 0; 修改
int numFemales[MAX_ClassID] = { 0 }; //int numFemales = 0;修改
int classCounts[MAX_ClassID] = { 0 }; //int classCounts[MAX_STUDENTS]; 修改
//memset(classCounts, 0, sizeof(classCounts)); 修改
for (int i = 0; i < numStudents; i++) {
//if (students[i].classID < 1 || students[i].classID > MAX_STUDENTS) { 修改
// printf("班级信息错误,请重新输入学生信息!\n"); 修改
// return; 修改
//}
//if (students[i].classID > 0) { 修改
classCounts[students[i].classID]++; // 修改
//} 修改
// 统计男女人数
// 假设性别用'0'表示男性,'1'表示女性
if (students[i].gender == 0)
numMales[students[i].classID]++;
else if (students[i].gender == 1)
numFemales[students[i].classID]++;
}
// 输出统计结果
printf("班级人数统计:\n");
for (int i = 1; i < MAX_ClassID; i++) { //for (int i = 0; i < MAX_STUDENTS; i++) 修改
if (classCounts[i])
printf("班级 %d 总人数:%d ,男生:%d ,女生:%d\n", i, classCounts[i], numMales[i], numFemales[i]);
}
//printf("男生人数:%d\n", numMales); 修改
//printf("女生人数:%d\n", numFemales);修改
}