用C语言编写一个简单的学生信息管理程序,能实现对学生信息的简单管理。
要求建立一个4个学生的信息登记表,每个学生的信息包括:学号、姓名和3门课程的成绩(math、c、english)
程序运行时显示一个简单的菜单。例如:a) 信息输入(input)b) 总分统计(count)c) 总分排序(sort)d) 查询(query)
其中:对四个学生的信息进行输入对每个学生的3门课程统计总分对四个学生的总分按降序排列并显示出来查询输入一个学号后,显示出该学生的有关信息。
代码如下,如有帮助,请采纳一下,谢谢。
#include <stdio.h>
struct Student
{
int nmb;
char name[20];
int score[3];
};
//录入数据
void input(struct Student a[])
{
int i;
printf("输入4个学生的学号,姓名,math、C、english三门课的成绩:\n");
for (i = 0;i< 4;i++)
{
scanf("%d %s %d %d %d",&a[i].nmb,a[i].name,&a[i].score[0],&a[i].score[1],&a[i].score[2]);
}
}
//统计总成绩
void Count(struct Student a[])
{
int i,j;
int sum = 0;
printf("总成绩分别为:\n");
for (i = 0;i< 4;i++)
{
sum = 0;
for(j =0;j<3;j++)
sum += a[i].score[j];
printf("%d\t%s\t%d\n",a[i].nmb,a[i].name,sum);
}
}
//按总分从高到低排序
void Sort(struct Student a[])
{
int i,j;
int avg1,avg2;
struct Student tmp;
for (i = 0;i< 9;i++)
{
for (j = 0;j< 9-i;j++)
{
avg1 = a[j].score[0] + a[j].score[1]+a[j].score[2];
avg2 = a[j+1].score[0] + a[j+1].score[1]+a[j+1].score[2];
if(avg1 < avg2)
{
tmp = a[j];
a[j] = a[j+1];
a[j+1] = tmp;
}
}
}
printf("number name math C English average\n");
for (i = 0;i<10;i++)
{
avg1 = a[i].score[0] + a[i].score[1]+a[i].score[2];
printf("%d\t%s\t%d\t%d\t%d\t%.2f\n",a[i].nmb,a[i].name,a[i].score[0],a[i].score[1],a[i].score[2],avg1);
}
}
//query
void Query(struct Student a[])
{
int id;
int i,j;
printf("请输入学号进行查询:");
scanf("%d",&id);
for (i=0;i<4;i++)
{
if(a[i].nmb == id)
{
printf("%d\t%s\t");
for(j =0;j<3;j++)
printf("%d\t",a[i].score[j]);
printf("\n");
break;
}
}
}
int main()
{
struct Student a[4];
input(a); //(1)
Count(a); //(2)
Sort(a); //(3)
Query(a); //(4)
return 0;
}
这个问题已经回答过好几次了。可以看下。参考地址:https://blog.csdn.net/weixin_44908159/article/details/106895012
如有帮助,请采纳。点击我回答右上角【采纳】按钮。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct student
{
char Name[20];
char ID[20];
float Math;
float English;
float C;
}
stu[1000];
void Menu()
{
printf("\t\t======================================================\n");
printf("\t\t|| 学生成绩管理系统 ||\n");
printf("\t\t|| ********************************* ||\n");
printf("\t\t|| * 功能菜单 * ||\n");
printf("\t\t|| ********************************* ||\n");
printf("\t\t|| 1.添加学生成绩 ||\n");//4
printf("\t\t|| 2.输出学生成绩 ||\n");
printf("\t\t|| 3.查询学生成绩 ||\n");
printf("\t\t|| 4.学生数据排序 ||\n");//按平均成绩和计算机成绩
printf("\t\t|| 5.退出学生成绩管理系统 ||\n");
printf("\t\t======================================================\n");
}
void Input()//1.添加学生成绩
{
printf("\t\t请按顺序输入学生姓名,学号,学科成绩,不同项之间用Tab隔开:\n");
printf("\t\t姓名 学号 Math English C\n");
for(int i=0;i<4;i++)
{
printf("\t\t");
scanf("%s%s%f%f%f", stu[i].Name, stu[i].ID,&stu[i].Math, &stu[i].English, &stu[i].C);
}
printf("\t\t提示:成绩存入完毕!\n\n");
printf("\t\t\------请继续--------n\n");
}
void Output()//2.输出全班学生信息
{
printf("\t\t姓名\t学号\t\tMath\t\tEnglish\t\tC\n");
for (int i = 0; i < 4; i++)
{
printf("\t\t%s\t%s\t %.2f\t\t %.2f\t\t %.2f\n\n", stu[i].Name, stu[i].ID, stu[i].Math, stu[i].English, stu[i].C);
}
}
void Find()//3.查询学生成绩
{
int a, i;
float sum, ave;
printf("\t\t======================================================\n");
printf("\t\t|| ※欢迎进入学生信息查询系统※ ||\n");
printf("\t\t|| 1.按学生姓名查找 ||\n");
printf("\t\t|| 2.按学生学号查找 ||\n");
printf("\t\t======================================================\n");
printf("\t\t>>>请选择1--2:");
scanf("%d", &a);
switch (a)
{
case 1://1.按学生的姓名查找
{
char Name[20];
printf("\t\t>>>请输入要查找的学生的姓名:");
scanf("%s", Name);
printf("\t\t>>>以下是%s同学的信息:\n\n",Name);
for ( i = 0; i< 4; i++)
{
if (strcmp(Name, stu[i].Name) == 0)
{
sum = stu[i].Math + stu[i].English + stu[i].C;
ave = (stu[i].Math + stu[i].English + stu[i].C) / 3;
printf("\t\t姓名\t学号\tMath\tEnglish\tC\t平均成绩\t总成绩\n");
printf("\t\t%s\t %s\t %.2f\t\t %.2f\t\t %.2f\t\t%.2f\t\t%.2f\n\n", stu[i].Name, stu[i].ID, stu[i].Math, stu[i].English, stu[i].C, ave, sum);
}
}
}
break;
case 2://2.按学生学号查找
{
char Num[20];
printf("\t\t>>>请输入要查找的学生的学号:");
scanf("%s", Num);
printf("\t\t>>>以下是%s号同学的信息:\n\n",Num);
for ( i = 0; i < 4; i++)
{
if (0 == strcmp(Num, stu[i].ID))
{
sum = stu[i].Math + stu[i].English + stu[i].C;
ave = (stu[i].Math + stu[i].English + stu[i].C) / 3;
printf("\t\t姓名\t学号\tMath\tEhglish\tC\t平均成绩\t总成绩\n");
printf("\t\t%s\t %s\t %.2f\t\t %.2f\t\t %.2f\t\t%.2f\t\t%.2f\n\n", stu[i].Name, stu[i].ID, stu[i].Math, stu[i].English, stu[i].C, ave,sum);
}
}
}
break;
default:
printf("\n\t\t>>>输入有误,请重新输入!\n\n");
}
}
void Order()//4.学生数据排序
{
int a;
float ave,sum;
printf("\t\t======================================================\n");
printf("\t\t|| ※欢迎进入学生成绩排序系统※ ||\n");
printf("\t\t|| 1.按学生总成绩排序 ||\n");
printf("\t\t|| 2.按学生C成绩排序 ||\n");
printf("\t\t|| 3.按学生数学成绩排序 ||\n");
printf("\t\t|| 4.按学生英语成绩排序 ||\n");
printf("\t\t|| 5.按学生学号排序成绩 ||\n");
printf("\t\t======================================================\n");
printf("\t\t>>>请选择1--5:");
scanf("%d", &a);
printf("\t\t>>>排序如下:\n\n");
printf("\t\t姓名\t学号\tMath\tEnglish\tC\t平均成绩\t总成绩\n");
switch (a)
{
case 1://1.按学生总成绩排序 起泡法
{
int m, n;
struct student tmp;
for (m = 0; m < 4; m++)
{
for (n = 0; n < 3-m; n++)
{
if ((stu[n].Math+stu[n].English+stu[n].C) < (stu[n+1].Math+stu[n+1].English+stu[n+1].C))
{
tmp = stu[n+1];
stu[n+1] = stu[n];
stu[n] = tmp;
}
}
}
printf("\t\t姓名\t学号\t\tMath\t\tEnglish\t\tC\n");
for (int i = 0; i < 4; i++)
{
sum = stu[i].Math + stu[i].English + stu[i].C;
ave = (stu[i].Math + stu[i].English + stu[i].C) / 3;
//printf("\t\t%s\t%s\t %.2f\t\t %.2f\t\t %.2f\n\n", stu[i].Name, stu[i].ID, stu[i].Math, stu[i].English, stu[i].C);
printf("\t\t%s\t%s\t %.2f\t\t %.2f\t\t%.2f\t\t%.2f\t\t%.2f\n", stu[i].Name, stu[i].ID, stu[i].Math, stu[i].English, stu[n].C,ave, sum);
}
}break;
case 2://2.按学生C成绩排序
{
int m, n;
struct student tmp;
for (m = 0; m < 4; m++)
{
for (n = 0; n < 3 - m; n++)
{
if (stu[n].C < stu[n+1].C)
{
tmp = stu[n+1];
stu[n+1] = stu[n];
stu[n] = tmp;
}
// printf("\t\t%s\t%s\t %.2f\t\t %.2f\t\t%.2f\t\t%.2f\t\t%.2f\n", stu[n].Name, stu[n].ID, stu[n].Math, stu[n].English, stu[n].C, (stu[n].Math + stu[n].English + stu[n].C) / 3, stu[n].Math + stu[n].English + stu[n].C);
}
}
printf("\t\t姓名\t学号\t\tMath\t\tEnglish\t\tC\n");
for (int i = 0; i < 4; i++)
{
sum = stu[i].Math + stu[i].English + stu[i].C;
ave = (stu[i].Math + stu[i].English + stu[i].C) / 3;
//printf("\t\t%s\t%s\t %.2f\t\t %.2f\t\t %.2f\n\n", stu[i].Name, stu[i].ID, stu[i].Math, stu[i].English, stu[i].C);
printf("\t\t%s\t%s\t %.2f\t\t %.2f\t\t%.2f\t\t%.2f\t\t%.2f\n", stu[i].Name, stu[i].ID, stu[i].Math, stu[i].English, stu[n].C,ave, sum);
}
} break;
case 3://3.按学生Math成绩排序
{
int m, n;
struct student tmp;
for (m = 0; m < 4; m++)
{
for (n = 0; n < 3 - m; n++)
{
if (stu[n ].Math < stu[n+1].Math)
{
tmp = stu[n+1];
stu[n + 1] = stu[n];
stu[n] = tmp;
}
//printf("\t\t%s\t%s\t %.2f\t\t %.2f\t\t%.2f\t\t%.2f\t\t%.2f\n", stu[n].Name, stu[n].ID, stu[n].Math, stu[n].English, stu[n].C, (stu[n].Math + stu[n].English + stu[n].C) / 3, stu[n].Math + stu[n].English + stu[n].C);
}
}
printf("\t\t姓名\t学号\t\tMath\t\tEnglish\t\tC\n");
for (int i = 0; i < 4; i++)
{
sum = stu[i].Math + stu[i].English + stu[i].C;
ave = (stu[i].Math + stu[i].English + stu[i].C) / 3;
//printf("\t\t%s\t%s\t %.2f\t\t %.2f\t\t %.2f\n\n", stu[i].Name, stu[i].ID, stu[i].Math, stu[i].English, stu[i].C);
printf("\t\t%s\t%s\t %.2f\t\t %.2f\t\t%.2f\t\t%.2f\t\t%.2f\n", stu[i].Name, stu[i].ID, stu[i].Math, stu[i].English, stu[n].C,ave, sum);
}
}
break;
case 4://4.按学生English成绩排序
{
int m, n;
struct student tmp;
for (m = 0; m < 4; m++)
{
for (n = 0; n < 3 - m; n++)
{
if (stu[n+1].English > stu[n].English)
{
tmp = stu[n+1];
stu[n+1] = stu[n];
stu[n] = tmp;
}
// printf("\t\t%s\t%s\t %.2f\t\t %.2f\t\t%.2f\t\t%.2f\t\t%.2f\n", stu[n].Name, stu[n].ID, stu[n].Math, stu[n].English, stu[n].C, (stu[n].Math + stu[n].English + stu[n].C) / 3, stu[n].Math + stu[n].English + stu[n].C);
}
}
printf("\t\t姓名\t学号\t\tMath\t\tEnglish\t\tC\n");
for (int i = 0; i < 4; i++)
{
sum = stu[i].Math + stu[i].English + stu[i].C;
ave = (stu[i].Math + stu[i].English + stu[i].C) / 3;
//printf("\t\t%s\t%s\t %.2f\t\t %.2f\t\t %.2f\n\n", stu[i].Name, stu[i].ID, stu[i].Math, stu[i].English, stu[i].C);
printf("\t\t%s\t%s\t %.2f\t\t %.2f\t\t%.2f\t\t%.2f\t\t%.2f\n", stu[i].Name, stu[i].ID, stu[i].Math, stu[i].English, stu[n].C,ave, sum);
}
}
break;
case 5://5.按学生学号排序成绩
{
int m, n;
struct student tmp;
for (m = 0; m < 4; m++)
{
for (n = 0; n < 3 - m; n++)
{
if (stu[n+1].ID > stu[n].ID)
{
tmp = stu[n+1];
stu[n+1] = stu[n];
stu[n] = tmp;
}
// printf("\t\t%s\t%s\t %.2f\t\t %.2f\t\t%.2f\t\t%.2f\t\t%.2f\n", stu[n].Name, stu[n].ID, stu[n].Math, stu[n].English, stu[n].C, (stu[n].Math + stu[n].English + stu[n].C) / 3, stu[n].Math + stu[n].English + stu[n].C);
}
}
printf("\t\t姓名\t学号\t\tMath\t\tEnglish\t\tC\n");
for (int i = 0; i < 4; i++)
{
sum = stu[i].Math + stu[i].English + stu[i].C;
ave = (stu[i].Math + stu[i].English + stu[i].C) / 3;
//printf("\t\t%s\t%s\t %.2f\t\t %.2f\t\t %.2f\n\n", stu[i].Name, stu[i].ID, stu[i].Math, stu[i].English, stu[i].C);
printf("\t\t%s\t%s\t %.2f\t\t %.2f\t\t%.2f\t\t%.2f\t\t%.2f\n", stu[i].Name, stu[i].ID, stu[i].Math, stu[i].English, stu[n].C,ave, sum);
}
}
break;
default:
printf("\n\t\t>>>输入有误,请重新输入!\n\n");
}
}
int main()
{
int selection;
while (true)
{
Menu();
printf("\t\t>>>请选择1--5:");
scanf("%d", &selection);
printf("\n");
switch (selection)
{
case 1: Input(); break; //1.添加学生成绩
case 2: Output(); break; //2.输出全班学生信息
case 3: Find(); break; //3.查询学生成绩
case 4: Order(); break; //4.学生数据排序
case 5:
printf("\n\t\t>>>您已成功退出学生成绩管理系统,感谢使用!\n\n");
exit(0);
break;
default:
printf("\n\t\t>>>输入有误,请重新输入!\n\n");
}
}
return 0;
}
请你搜索一下 你的标题, 就会发现很多解答了。
#include "stdio.h"
#define N 3
int arr[N][6];
void input(){
for(int i=0;i<N;i++){
arr[i][4]=0;
printf("请输入第%d个学生的四门成绩:",i+1);
for(int j=0;j<4;j++){
scanf("%d",&arr[i][j]);
}
}
}
void process(){
for(int i=0;i<N;i++){
arr[i][4]=0;
for(int j=0;j<4;j++){
//计算总分
arr[i][4]+=arr[i][j];
}
arr[i][5]=arr[i][4]/4;
}
}
void output(){
printf("语文\t数学\t英语\t理综\t总分\t平均分\n");
for(int i=0;i<N;i++){
for(int j=0;j<6;j++){
printf("%d\t",arr[i][j]);
}
printf("\n");
}
}
int main() {
input();
process();
output();
}
大致代码如上,仅供参考。