📄 nvic8kg975opmt.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 + -