1. 程式人生 > >【c語言趣味程式設計100例】打魚還是晒網

【c語言趣味程式設計100例】打魚還是晒網

問題 打魚還是晒網

程式設計思路:三天打魚 兩天晒網
實現的思路主要是要求出輸入的指定的時間和距離1990 01 01這個時間的天數
我們知道年份有閏年和平年之分 閏年2月份是29天 平年2月份28天
因此 定義一個函式runyear()用來判斷程式是否是閏年,這個程式模組化的思想我們一定要有
這樣能從本質上將程式碼功能之間的耦合降低 實現低耦合 
我們知道閏年,接著去定義一個函式 專門去計算總共的天數,
countDay();實現對天數的計算。用一個數組實現對月份的計算,陣列下標0 可以不用 直接用 1-12來儲存
每月的天數,因為2月的天數是不固定的,我們定義為28天,然後去判斷是否是閏年,如果是就加1操作
迴圈每年的天數,但是 從鍵盤上的輸入的這個年的的月份 也是應該加上,接著去判斷這個年份。
加上對應的月份 該月的天數,就實現對總天數的計算
程式的最後 就是對%5求餘數。1-3是打魚 4-5 晒網

 

#include<stdio.h>
/*
程式:三天打魚 兩天晒網
實現的思路主要是要求出輸入的指定的時間和距離1990 01 01這個時間的天數
我們知道年份有閏年和平年之分 閏年2月份是29天 平年2月份28天
因此 定義一個函式runyear()用來判斷程式是否是閏年,這個程式模組化的思想我們一定要有
這樣能從本質上將程式碼功能之間的耦合降低 實現低耦合 
我們知道閏年,接著去定義一個函式 專門去計算總共的天數,
countDay();實現對天數的計算。用一個數組實現對月份的計算,陣列下標0 可以不用 直接用 1-12來儲存
每月的天數,因為2月的天數是不固定的,我們定義為28天,然後去判斷是否是閏年,如果是就加1操作
迴圈每年的天數,但是 從鍵盤上的輸入的這個年的的月份 也是應該加上,接著去判斷這個年份。
加上對應的月份 該月的天數,就實現對總天數的計算
程式的最後 就是對%5求餘數。1-3是打魚 4-5 晒網
**/
//定義一個結構體型別 年 月 日
typedef struct date{

	int year;
	int month;
	int day;

}DATE;

int countDay(DATE );
int runyear(int );

void main(){

	DATE today;
	int totalDay;
	int result;

	printf("請輸入指定日期 年月日 1991 01 02\n");
	scanf("%d%d%d",&today.year,&today.month,&today.day);

   totalDay= countDay(today);
   result = totalDay%5;
   if(result>0&&result<4)
	   printf("今天打魚");
   else
	   printf("今天晒網");

}

//判斷這個年份是不是閏年
int runyear(int year){
	if((year%4==0&&year/100!=0)||(year/400==0))
		return 1;
	else
		return 0;
}

//計算這個年份總天數
int countDay(DATE currentDay){
	
	int perMonth[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
	
	int totalDay = 0,year,i;
	for(year=1990;year<currentDay.year;year++)
	{
		if(runyear(year))
			totalDay= totalDay+366;
		else
			totalDay = totalDay+365;
	}

	if(runyear(currentDay.year))
		perMonth[2]+=1;

	for(i=0;i<currentDay.month;i++){
		totalDay+=perMonth[i];
	}
	
	totalDay+=currentDay.day;
	
	return totalDay;
}