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


相关文章
|
16天前
|
存储 网络协议 编译器
【C语言】深入解析C语言结构体:定义、声明与高级应用实践
通过根据需求合理选择结构体定义和声明的放置位置,并灵活结合动态内存分配、内存优化和数据结构设计,可以显著提高代码的可维护性和运行效率。在实际开发中,建议遵循以下原则: - **模块化设计**:尽可能封装实现细节,减少模块间的耦合。 - **内存管理**:明确动态分配与释放的责任,防止资源泄漏。 - **优化顺序**:合理排列结构体成员以减少内存占用。
86 14
|
20天前
|
存储 C语言 开发者
【C语言】字符串操作函数详解
这些字符串操作函数在C语言中提供了强大的功能,帮助开发者有效地处理字符串数据。通过对每个函数的详细讲解、示例代码和表格说明,可以更好地理解如何使用这些函数进行各种字符串操作。如果在实际编程中遇到特定的字符串处理需求,可以参考这些函数和示例,灵活运用。
40 10
|
20天前
|
存储 程序员 C语言
【C语言】文件操作函数详解
C语言提供了一组标准库函数来处理文件操作,这些函数定义在 `<stdio.h>` 头文件中。文件操作包括文件的打开、读写、关闭以及文件属性的查询等。以下是常用文件操作函数的详细讲解,包括函数原型、参数说明、返回值说明、示例代码和表格汇总。
42 9
|
20天前
|
存储 Unix Serverless
【C语言】常用函数汇总表
本文总结了C语言中常用的函数,涵盖输入/输出、字符串操作、内存管理、数学运算、时间处理、文件操作及布尔类型等多个方面。每类函数均以表格形式列出其功能和使用示例,便于快速查阅和学习。通过综合示例代码,展示了这些函数的实际应用,帮助读者更好地理解和掌握C语言的基本功能和标准库函数的使用方法。感谢阅读,希望对你有所帮助!
32 8
|
20天前
|
C语言 开发者
【C语言】数学函数详解
在C语言中,数学函数是由标准库 `math.h` 提供的。使用这些函数时,需要包含 `#include <math.h>` 头文件。以下是一些常用的数学函数的详细讲解,包括函数原型、参数说明、返回值说明以及示例代码和表格汇总。
41 6
|
20天前
|
存储 C语言
【C语言】输入/输出函数详解
在C语言中,输入/输出操作是通过标准库函数来实现的。这些函数分为两类:标准输入输出函数和文件输入输出函数。
116 6
|
20天前
|
存储 缓存 算法
【C语言】内存管理函数详细讲解
在C语言编程中,内存管理是至关重要的。动态内存分配函数允许程序在运行时请求和释放内存,这对于处理不确定大小的数据结构至关重要。以下是C语言内存管理函数的详细讲解,包括每个函数的功能、标准格式、示例代码、代码解释及其输出。
49 6
|
17天前
|
算法
基于WOA算法的SVDD参数寻优matlab仿真
该程序利用鲸鱼优化算法(WOA)对支持向量数据描述(SVDD)模型的参数进行优化,以提高数据分类的准确性。通过MATLAB2022A实现,展示了不同信噪比(SNR)下模型的分类误差。WOA通过模拟鲸鱼捕食行为,动态调整SVDD参数,如惩罚因子C和核函数参数γ,以寻找最优参数组合,增强模型的鲁棒性和泛化能力。
|
23天前
|
机器学习/深度学习 算法 Serverless
基于WOA-SVM的乳腺癌数据分类识别算法matlab仿真,对比BP神经网络和SVM
本项目利用鲸鱼优化算法(WOA)优化支持向量机(SVM)参数,针对乳腺癌早期诊断问题,通过MATLAB 2022a实现。核心代码包括参数初始化、目标函数计算、位置更新等步骤,并附有详细中文注释及操作视频。实验结果显示,WOA-SVM在提高分类精度和泛化能力方面表现出色,为乳腺癌的早期诊断提供了有效的技术支持。
|
3天前
|
供应链 算法 调度
排队算法的matlab仿真,带GUI界面
该程序使用MATLAB 2022A版本实现排队算法的仿真,并带有GUI界面。程序支持单队列单服务台、单队列多服务台和多队列多服务台三种排队方式。核心函数`func_mms2`通过模拟到达时间和服务时间,计算阻塞率和利用率。排队论研究系统中顾客和服务台的交互行为,广泛应用于通信网络、生产调度和服务行业等领域,旨在优化系统性能,减少等待时间,提高资源利用率。