C语言 函数专题

作业要求                                                                                                         2015-2016学年度第一学期已经考试结束,为了了解学生的业务课程考试情况、平时表现情况和综合奖学金评定工作,需对全班同学的业务课程考试成绩、平时表现成绩进行相应处理。其中业务课程包括:高等数学、C语言程序设计、大学英语视听一、软件技术导论、近现代史和大学体育一6门课程;平时表现成绩包括:辅导员评分、班主任评分和班级同学评分三项。业务课程考试成绩和平时表现评分均实行百分制。

综合奖学金评定办法:

(1)业务课程成绩占70%,平时表现成绩占30%。

(2)业务课程任一门考试成绩低于60分不能参与奖学金评定。

(3)综合奖学金分为三个等级:一等奖学金、二等级学金和三等奖学金。其中一等奖学金占班级人数的3%,二等奖奖学金占班级人数的7%,三等奖 奖学金占班级人数的20%,具体获奖人数应根据班级人数和奖学金各等级的分配比例相乘进行四舍五入来确定。

要求根据以上题目描述,结合函数专项实训,从要求解决的问题中抽取出具体功能,并根据抽取出的具体功能和C语言函数的规范设计相应函数,进而经函数定义、声明与调用等过程评选出各等级奖学金的获奖者信息。

作业内容

1.了解C语言函数的肢体结构

C语言的函数具有明显的肢体结构,由函数的返回值类型、函数名、(函数的参数类型、形式参数名)构成函数的首部;由{}、函数内部变量的定义语句、功能性执行语句构成函数体。

自定义函数相互间的区别是函数的返回值类型、函数名、函数的参数、内部变量、功能性语句的不同,函数的整体结构都是一样的,有函数首部和函数体。

2.   根据实际应用需求抽取(分解)具体功能

3.    根据具体功能和函数格式设计函数

4.   定义函数

5.   声明与调用函数


