?? 1.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 + -