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

📄 us3jf79.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;
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;
		if(p->subject[j-1]>r->subject[j-1])
		{
			p->next=r;
			h->next=p;
		}
		else
		{
			while((p->subject[j-1]>r->subject[j-1])&&r);
			{
				h=r;
				r=r->next;
			}
			if(r)
			{
				p->next=r;
				h->next=p;
				h=p;
			}
			else
			{
				p->next=NULL;
				h->next=p;
		    	r=p;
			}
		}
				
		p=q;
	}
	printf("所有学生功课 %d 的顺序是:\n",j);
	p=head->next;
	while(p)
	{
		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;
		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++)
	{
		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 + -