2021-04-05

**科技大学信息科学技术学院软件 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.编程实现程序功能。



#include <stdio.h>

#include <stdlib.h>

#define 
MAX  100

struct student

{

       char
name[12];

       float  a[9];

       char
xuehao[10],year[5];

}stu[MAX];

 

/*输入数据,计算每个人的总学分和平均分*/

void input( struct student s[], int x)

{

       int  i,n;

       printf("请输入学生人数\n");

       scanf("%d",&n);

       

       for(i=0;i<n;i++)

       {

                     s[i].a[7]=0;

              printf("请输入学年度\n");

                     scanf("%s",&s[i].year);

              printf("请输入学生学号\n");

                  scanf("%s",&s[i].xuehao);

           printf("请输入学生姓名\n");

       
       scanf("%s",s[i].name);

       
printf("请输入软件技术导论成绩\n");

                     scanf("%f",&s[i].a[0]);

                     while(s[i].a[i]<0||s[i].a[0]>100)

                     {

                            printf("输入数据错误,请重新输入\n");

                            scanf("%f",&s[i].a[0]);

                     }

                     if(s[i].a[0]>=60)

                            s[i].a[7]+=2;

                     else

                            s[i].a[7]+=0;

       
       printf("请输入C语言程序设计成绩\n");

                     scanf("%f",&s[i].a[1]);

                     while(s[i].a[1]<0||s[i].a[1]>100)

                     {

                            printf("输入数据错误,请重新输入\n");

                            scanf("%f",&s[i].a[1]);

 

                     }

                     if(s[i].a[1]>=60)

                            s[i].a[7]+=3.5;

                     else

                            s[i].a[7]+=0;

       
       printf("请输入高等数学成绩\n");

                     scanf("%f",&s[i].a[2]);

                     while(s[i].a[2]<0||s[i].a[2]>100)

                     {

                            printf("输入数据错误,请重新输入\n");

                            scanf("%f",&s[i].a[2]);

                     }

                     if(s[i].a[2]>=60)

                            s[i].a[7]+=5;

                     else

                            s[i].a[7]+=0;

           
printf("请输入体育成绩\n");

                     scanf("%f",&s[i].a[3]);

                     while(s[i].a[3]<0||s[i].a[3]>100)

                     {

                            printf("输入数据错误,请重新输入\n");

                            scanf("%f",&s[i].a[3]);

                     }

                  if(s[i].a[3]>=60)

                            s[i].a[7]+=2;

                     else

                            s[i].a[7]+=0;

           
printf("请输入英语成绩\n");

                     scanf("%f",&s[i].a[4]);

                     while(s[i].a[4]<0||s[i].a[4]>100)

                     {

                            printf("输入数据错误,请重新输入\n");

                            scanf("%f",&s[i].a[4]);

                     }

                  if(s[i].a[4]>=60)

                            s[i].a[7]+=3;

                     else

                            s[i].a[7]+=0;

                     printf("请输入中国革命史成绩\n");

                     scanf("%f",&s[i].a[5]);

                     while(s[i].a[5]<0||s[i].a[5]>100)

                     {

                            printf("输入数据错误,请重新输入\n");

                            scanf("%f",&s[i].a[5]);

                     }

                     if(s[i].a[5]>=60)

                            s[i].a[7]+=2;

                     else

                            s[i].a[7]+=0;

              

       }

}

 

void average( struct student s[], int x)

{

       int  i,j,n;

       printf("请输入学生人数\n");

       scanf("%d",&n);

/*计算每个学生的平均分*/

       for(i=0;i<n;i++)

       {

              s[i].a[6]=0;

              for(j=0;j<6;j++)

                     s[i].a[6]+=s[i].a[j];

              s[i].a[6]/=6;

       };

/*计算六门功课的平均分*/

       for(j=0;j<6;j++)

       {

              s[n].a[j]=0;

              for(i=0;i<n;i++)

                     s[n].a[j]+=s[i].a[j];

              s[n].a[j]=s[n].a[j]/n;

       }

       

}

 

void paixu( struct student s[], int x)

{

       int  i,j,n;

       printf("请输入学生人数\n");

       scanf("%d",&n);

 

/*对所有学生进行由高到低排序*/

       for(i=0;i<n;i++)

       {

              s[i].a[8]=s[i].a[7];

       };

 

       for(i=0;i<n;i++)

       {

              if(s[i].a[8]<s[i+1].a[8])

              {

                     strcpy(s[n+1].xuehao,s[i].xuehao);

                     strcpy(s[i].xuehao,s[i+1].xuehao);

                     strcpy(s[i+1].xuehao,s[n+1].xuehao);

                     strcpy(s[n+1].name,s[i].name);

                     strcpy(s[i].name,s[i+1].name);

                     strcpy(s[i+1].name,s[n+1].name);

           
for(j=0;j<8;j++)

                     {

                            s[n+1].a[j]=s[i].a[j];

                            s[i].a[j]=s[i+1].a[j];

                            s[i+1].a[j]=s[n+1].a[j];

                     };

              };

              if(s[i].a[8]=s[i+1].a[8])

              {

                     if(s[i].a[6]<s[i+1].a[6])

                     {

                            strcpy(s[n+1].xuehao,s[i].xuehao);

                         strcpy(s[i].xuehao,s[i+1].xuehao);

                         strcpy(s[i+1].xuehao,s[n+1].xuehao);

                            strcpy(s[n+1].name,s[i].name);

                         strcpy(s[i].name,s[i+1].name);

                         strcpy(s[i+1].name,s[n+1].name);

                            for(j=0;j<8;j++)

                            {

                                  s[n+1].a[j]=s[i].a[j];

                                  s[i].a[j]=s[i+1].a[j];

                                  s[i+1].a[j]=s[n+1].a[j];

                            }

                     }

              }

       

       }

}

int main ()

{

       int  i,n;

       input(stu,MAX);

       average(stu,MAX);

       paixu(stu,MAX);

 

       printf("请输入学生人数\n");

       scanf("%d",&n);

              /*输出每位学生考试成绩数据*/

       

       printf("/
学 年 度 / 学  号 / 姓  名 /软件技术导论/C语言程序设计/ 高等数学 / 体  育 / 英  语 / 中国革命史 / 平均分 / 总学分
/\n");

       for(i=0;i<n;i++)

          
printf("|%8s|%8s|%8s|%14.2f|%14.2f|%10.2f|%9.2f|%9.2f|%9.2f|%9.2f|%10.2f|\n",stu[i].year,stu[i].xuehao,stu[i].name,stu[i].a[0],stu[i].a[1],stu[i].a[2],stu[i].a[3],stu[i].a[4],stu[i].a[5],stu[i].a[6],stu[i].a[7]);

   
printf("/各科平均分数/软件技术导论/C语言程序设计/ 高等数学 / 体  育 / 英  语 /中国革命史/\n");

       printf("              |%10.2f|%10.2f|%10.2f|%9.2f|%9.2f|%10.2f|\n",stu[n].a[0],stu[n].a[1],stu[n].a[2],stu[n].a[3],stu[n].a[4],stu[n].a[5]);

   
return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值