利用结构体录入学生的所有数据(学号,姓名,三门课程成绩,生日),选择性输出 包括(所有学生平均分,查看排名,生日,查询学生信息)四个选项

#include<stdio.h>
#define N 5  //定义5个学生

struct Student
{
	int num;//学号
	char name[20];//姓名
	double score[3];//三门成绩
	double aver;//平均数
	int year;//年
	int month;//月
	int day;//日
};

int main()
{
	void input(struct Student stu[]);   //输入数据 
	void average(struct Student stu[]); //平均值
	void sort(struct Student stu[]);//降序输出
	int days(struct Student student);//计算
	struct Student stu[N], * p = stu;
	input(p);

	int choice;
    int m;
    
     printf("Input each students's information\n");	
	/*显示主菜单*/
	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,printf brithday of student\n");
		printf("======================================================================\n");
		printf("Please choose (1~3):\n");
		scanf("%d",&choice);//输入数字
		switch (choice)
		{
	     	case 1:
			       average(p); break;
		    case 2:
		    	   sort(p); break;  
			case 3:
			       printf("请输入第几名同学的生日\t");
		           scanf("%d", &m);
			       printf("该同学的学号:%d ,名字:%s 生日 :%d年%d月%d日,本年第%d天\n", stu[m-1].num, stu[m-1].name, stu[m-1].year, stu[m-1].month, stu[m-1].day, days(stu[m-1]));	                  
		    default:
			        break;

		}

	}
	return 0;
}
void input(struct Student stu[])
{
	int i;
	printf("请输入各学生的信息:\n");
	for (i = 0; i < N; i++)
	{
		printf("学号 姓名 3门课成绩  生日\t");
		scanf("%d %s %lf %lf %lf\n %d %d %d", &stu[i].num, stu[i].name, &stu[i].score[0], &stu[i].score[1], &stu[i].score[2], &stu[i].year, &stu[i].month, &stu[i].day);
		stu[i].aver = (stu[i].score[0] + stu[i].score[1] + stu[i].score[2]) / 3.0;
		printf("\n");
	}

}

void average(struct Student stu[])//计算平均数
{
	for (int i = 0; i < N; i++)
	{
		stu[i].aver = (stu[i].score[0] + stu[i].score[1] + stu[i].score[2]) / 3.0;
		printf("学号:%d   姓名: %s   平均成绩:%4.2lf", stu[i].num, stu[i].name, stu[i].aver);
	}
}

void sort(struct Student stu[])//降序输出
{
	struct Student temp;
	int i, j, k;
	for (i = 0; i < N - 1; i++)//选择排序法
	{
		k = i;
		for (j = i + 1; j < N; j++)
		{
			if (stu[i].aver < stu[j].aver)
				k = j;
			temp = stu[k];
			stu[k] = stu[i];
			stu[i] = temp;
		}

	}
	for (i = 0; i < N; i++)
	{
		printf("学号:%d   姓名: %s   三门课的成绩分别为: %4.2lf %4.2lf %4.2lf  平均成绩:%4.2lf\n", stu[i].num, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].aver);
	}
	printf("\n");
}
int days(struct Student student)
{
	         
	  if((student.year%4==0&&student.year%100!=0)||(student.year%400==0))//闰年 
      {
                                       if(student.month == 1)
	                                    {
					                         return student.day;
			                            }
			                           else if(student.month == 2)
										{
		                                    return student.day+31;									
										}
										else if(student.month == 3)
										{
	                                       return student.day+60;										
										} 
										else if(student.month == 4)
										{
						                  return student.day+91;
										}
										else if(student.month == 5)
										{
					                      return student.day+121;	 
										}			
										else if(student.month == 6)
										{
											     return student.day+152;
										}
										else if(student.month == 7)
										{
				                          return student.day+182;
										}
										else if(student.month == 8)
										{
                                          return student.day+213;
										}
										else if(student.month == 9)
										{
		                                      return student.day+244;
										}
										else if(student.month == 10)
										{
											      return student.day+274;
										}
										else if(student.month == 11)
										{
			                                     return student.day+305;
										}
										else if(student.month == 12)
										{
                                                   return student.day+335;							
										}
			}
			else//平年
			{
          
	                                    if(student.month == 1)
										{
											   return student.day;
										}
										else if(student.month == 2)
										{
		                                      return student.day+30;									
										}
										else if(student.month == 3)
										{
	                                          return student.day+59;										
										} 
										else if(student.month == 4)
										{
						                  return student.day+90;
										}
										else if(student.month == 5)
										{
					                      return student.day+120;	 
										}			
										else if(student.month == 6)
										{
											     return student.day+151;
										}
										else if(student.month == 7)
										{
				                                   return student.day+181;
										}
										else if(student.month == 8)
										{
                                                   return student.day+212;
										}
										else if(student.month == 9)
										{
		                                           return student.day+243;
										}
										else if(student.month == 10)
										{
											      return student.day+273;
										}
										else if(student.month == 11)
										{
			                                    return student.day+304;
										}
										else if(student.month == 12)
										{
                                             return student.day+334;							
										}
			} 
}