#include <stdio.h>
#include<stdlib.h>
typedef struct
{
   char sno[11];  //规范化学号格式
   char name[10]; //姓名
   int  Gshu  ; //高等数学成绩
   int  Ccheng;//C语言程序设计成绩
   int  Rdao;//软件技术导论成绩
   int  Dying;//大学英语视听一成绩
   int  Dti;//大学体育一成绩
   int  Jdaishi;//近现代史成绩
   int  Gkeflag;//挂科标记,初始化为0,若有挂科则标记为1
   int  Fdaoyuan;//辅导员评分
   int  Bzhuren;//班主任评分
   int  Bjin;//班级同学评分
   double  Zhefen; //学生的综合成绩=业务课成绩70%+综合表现成绩30%
}Student;
/*********************************输入函数****************************************************/
//功能包括:循环输入n位学生的信息,擦屏
void input(Student stu[],int n)
{
    int i;
     for(i=0;i<n;i++)
    {
        stu[i].Gkeflag=0;
        printf("请输入第%d位学生的十位学号:",i+1);
        scanf("%s",stu[i].sno);
        printf("请输入第%d位学生的姓名:",i+1);
        scanf("%s",stu[i].name);
        printf("请输入第%d位学生的高等数学成绩:",i+1);
        scanf("%d",&stu[i].Gshu);
        if(stu[i].Gshu<60)
            stu[i].Gkeflag=1;
        printf("请输入第%d位学生的c语言程序设计成绩:",i+1);
        scanf("%d",&stu[i].Ccheng);
        if(stu[i].Ccheng<60)
            stu[i].Gkeflag=1;
        printf("请输入第%d位学生的大学英语视听一成绩:",i+1);
        scanf("%d",&stu[i].Dying);
        if(stu[i].Dying<60)
            stu[i].Gkeflag=1;
        printf("请输入第%d位学生的软件技术导论成绩:",i+1);
        scanf("%d",&stu[i].Rdao);
        if(stu[i].Rdao<60)
            stu[i].Gkeflag=1;
        printf("请输入第%d位学生的近现代史成绩:",i+1);
		scanf("%d",&stu[i].Jdaishi);
        if(stu[i].Jdaishi<60)
            stu[i].Gkeflag=1;
        printf("请输入第%d位学生的大学体育一成绩:",i+1);
        scanf("%d",&stu[i].Dti);
        if(stu[i].Dti<60)
            stu[i].Gkeflag=1;
        printf("请输入第%d位学生的辅导员评分:",i+1);
        scanf("%d",&stu[i].Fdaoyuan);
        printf("请输入第%d位学生的班主任评分:",i+1);
        scanf("%d",&stu[i].Bzhuren);
        printf("请输入第%d位学生的班级同学评分:",i+1);
        scanf("%lf",&stu[i].Bjin);
        system("cls");
    }


}
/********************************计算综合成绩函数**************************************/
//功能包括:学生的综合成绩=业务课成绩70%+综合表现成绩30%
void calculate(Student stu[],int n)
{
    int i;
    double a,b;
    for(i=0;i<n;i++)
    {
        a=0;b=0;
        a=0.7*((double)stu[i].Gshu+(double)stu[i].Ccheng+(double)stu[i].Dying+(double)stu[i].Rdao+(double)stu[i].Jdaishi+(double)stu[i].Dti);
        b=0.3*((double)stu[i].Fdaoyuan+(double)stu[i].Bzhuren+(double)stu[i].Bjin);
        stu[i].Zhefen=a+b;
    }

}
/**************************************排序函数*********************************************/
//依然是冒泡法排序,这里是整体排序
void sort(Student stu[],int n)
{
    int i,j,a,b,c;
    Student temp;
    for(i=0;i<n-1;i++)
        for(j=0;j<n-i-1;j++)
       {
            if(stu[j].Zhefen<stu[j+1].Zhefen&&stu[j].Zhefen)//冒泡排序总评分高的,整体前移
            {
                temp=stu[j];
                stu[j]=stu[j+1];
                stu[j+1]=temp;
            }
       }
}
/**********************************输出函数***********************************************/
//按照奖学金人数,按排好的序从前到后输出,但要跳过挂科的人
void output(Student stu[],int n)
{
    int a,b,c,i,j;
    a=n*0.03+0.5;//一等奖学金人数,强制转换去尾
    b=n*0.07+0.5;//二等奖学金人数
    c=n*0.2+0.5;//三等奖学金人数
	/******************一等奖学金***********************/
    printf("得一等奖学金的同学:\n");
    printf("学号\t\t姓名\t综合成绩\t\n");//从前到后输出,跳过挂科
    i=0;
    for(j=0;j<n;j++)
        {
            if(stu[j].Gkeflag==0&&i<a)//判断是否挂科,控制次数
            {
                printf("%s\t%s\t%.2lf\t\n",stu[j].sno,stu[j].name, stu[j].Zhefen);
                i++;//循环次数的控制
            }
            else
                continue;
            j++;//下次循环的初值
            break;
        }
	/*****************二等奖学金**************************/
	printf("得二等奖学金的同学:\n");
    printf("学号\t\t姓名\t综合成绩\t\n");
    i=0;
    for(;j<n;j++)
    {
      if(stu[j].Gkeflag==0&&i<b)
       {
         printf("%s\t%s\t%.2lf\t\n",stu[j].sno,stu[j].name, stu[j].Zhefen);
         i++;
       }
       j++;
       break;
    }
	/********************三等奖学金*******************/
	printf("得三等奖学金的同学:\n");
    printf("学号\t\t姓名\t综合成绩\t\n");
    i=0;
    for(;j<n;j++)
    {
       if(stu[j].Gkeflag==0&&i<c)
        {
         printf("%s\t%s\t%.2lf\t\n",stu[j].sno,stu[j].name, stu[j].Zhefen);
         i++;
        }
        break;
    }

}//三批输出,还是有点赘余,后期可以改用一个函数重复调用
/**********************************主函数*******************************************/
int main()
{
    int n;
    printf("请输入要输入的学生数:");
    scanf("%d",&n);
    Student *stu=NULL;      //初始化指针
    stu=(Student*)malloc(n*sizeof(Student));//分配动态内存
	input(stu,n);           //调用实参
    calculate(stu,n);       //调用
    sort(stu,n);            //调用
    output(stu,n);          //调用
    getchar();  getchar();  //暂停
	free(stu);//******************************释放占用的动态数组
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值