C语言Day 04 学习总结

Day 04 学习总结


函数的基本概念

1. 函数的定义
  • 函数是实现特定功能的代码块,可以被重复调用,避免重复代码,提高代码复用性。
  • 基本格式
    返回值类型 函数名(形参列表)
    {// 函数体:实现功能的代码
    }
    
2. 函数的三要素
  1. 返回值类型
    • 决定函数返回的数据类型。
    • 如果函数无返回值,用 void
    • 示例:
      • 判断偶数:返回值类型为 int(返回 01)。
      • 转换字母大小写:返回值类型为 char
      • 求两个数的较大值:返回值类型与输入类型相同。
  2. 函数名
    • 自定义名称,建议使用描述性单词或短语。
    • 示例:getMax, isEven, convertToLowercase
  3. 形参列表
    • 表示函数输入的数据类型和个数。
    • 格式:形参类型 形参名, 形参类型 形参名, ...
    • 如果函数不需要参数,用 void
3. 函数的使用
  • 定义
    • 分析功能,确定返回值类型、函数名、形参列表。
  • 调用
    • 在主函数中使用 函数名(实参列表) 调用函数。
    • 返回值可存储在变量中或直接使用。

函数的分类

  1. 有形参有返回值

    • 需要输入参数,返回计算结果。
    • 示例:求两个数的较大值。
      int getMax(int a, int b)
      {return (a > b) ? a : b;
      }
      
  2. 有形参无返回值

    • 需要输入参数,但不返回值。
    • 示例:随机数种子设置。
      void srand(unsigned seed)
      {// 功能代码
      }
      
  3. 无形参有返回值

    • 不需要输入参数,但返回值。
    • 示例:生成随机数。
      int rand(void)
      {// 功能代码
      }
      
  4. 无形参无返回值

    • 不需要输入参数,也不返回值。
    • 示例:显示菜单功能。
      void showMenu(void)
      {printf("1. 添加\n2. 删除\n");
      }
      

函数的调用与注意事项

  • 调用格式
    返回值变量 = 函数名(实参列表);
    
  • 注意
    1. 实参列表与形参列表在 类型顺序个数上必须一致。
    2. 函数的返回值只能有一个。
调用示例
#include <stdio.h>
int getMax(int a, int b)
{return (a > b) ? a : b;
}int main()
{int res = getMax(10, 20);printf("较大值:%d\n", res);int x, y;printf("请输入两个数:");scanf("%d %d", &x, &y);res = getMax(x, y);printf("较大值:%d\n", res);return 0;
}

函数调用流程

  1. 分配形参的空间。
  2. 将实参的值传递给形参。
  3. 执行函数体代码。
  4. 函数结束,返回值给调用者,销毁局部变量和形参。

日历项目

功能概述
  • 输入年份和月份,输出对应的日历(包含上月、本月、下月数据)。
  • 一页日历包含 6 行 7 列(42 个数据)
步骤解析
  1. 上个月的数据
    • 上个月数据的个数由 本月第一天是星期几 决定。
    • 数据从上月最后一天倒序排列。
  2. 本月的数据
    • 从 1 到本月总天数。
  3. 下个月的数据
    • 补足 42 个格子。
核心功能函数
  1. 判断闰年

    • 输入年份,返回是否是闰年。
      int isLeapYear(int year)
      {return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
      }
      
  2. 求某年某月的总天数

    • 根据月份和是否闰年返回天数。
      int getDaysInMonth(int year, int month)
      {if (month == 2)return isLeapYear(year) ? 29 : 28;if (month == 4 || month == 6 || month == 9 || month == 11)return 30;return 31;
      }
      
  3. 求某日是星期几

    • 计算输入日期距离 1970-1-1 的天数,然后取模计算星期几。
      int getWeekday(int year, int month, int day)
      {int days = 0;for (int y = 1970; y < year; y++)days += isLeapYear(y) ? 366 : 365;for (int m = 1; m < month; m++)days += getDaysInMonth(year, m);days += day - 1;return (days % 7 + 4) % 7; // 1970-1-1 是星期四
      }
      
  4. 输出日历数据

    void printCalendar(int year, int month)
    {int daysInMonth = getDaysInMonth(year, month);int firstDay = getWeekday(year, month, 1);int prevYear = (month == 1) ? year - 1 : year;int prevMonth = (month == 1) ? 12 : month - 1;int daysInPrevMonth = getDaysInMonth(prevYear, prevMonth);printf(" 日 一 二 三 四 五 六\n");// 上月数据for (int i = firstDay - 1; i >= 0; i--)printf("%3d", daysInPrevMonth - i);// 本月数据for (int i = 1; i <= daysInMonth; i++){if ((firstDay + i - 1) % 7 == 0)printf("\n");printf("%3d", i);}// 下月数据for (int i = 1; (firstDay + daysInMonth + i - 1) % 7 != 0; i++)printf("%3d", i);printf("\n");
    }
    
