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


相关文章
|
8天前
|
搜索推荐 C语言
【排序算法】快速排序升级版--三路快排详解 + 实现(c语言)
本文介绍了快速排序的升级版——三路快排。传统快速排序在处理大量相同元素时效率较低,而三路快排通过将数组分为三部分(小于、等于、大于基准值)来优化这一问题。文章详细讲解了三路快排的实现步骤,并提供了完整的代码示例。
30 4
|
19天前
|
存储 算法 数据管理
C语言算法复杂度
【10月更文挑战第20天】
C语言算法复杂度
|
7天前
|
C语言
c语言调用的函数的声明
被调用的函数的声明: 一个函数调用另一个函数需具备的条件: 首先被调用的函数必须是已经存在的函数,即头文件中存在或已经定义过; 如果使用库函数,一般应该在本文件开头用#include命令将调用有关库函数时在所需要用到的信息“包含”到本文件中。.h文件是头文件所用的后缀。 如果使用用户自己定义的函数,而且该函数与使用它的函数在同一个文件中,一般还应该在主调函数中对被调用的函数做声明。 如果被调用的函数定义出现在主调函数之前可以不必声明。 如果已在所有函数定义之前,在函数的外部已做了函数声明,则在各个主调函数中不必多所调用的函数在做声明
22 6
|
9天前
|
搜索推荐 算法 C语言
【排序算法】八大排序(上)(c语言实现)(附源码)
本文介绍了四种常见的排序算法:冒泡排序、选择排序、插入排序和希尔排序。通过具体的代码实现和测试数据,详细解释了每种算法的工作原理和性能特点。冒泡排序通过不断交换相邻元素来排序,选择排序通过选择最小元素进行交换,插入排序通过逐步插入元素到已排序部分,而希尔排序则是插入排序的改进版,通过预排序使数据更接近有序,从而提高效率。文章最后总结了这四种算法的空间和时间复杂度,以及它们的稳定性。
50 8
|
9天前
|
搜索推荐 算法 C语言
【排序算法】八大排序(下)(c语言实现)(附源码)
本文继续学习并实现了八大排序算法中的后四种:堆排序、快速排序、归并排序和计数排序。详细介绍了每种排序算法的原理、步骤和代码实现,并通过测试数据展示了它们的性能表现。堆排序利用堆的特性进行排序,快速排序通过递归和多种划分方法实现高效排序,归并排序通过分治法将问题分解后再合并,计数排序则通过统计每个元素的出现次数实现非比较排序。最后,文章还对比了这些排序算法在处理一百万个整形数据时的运行时间,帮助读者了解不同算法的优劣。
37 7
|
12天前
|
机器学习/深度学习 JSON 算法
二叉树遍历算法的应用场景有哪些?
【10月更文挑战第29天】二叉树遍历算法作为一种基础而重要的算法,在许多领域都有着不可或缺的应用,它为解决各种复杂的问题提供了有效的手段和思路。随着计算机科学的不断发展,二叉树遍历算法也在不断地被优化和扩展,以适应新的应用场景和需求。
23 0
|
20天前
|
存储 算法 程序员
C语言:库函数
C语言的库函数是预定义的函数,用于执行常见的编程任务,如输入输出、字符串处理、数学运算等。使用库函数可以简化编程工作,提高开发效率。C标准库提供了丰富的函数,满足各种需求。
|
23天前
|
存储 C语言
【c语言】字符串函数和内存函数
本文介绍了C语言中常用的字符串函数和内存函数,包括`strlen`、`strcpy`、`strcat`、`strcmp`、`strstr`、`strncpy`、`strncat`、`strncmp`、`strtok`、`memcpy`、`memmove`和`memset`等函数的使用方法及模拟实现。文章详细讲解了每个函数的功能、参数、返回值,并提供了具体的代码示例,帮助读者更好地理解和掌握这些函数的应用。
19 0
|
存储 C语言
【C语言】 条件操作符 -- 逗号表达式 -- []下标访问操作符,()函数调用操作符 -- 常见关键字 -- 指针 -- 结构体
【C语言】 条件操作符 -- 逗号表达式 -- []下标访问操作符,()函数调用操作符 -- 常见关键字 -- 指针 -- 结构体
【C语言】——define和指针与结构体初识
【C语言】——define和指针与结构体初识