欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言算法練習(xí)之打魚還是曬網(wǎng)

 更新時間:2022年03月23日 17:10:47   作者:飛向星的客機  
這篇文章主要該大家分享C語言打魚還是曬網(wǎng)的練習(xí),文章主要通過三天打魚兩天曬網(wǎng)的俗語提出問題,在某一天輪到打魚還是曬網(wǎng),下面來看詳細(xì)內(nèi)容吧,需要的朋友可以參考一下

1. 問題描述

中國有句俗語叫 “ 三天打魚兩天曬網(wǎng) ”。某人從 1990 年 1 月 1 日起開始 “三天打魚兩天曬網(wǎng)”,問這個人在以后的某一天中是 “打魚” 還是 “曬網(wǎng)”。

2. 題目分析

根據(jù)題意可以將解題過程分為 3 步:

(1) 計算從 1990 年 1 月 1 日開始至指定日期共有多少天。

(2) 由于 “打魚” 和 “曬網(wǎng)” 的周期為 5 天,所以將計算出的天數(shù)用 5 去除。

(3) 根據(jù)余數(shù)判斷他是在 “打魚” 還是在 “曬網(wǎng)”。

若余數(shù)為 1, 2, 3,則他是在 “打魚”,否則是在 “曬網(wǎng)”。

3. 算法設(shè)計

該算法為數(shù)值計算算法,要利用循環(huán)求出指定日期距 1990 年 1 月 1 日的天數(shù),并考慮到循環(huán)過程中的閏年情況,閏年二月為 29 天,平年二月為 28 天。

判斷閏年的方法如下:

如果(能被 4 整除并且不能被 100 整除)或者(能被 400 整除)則該年是閏年;否則不是閏年。

提示:C語言中判斷能否整除可以使用求余運算符 %。

4. 流程框架

?? 求出指定日期距離

這里為整個算法的核心部分,經(jīng)過分析可以得到: (指定日期距離 1990 年 1 月 1 日的天數(shù))totalDay = 1990 年到指定年的前一年共有多少天 + 指定年中到指定日期的天數(shù)。

由于每月天數(shù)不同,可以設(shè)置一個月份數(shù)組int perMonth[13],存放每月的天數(shù)。

程序利用年份作為循環(huán)變量,要判斷指定年份之前的每一年是否為閏年,若為閏年則執(zhí)行totalDay=totalDay+366,否則執(zhí)行 totalDay=totalDay+365;

對于指定年份,也要判定是否為閏年,然后根據(jù)月份數(shù),將每月的天數(shù)累加到 totalDay 中。

perMonth 數(shù)組的初始化設(shè)置如下圖所示

perMonth 數(shù)組設(shè)置含有 13 個元素,perMonth[0]元素并不使用。

原因在于這種設(shè)置可以使數(shù)組下標(biāo)和月份對應(yīng),便于編程設(shè)置循環(huán)變量,數(shù)組中 2 月天數(shù)初始設(shè)置為 28,如果當(dāng)前年份為閨年,則需要執(zhí)行 perMonth[2]++ 操作。

設(shè)計一個函數(shù)int run Year(int year) 來判斷是否為閏年。

求總天數(shù)函數(shù)int countDay(Date currentDay)的實現(xiàn)。

5. 代碼實現(xiàn)

完整代碼??

#include <stdio.h>

//定義日期結(jié)構(gòu)體
typedef struct DATE
{
	int year;
	int month;
	int day;
}DATE;

//判斷閏年函數(shù)
int runYear(int year)
{
	if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
		return 1;
	else
		return 0;
}

//計算指定日期距離 1990 年 1 月 1 日的天數(shù)
int countDay(DATE currentDay)
{
	//定義一個每月天數(shù)的數(shù)組
	int perMonth[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };

	int totalDay = 0;
	int i = 0;
	int year = 0;

	//求出指定日期之前的每一年的天數(shù)累加和
	for (year = 1990; year < currentDay.year; year++)
	{
		if (runYear(year))
		{
			totalDay = totalDay + 366;
		}
		else
		{
			totalDay = totalDay + 365;
		}
	}
	
	//如果為閏年,則2月份為29天
	if (runYear(currentDay.year))
	{
		perMonth[2]++;
	}

	//將本年內(nèi)的天數(shù)累加到totalDay中
	for (i = 1; i < currentDay.month; i++)
	{
		totalDay += perMonth[i];
	}

	//將本月內(nèi)的天數(shù)累加到totalDay中
	totalDay += currentDay.day;

	return totalDay;
}