完整主函数
int main()
{int year, month;printf("请输入年份和月份:");scanf("%d %d", &year, &month);printCalendar(year, month);return 0;
}

总结

  1. 函数三要素:返回值类型、函数名、形参列表。
  2. 调用规范:实参与形参需类型、顺序、个数一致。
  3. 函数的模块化:复杂功能通过多个函数分解,降低代码耦合。
  4. 日历项目:学习函数设计与调用的综合应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/476183.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

99.【C语言】数据结构之二叉树的基本知识

目录 1.树的定义 树是递归定义的 一些细碎的概念 2.树的判断法则 树结点结构的定义 自然想到的定义方法 左孩子右兄弟定义 3.树的应用:文件系统 4.树的特殊形式:二叉树 5.特殊的两类二叉树 满二叉树 完全二叉树 完全二叉树和满二叉树之间的关系 高度为h的完全二叉…

Bug:引入Feign后触发了2次、4次ContextRefreshedEvent

Bug&#xff1a;引入Feign后发现监控onApplication中ContextRefreshedEvent事件触发了2次或者4次。 【原理】在Spring的文档注释中提示到&#xff1a; Event raised when an {code ApplicationContext} gets initialized or refreshed.即当 ApplicationContext 进行初始化或者刷…

Ubuntu20.04从零安装IsaacSim/IsaacLab

Ubuntu20.04从零安装IsaacSim/IsaacLab 电脑硬件配置&#xff1a;安装Isaac sim方案一&#xff1a;pip安装方案二&#xff1a;预构建二进制文件安装1、安装ominiverse2、在ominiverse中安装isaac sim&#xff0c;下载最新的4.2版本 安装Isaac Lab1、IsaacLab环境克隆2、创建con…

低速接口项目之串口Uart开发(二)——FIFO实现串口数据的收发回环测试

本节目录 一、设计思路 二、loop环回模块 三、仿真模块 四、仿真验证 五、上板验证 六、往期文章链接本节内容 一、设计思路 串口数据的收发回环测试&#xff0c;最简单的硬件测试是把Tx和Rx连接在一起&#xff0c;然后上位机进行发送和接收测试&#xff0c;但是需要考虑到串…

算法编程题-排序

算法编程题-排序 比较型排序算法冒泡排序选择排序插入排序希尔排序堆排序快速排序归并排序 非比较型排序算法计数排序基数排序 本文将对七中经典比较型排序算法进行介绍&#xff0c;并且给出golang语言的实现&#xff0c;还包括基数排序、计数排序等非比较型的算法的介绍和实现…

【软考】系统架构设计师-信息系统基础

#信息系统基础核心知识点 信息系统5个基本功能&#xff1a;输入、存储、处理、输出和控制 诺兰模型&#xff1a;信息系统计划的阶段模型&#xff0c;6阶段 初始阶段&#xff0c;传播阶段&#xff0c;控制阶段&#xff0c;集成阶段&#xff0c;数据管理阶段&#xff0c;成熟阶…

【架构】主流企业架构Zachman、ToGAF、FEA、DoDAF介绍

文章目录 前言一、Zachman架构二、ToGAF架构三、FEA架构四、DoDAF 前言 企业架构&#xff08;Enterprise Architecture&#xff0c;EA&#xff09;是指企业在信息技术和业务流程方面的整体设计和规划。 最近接触到“企业架构”这个概念&#xff0c;转念一想必定和我们软件架构…

使用低成本的蓝牙HID硬件模拟鼠标和键盘来实现自动化脚本

做过自动化脚本的都知道&#xff0c;现在很多传统的自动化脚本方案几乎都可以被检测&#xff0c;比如基于root&#xff0c;adb等方案。用外置的带有鼠标和键盘功能集的蓝牙HID硬件来直接点击和滑动是非常靠谱的方案&#xff0c;也是未来的趋势所在。 一、使用蓝牙HID硬件的优势…

数据结构-二叉树_堆

目录 1.二叉树的概念 ​编辑1.1树的概念与结构 1.2树的相关语 1.3 树的表示 2. ⼆叉树 2.1 概念与结构 2.2 特殊的⼆叉树 2.2.2 完全⼆叉树 2.3 ⼆叉树存储结构 2.3.1 顺序结构 2.3.2 链式结构 3. 实现顺序结构⼆叉树 3.2 堆的实现 3.2.2 向下调整算法 1.二叉树的概…

