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. 日历项目:学习函数设计与调用的综合应用。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot+Vue的影院管理系统(含演示视频+运行截图+说明文档)

web启动链接地址&#xff1a; http://localhost:8082&#xff08;管理端&#xff09; http://localhost:8081&#xff08;用户端&#xff09; http://localhost:8082&#xff08;员工端&#xff09; 一、项目介绍 基于框架的系统&#xff0c;系统分为用户、员工和管理员三个…

SpringBoot3+Vue3开发图书馆管理系统

1 项目介绍 图书馆管理系统&#xff0c;管理图书、用户、借书、还书、实时监测归还是否逾期&#xff0c;逾期未归还会生成违规记录。违规状态不可借阅图书。需缴纳罚金&#xff0c;消除违规记录。可动态设置图书最多累计借阅数量上限和最长借阅天数上限&#xff0c;当用户满足…

Figure 02迎重大升级!!人形机器人独角兽[Figure AI]商业化加速

11月19日知名人形机器人独角兽公司【Figure AI】发布公司汽车巨头【宝马】最新合作进展&#xff0c;旗下人形机器人Figure 02在生产线上的性能得到了显著提升&#xff0c;机器人组成自主舰队&#xff0c;依托端到端技术&#xff0c;速度提高了400%&#xff0c;执行任务成功率提…

Oracle之Rman非归档模式下的完全恢复

引言 首先Oracle必须处在非归档模式下才能模拟各种情况,Oracle处在非归档模式,做数据库脱机备份,并且rman的参数使用快闪恢复区作为备份文件的存储目录,配置了控制文件的自动备份。 联机全备 示例1:控制文件、数据文件以及重做日志文件丢失的恢复 数据文件以及重做日志…

Android Google登录接入

官方文献&#xff1a; 1、前期准备&#xff1a; https://developers.google.cn/identity/sign-in/android/legacy-start-integrating?hlzh-cnhttps://developers.google.cn/identity/sign-in/android/legacy-start-integrating?hlzh-cn 2、具体开发&#xff1a; 新版 Googl…

Java 同步锁性能的最佳实践:从理论到实践的完整指南

目录 一、同步锁性能分析 &#xff08;一&#xff09;性能验证说明 1. 使用同步锁的代码示例 2. 不使用同步锁的代码示例 3. 结果与讨论 &#xff08;二&#xff09;案例初步优化分析说明 1. 使用AtomicInteger原子类尝试优化分析 2. 对AtomicInteger原子类进一步优化 …

Docker+Nginx | Docker(Nginx) + Docker(fastapi)反向代理

在DockerHub搜 nginx&#xff0c;第一个就是官方镜像库&#xff0c;这里使用1.27.2版本演示 1.下载镜像 docker pull nginx:1.27.2 2.测试运行 docker run --name nginx -p 9090:80 -d nginx:1.27.2 这里绑定了宿主机的9090端口&#xff0c;只要访问宿主机的9090端口&#…

C#编写的日志记录组件 - 开源研究系列文章

以前编写过一个日志记录组件的博文&#xff0c;这次发布一个修改过的完善版本。 1、 项目目录&#xff1b; 2、 源码介绍&#xff1b; 1) 实现&#xff1b; 2) 使用&#xff1b; 后面的参数为级别设置&#xff0c;只有大于这个级别的才进行日志记录&#xff0c;限制了日志记录的…

win10+vs2019+cmake+opencv4.10+opencv_contrib编译记录

win10vs2019cmakeopencv4.10opencv_contrib编译记录 第一章 环境配置 本机环境已经安装好vs2019和cmake。 第二章 下载opencv相关 1.Opencv4.10下载 下载链接&#xff1a;opencv 下载时选择"Sources" 2.opencv_contrib 下载链接&#xff1a;opencv_contrib 第三…

前端:HTML (学习笔记)【1】

一&#xff0c;网络编程的三大基石 1&#xff0c;URL &#xff08;1&#xff09;url —— 统一资源定位符&#xff1a; 网址——整个互联网中可以唯一且准确的确定一个资源的位置。 【项目外】 网址——https://www.baidu.com/ …

