C语言实验报告

 

一.实验题目,设计思路,实现方法

  1.实验题目

  4-2-8 计算天数

  本题要求编写程序计算某年某月某日是该年中的第几天。

    4-6 输出华氏-摄氏温度转换表

    输入2个正整数lowerupperlowerupper≤100),请输出一张取值范围为[lowerupper]、且每次增加2华氏度的华氏-摄氏温度转换表。

    温度转换的计算公式:C=5×(F32)/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的取值范围为[lowerupper]。每次计算逐一换行输出即可。

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

 

 


 

三.遇到的问题及解决方法,心得体会

    题中并没有其他的语法难点,最重要的是计算公式的正确与否,若是思路没有考虑清楚,直接写入计算公式,可能会遇到结果错误的情况出现。因此,在编写一段程序之前,应该要了解清楚程序中的运算公式的难点、临界点等问题,后将这些重要的点化为程序中分支等部分。而在题中也要注意的是对定义字符的标注,若是定义的字符较多并且没有标注很容易导致在之后对字符的混乱,导致对整个程序出现无从下手的情况。另外,可以提前看一些网络之中的网络课程、教程,这样能更早接触并理解一些题目中出现的难点。

posted @ 2017-10-21 19:39  Chitanda_Eru  阅读(367)  评论(0编辑  收藏  举报