实验三-综合程序设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实验三综合程序设计(1)理解输出参数的概念和运用场合(2)理解指针的概念(3)掌握使用指针变量向主调函数传值的方法(4)掌握数据文件的循环读取结构(5)掌握fprintfsanf等文件操作语句的使用任务一改错两数交换打开程序文件error02_04.cpp改正程序中的错误。Swap函数的功能是交换两个数的值,在main函数中指定两个数的大小,调用swap函数交换两个数的值输出。正确的程序输出:#includestdio.hvoidswap(int*pa,int*pb);intmain(){inta=10,b=20;swap(a,b);printf(a=%d,b=%d\n,a,b);return0;}voidswap(int*pa,int*pb){intt;t=pa,pa=pb,pb=t;}改正:#includestdio.hvoidswap(int*pa,int*pb);intmain(){inta=10,b=20;swap(&a,&b);printf(a=%d,b=%d\n,a,b);return0;}voidswap(int*pa,int*pb){intt;t=*pa,*pa=*pb,*pb=t;}任务二3个数排序利用指针实现输入a,b,c共3个整数,按大小顺序输出。要求:编写exchange函数,功能是交换两个数的值。在main函数中输入3个数,调用exchange函数实现3个数按大小顺序输出。源程序清单:#includestdio.hvoidexchange(int*pa,int*pb,int*pc){intt;if(*pa*pb){t=*pa;*pa=*pb;*pb=t;}if(*pa*pc){t=*pa;*pa=*pc;*pc=t;}if(*pb*pc){t=*pb;*pb=*pc;*pc=t;}printf(%d%d%d\n33,*pa,*pb,*pc);}intmain(){inta,b,c;printf(请输入三个数:);scanf(%d%d%d,&a,&b,&c);exchange(&a,&b,&c);return0;}测试用例:任务三日期换算ex02_11.cpp打开程序文件ex02_11.cpp#includestdio.hintisLeap(intyear);voidgetDate(inty,intdays,int*pm,int*pd);intgetDays(inty,intm,intd);intmain(void){return0;}//编写子函数求某天是该年的几月几日voidgetDate(inty,intdays,int*pm,int*pd)/*y为年份,days为该年的某天,pm指向主调函数中存放某天的月值变量,*//*pd指向主调函数中存放某天的日值变量*/{intm,d,i;intday;m=;/*m:某天计算后的月值*/d=;/*d:某天计算后的日值*/*pm=;*pd=;}//编写子函数求某年某月某日是该年的第几天intgetDays(inty,intm,intd){}//编写子函数判断闰年。intisLeap(intyear){}1.要求:(1)编写子函数判断闰年:intisLeap(intyear)(2)编写子函数求某天是该年的几月几日:(3)编写子函数求某年某月某日是该年的第几天(4)main函数中设计步骤验证函数的正确性2.提示(1)求某年某月某日是该年的第几天思路:累计从1月到该日期的前一月的每月天数再加上该日期的天数。2月份的天数要判断闰年。累计可使用循环完成也可利用switch语句无break的特性完成。(2)求某天是该年的几月几日思路:循环i从1月开始如果天数days比第i月的天数大则天数days减去第i月的天数否则结束循环。i即为所求月份,days的值为所求日数。每月的天数仍需区分处理。3.源程序清单:#includestdio.hvoidgetdays(intmon,intdat);voidgetDate(inty,intdays,int*pm,int*pd);intisLeap(inty);intmain(){intm,d,y,days,year,month,date;printf(yearanddays:);scanf(%d,%d,&y,&days);printf(yearandmonthanddate);scanf(%d,%d,%d,&year,&month,&date);getDate(y,days,&m,&d);getdays(month,date);printf(%d-%d-%d\n,y,m,d);printf(%d\n,days);return0;}voidgetDate(inty,intdays,int*pm,int*pd){intm,d,day,i;for(i=1;i=12;i++){switch(i){case1:day=31;break;case2:if(isLeap(y))day=29;else{day=28;}break;case3:day=31;break;case4:day=30;break;case5:day=31;break;case6:day=30;break;case7:day=31;break;case8:day=31;break;case9:day=30;break;case10:day=31;break;case11:day=30;break;case12:day=31;break;}if(daysday){days=days-day;}elsebreak;}*pm=i;*pd=days;}voidgetdays(intmon,intdat){intyear;switch(mon-1){case12:dat=dat+31;case11:dat=dat+30;case10:dat=dat+31;case9:dat=dat+30;case8:dat=dat+31;case7:dat=dat+31;case6:dat=dat+30;case5:dat=dat+31;case4:dat=dat+30;case3:dat=dat+31;case2:if(isLeap(year))dat=dat+29;elsedat=dat+28;case1:dat=dat+31;}}intisLeap(inty){if(y%4==0&&y%100!=0||y%400==0)return1;elsereturn0;}4.测试用例设计任务四电费计算ex02_14.cpp问题描述电力公司根据如下税率表进行收费,:第1个300千瓦时以每千瓦时9美分计,下一个300千瓦时(到600千瓦时)以每千瓦时8美分计,再下一个400千瓦时(到1000千瓦时)以每千瓦时6美分计,超过1000千瓦时的电量以每千瓦时3美分计。(1)编写一个函数,计算每个客户的总用电费用。(2)写一个主函数,读取数据文件用电量.txt中的数据,调用计费函数计算每一个客户的总用电费用。将结果输出到另一个数据文件用电费用.txt。源数据文件由客户编号和用电量两列构成,生成的新数据文件列出三列:客户编号、用电量和总用电费用。(3)程序还要计算并输出客户数量、总耗电千瓦时和总的电费。源程序清单:#includestdio.hintgetshuif(intm);intmain(){intresult,qws,nums=0,qwss=0,results=0;longnum;FILE*fp1,*fp2;if((fp1=fopen(用电量.txt,r))==NULL){printf(fileopenerror!\n);return-1;}if((fp2=fopen(用电量2.txt,w))==NULL){printf(fileopenerror2!\n);return-1;}while(!feof(fp1)){fscanf(fp1,%ld%d\n,&num,&qws);intgetshuif(intm);result=getshuif(qws);fprintf(fp2,%ld%d%d\n,num,qws,result);nums=nums+1;qwss=qwss+qws;results=results+result;}fclose(fp1);fclose(fp2);printf(nums=%d,nums);printf(qwss=%d,qwss);printf(results=%d,results);return0;}intgetshuif(intm){intsum=0,y,num,tax;while(m0){if(m=300){y=m;m=m-300;num=1;}elseif(m=600){if(m==600){y=300;m=300;}else{y=m-300;m=300;}num=2;}elseif(m=1000){if(m==1000){y=400;m=600;}else{y=m-600;m=600;}num=3;}else{y=m-1000;m=1000;num=4;}switch(num){case1:tax=9;break;case2:tax=8;break;case3:tax=6;break;case4:tax=3;break;default:break;}sum=sum+y*tax;}returnsum;}测试用例:实验体会

1 / 9
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功