今天学习了二维数组,恰逢班内要进行教材费用清算,所以编学了一个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"); }