程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> C語言實例之打魚還是曬網

C語言實例之打魚還是曬網

編輯:關於C

根據題意可以將解題過程分為三步:

  *問題分析與算法設計

  根據題意可以將解題過程分為三步:

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

  2)由於“打魚”和“曬網”的周期為5天,所以將計算出的天數用5去除;

  3)根據余數判斷他是在“打魚”還是在“曬網”;

  若 余數為1,2,3,則他是在“打魚”

  否則 是在“曬網”

  在這三步中,關鍵是第一步。求從1990年1月1日至指定日期有多少天,要判斷經歷年份中是否有閏年,二月為29天,平年為28天。閏年的方法可以用偽語句描述如下:

  如果 ((年能被4除盡 且 不能被100除盡)或 能被400除盡)

  則 該年是閏年;

  否則 不是閏年。

  C語言中判斷能否整除可以使用求余運算(即求模)

  *程序說明與注釋

  #include<stdio.h>

  int days(struct date day);

  struct date{

  int year;

  int month;

  int day;

  };

  int main()

  {

  struct date today,term;

  int yearday,year,day;

  printf("Enter year/month/day:");

  scanf("%d%d%d",&today.year,&today.month,&today.day); /*輸入日期*/

  term.month=12; /*設置變量的初始值:月*/

  term.day=31; /*設置變量的初始值:日*/

  for(yearday=0,year=1990;year<today.year;year++)

  {

  term.year=year;

  yearday+=days(term); /*計算從1990年至指定年的前一年共有多少天*/

  }

  yearday+=days(today); /*加上指定年中到指定日期的天數*/

  day=yearday%5; /*求余數*/

  if(day>0&&day<4) printf("he was fishing at that day.\n"); /*打印結果*/

  else printf("He was sleeping at that day.\n");

  }

  int days(struct date day)

  {

  static int day_tab[2][13]=

  {{0,31,28,31,30,31,30,31,31,30,31,30,31,}, /*平均每月的天數*/

  {0,31,29,31,30,31,30,31,31,30,31,30,31,},

  };

  int i,lp;

  lp=day.year%4==0&&day.year%100!=0||day.year%400==0;

  /*判定year為閏年還是平年,lp=0為平年,非0為閏年*/

  for(i=1;i<day.month;i++) /*計算本年中自1月1日起的天數*/

  day.day+=day_tab[lp][i];

  return day.day;

  }

  *運行結果

  Enter year/month/day:1991 10 25

  He was fishing at day.

  Enter year/month/day:1992 10 25

  He was sleeping at day.

  Enter year/month/day:1993 10 25

  He was sleeping at day.

*
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved