学习笔记:
作业:
1.完成学生管理系统
1> 使用菜单完成
2> 有学生的信息录入功能:输入学生个数,并将学生的姓名、分数录入
3> 查看学生信息:输出所有学生姓名以及对应的分数
4> 求出学习最好的学生信息:求最大值
5> 按姓名将所有学生进行升序排序
6> 按成绩将所有学生进行升序排序
#include <stdio.h>
#include <string.h>
#define MAX_STUDENTS 100
void menu();
void input();
void view();
void best();
void sortByName();
void sortByScore();
int main()
{
char names[MAX_STUDENTS][20];
int scores[MAX_STUDENTS];
int numStudents;
int key;
menu();
scanf("%d", &key);
while (key != 0)
{
switch (key)
{
case 1:
printf("请输入学生的个数: ");
scanf("%d", &numStudents);
input(names, scores, numStudents);
break;
case 2:
view(names, scores, numStudents);
break;
case 3:
best(names, scores, numStudents);
break;
case 4:
sortByName(names, scores, numStudents);
break;
case 5:
sortByScore(names, scores, numStudents);
break;
default:
printf("无效的选择,请重新输入。\n");
}
menu();
scanf("%d", &key);
}
return 0;
}
// 菜单
void menu()
{
printf("\t\t======学生管理系统======\n");
printf("\t\t1. 录入学生信息\n");
printf("\t\t2. 查看学生信息\n");
printf("\t\t3. 找出成绩最好的学生\n");
printf("\t\t4. 按姓名升序排序\n");
printf("\t\t5. 按成绩升序排序\n");
PDF("\t\t0. 退出\n");
printf(">>请输入所要执行的操作: ");
}
// 录入学生信息
void input(char names[][20], int scores[], int numStudents)
{
for (int i = 0; i < numStudents; i++)
{
printf("请输入第%d个学生的姓名:", i + 1);
scanf("%s", names[i]);
printf("请输入第%d个学生的分数:", i + 1);
scanf("%d", &scores[i]);
}
}
// 查看学生信息
void view(char names[][20], int scores[], int numStudents)
{
for (int i = 0; i < numStudents; i++)
{
printf("姓名: %s\t分数: %d\n", names[i], scores[i]);
}
}
// 找出成绩最好的学生信息
void best(char names[][20], int scores[], int numStudents)
{
int maxScore = scores[0];
int bestStudentIndex = 0;
for (int i = 1; i < numStudents; i++)
{
if (scores[i] > maxScore)
{
maxScore = scores[i];
bestStudentIndex = i;
}
}
printf("成绩最好的学生: 姓名: %s\t分数: %d\n", names[bestStudentIndex], maxScore);
}
// 按姓名升序排序
void sortByName(char names[][20], int scores[], int numStudents)
{
for (int i = 0; i < numStudents - 1; i++)
{
for (int j = 0; j < numStudents - i - 1; j++)
{
if (strcmp(names[j], names[j + 1]) > 0)
{
char tempName[20];
strcpy(tempName, names[j]);
strcpy(names[j], names[j + 1]);
strcpy(names[j + 1], tempName);
int tempScore = scores[j];
scores[j] = scores[j + 1];
scores[j + 1] = tempScore;
}
}
}
}
// 按成绩升序排序
void sortByScore(char names[][20], int scores[], int numStudents)
{
for (int i = 0; i < numStudents - 1; i++)
{
for (int j = 0; j < numStudents - i - 1; j++)
{
if (scores[j] > scores[j + 1])
{
char tempName[20];
strcpy(tempName, names[j]);
strcpy(names[j], names[j + 1]);
strcpy(names[j + 1], tempName);
int tempScore = scores[j];
scores[j] = scores[j + 1];
scores[j + 1] = tempScore;
}
}
}
}
总结:
注意函数有无参数和有无返回值,注意向函数内传递数组时的使用方法:zch(arr,数组的首地址,数组的尾地址);传递两个数组时候zch(arr1,arr2,数组首地址,数组尾地址);