作业要求
青岛科技大学信息科学技术学院软件15级2015-2016学年第一学期学习了如下课程:软件技术导论(2学分)、C语言程序设计(3.5学分)、高等数学(5学分)、体育(2学分)、英语(3学分)、中国革命史(2学分)6门课程,为了对学生的考试成绩进行分析、统计、排名、学分等进行有效管理,结合学生的学号、姓名、学年度(2015-2016第一学期可用15161标识)信息,编程实现如下功能:
(1)根据考试成绩计算每位同学本学期取得的学分,例如:C语言程序设计3.5学分,甲同学考试成绩(包括重考成绩)>=60,即取得该门课程的3.5学分,否则该门课程学分为0;
(2)计算上述6门功课的平均分,每位同学考试成绩的平均分。
(3)为进行奖学金评定,对所有学生的进行由高到低的排序,排序的规则是学分高的在前、学分低的在后,学分相同的情况下,平均分高的在前,平均分低的灾后。
要求:
1.首先根据题目要求进行数据结构的设计,即学生包含哪些分量,这些分量又是何种类型,长度是多少?
2.根据功能需求设计程序的结构
3.编程实现程序功能。
作业内容
使用动态内存分配函数“malloc”,初始化指向空指针“NULL”,使用完毕要用“free”函数释放
#include"stdio.h"
#include"stdlib.h"
typedef struct//*********************以学生为单位的结构体
{
int num;
char name[8];
int year;
float score[6];
float ave;
int credit;
}student;
typedef struct//******************存储科目名称的结构体
{
char subject[16];
}course1;
course1 course [6]=
{
{"软件技术导论"},
{"c语言程序设计"},
{"高等数学"},
{"体育"},
{"英语"},
{"中国近代史史"},
};
int main()
{
int n,i,j,k;
float b[6]={0,0,0,0,0,0};
student *stu=NULL;
printf("请输入要录入的学生个数:");
scanf("%d",&n);
stu=(student*)malloc(n*sizeof(student));//***************创建动态数组
for(i=0;i<n;i++)
{
printf("请输入第%d位学生的十位学号:",i+1);
scanf("%d",&stu[i].num);
printf("请输入第%d位学生的姓名:",i+1);
scanf("%s",stu[i].name);
stu[i].year=15161;
stu[i].ave=0;
for(j=0;j<6;j++)
{
printf("请输入第%d位学生的%s成绩:",i+1,course[j].subject);
scanf("%f",&stu[i].score[j]);
stu[i].ave+=stu[i].score[j];
}
stu[i].ave/=6;//*********************个人平均分
system("cls");
}
for(k=0;k<6;k++)//8*************************各科平均分
{
for(j=0;j<n;j++)
b[k]+=stu[j].score[k];
b[k]/=n;
}
for(i=0;i<n;i++)//************************学分
{
stu[i].credit=0;
if(stu[i].score[0]>=60)
stu[i].credit+=2;
if(stu[i].score[1]>=60)
stu[i].credit+=3.5;
if(stu[i].score[2]>=60)
stu[i].credit+=5;
if(stu[i].score[3]>=60)
stu[i].credit+=2;
if(stu[i].score[4]>=60)
stu[i].credit+=3;
if(stu[i].score[5]>=60)
stu[i].credit+=2;
}
student temp;//*****************排序
for(i=0;i<n-1;i++)
{
for(k=0;k<n-1-i;k++)
{
if((stu[k].credit<stu[k+1].credit)||(stu[k].credit==stu[k+1].credit&&stu[k].ave<stu[k+1].ave))
{
temp=stu[k];
stu[k]=stu[k+1];
stu[k+1]=temp;
}
}
}
/*********************************输出*****************************************/
printf("学号\t\t姓名\t学年\t软导\tc语言\t高数\t体育\t英语\t近代史\t平均分\t学分\t\n");
for(i=0;i<n;i++)
{
printf("%d\t%s\t%d\t",stu[i].num,stu[i].name,stu[i].year);
for(j=0;j<6;j++)
{
printf("%.2f\t",stu[i].score[j]);
}
printf("%.2f\t%d\t\n",stu[i].ave,stu[i].credit);
}
printf("各科平均分:\t\t\t");
for(i=0;i<6;i++)
{
printf("%.2f\t",b[i]);
}
free(stu);//*************************************************释放动态内存
return 0;
}