C语言学习——班级同学教材金额列表打印

C语言学习——班级同学教材金额列表打印

今天学习了二维数组,恰逢班内要进行教材费用清算,所以编学了一个C语言程序来对班上各同学应该缴纳的教材费用进行计算并列表输出。
首先程序所实现的功能为:由用户输入班级人数,后四位学号和涉及的教材数目及金额,然后由程序计算每个同学应该缴纳的费用并输出相应的列表。实现该功能的程序我分为三个小函数来完成最终功能:输入数据函数计算函数列表显示函数 。下面我将逐一为大家讲解着三部分函数

输入数据函数

设置一些打印函数用来提示输入以及便于调试程序

/*
输入数据函数;将计算所需的学生人数、学号后四位、涉及的教材数目、各教材收费金额输入程序当中。
*/
/*
输入数据函数;将计算所需的学生人数、学号后四位、涉及的教材数目、各教材收费金额、同学订购教材情况
*/
void readcost(int student_cost[][TEXT_VAR],float text_cost[],int num[],int n,int m)
{   int i,j;
    printf("please input the cost of subjects in turn:机械指导书    机械创新    汽车概论    机械故障    单片机原理\n");
    for(i=0;i<m;i++)
    {
     printf("please input cost:");
     scanf("%f",&text_cost[i]);//各教材费用
    }
    printf("please input the number and count:\n");
    for(i=0;i<n;i++)
    {                                                                                               
     printf("please input the last four digits of student number:");
     scanf("%4d",&num[i]);//学号后四位
     for(j=0;j<TEXT_VAR;j++)
        {
         printf("please input the subjects of student %d :1or0",num[i]);
         scanf("%d",&student_cost[i][j]);//同学订购教材情况
        }
    }
    printf("input successfully");
}

计算函数

注意:数组作为实参时,只需输入数组名即可,形参的数组名可以和实参不同,因为函数是对数组的首地址进行访问地,函数对同一个地址进行处理,即使数组名不同。在函数中改变数组值其也会改变实参数组。二位数组无论是定义还是做位形参,都需要对第二个括号里的数(即列数)进行定义。

/*
计算函数:将输入函数用户所输入的数据作为函数的实参,实现计算每位同学缴纳费用的目的
*/
void textsum(int num[],float text_cost[],int student_cost[][TEXT_VAR],float text_sum[],int n,int m)//计算每个学生的总金额
{
    int i,j;
    float sum=0;
    printf("正在计算中\n");
    for(i=0;i<n;i++)
    {
       sum=0;
       for(j=0;j<m;j++)
       {
           sum=sum+((student_cost[i][j])*(text_cost[j]));
       }
       text_sum[i]=sum;  //每位同学所需缴纳费用
       summ=summ+sum;    //班级的总缴纳费用
    }
    printf("计算完成\n");
}

##列表显示函数

/*
列表显示函数:以列表形式输出打印同学缴纳费用和其他信息
*/
void display(int num[],float text_cost[],int student_cost[][TEXT_VAR],float text_sum[],int n,int m)//列表显示金额
{
    int i,j;
    printf("机制1604教材费用明细\n");
    printf("学号\t机械指导书\t  机械创新\t  汽车概论\t  机械故障\t单片机原理\t  总数金额\n");//因为中文字节占两位,所每栏占10个字符位加一个制表符,,后面输出相应函数也是占10个字符加一个制表符
    for(i=0;i<n;i++)
    {
        printf("%4d\t",num[i]);
        for(j=0;j<m;j++)
        {
            printf("%10d\t",student_cost[i][j]);
        }
        printf("%10.2f\n",text_sum[i]);
    }
    printf("班级总金额为:%10.2f\n",summ);
    printf("输出完毕\n");
}

全部程序

#include <stdio.h>
#include <stdlib.h>
#define STUDENT_NUM 40 //班级人数最大值为40
#define TEXT_VAR 5 //教材数目为5
int student_cost[STUDENT_NUM][TEXT_VAR]; //输入数组
int num[STUDENT_NUM];
float text_cost[TEXT_VAR]; //输入教材费用
float text_sum[STUDENT_NUM];//各学生的应交金额
float summ=0;

/*
输入数据函数;将计算所需的学生人数、学号后四位、涉及的教材数目、各教材收费金额、同学订购教材情况
*/
void readcost(int student_cost[][TEXT_VAR],float text_cost[],int num[],int n,int m)
{   int i,j;
    printf("please input the cost of subjects in turn:机械指导书    机械创新    汽车概论    机械故障    单片机原理\n");
    for(i=0;i<m;i++)
    {
     printf("please input cost:");
     scanf("%f",&text_cost[i]);//各教材费用
    }
    printf("please input the number and count:\n");
    for(i=0;i<n;i++)
    {                                                                                               //输入函数:输入学生的后四位学号、订教材数目、和教材费用
     printf("please input the last four digits of student number:");
     scanf("%4d",&num[i]);//学号后四位
     for(j=0;j<TEXT_VAR;j++)
        {
         printf("please input the subjects of student %d :1or0",num[i]);
         scanf("%d",&student_cost[i][j]);//同学订购教材情况
        }
    }
    printf("input successfully");
}

/*
计算函数:将输入函数用户所输入的数据作为函数的实参,实现计算每位同学缴纳费用的目的
*/
void textsum(int num[],float text_cost[],int student_cost[][TEXT_VAR],float text_sum[],int n,int m)//计算每个学生的总金额
{
    int i,j;
    float sum=0;
    printf("正在计算中\n");
    for(i=0;i<n;i++)
    {
       sum=0;
       for(j=0;j<m;j++)
       {
           sum=sum+((student_cost[i][j])*(text_cost[j]));
       }
       text_sum[i]=sum;  //每位同学所需缴纳费用
       summ=summ+sum;    //班级的总缴纳费用
    }
    printf("计算完成\n");
}

/*
列表显示函数:以列表形式输出打印同学缴纳费用和其他信息
*/
void display(int num[],float text_cost[],int student_cost[][TEXT_VAR],float text_sum[],int n,int m)//列表显示金额
{
    int i,j;
    printf("机制1604教材费用明细\n");
    printf("学号\t机械指导书\t  机械创新\t  汽车概论\t  机械故障\t单片机原理\t  总数金额\n");//因为中文字节占两位,所每栏占10个字符位加一个制表符,,后面输出相应函数也是占10个字符加一个制表符
    for(i=0;i<n;i++)
    {
        printf("%4d\t",num[i]);
        for(j=0;j<m;j++)
        {
            printf("%10d\t",student_cost[i][j]);
        }
        printf("%10.2f\n",text_sum[i]);
    }
    printf("班级总金额为:%10.2f\n",summ);
    printf("输出完毕\n");
}

int main()
{
    int n,m;
    printf("Hello world!\n");
    printf("please input the sum of student\n");
    scanf("%d",&n);
    printf("please input the sum of subjects\n");
    scanf("%d",&m);
    readcost(student_cost,text_cost,num,n,m);
    textsum(num,text_cost,student_cost,text_sum,n,m);
    display(num,text_cost,student_cost,text_sum,n,m);
    return 0;
}

效果展示

效果图

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值