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

📄 kecheng.txt

📁 数据结构:课程表安排 数据结构:课程表安排 数据结构:课程表安排 数据结构:课程表安排 数据结构:课程表安排
💻 TXT
字号:
#include<stdio.h>
#include<malloc.h>
#define m 4    //课程数
#define NULL 0
typedef struct stnode    //学生结点类型
{
	int id;   //学号
	char name[16];   //姓名
	int subject[m];   //课程数据组
	float ave;   //个人课程平均分
	struct stnode *next;   //指针域
}students;
students *head;   //head为学生链表的头指针
int n;
void order()
{
	int j;   //课程序号
	students *p,*q,*r,*h;
	printf("请输入需排序的功课序号(1~~4):\n");
	scanf("%d",&j);
	q=head->next->next;
	head->next->next=NULL;
	p=q;
	while(p)
	{
		q=q->next;
		h=head;
		r=h->next;   //r指向首元结点
		if(p->subject[j-1]>r->subject[j-1])
		{
			p->next=r;
			h->next=p;
		}
		else   //否则插入r结点的后面
		{
			while((p->subject[j-1]<r->subject[j-1])&&r);  //继续在r后面查找插入p结点的合适位置
			{
				h=r;
				r=r->next;
			}
			if(r)    //找到比p结点小的结点,将p结点插在它前面
			{
				p->next=r;
				h->next=p;
				h=p;
			}
			else   //没找到比p结点小的结点,将p结点插在head链表末
			{
				p->next=NULL;
				h->next=p;
		    	r=p;
			}
		}
				
		p=q;    //继续对其他结点进行排序
	}
	printf("所有学生功课 %d 的顺序是:\n",j);
	p=head->next;
	while(p)   //输出按课程j-1成绩排名的所有学生姓名和课程j-1的成绩
	{
		printf("姓名:%s  成绩:%d\n",p->name,p->subject[j-1]);
		p=p->next;
	}
}
void average()
{
	int i,j;
	float sum,aver;
	students *p;
	printf("Subject Average result\n");
	printf("*******Subject******Subject Average******\n");
	for(i=0;i<m;i++)   //统计课程的平均成绩
	{
		j=0;
		sum=0;
		p=head->next;
		while(p)
		{
			sum=sum+p->subject[i];
			p=p->next;
			j++;
		}
		aver=sum/j;
		printf("        Subject %d  %16.2f/n",i+1,aver);
	}
	printf("*****************************\n\n");
}
void nopass()   //查找所有课程当中有成绩不及格的学生,并输出其姓名、学号及所有成绩
{
	int i;
	students *p;
	p=head->next;
	printf("NO Pass result\n");
	printf("**********ID*********Name***********Subject****************Average***\n");
	while(p)
	{
		i=0;  //从课程1开始查找
		while(i<m) 
		{
			if(p->subject[i]<60)   //如果不及格,则输出学生所有信息
			{ 
				printf("%8d%10s",p->id,p->name);
				for(i=0;i<m;i++)
					printf("%6d",p->subject[i]);      
				printf("%8.2f\n",p->ave);
				break;  //学生只要有一门课程不及格就查找成功,不再比较其他课程,跳出循环
			}
			else
				i++;   //查找下一门课程
		}
		p=p->next;  
	}
	printf("*******************************************\n\n");
}
void over90()
{
	students *p;
	int k=0;
	p=head->next;
	while(p->next)   //从首元结点开始查找
	{
		if(p->ave>=90.0)
		{
			printf("\n");
			printf("average over 90 its id is %d\n",p->id);
			p=p->next;
			k=1;
		}
		else
			p=p->next;
	}if(!k)
		printf("没有平均分超过90分的学生\n");
}
void main()
{
	students *p,*q;
	int i,j,select,flag=1;
	float sum;

	head=(students *)malloc(sizeof(students));   //生成一个头结点     
	printf("please student num!\n");
	scanf("%d",&n);
	head->next=(students *)malloc(sizeof(students));
	q=head->next;
	for(i=0;i<n;i++)   //输入n学生的姓名、学号、所有课程的成绩
	{
		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 of 4 subject\n",i+1);
		for(j=0;j<m;j++)   //输入一个学生的所有各门课程的成绩
			scanf("%d",&p->subject[j]);
		q=(students *)malloc(sizeof(students));
		q->next=NULL;
		p->next=q;
	}
	p=head->next;
	for(i=0;i<n-1;i++)    //查找链表最后的空结点
		p=p->next;
	p->next=NULL;
	p=head->next;
	while(p)   //求每个学生的个人平均成绩
	{
		sum=0;
		for(j=0;j<m;j++)
			sum=sum+p->subject[j];
		p->ave=sum/m;
		p=p->next;
	}
	while(flag)
	{
		printf("********************************************\n");
		printf("1----求每门课程的平均成绩\n");
		printf("2----输出有课程不及格功的学生情况\n");
		printf("3----输出个人平均分超过90分的学生学号\n");
		printf("4----所有学生对指定课程排名\n");
		printf("5----退出\n");
		printf("\n");
		printf("请选择(1-5):");
		scanf("%d",&select);
		switch(select)
		{
		case 1: average();break;
		case 2: nopass();break;
		case 3: over90();break;
		case 4: order();break;
		case 5: flag=0;break;
		}
	}
}

⌨️ 快捷键说明

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