以下是改良版
效果图在这里插入图片描述

#include<stdio.h>
#define N 5  //定义5个学生

struct Student
{
	int num;//学号
	char name[20];//姓名
	double score[3];//三门成绩
	double aver;//平均数
	int year;//年
	int month;//月
	int day;//日
};

int main()
{
	void input(struct Student stu[]);   //输入数据 
	void average(struct Student stu[]); //输出各个平均分 
	void sort(struct Student stu[]);    //输出名次
	void search(struct Student stu[], int n);  //寻找学生 
	int searchStudentnum(struct Student stu[], int m);//寻找对应编号的学生 
	int days(struct Student student);   //计算
	struct Student stu[N], * p = stu;
	input(p);

	int choice, m, n, c;
    
     printf("Input each students's information\n");
	 	
	/*显示主菜单*/
	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,printf brithday of student\n");
	printf("4,search student according to your searched num\n");
	printf("======================================================================\n");
	while (1)
	{
	    printf("\n");
		printf("Please choose (1~4):\n");
		scanf("%d",&choice);//输入数字
		switch (choice)
		{
	     	case 1:
			       average(p); break;
		    case 2:
		    	   sort(p); break;  
			case 3:
			       printf("请输入查询编号多少的同学的生日:\t");
		           scanf("%d", &m);//输入编号 
	               c = searchStudentnum(p,m);
			       printf("该同学的学号:%d   名字:%s     生日 :%d年%d月%d日,本年第%d天\n", stu[c].num, stu[c].name, stu[c].year, stu[c].month, stu[c].day, days(stu[c]));break;
			case 4:
			       printf("请输入您要寻找的同学编号:\t");
				   scanf("%d", &n);
				   search(p,n);	   	                  
		    default:
			        break;

		}

	}
	return 0;
}
void input(struct Student stu[])//记录学生信息 
{
	int i;
	printf("请输入各学生的信息:\n");
	for (i = 0; i < N; i++)
	{
		printf("学号 姓名 3门课成绩  生日\t");
		scanf("%d %s %lf %lf %lf\n %d %d %d", &stu[i].num, stu[i].name, &stu[i].score[0], &stu[i].score[1], &stu[i].score[2], &stu[i].year, &stu[i].month, &stu[i].day);
		stu[i].aver = (stu[i].score[0] + stu[i].score[1] + stu[i].score[2]) / 3.0;
		printf("\n");
	}

}

void average(struct Student stu[])//计算平均数
{
	for (int i = 0; i < N; i++)
	{
		stu[i].aver = (stu[i].score[0] + stu[i].score[1] + stu[i].score[2]) / 3.0;
		printf("学号:%d   姓名: %s   平均成绩:%4.2lf", stu[i].num, stu[i].name, stu[i].aver);
	    printf("\n"); 
	}
}

void sort(struct Student stu[])//排序名次 
{
    int index[N] = {0}; //初始化索引数组 
	int i, j, k, temp;
	for(i = 0; i < N; i++)
	{
		index[i] = i;  //放入对应的序号 
	}
	for (i = 0; i < N - 1; i++)//选择排序法
	{
		k = i;
		for (j = i + 1; j < N; j++)
		{
		       if (stu[index[k]].aver < stu[index[j]].aver)
		       {
		            k = j;   
		       }
		}
		temp = index[k];
		index[k] = index[i];
		index[i] = temp;
	}
	for (i = 0; i < N; i++)
	{
		printf("学号:%d   姓名: %s   三门课的成绩分别为: %4.2lf %4.2lf %4.2lf  平均成绩:%4.2lf\n", stu[index[i]].num, stu[index[i]].name, stu[index[i]].score[0], stu[index[i]].score[1], stu[index[i]].score[2], stu[index[i]].aver);
	}
	printf("\n");
}


int days(struct Student student)//生日 
{
	         
	  if((student.year%4==0&&student.year%100!=0)||(student.year%400==0))//闰年 
      {
                                       if(student.month == 1)
	                                    {
					                         return student.day;
			                            }
			                           else if(student.month == 2)
										{
		                                    return student.day+31;									
										}
										else if(student.month == 3)
										{
	                                       return student.day+60;										
										} 
										else if(student.month == 4)
										{
						                  return student.day+91;
										}
										else if(student.month == 5)
										{
					                      return student.day+121;	 
										}			
										else if(student.month == 6)
										{
											     return student.day+152;
										}
										else if(student.month == 7)
										{
				                          return student.day+182;
										}
										else if(student.month == 8)
										{
                                          return student.day+213;
										}
										else if(student.month == 9)
										{
		                                      return student.day+244;
										}
										else if(student.month == 10)
										{
											      return student.day+274;
										}
										else if(student.month == 11)
										{
			                                     return student.day+305;
										}
										else if(student.month == 12)
										{
                                                   return student.day+335;							
										}
			}
			else//平年
			{
          
	                                    if(student.month == 1)
										{
											   return student.day;
										}
										else if(student.month == 2)
										{
		                                      return student.day+30;									
										}
										else if(student.month == 3)
										{
	                                          return student.day+59;										
										} 
										else if(student.month == 4)
										{
						                  return student.day+90;
										}
										else if(student.month == 5)
										{
					                      return student.day+120;	 
										}			
										else if(student.month == 6)
										{
											     return student.day+151;
										}
										else if(student.month == 7)
										{
				                                   return student.day+181;
										}
										else if(student.month == 8)
										{
                                                   return student.day+212;
										}
										else if(student.month == 9)
										{
		                                           return student.day+243;
										}
										else if(student.month == 10)
										{
											      return student.day+273;
										}
										else if(student.month == 11)
										{
			                                    return student.day+304;
										}
										else if(student.month == 12)
										{
                                             return student.day+334;							
										}
			} 
}

void search(struct Student stu[], int n)//寻找学生 
{
		   for(int i = 0; i < N; i++)
		   {
                 if(stu[i].num == n)
				 {
 					 printf("学号:%d   姓名: %s   三门课的成绩分别为: %4.2lf %4.2lf %4.2lf  平均成绩:%4.2lf\n", stu[i].num, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].aver);
 					 printf("\n");
				 }
   		   }
} 

int searchStudentnum(struct Student stu[],int m)
{
        for(int i = 0; i < N; i++)
		{
			if(stu[i].num == m)
			{
			     return i;	
			}
		}   
} 
  • 15
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、已知一个链表中存储了若干名学生的信息,每名学生的信息包括学号、英语成绩、数学成绩、计算机成绩。 现编写一个函数search(),要求对输入的无序学号进行排序,然后采用折半查找方法查找输入学生学号,并输出学生各科成绩。 2、设计一个学生类(CStudent),它具有私有数据成员是:学号姓名、数学、外语和计算机课程成绩。要求能实现求三门课总成绩和平均成绩,并能设置和显示学生信息 (类声明和成员函数定义分离)。设计一个友元函数,按照成绩从高到低的顺序输出姓名学号成绩信息。 3、实现雇员管理,类Employee需存储雇员的姓名。这种信息对于所有雇员(包括Employee的派生类的雇员)是很普遍的。现在假设从雇员类Employee派生出了小时工类HourlyWorker、计件工类PieceWorker、老板类Boss和销售员类CommissionWorker。小时工每周工作40小时,超过40小时部分的报酬是平时的1.5倍;计件工是按生产的工作件数计算报酬的,每件的报酬是固定的,假设他只生成一种类型的工件,因而类PieceWorker的private数据成员是生产的工件数量和每件的报酬;老板每周有固定的薪水;销售员每周有小部分固定的基本工资加上其每周销售额的固定百分比。设计和规划该类体系,并分别产生每个基类及派生类对象,并显示该员工的工资。 4、约瑟夫生死者游戏 每30个旅客同乘一条船,因为严重超载,加上风高浪大,危险万分;因此船长告诉乘客,只有将全船一半的旅客投入海中,其余人才能幸免遇难。无奈,大家只得同意这种办法,并议定30个人围成一圈,由第一个人数起,依次报数,数到第9人,便把他投入大海中,然后再从他的下一个人数起,数到第9人,再将他扔进大海中,如此循环地进行,直到剩下15个乘客为止。问哪些位置是将是被扔下大海的位置。 5、求二叉树上结点的路径 要求在采用链式存储结构存储的二叉树上,以bt指向根结点,p指向任一给定的结点,编程实现求出从根节点到给定结点之间的路径。 6、图的操作 (1)写出将一个无向图的邻接矩阵转换成邻接表的算法 (2)设计一个算法,判断无向图G是否连通。若连通则返回1; 返回0。 7、内部排序算法的性能分析 要求:(1)对冒泡排序、直接排序、简单选择排序、快速排序、希尔排序、堆排序算法进行比较; (2)待排序表的表长不小于100,表中数据随机产生,至少用5组不同数据作比较,比较指标有:关键字参加比较次数和关键字的移动次数(关键字交换记为3次移动); (3)输出各种算法的排序结果和比较结果。 8.2、通讯录管理系统 编程实现通讯录管理系统,要求该系统能够完成通讯信息的建立、查询、插入、删除等基本功能。程序运行后至少给出下面7个菜单项的选择并分别实现其功能: 0、 通讯录的建立 1、通讯录信息输出 2、 通讯者结点信息的删除 3、通讯者结点信息的查询 4、 通讯者结点信息的插入 5、通讯录信息更改 6、 退出通讯录管理系统 设计的任务要求,通讯录中每个学生的基本信息应包括姓名、地址、电话等基本信息,采用链表存储结构。(复习c语言结构体和链表知识)
《 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[]); 按学号修改某学生信息输出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值