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


相关文章
|
2天前
|
C语言
C语言5 字符输出函数和格式输出函数
C语言5 字符输出函数和格式输出函数
6 1
|
4天前
|
算法 编译器 C语言
深入浅出C语言—【函数】下
深入浅出C语言—【函数】下
|
16天前
|
Java C语言 C++
定义C语言的int main()函数
定义C语言的int main()函数
|
17天前
|
存储 移动开发 C语言
技术心得记录:嵌入式开发中常用到的C语言库函数
技术心得记录:嵌入式开发中常用到的C语言库函数
11 1
|
2天前
|
存储 C语言
C语言6 字符串输入和格式输入函数
C语言6 字符串输入和格式输入函数
7 0
|
7天前
|
存储 编译器 定位技术
结构体数组在C语言中的应用与优化策略
结构体数组在C语言中的应用与优化策略
|
13天前
|
存储 编译器 数据库
结构体数组在C语言中的应用与优化技巧
结构体数组在C语言中的应用与优化技巧
|
17天前
|
Java 程序员 Linux
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
19 0
|
17天前
|
C语言
C语言实现猜数字游戏:代码详解与函数解析
C语言实现猜数字游戏:代码详解与函数解析
12 0
|
17天前
|
程序员 C语言
C语言内存管理:malloc、calloc、realloc与free函数详解
C语言内存管理:malloc、calloc、realloc与free函数详解
13 0