2024年亚太地区数学建模大赛A题-复杂场景下水下图像增强技术的研究

复杂场景下水下图像增强技术的研究 对于海洋勘探来说&#xff0c;清晰、高质量的水下图像是深海地形测量和海底资源调查的关键。然而&#xff0c;在复杂的水下环境中&#xff0c;由于光在水中传播过程中的吸收、散射等现象&#xff0c;导致图像质量下降&#xff0c;导致模糊、…

基于SpringBoot的“广场舞团系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“广场舞团系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 系统首页界面图 社团界面图 社团活…

视频流媒体播放器EasyPlayer.js无插件直播流媒体音视频播放器Android端webview全屏调用无效问题

流媒体播放器的核心技术与发展趋势正在不断推动着行业的变革。未来&#xff0c;随着技术的不断进步和应用场景的不断拓展&#xff0c;流媒体播放器将为用户带来更加便捷、高效、个性化的观看体验。同时&#xff0c;流媒体播放器也会成为数字娱乐产业的重要组成部分&#xff0c;…

【Python · PyTorch】卷积神经网络 CNN(LeNet-5网络)

【Python PyTorch】卷积神经网络 CNN&#xff08;LeNet-5网络&#xff09; 1. LeNet-5网络※ LeNet-5网络结构 2. 读取数据2.1 Torchvision读取数据2.2 MNIST & FashionMNIST 下载解包读取数据 2. Mnist※ 训练 LeNet5 预测分类 3. EMnist※ 训练 LeNet5 预测分类 4. Fash…

Live2D嵌入前端页面

废话不多说&#xff0c;直接看效果&#xff0c;给页面中嵌入的一个动态的二次元人物&#xff0c;美化页面&#xff0c;实际效果自行查看。 教程开始 一. 把项目拉取到本地 项目地址 自行下载到本地&#xff0c;下载方式自行选择。 二.把项目文件夹放到前端页面目录内 三.把下…

openlayer 将 GeoJSON 格式的 geometry 转换为 feature

openlayer 将 GeoJSON 格式的 geometry 转换为 feature geometry格式如图&#xff1a; 代码&#xff1a; /*** 将 GeoJSON 格式的 geometry 转换为 feature* param geometry* returns*/geoJsonToWkt(geometry) {const { coordinates, type } geometry;let olGeometry;swit…

web应用安全和信息泄露预防

文章目录 1&#xff1a;spring actuator导致的信息泄露1.1、Endpoint配置启用检测1.2、信息泄露复现1.3、防御 2&#xff1a;服务端口的合理使用3&#xff1a;弱口令&#xff08;密码&#xff09;管理4&#xff1a;服务端攻击4.1、短信业务&#xff0c;文件上传等资源型接口1、…

基于LSTM的新闻中文文本分类——基于textCNN与textRNN

构建词语字典 def build_vocab(file_path, tokenizer, max_size, min_freq):# 定义词汇表字典&#xff1a;使用 vocab_dic {} 初始化一个空字典&#xff0c;用于存储每个词及其出现频率vocab_dic {}with open(file_path, r, encodingUTF-8) as f:for line in tqdm(f):lin l…

MySQL 的 Change Buffer 是什么?它有什么作用?

MySQL 的 Change Buffer 是什么&#xff1f;它有什么作用&#xff1f; MySQL 是目前广泛使用的开源数据库管理系统&#xff0c;其中的 InnoDB 存储引擎凭借其高性能、高可靠性以及强大的事务支持&#xff0c;成为了默认的存储引擎。在 InnoDB 的众多优化机制中&#xff0c;Cha…

Spark 之 Aggregate

Aggregate 参考链接&#xff1a; https://github.com/PZXWHU/SparkSQL-Kernel-Profiling 完整的聚合查询的关键字包括 group by、 cube、 grouping sets 和 rollup 4 种 。 分组语句 group by 后面可以是一个或多个分组表达式&#xff08; groupingExpressions &#xff09;…