【FPGA开发】AXI-Full总线接口介绍、FPGA搭建仿真平台

文章目录 协议解读接口介绍AW—写地址通道W—写数据通道B—写响应通道AR—读地址通道R—读数据通道 FPGA搭建仿真平台 本文主要介绍AXI-FULL的相关基础内容&#xff0c;AXI-Lite请移步&#xff1a; 【FPGA开发】AXI-Lite总线协议解读、Verilog逻辑开发与仿真、Alex Forencich代…

【已解决】“EndNote could not connect to the online sync service”问题的解决

本人不止一次在使用EndNote软件时遇到过“EndNote could not connect to the online sync service”这个问题。 过去遇到这个问题都是用这个方法来解决&#xff1a; 这个方法虽然能解决&#xff0c;但工程量太大&#xff0c;每次做完得歇半天身体才能缓过来。 后来再遇到该问…

Python深度学习环境配置(Pytorch、CUDA、cuDNN),包括Anaconda搭配Pycharm的环境搭建以及基础使用教程(保姆级教程,适合小白、深度学习零基础入门)

全流程导览 一、前言二、基本介绍2.1全过程软件基本介绍2.1.1 Pytorch2.1.2 Anaconda2.1.3 Pycharm2.1.4 显卡GPU及其相关概念2.1.5 CUDA和cuDNN 2.2 各部分相互间的联系和安装逻辑关系 三、Anaconda安装3.1安装Anaconda3.2配置环境变量3.3检验是否安装成功 四、Pycharm安装五、…

Java-05 深入浅出 MyBatis - 配置深入 动态 SQL 参数、循环、片段

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 大数据篇正在更新&#xff01;https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了&#xff1a; MyBatis&#xff…

python成长技能之正则表达式

文章目录 一、认识正则表达式二、使用正则表达式匹配单一字符三、正则表达式之重复出现数量匹配四、使用正则表达式匹配字符集五、正则表达式之边界匹配六、正则表达式之组七、正则表达式之贪婪与非贪婪 一、认识正则表达式 什么是正则表达式 正则表达式&#xff08;英语&…

OpenCV与AI深度学习|16个含源码和数据集的计算机视觉实战项目(建议收藏!)

本文来源公众号“OpenCV与AI深度学习”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;分享&#xff5c;16个含源码和数据集的计算机视觉实战项目 本文将分享16个含源码和数据集的计算机视觉实战项目。具体包括&#xff1a; 1. 人…

Kafka 工作流程解析:从 Broker 工作原理、节点的服役、退役、副本的生成到数据存储与读写优化

Kafka&#xff1a;分布式消息系统的核心原理与安装部署-CSDN博客 自定义 Kafka 脚本 kf-use.sh 的解析与功能与应用示例-CSDN博客 Kafka 生产者全面解析&#xff1a;从基础原理到高级实践-CSDN博客 Kafka 生产者优化与数据处理经验-CSDN博客 Kafka 工作流程解析&#xff1a…

HarmonyOs鸿蒙开发实战(17)=>沉浸式效果第二种方案一组件安全区方案

1.沉浸式效果的目的 开发应用沉浸式效果主要指通过调整状态栏、应用界面和导航条的显示效果来减少状态栏导航条等系统界面的突兀感&#xff0c;从而使用户获得最佳的UI体验。 2.组件安全区方案介绍 应用在默认情况下窗口背景绘制范围是全屏&#xff0c;但UI元素被限制在安全区内…

五天SpringCloud计划——DAY1之mybatis-plus的使用

一、引言 咱也不知道为啥SpringCloud课程会先教mybatis-plus的使用&#xff0c;但是教都教了&#xff0c;就学了吧&#xff0c;学完之后觉得mybatis-plus中的一些方法还是很好用了&#xff0c;本文作为我学习mybatis-plus的总结提升&#xff0c;希望大家看完之后也可以熟悉myba…

Matlab 答题卡方案

在现代教育事业的飞速发展中&#xff0c;考试已经成为现代教育事业中最公平的方式方法&#xff0c;而且也是衡量教与学的唯一方法。通过考试成绩的好与坏&#xff0c;老师和家长可以分析出学生掌握的知识多少和学习情况。从而老师可以了解到自己教学中的不足来改进教学的方式方…

丹摩|丹摩助力selenium实现大麦网抢票

丹摩&#xff5c;丹摩助力selenium实现大麦网抢票 声明&#xff1a;非广告&#xff0c;为用户体验 1.引言 在人工智能飞速发展的今天&#xff0c;丹摩智算平台&#xff08;DAMODEL&#xff09;以其卓越的AI算力服务脱颖而出&#xff0c;为开发者提供了一个简化AI开发流程的强…