一.實驗題目,設計思路,實現方法
題目一: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\n", days);
return 0;
}
三.遇到的問題及解決方法,心得體會
我的問題主要是對很多語句掌握的不夠透徹,所以在使用時會出現許多錯誤和不解,但最終我都會通過詢問老師同學或上網搜索解決問題。
體會:在做題時一定要認真看題,確保自己的輸入輸出符合題目要求,不讓自己的時間浪費在粗心大意上。
