⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nvic8kg975opmt.txt

📁 学生课程查询 学生课程查询
💻 TXT
字号:
#include<stdio.h>
#include<malloc.h>                                                                                                                                       
#define m 4                           //每个学生所学习课程数
#define NULL 0
typedef struct stnode
{
	int id;                           //学号
	char name[16];                    //姓名
	int Class[4];                     //所有课程成绩分别存储在Class[0],Class[1],....中
	float ave;                        //学生个人所有课程的平均成绩
	struct stnode *next;              //指针域
}students;
students *head;                //*head为指向学生单链表的头指针,且为全局变量
int n;                        //参加成绩管理的班上的学生个数
void average()                //每门课程的平均成绩的函数
{
	int i,j;                 //课程数,学生数
	float sum,aver;
	students *p;
	printf("Class Average result\n");
	printf("****Class********Class Average***********\n");
	for(i=0;i<m;i++)                  //所有课程的平均分,循环次数为所有课程的数目
	{
		j=0;
		sum=0;
		p=head;
		while(p->next)                //某一门课程的所有学生的得分总和
		{
			sum=sum+p->Class[i];
		p=p->next;
		j++;
		}
		aver=sum/j;                   //某一门课程的平均分
		printf("Class%d %16.2f\n",i+1,aver);
	}
	printf("******************************************\n\n");
}
void nopass()                        //不及格的学生,如有则输出学号,姓名,所有课程成绩,平均分
{
	int i;
	students *p;
	p=head;                          //从第一个结点开始查找
	printf("NO Pass result\n");      //输入不及格结果
	printf("******ID********Name*********Class********Average**********\n");
	while(p->next)                   //最后一个结点无数据,不用输出
	{
		i=0;
		while(i<m)
		{
			if(p->Class[i]<60)
			{
				printf("%8d%10s",p->id,p->name);     //输出不及格学生的学号,姓名
				for(i=0;i<m;i++)                     //输出不及格学生的所有课程成绩
				printf("%6d",p->Class[i]);
				printf("%8.2f\n",p->ave);
					break;
			}
			else
				i++;                                 //查找该同学的下一门课程
		}
		p=p->next;                                   //查找下一个同学
	}
	printf("*********************************************************\n\n");
}
void over90()                             //查找所有课程个人平均分在90分以上(包括90分)的学生,有则输出学号
{
	students *p;
	p=head;                               //从表头开始查找
	while(p->next)                       //直到倒数第二个结点为止,倒数第一个结点数据
	{
		if(p->ave>=90.0)                 //找到则输出该学生的学号
		{
			printf("\n");
			printf("average over 90 its id is %d\n",p->id);
			p=p->next;
		}
		else                            //否则查找下一个结点
			p=p->next;
	}
}
 void main()
{
	students *p,*q;
	int i,j;
	float sum;
	void clrscr();
	char ();
	printf("please student num!\n");
	scanf("%d",&n);                             //n为学生个数
	head=(students *)malloc(sizeof(students));
	q=head;
	for(i=0;i<n;i++)                 //创建单链表
	{
		printf("input student%d its ID,name\n",i+1);
		p=q;
		scanf("%d\n",&p->id);            //输入学生的学号
		scanf("%s",&p->name);            //输入学生的姓名
		printf("\n");
		printf("input student%i its score\n",i+1);
		for(j=0;j<m;j++)                //输入每个学生的所有课程的成绩
			scanf("%d",&p->Class[j]);
		q=(students *)malloc(sizeof(students));
		q->next=NULL;
		p->next=q;
	}
	p=head;
	while(p->next)                      //求每个学生个人所有课程的平均成绩
	{
		sum=0;
		for(j=0;j<m;j++)
			sum=sum+p->Class[j];
		p->ave=sum/m;
		p=p->next;
	}
	average();
	nopass();
	over90();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -