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;
}