03【C语言 & 趣味算法】(值得品味的一道题)打鱼还是晒网?结构体的简单应用。函数的应用。判断闰年的应用。求指定日期距1990年1月1日的天数。

简介: 03【C语言 & 趣味算法】(值得品味的一道题)打鱼还是晒网?结构体的简单应用。函数的应用。判断闰年的应用。求指定日期距1990年1月1日的天数。

一、指路哦



02【C语言&趣味算法】借书方案问题:小明有5本新书,要借给A、B、C三位小朋友,若每人每次只能借1本,则可以有多少种不同的借法?


01【C语言&趣味算法】百钱百鸡问题(问题简单,非初学者请忽略叭)。请注意算法的设计(程序的框架),程序流程图的绘制,算法的优化。


三、打鱼还是晒网呦?



3.1问题描述

b65a4eebcd044f07ad6497a5e6211acf.jpg


3.2问题分析

78b45bad04dc48c49b4b22ad271b7e48.jpg


3.3算法设计

25ac0a02dbe7499c8c50b0e3e12f5fd5.jpg


3.4确定程序框架

程序流程图如下:


64b44c1ac1474c65a80313340dbbac37.jpg

根据流程,构建程序框架如下:


c8be1949791e4f14a225fab64abfa896.jpg


3.5求出指定日期距1990年1月1日的天数

6f5e23072626444aad78e407bb805d4f.jpg91dd57cf241b43e5af87034284fd68a0.jpg


3.6完整code 及结果


本例的趣味之处,在于使用结构体来巧妙存储表达年、月、日三个变量。

同时,通过自定义的判断闰年О函数以及求距离1990年1月1日的天数的函数,也是本题比较巧妙的—点。


总之,本题还是十分值得“品味”滴,下面来看源代码吧!


// 趣味03:打鱼 还是 晒网? 
#include<stdio.h>
/*定义日期结构体*/
typedef struct date {
int year;
int month;
int day;
}DATE;
int countDay(DATE);                 /*函数声明*/
int runYear(int);                   /*函数声明*/
int main()
{
  DATE  today;                  /*指定日期*/
  int totalDay;                 /*指定日期距离1990年1月1日的天数*/
  int result;/*totalDay对5取余的结果*/
  /*输入指定日期,包括年,月,日*/
  printf("please input 指定日期 包括年,月,日 如:1999 1 31\n");
  scanf("%d%d%d",&today.year,&today.month,&today.day);
  /*求出指定日期距离1990年1月1日的天数*/
  totalDay=countDay(today);
  /*天数%5,判断输出打鱼还是晒网*/
  result=totalDay%5;
  if(result>0&&result<4)
    printf("今天打鱼");
  else
    printf("今天晒网");
}
/*判断是否为闰年,是返回1,否返回0*/
int runYear(int year)
{
  if((year%4==0&&year%100!=0)||(year%400==0))     /*是闰年*/
    return 1;
  else
    return 0;
} 
/*计算指定日期距离1990年1月1日的天数*/
int countDay(DATE currentDay)
{
  int perMonth[13]={0,31,28,31,30,31,30,31,31,30,31,30};    /*每月天数数组*/
  int totalDay=0,year,i;
  /*求出指定日期之前的每一年的天数累加和*/
  for(year=1990;year<currentDay.year;year++)
  {
    if(runYear(year))               /*判断是否为闰年*/
      totalDay=totalDay+366;
    else
      totalDay=totalDay+365;
  }
  /*如果为闰年,则二月份为29天*/
  if(runYear(currentDay.year))
    perMonth[2]+=1;
  /*将本年内的天数累加到totalDay中*/
  for(i=0;i<currentDay.month;i++)
    totalDay+=perMonth[i];
  /*将本月内的天数累加到totalDay中*/
  totalDay+=currentDay.day;
  /*返回totalDay*/
  return totalDay;
}


结果:测试了几个结果,拼到—起啦,看着比较方便咯~


24ef4bb47c3b4a2c88d7bc4657ee705b.jpg


相关文章
|
13天前
|
程序员 C语言
C语言库函数 — 内存函数(含模拟实现内存函数)
C语言库函数 — 内存函数(含模拟实现内存函数)
24 0
|
24天前
|
编译器 C语言 C++
【C语言】memset()函数(内存块初始化函数)
【C语言】memset()函数(内存块初始化函数)
26 0
|
6天前
|
数据采集 算法 数据可视化
R语言聚类算法的应用实例
R语言聚类算法的应用实例
81 18
R语言聚类算法的应用实例
|
7天前
|
算法 数据可视化 数据挖掘
R语言社区主题检测算法应用案例
R语言社区主题检测算法应用案例
|
13天前
|
程序员 C语言 开发者
C语言库函数 — 字符串函数(含模拟实现字符串函数)
C语言库函数 — 字符串函数(含模拟实现字符串函数)
35 0
|
19天前
|
存储 C语言
【我爱C语言】详解字符函数isdigit和字符串转换函数(atoi和snprintf实现互相转换字符串)&&三种strlen模拟实现1
【我爱C语言】详解字符函数isdigit和字符串转换函数(atoi和snprintf实现互相转换字符串)&&三种strlen模拟实现
|
19天前
|
机器学习/深度学习 C语言
【C语言】函数的系统化精讲(三)1
【C语言】函数的系统化精讲(三)
|
19天前
|
编译器 C语言
【C语言】函数的系统化精讲(一)2
【C语言】函数的系统化精讲(一)2
|
19天前
|
编译器 Serverless C语言
【C语言】函数的系统化精讲(一)1
【C语言】函数的系统化精讲(一)
|
19天前
|
存储 程序员 编译器
【C语言第二回】main、printf和库函数
【C语言第二回】main、printf和库函数