一.实验题目,设计思路,实现方法
7-7 计算火车运行时间(15 分)
本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。
设计思路
将两个四位正整数的前两位转为小时,后两位转为分钟,判断大小相减得旅途所用小时分钟,再按照格式输出。
实现方法
四位正整数/100即小时数,四位正整数%100即分钟数,到达分钟数大于出发分钟数则输出小时:分钟都为末-初,
小于则输出小时为末-初-1,输出分钟为末+60-初。
4-3 求N分之一序列前N项和(15 分)
本题要求编写程序,计算序列 1 + 1/2 + 1/3 + ... 的前N项之和。
设计思路
利用循环程序和序列规律(分母逐个递加分子都为1)将序列逐个累加。
实现方法
for语句循环条件为i=1,i小于等于N,i逐个递加,
S=S+1/i。
4-2-8 计算天数(15 分)
本题要求编写程序计算某年某月某日是该年中的第几天。
设计思路
先将月份按照非闰年的天数逐月定义,再累加前几月的总天数和当月的天数,最后若是闰年且大于二月则再加1,非闰年不加。
实现方法
先用循环语句将月份的总天数先加,再加天数,后用if-else语句判断是否闰年。
二.源程序(可只截取最关键的部分)
7-7
#include<stdio.h>
int main()
{
int a,b,c,d,e,f,g,h;
scanf("%d %d",&a,&b);
c=a/100;
d=a%100;
e=b/100;
f=b%100;
if (d <= f){
g=e-c;
h=f-d;
}
else {
g=e-c-1;
h=f+60-d;
}
printf("%02d:%02d",g,h);
return 0;
}
4-3
#include<stdio.h>
int main()
{
int N;
double S,i;
scanf("%d",&N);
S=0;
for(i=1;i<=N;i++){
S=1/i+S;
}
printf("sum = %.6f",S);
return 0;
}
4-2-8
#include<stdio.h>
int main()
{
int x,y,z,i,sum=0;
scanf("%d/%d/%d",&x,&y,&z);
int month[12]={31,28,31,30,31,30,31,31,30,31,30,31};
for(i=1;i<=y-1;i++){
sum=sum+month[i];
}
sum=sum+z;
if(x%4==0&&x%100!=0&&y>2){
sum=sum+1;
}
if(x%400==0&&y>2){
sum=sum+1;
}
else{
sum=sum;
}
printf("%d",sum);
return 0;
}
三.遇到的问题及解决方法,心得体会
7-7 计算火车运行时间(15 分)面对这题开始时对正常的四位正整数和小时:分钟之间的格式转换感到无从下手,通过宿舍兄弟的帮助现在已经学会用除法和求余的方法解决此类问题了。
4-3 求N分之一序列前N项和(15 分)这题不是一道难题,但对当时新接触循环语句的我,利用这题熟悉了for语句的使用方法,for的使用条件,累加的使用方式,为其他循环语句的练习打下了基础。
4-2-8 计算天数(15 分)面对每月没什么规律的天数卡壳了,最终用笨办法将所有月份的天数都列出来,再依靠month[i]累加得需要的天数,收获是以后遇到规律无法解决的问题会尝试一个数字一个数字求解。