实验三综合程序设计资料.docx
《实验三综合程序设计资料.docx》由会员分享,可在线阅读,更多相关《实验三综合程序设计资料.docx(14页珍藏版)》请在冰豆网上搜索。
实验三综合程序设计资料
上海建桥学院
程序设计基础C语言(本科)
实验报告
第一模块简单C程序设计模块名称:
综合型实验类型:
VC++6.0
)机房415(实验环境:
机电学院院别:
1-电科B13专业:
1121486学号:
周鹏飞学生姓名:
成长生指导老师:
第一学期年-20162015学期:
学号:
1121486姓名:
周鹏飞专业班级:
(电科)
(1)班
实验三综合程序设计
(1)理解输出参数的概念和运用场合
理解指针的概念
(2)掌握使用指针变量向主调函数传值的方法(3)
掌握数据文件的循环读取结构(4)掌握(5)fprintfsanf等文件操作语句的使用
任务一改错两数交换
打开程序文件error02_04.cpp改正程序中的错误。
Swap函数的功能是交换两个数的值,在main函数中指定两个数的大小,调用swap函数交换两个数的值输出。
正确的程序输出:
a=20,b=10
#include
voidswap(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;
}
#include
voidswap(int*pa,int*pb);
intmain()
{
inta=10,b=20;
swap(&a,&b);
printf(a=%d,b=%d\n,a,b);
return0;
}
学号:
1121486姓名:
周鹏飞专业班级:
(电科)
(1)班
voidswap(int*pa,int*pb)
{intt;
t=*pa;*pa=*pb;*pb=t;
}
任务二3个数排序
利用指针实现输入a,b,c共3个整数,按大小顺序输出。
要求:
编写exchange函数,功能是交换两个数的值。
在main函数中输入3个数,调用exchange函数实现3个数按大小顺序输出。
源程序清单:
#include
voidexchange(int*pa,int*pb);
voidmain()
{
inta,b,c;
printf(inputabc:
);
scanf(%d%d%d,&a,&b,&c);
if(c>b)
exchange(&c,&b);
if(b>a)
exchange(&b,&a);
if(c>b)
exchange(&c,&b);
printf(%d%d%d\n,a,b,c);
}
voidexchange(int*pa,int*pb)
{
inttemp;
temp=*pa;*pa=*pb;*pb=temp;
}
学号:
1121486姓名:
周鹏飞专业班级:
(电科)
(1)班
测试用例:
任务三日期换算ex02_11.cpp
打开程序文件ex02_11.cpp
#include
intisLeap(intyear);
voidgetDate(inty,intdays,int*pm,int*pd);
intgetDays(inty,intm,intd);
intmain(void)
{
学号:
1121486姓名:
周鹏飞)班1()电科(专业班级:
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)求某天是该年的几月几日
学号:
1121486姓名:
周鹏飞专业班级:
(电科)
(1)班
思路:
循环i从1月开始如果天数days比第i月的天数大则天数days减去第i月的天数否则结束循环。
i即为所求月份,days的值为所求日数。
每月的天数仍需区分处理。
源程序清单:
3.#include
intisLeap(intyear);
voidgetDate(inty,intdays,int*pm,int*pd);
intgetDays(inty,intm,intd);
voidmain()
{inty,m,d,days;
int*pm,*pd;
牰湩晴尨输入年份和天数:
);
scanf(%d%d,&y,&d);
getDate(y,d,&m,&d);
牰湩晴尨这天是%d年的%d月%d日\n,y,m,d);
牰湩晴尨输入年月日:
);
scanf(%d%d%d,&y,&m,&d);
days=getDays(y,m,d);
牰湩晴尨这天是%d年的第%d天\n,y,days);
}
//编写子函数求某天是该年的几月几日
voidgetDate(inty,intdays,int*pm,int*pd)
/*y为年份,days为该年的某天,pm指向主调函数中存放某天的月值变量,*/
/*pd指向主调函数中存放某天的日值变量*/
{intm,d,i;
intday;
for(i=1;i<=12;i++)
{
switch(i)
{case1:
case3:
case5:
case7:
case8:
case10:
case12:
day=31;break;
case2:
day=isLeap(y)?
29:
28;break;
case4:
case6:
case9:
case11:
day=30;break;
}
if(days<=day)
学号:
1121486姓名:
周鹏飞专业班级:
(电科)
(1)班
break;
else
days=days-day;
}
m=i;/*m:
某天计算后的月值*/
d=days;/*d:
某天计算后的日值*/
*pm=m;
*pd=d;
}
//编写子函数求某年某月某日是该年的第几天
intgetDays(inty,intm,intd)
{
intdays=0;
switch(m-1)
{
case12:
days+=31;
case11:
days+=30;
case10:
days+=31;
case9:
days+=30;
case8:
days+=31;
case7:
days+=31;
case6:
days+=30;
case5:
days+=31;
case4:
days+=30;
case3:
days+=31;
case2:
days+=isLeap(y)?
29:
28;
case1:
days+=31;
}
days=days+d;
returndays;
}
//编写子函数判断闰年。
intisLeap(intyear)
{
return(year%4==0&&year_x0010_0!
=0||year@0==0);
}
4.测试用例设计
学号:
1121486姓名:
周鹏飞)班1()电科(专业班级:
ex02_14.cpp
电费计算任务四
问题描述300美分计,下一个1个300千瓦时以每千瓦时9电力公司根据如下税率表进行收费,:
第千瓦时)以10008美分计,再下一个400千瓦时(到千瓦时(到600千瓦时)以每千瓦时美分计。
6美分计,超过1000千瓦时的电量以每千瓦时3每千瓦时编写一个函数,计算每个客户的总用电费用。
(1)
调用计费函数计算每一个客户的中的数据,写一个主函数,)读取数据文件用电量.txt(2源数据文件由客户编号。
总用电费用。
将结果输出到另一个数据文件用电费用.txt客户编号、用电量和总用电费用。
和用电量两列构成,生成的新数据文件列出三列:
程序还要计算并输出客户数量、总耗电千瓦时和总的电费。
(3)源程序清单:
#include
intgetmoney(intw);
intmain()
intm,w;{
FILE*fin;
FILE*fout;
.txt,
))==NULL)用电量晩?
楦?
潦数?
{printf(cannotopenfile!
);
return-1;
}
.txt,w))==NULL)
用电费用晩?
昨畯?
潦数?
1)电科(周鹏飞1121486学号:
姓名:
专业班级:
()班
{printf(cannotopenfile用电费用.txt!
);
return-1;
}
while(!
feof(fin))
{
fscanf(fin,%d,&w);
m=getmoney(w);
灦楲瑮?
潦瑵尬电费=%d,m);
}
fclose(fin);
fclose(fout);
return0;
}
intgetmoney(intw)
{
intmoney;
if(w<=300)
money=9*w;
else
if(w<=600)
money=300*9+8*(w-300);
else
if(w<=1000)
money=300*9+300*8+6*(w-600);
else
money=300*9+300*8+400*6+3*(w-1000);
returnmoney;
}
测试用例:
学号:
1121486姓名:
周鹏飞)班1()电科(专业班级:
实验体会实验过程评价:
碰到什么问题?
如何解决?
1.第二次做指针的实验,明显比第一次熟练了,不过细节上的小错误还是很多。
三个数比大小调试用例的时候,发现最小的数总在中间不会跑到最后面去,然后发现要一2.交换后的第一第二个数需要重新再比较一次大小才能保证三个数一定共比较三次大小才行,跟同学仔细看程序了好几遍虽然不报错但是发现结果也不对,是降序排列。
在编写天数中,中间case2:
days+=isLeap(y)?
29:
28;天还有才发现,case46911月的天数也不小心写成了31”没有加上,导致统计天数老是不能到三位数。
编程还是要非常细心的。
最后一题统+的“”是制表符自动空行\t计用电量中间,客户编号这行语下面的数据总是对不齐,老师说过“的,实在没有办法改第一列的空行,所以只能手动的敲打了几个空格,让它手动的对齐了。
1)电科(周鹏飞1121486学号:
姓名:
专业班级:
()班