C语言实验报告
一.实验题目,设计思路,实现方法
1.实验题目
4-2-8 计算天数
本题要求编写程序计算某年某月某日是该年中的第几天。
4-6 输出华氏-摄氏温度转换表
输入2个正整数
lower
和upper
(lower
≤upper
≤100),请输出一张取值范围为[lower
,upper
]、且每次增加2华氏度的华氏-摄氏温度转换表。温度转换的计算公式:C=5×(F−32)/9,其中:C表示摄氏温度,F表示华氏温度。
7-7 计算火车运行时间
本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。
2.设计思路
1.4-2-8 计算天数
根据输入的yyyy/mm/dd判断闰年与否后,将除了当月月份之前的月份所含天数即mm-1前的总天数相加,最后加上输入中的dd即可。
2.4-6 输出华氏-摄氏温度转换表
首先判断输入的两组数据的合法性,即查lower是否大于upper,若违规直接输出“Invalid.”,若合乎规定则将标题fahr celsius后,逐行输出递增的数值即可。
3.7-7 计算火车运行时间
对前后两组时间首先拆分成为两组四份数值后,再进行减法运算,最后运算完成依据格式输出。
3.实现方法
1.首先是对于4-2-8 计算天数的说明。
本题中,计算总天数需注意的是不同月份所有的不同天数,要将月份以天数赋值。在经过判断闰年与否的分支后,确定“2月”的天数,然后进行简单的累加计算即可。
2.其次是为4-6 输出华氏-摄氏温度转换表。
依据“每次增加2华氏度的华氏-摄氏温度转换表”,确定本题是以循环为基础的实验题。要求输出一个输入数值期间递增的数据表,即确定了其循环的区间范围,故确定一个每次增加2的自定义函数I的取值范围为[lower
,upper
]。每次计算逐一换行输出即可。
3.最后说明的是7-7 计算火车运行时间。
本题中最为重要的是将四位整数拆分,化为hh:mm,以方便进行计算。故对输入的四位整数直接使用求余或者除法运算,得到前后两组的hh以及mm。对前后两组的时间值进行减法运算。但要注意的是,若是到达时间mm的数值小于起始时间mm的数值,需要向结束时间的小时借去1单位转化为分钟,避免负数出现,从而使用了if作为分支。相减结束后依据格式输出即可。
二.源程序(可只截取最关键的部分)
4-2-8 计算天数
1 int months[12]={31,28,31,30,31,30,31,31,30,31,30,31}; 2 if((year%4==0&&year%100!=0)||year%400==0) 3 { 4 months[1]=29; 5 for(int i=1; i<month; i++) 6 { 7 days+=months[i]; 8 } 9 } 10 else 11 { 12 for(int i=1; i<month; i++) 13 { 14 days+=months[i]; 15 } 16 } 17 days+=day; 18 printf("%d\n",days);
4-6 输出华氏-摄氏温度转换表
1 if(l>u) 2 printf("Invalid.\n"); 3 else 4 { 5 printf("fahr celsius\n"); 6 for(i=l;i<=u;i+=2) 7 { 8 c=5.0*(i-32)/9; 9 printf("%d%6.1lf\n",i,c); 10 } 11 }
7-7 计算火车运行时间
1 scanf("%d%d",&s,&e); 2 a=s/100;//开始时间的小时 3 b=s%100;//开始时间的分钟 4 c=e/100;//结束时间的小时 5 d=e%100;//结束时间的分钟 6 7 if(b<=d) 8 { 9 x=c-a; 10 y=d-b; 11 } 12 13 else 14 { 15 x=c-a-1; 16 y=60+d-b; 17 } 18 19 printf("%02d:%02d\n",x,y);
三.遇到的问题及解决方法,心得体会
题中并没有其他的语法难点,最重要的是计算公式的正确与否,若是思路没有考虑清楚,直接写入计算公式,可能会遇到结果错误的情况出现。因此,在编写一段程序之前,应该要了解清楚程序中的运算公式的难点、临界点等问题,后将这些重要的点化为程序中分支等部分。而在题中也要注意的是对定义字符的标注,若是定义的字符较多并且没有标注很容易导致在之后对字符的混乱,导致对整个程序出现无从下手的情况。另外,可以提前看一些网络之中的网络课程、教程,这样能更早接触并理解一些题目中出现的难点。