实验三综合程序设计资料.docx

上传人:b****6 文档编号:6987889 上传时间:2023-01-15 格式:DOCX 页数:11 大小:155.85KB
下载 相关 举报
实验三综合程序设计资料.docx_第1页
第1页 / 共11页
实验三综合程序设计资料.docx_第2页
第2页 / 共11页
实验三综合程序设计资料.docx_第3页
第3页 / 共11页
实验三综合程序设计资料.docx_第4页
第4页 / 共11页
实验三综合程序设计资料.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

实验三综合程序设计资料.docx

《实验三综合程序设计资料.docx》由会员分享,可在线阅读,更多相关《实验三综合程序设计资料.docx(11页珍藏版)》请在冰豆网上搜索。

实验三综合程序设计资料.docx

实验三综合程序设计资料

上海建桥学院

 

程序设计基础C语言(本科)

实验报告

 

模块名称:

第一模块简单C程序设计

实验类型:

综合型

实验环境:

(415)机房VC++6.0

院别:

机电学院

专业:

电科B13-1

学号:

1121486

学生姓名:

周鹏飞

指导老师:

成长生

学期:

2015年-2016第一学期

实验三综合程序设计

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

}

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;

}

测试用例:

任务三日期换算ex02_11.cpp

打开程序文件ex02_11.cpp

#include

intisLeap(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.源程序清单:

#include

intisLeap(intyear);

voidgetDate(inty,intdays,int*pm,int*pd);

intgetDays(inty,intm,intd);

voidmain()

{inty,m,d,days;

int*pm,*pd;

printf("输入年份和天数:

");

scanf("%d%d",&y,&d);

getDate(y,d,&m,&d);

printf("这天是%d年的%d月%d日\n",y,m,d);

printf("输入年月日:

");

scanf("%d%d%d",&y,&m,&d);

days=getDays(y,m,d);

printf("这天是%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)

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%100!

=0||year%400==0);

}

4.测试用例设计

任务四电费计算ex02_14.cpp

问题描述

电力公司根据如下税率表进行收费,:

第1个300千瓦时以每千瓦时9美分计,下一个300千瓦时(到600千瓦时)以每千瓦时8美分计,再下一个400千瓦时(到1000千瓦时)以每千瓦时6美分计,超过1000千瓦时的电量以每千瓦时3美分计。

(1)编写一个函数,计算每个客户的总用电费用。

(2)写一个主函数,读取数据文件用电量.txt中的数据,调用计费函数计算每一个客户的总用电费用。

将结果输出到另一个数据文件用电费用.txt。

源数据文件由客户编号和用电量两列构成,生成的新数据文件列出三列:

客户编号、用电量和总用电费用。

(3)程序还要计算并输出客户数量、总耗电千瓦时和总的电费。

源程序清单:

#include

intgetmoney(intw);

intmain()

{intm,w;

FILE*fin;

FILE*fout;

if((fin=fopen("用电量.txt","r"))==NULL)

{printf("cannotopenfile!

");

return-1;

}

if((fout=fopen("用电费用.txt","w"))==NULL)

{printf("cannotopenfile用电费用.txt!

");

return-1;

}

while(!

feof(fin))

{

fscanf(fin,"%d",&w);

m=getmoney(w);

fprintf(fout,"电费=%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;

}

测试用例:

实验体会

实验过程评价:

碰到什么问题?

如何解决?

1.第二次做指针的实验,明显比第一次熟练了,不过细节上的小错误还是很多。

2.三个数比大小调试用例的时候,发现最小的数总在中间不会跑到最后面去,然后发现要一共比较三次大小才行,交换后的第一第二个数需要重新再比较一次大小才能保证三个数一定是降序排列。

在编写天数中,虽然不报错但是发现结果也不对,跟同学仔细看程序了好几遍才发现,case46911月的天数也不小心写成了31天还有case2:

days+=isLeap(y)?

29:

28;中间的“+”没有加上,导致统计天数老是不能到三位数。

编程还是要非常细心的。

最后一题统计用电量中间,客户编号这行语下面的数据总是对不齐,老师说过“\t”是制表符自动空行的,实在没有办法改第一列的空行,所以只能手动的敲打了几个空格,让它手动的对齐了。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1