C语言 数组专题

作业要求

青岛科技大学信息科学技术学院软件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;
}


  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值