一.实验题目,设计思路,实现方法
题目一:3-7-7 计算火车运行时间
本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。
输入格式:
输入在一行中给出2个4位正整数,其间以空格分隔,分别表示火车的出发时间和到达时间。每个时间的格式为2位小时数(00-23)和2位分钟数(00-59),假设出发和到达在同一天内。
输出格式:
在一行输出该旅途所用的时间,格式为“hh:mm”,其中hh为2位小时数、mm为2位分钟数。
设计思路:这题的难点在于存在分钟借位的情况,所以答案中应就到达时间的分钟数与出发时间的分钟数的大小关系将计算式分为两类。当到达时间的分钟数小于出发时间的分钟数时,输出的小时数应等于到达时间的小时数减去出发时间的小时数再减去一;当到达时间的分钟数大于出发时间的分钟数时,输出的小时数应等于到达时间的小时数减去出发时间的小时数。
实现方法:用if-else语句实现了计算式的分类。
题目二:4-7 求平方与倒数序列的部分和
本题要求对两个正整数m和n(m≤n)编写程序,计算序列和m2+1/m+(m+1)2+1/(m+1)+⋯+n2+1/n。
输入格式:
输入在一行中给出两个正整数m和n(m≤n),其间以空格分开。
输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后六位。题目保证计算结果不超过双精度范围。
设计思路:本题需要反复相加,所以需要用循环语句时整个代码循环起来。
实现方法:用for语句实现循环。
题目三:4-2-8 计算天数
输入格式:
输入在一行中按照格式“yyyy/mm/dd”(即“年/月/日”)给出日期。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。闰年的2月有29天。
输出格式:
在一行输出日期是该年中的第几天。
设计思路:此题有两个重点,一是大小月天数不同,二是闰年与非闰年二月份的天数不同。所以此题应就以两个重点分别进行运算。
实现方法:首先运用for语句使整个过程循环起来,然后用switch语句来处理各大小月的天数问题(注意此时break语句的位置!),最后用if-else语句解决闰年与非闰年二月份的天数问题。
二.源程序
题目一:3-7-7 计算火车运行时间
#include<stdio.h>
int main()
{
int m,n;
scanf("%d %d",&m,&n);
int a,b,c,d;
a=m/100;
b=m%100;
c=n/100;
d=n%100;
int x,y;
if(b<=d){
x=c-a;
y=d-b;
}
else{
x=c-a-1;
y=d+60-b;
}
printf("%02d:%02d",x,y);
return 0;
}
题目二:4-2 求平方与倒数序列的部分和
#include<stdio.h>
int main(void)
{
int m,n,i;
double sum,item;
sum=0;
scanf("%d %d",&m,&n);
for(i=m;i<=n;i++){
item=i*i+1.0/i;
sum=sum+item;
m=m+1.0;
}
printf("sum = %.6f",sum);
return 0;
}
题目三:4-2-8 计算天数
#include <stdio.h>
int main(void) {
int year, month, day;
int days;
int i;
scanf("%d/%d/%d", &year, &month, &day);
days = day;
for(i = 1; i < month; i++) {
switch(i) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days += 31;
break;
case 4:
case 6:
case 9:
case 11:
days += 30;
break;
case 2:
if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
days += 29;
else
days += 28;
}
}
printf("%d
", days);
return 0;
}
三.遇到的问题及解决方法,心得体会
我的问题主要是对很多语句掌握的不够透彻,所以在使用时会出现许多错误和不解,但最终我都会通过询问老师同学或上网搜索解决问题。
体会:在做题时一定要认真看题,确保自己的输入输出符合题目要求,不让自己的时间浪费在粗心大意上。