int main()
{
	DATE today; //指定日期
	int totalDay; //指定日期距離1990年1月1日的天數(shù)
	int result; //totalDay對5取余的結(jié)果

	printf("請輸入指定日期,包括年,月,日,例如:1999 1 31\n");
	printf("請輸入>:");
	scanf("%d%d%d", &today.year, &today.month, &today.day);

	totalDay = countDay(today); //求出指定日期距離1990年1月1日的天數(shù)

	result = totalDay % 5; //天數(shù)%5 判斷是打魚還是曬網(wǎng)
	if (result > 0 && result < 4)
	{
		printf("今天打魚\n");
	}
	else
	{
		printf("今天曬網(wǎng)\n");
	}
}

運行結(jié)果??

我們怎么判斷出這個程序是正確的呢? 很簡單,因為題目是從 1990 年 1 月 1 日開始的,那么1,2,3日肯定是 “打魚” ;4,5日肯定是 “曬網(wǎng)”。

到此這篇關(guān)于C語言算法練習(xí)之打魚還是曬網(wǎng)的文章就介紹到這了,更多相關(guān)C語言 打魚還是曬網(wǎng)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言多種獲取字符串長度的方法

    C語言多種獲取字符串長度的方法

    這篇文章主要介紹了C語言多種獲取字符串長度的方法,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 詳解C語言如何實現(xiàn)雙向帶頭循環(huán)鏈表

    詳解C語言如何實現(xiàn)雙向帶頭循環(huán)鏈表

    雙向帶頭循環(huán)鏈表應(yīng)該是鏈表中非常方便的一種,可以很容易的在任意位置上進行插入和刪除,可以很容易的對鏈表進行管理。本文將利用C語言實現(xiàn)雙向帶頭循環(huán)鏈表,需要的可以參考一下
    2022-08-08
  • C語言實現(xiàn)統(tǒng)計100以內(nèi)所有素數(shù)的個數(shù)

    C語言實現(xiàn)統(tǒng)計100以內(nèi)所有素數(shù)的個數(shù)

    本文詳細(xì)講解了C語言實現(xiàn)統(tǒng)計100以內(nèi)所有素數(shù)個數(shù)的方法,文中通過示例代碼介紹的非常詳細(xì)。需要的朋友可以收藏下,方便下次瀏覽觀看
    2021-11-11
  • C++知識點之inline函數(shù)、回調(diào)函數(shù)和普通函數(shù)

    C++知識點之inline函數(shù)、回調(diào)函數(shù)和普通函數(shù)

    這篇文章主要給大家介紹了關(guān)于C++知識點之inline函數(shù)、回調(diào)函數(shù)和普通函數(shù)的相關(guān)使用方法,以及回調(diào)函數(shù)和普通函數(shù)的區(qū)別小結(jié),文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-07-07
  • C++虛函數(shù)及虛函數(shù)表簡析

    C++虛函數(shù)及虛函數(shù)表簡析

    這篇文章主要介紹了C++虛函數(shù)及虛函數(shù)表,內(nèi)容非常詳細(xì),思路清晰,需要的朋友可以參考下
    2015-08-08
  • C++Fstream文件流與freopen重定向操作教程

    C++Fstream文件流與freopen重定向操作教程

    這篇文章主要介紹了C++Fstream文件流與freopen重定向教程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • Qt QCompleter自動補全的實現(xiàn)

    Qt QCompleter自動補全的實現(xiàn)

    本文主要介紹了Qt QCompleter自動補全的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • C語言數(shù)據(jù)結(jié)構(gòu)順序表中的增刪改(尾插尾刪)教程示例詳解

    C語言數(shù)據(jù)結(jié)構(gòu)順序表中的增刪改(尾插尾刪)教程示例詳解

    這篇文章主要為大家介紹了C語言數(shù)據(jù)結(jié)構(gòu)順序表中的增刪改教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-02-02
  • C++ 實現(xiàn)哈希表的實例

    C++ 實現(xiàn)哈希表的實例

    這篇文章主要介紹了C++ 實現(xiàn)哈希表的實例的相關(guān)資料,這里使用C++實現(xiàn)哈希表的實例幫助大家徹底理解哈希表的原理,需要的朋友可以參考下
    2017-08-08
  • 深入了解C++中基于模板的類型擦除

    深入了解C++中基于模板的類型擦除

    在C\C++中主要有三種類型擦除的方式:基于void*的類型擦除、面向?qū)ο蟮念愋筒脸突谀0宓念愋筒脸?本文主要為大家詳細(xì)介紹基于模板的類型擦除的相關(guān)知識,需要的可以了解下
    2023-12-12

最新評論