学生管理系统V1.0 (草版)
- 利用函数
- 一维数组
#include<stdio.h>
//分数录入函数 传递n个同学
int fenshuluru(int xh[] ,int fs[] , int n);
//分数判断
int fspd( int xh[],int fs[],int n);
//分数查询
int cx(int xh[],int fs[],int n , int num , int max);
int i,sum,l;
代码示意:引用头文件,声明函 分数录入(int fenshuluru) 以及分数判断、分数查询函数。
定义全局变量 i 、sum 、l;
//函数入口
void main()
{
int n;
printf("输入你们班学生的人数(不能超过30):\n");
scanf("%d",&n);
shuru (n);
}
int shuru(int n){
if(n>30){
printf("输入的值无效,请重新");
main ();
}
int xh[n];
int fs[n];
fenshuluru (xh , fs , n);
}
代码示意:引入主函数 main()、输入变量n并提示用户不能输入大于30的数,此时将输入的n传递给函数shruu( int n),该函数判断用户输入的学生个数是否符合要求,如果不符合要求则返回至主函数main();
如果符合要求则定义数组 xh[n] 和 fs[n] 长度定义为用户输入的个数n;声明函数分数录入并传递数组 xh[n] 和 fs[n] 以及n。
//分数录入函数 传递n个同学
int fenshuluru(int xh[] ,int fs[] , int n)
{
//学号 分数 数组定义
for(i = 0 ; i < n ; i++)
{
printf("请输入第%d个学生的学号和考试成绩并以空格隔开\n",i+1);
scanf("%d %d",&xh[i],&fs[i]);
sum+=fs[i];
}
printf("课程总分为:%d\n",sum);
printf("课程平均分为:%d\n",sum/n);
fspd (xh , fs , n);
}
代码示意:shuru函数传递的数组以及n值传递到该函数,该函数则定义n的大小进行数组录入,提示用户分别输入第n+1个学生(数组下标0开始),的学号以及成绩分数。依次输入完成时,打印输出该课程的总分以及课程平均分。
打印输出完成后,传递参数给下一个函数分数判断 fspd( xh, fs , n);里面均为用户已输入的数组以及n的值。
//分数判断
int fspd( int xh[],int fs[],int n)
{
int i,j,max,num;
for(i = 0;i < n-1 ; i++)
{
for(j = i+1 ; j < n ; j++)
{
if(fs[j]>fs[i]){
max = fs[j];
fs[j] = fs[i];
fs[i] = max;
}
}
}
for(i = 0;i < n ; i++)printf("分数高到低:%d\n",fs[i]);
for(i = 0;i < n-1 ; i++)
{
for(j = i+1 ; j < n ; j++)
{
if(xh[j]<xh[i]){
num = xh[j];
xh[j] = xh[i];
xh[i] = num;
}
}
}
for(i = 0;i < n ; i++)printf("学号小到大%d,成绩为:%d\n",xh[i],fs[i]);
cx(xh , fs , n , num , max);
}
代码示意:接收到上一函数传递的参数,代入此函数进行遍历,第一个for循环为了找出最高分数,并定义给max这个变量中,然后依次输出分数从高到低,当然这里你可以修改代码将fs[i]修改成max即可输出最高分是多少了。
第二个for循环的作用则是遍历学号,并依次输出学号从小到大的学生并输出他们的成绩;遍历完成后,再将数组、n、num、max依次传递给下一函数cx(xh , fs , n , num , max );
//成绩查询
int cx(int xh[],int fs[],int n , int num , int max)
{
int number,i,xb;
printf("请输入你需要查询的学号:");
scanf("%d",&number);
for( i = 0;i<n;i++ )
{
if(xh[i] == number){
printf("您要查询的学号为:%d",xh[i]);
xb = i;
}
}
printf("分数为:%d\n",fs[xb]);
dj (xh, fs, n , num , max);
}
代码示意:接收到上一函数传递下来的值,然后输出提示符,要求用户输入需要查询的学号,输入完成后,将该学号number带入for循环进行遍历依次将数组学号xh[i]里的数进行核对,==相等则记录该下标使用xb来记录,然后打印输出该下标的值也就是用户需要查找的学号对应的分数答应输出至屏幕。
再将上一函数传递下来的值再次传递给下一函数。
//等级划分
int dj(int xh[],int fs[],int n , int num , int max)
{
int bjsum,jsum,zsum,lsum,gsum;
for(i=0;i<n;i++)
{
switch(fs[i]/10)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:printf("第%d个成绩不及格\n",i+1);
bjsum++;
break;
case 6:printf("第%d个成绩及格\n",i+1);
jsum++;
break;
case 7:printf("第%d个成绩中等\n",i+1);
zsum++;
break;
case 8:printf("第%d个成绩良好\n",i+1);
lsum++;
break;
case 9:
case 10:printf("第%d个成绩优秀\n",i+1);
gsum++;
break;
}
}
printf("不及格人数:%d\n",bjsum);
printf("及格人数:%d\n",jsum);
printf("成绩良好人数:%d\n",lsum);
printf("成绩良好人数:%d\n",bjsum);
printf("成绩优秀人数:%d\n",gsum);
}
代码示意:将上一函数传递的值带入此函数进行遍历,利用for循环遍历出分数的求余数,然后将该余数使用switch循环进行筛选,每当筛选出一个,使用后面++进行记录,最后打印输出该班级里的n个人数的及格到优秀之间的人数。
程序运行结果示意图
源代码下载:
Views: 27