录入学生的所有数据(学号,姓名,三门课程成绩),选择性输出 包括(所有学生平均分,根据学号查询学生数据,查看排名,输出80分以上的全部学生数据)四个选项

本文介绍如何使用C语言编程实现学生数据录入,包括学号、姓名及三门课程成绩,并提供了四种功能:计算所有学生平均分、按学号查询学生详细信息、查看成绩排名以及列出所有80分以上的学生数据。通过此系统,可以方便地进行学生成绩管理和分析。
#include<stdio.h>
#include<string.h> 
#define N 5
void input(int num[],char name[][20],double score[][4]); 
void average(double score[][4]);
void search(int n,int num[],char name[][20],double score[][4]);
void sort(int num[],char name[][20],double score[][4]);
void excellent(int num[],char (*name)[20],double (*p)[4]);
 
int main()
{
     int n;///存放需要查找的数 
     int num[N];//存放N个学生的学号信息 
     char name[N][20];//存放N个学生的姓名信息 
     double score[N][4];//存放N个学生的三门课成绩和平均分 
     int choice;
     
     printf("Input each students's information\n");
     input(num,name,score);
     
     /*显示主菜单*/ 
     while(1)
     {
     	printf("===============the Score Processing System============================\n");
     	printf("1,print each student's average\n");
     	printf("2,order the students by student's average decreasingly\n");
     	printf("3,search the student \n");
     	printf("4,print each student who is  higher  average score than 80 ");
     	printf("======================================================================\n");
     	printf("Please choose (1~4):\n");
     	scanf("%d", &choice); 
     	switch(choice)
     	{
	   case 1:
	           average(score);break;
	   case 2:
	           sort(num,name,score);break; 
       case 3:
               printf("请输入您查找的编号:"); 
	           scanf("%d",&n);
		       search(n,num,name,score);break;
	   case 4:
	           printf("以下同学的平均分超出80分:\n"); 
	           excellent(num, name, score);break;	  
	   default:
	           printf("Chioce Error,Please select again(1~4).");break;	  		   	
         }
         
     }
    return 0;
}


void input(int num[],char name[][20],double score[][4])
{
	int i, j;
	for(j = 0;j <= N-1;j++)
	{ 
	      printf("请输入名字:\t");
	      scanf("%s",&name[j]); //给每个编号的人写名字
	      printf("\n");
	      printf("请输入编号:\t"); //编号 
	      scanf("%d",&num[j]); 
               printf("\n");
	      for(i = 0;i < N-2 ;i++)
     	      {	   
    	 	         printf("请输入第%d门成绩:\t",i+1);
        	         scanf("%lf",&score[j][i]);	                  
     	      }
     	      printf("\n");
	}
}


void average(double score[][4])
{
	for(int i = 0; i <= 4; i++)
	{
            double he = 0;
	   for(int j = 0; j <= 2; j++)
	   {
   		he = he + score[i][j];//求和 
   	   }
	   double aver = he/3;//求出平均数 
	   score[i][3] = aver;	 
	   printf("第%d位学生的平均分为%lf\n",i+1,score[i][3]);
	}
}
void sort(int num[],char name[][20],double score[][4])
{
      double t;
      char c[20];
      int n;
      int i,j,k,p;
      for(i=0;i<N-1;i++)
      {
         k=i;
         for(j=i+1;j<N;j++)
            if(score[k][3]<score[j][3])
            k=j; 
            n=num[k];num[k]=num[i];num[i]=n;
            strcpy(c,name[k]);
            strcpy(name[k],name[i]);
            strcpy(name[i],c);
            for(p=0;p<4;p++)
            {
               t=score[k][p];score[k][p]=score[i][p];score[i][p]=t;
            }
      }
          for(i=0;i<N;i++)
          {
              printf("学号:%d\t",num[i]);
              printf("姓名:%s\t",name[i]);
              printf("分数:");
              for(j=0;j<N-1;j++)
                 printf("%lf\t",score[i][j]);
                 printf("\n");
          } 
}

void search(int n,int num[],char name[][20],double score[][4])
{
         int flag = 1;//初始化标志变量,找到flag=0,否则flag=1 
	int top=0, bot=N-1, mid;
	while(flag&&bot>=top)
	{
		mid = (top+bot)/2;
		if(num[mid]==n)
		{
			flag=0;//找到数,退出循环 
		}
		else if(num[mid]>n)
			bot = mid-1;	
		else
		    top = mid+1;
	}
	if(!flag)
	{
	       	printf("学号\t姓名\t课程1\t课程2\t课程3\t平均分\n");  
	         printf("%d\t%s\t%.2lf\t%\.2lf\t%.2lf\t%.2lf\n ",num[mid],name[mid],score[mid][0],score[mid][1],score[mid][2],score[mid][3]);
	}
		
	else
		printf("未找到该名学生。\n");
	
}

void excellent(int num[],char (*name)[20],double (*p)[4])
{ 
      int flag = 0, i, j;
      for( i=0; i<N; i++)
      {      
                 if( *(*(p+i)+3) > 80 )//判断是否大于80分 
	             { 
                        printf("学号:%d\t",*(num+i));
                        printf("姓名:%s\t",*(name+i));
                        printf("分数:\t");
                        for(j=0; j<N-1; j++)
                        	 printf("%lf\t", *(*(p+i)+j));
                        printf("\n");
                        flag = 1;//标记 
    	        }   		
      } 
      if(!flag)printf("无超过80分的学生"); 
      	
}
《 C程序设计》课程综合性实验报告 开课实验室: 基础三 2013年 6 月24 日 实验题目 《学生成绩管理系统的设计》 一、实验目的 通过该实验把C语言中基本知识(如:顺序结构、选择结构、循环结构、数组、函数、指针、链表等)得到综合应用。完成学生成绩管理系统基本功能设计,提高学生的编程能力析问题、解决问题的能力。 二、设备与环境 硬件:多媒体计算机 软件:Windows系列操作系统、C++语言 三、实验内容 对若干个学生基本信息包括学号姓名、至少三门成绩(:语、高数、计算机)。 ① 学生基本信息录入; ② 学生基本信息输出; ③ 求每个人平均成绩; ④ 输出平均分大于80的同学信息; ⑤ 输出有不及格课程的同学信息; ⑥ 输出平均分最高的同学信息; ⑦ 按学号查询学生信息; ⑧ 按学号修改某学生信息输出; ⑨ 添加某学生信息; ⑩ 删除某学生信息; ⑪ 根据平均成绩综合排名;(此功能用链表处理的同学可不做) 2、实验要求 a、用结构体数组或链表存储学生信息; b、基本功能用函数实现; c、至少完成实验内容中6个功能,学生可以自己增加或减少题目功能; d、程序能正确执行、输入与输出有必要的提示信息、界面美观; e、 用菜单调用加。使用链表加。 四、实验结果及析 1.运行结果图 2. 析程序 数据类型定义:结构体类型 函数: input(struct student stu[]); 学生基本信息录入 average(struct student stu[]); 求每个人的平均分 print(struct student stu[]); 学生基本信息输出 chazhao(struct student stu[]); 按学号查询学生信息 paixu(struct student stu[]); 根据平均成绩综合排名 pingjun80(struct student stu[]); 输出平均分大于80的同学信息 xiugai(struct student stu[]); 按学号修改某学生信息输出
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值