C语言Day 04 学习总结

news2024/11/22 13:14:01

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.coloradmin.cn/o/2245338.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

css使用弹性盒,让每个子元素平均等分父元素的4/1大小

css使用弹性盒&#xff0c;让每个子元素平均等分父元素的4/1大小 原本&#xff1a; ul {padding: 0;width: 100%;background-color: rgb(74, 80, 62);display: flex;justify-content: space-between;flex-wrap: wrap;li {/* 每个占4/1 */overflow: hidden;background-color: r…

图像处理 之 凸包和最小外围轮廓生成

“ 最小包围轮廓之美” 一起来欣赏图形之美~ 1.原始图片 男人牵着机器狗 2.轮廓提取 轮廓提取 3.最小包围轮廓 最小包围轮廓 4.凸包 凸包 5.凸包和最小包围轮廓的合照 凸包和最小包围轮廓的合照 上述图片中凸包、最小外围轮廓效果为作者实现算法生成。 图形几何之美系列&#…

徒手从零搭建一套ELK日志平台

徒手从零搭建一套ELK日志平台 日志分析的概述日志分析的作用主要收集工具集中式日志系统主要特点采集日志分类ELK概述初级版ELK终极版ELK高级版ELKELK收集日志的两种形式 搭建ELK平台Logstash工作原理Logstash核心概念环境准备安装部署docker添加镜像加速器安装部署Elasticsear…

【论文阅读】Poison Forensics: Traceback of Data Poisoning Attacks in Neural Networks

Poison Forensics: Traceback of Data Poisoning Attacks in Neural Networks 核心原理前提条件方法第一个问题第二个问题 核心原理 有毒样本会使模型更接近参数空间中的最佳位置&#xff0c;良性样本会使该模型向其随机初始化状态移动 前提条件 最重要的&#xff1a; 可以…

递归算法专题一>反转链表

题目&#xff1a; 解析&#xff1a; 也可以把链表看作一棵树&#xff0c;后续遍历这棵树然后和上图一样&#xff0c;改变指针即可 代码&#xff1a; public ListNode reverseList(ListNode head) {if(head null || head.next null) return head;ListNode newHead revers…

拼音。。。。。。。。。。

拼音。文心一言、文心大模型3.5&#xff0c;竟然说错了&#xff0c;如下图。所以&#xff0c;以后都不想在文心一言搜拼音了。。以后搜拼音&#xff0c;还是在百度一下直接搜&#xff0c;搜到的顶头第一条也是AI智能回答&#xff0c;可能比文心一言更加好更加准 正确的说法是&…

K8S资源限制之LimitRange

LimitRange介绍 LimitRange也是一种资源&#xff0c;在名称空间内有效&#xff1b;限制同一个名称空间下pod容器的申请资源的最大值&#xff0c;最小值pod的resources中requests和limits必须在这个范围内&#xff0c;否则pod无法创建。当然pod也可以不使用resources进行创建ty…

【爬虫】Firecrawl对京东热卖网信息爬取(仅供学习)

项目地址 GitHub - mendableai/firecrawl: &#x1f525; Turn entire websites into LLM-ready markdown or structured data. Scrape, crawl and extract with a single API. Firecrawl更多是使用在LLM大模型知识库的构建&#xff0c;是大模型数据准备中的一环&#xff08;在…

JavaParser如何获取方法的返回类型

使用JavaParser 如何获取一个Java类中的某个方法的返回类型呢&#xff1f; 假如有一个如下的简单的Java 类&#xff1a; /*** Copyright (C) Oscar Chen(XM):* * Date: 2024-11-21* Author: XM*/ package com.osxm.ai.sdlc.codeparse.codesample;public class MyClass {public…

25.UE5时间膨胀,慢动作,切换地图,刷BOSS

2-27 时间膨胀、慢动作、切换地图、刷BOSS_哔哩哔哩_bilibili 目录 1.刷新BOSS逻辑 2.时间膨胀实现慢动作 3.胜利画面&#xff0c;下一关 3.1胜利画面UI 3.2第一关、第二关游戏模式 3.3下一关按钮事件的绑定 1.刷新BOSS逻辑 实现当场上的怪物都死亡后&#xff0c;进行刷…

【大语言模型】ACL2024论文-19 SportsMetrics: 融合文本和数值数据以理解大型语言模型中的信息融合

【大语言模型】ACL2024论文-19 SportsMetrics: 融合文本和数值数据以理解大型语言模型中的信息融合 https://arxiv.org/pdf/2402.10979 目录 文章目录 【大语言模型】ACL2024论文-19 SportsMetrics: 融合文本和数值数据以理解大型语言模型中的信息融合目录摘要研究背景问题与挑…

数字IC后端设计实现之Innovus place报错案例 (IMPSP-9099,9100三种解决方案)

最近吾爱IC社区星球会员问到跑place_opt_design时会报错退出的情况。小编今天把这个错误解决办法分享给大家。主要分享三个方法&#xff0c;大家可以根据自己的实际情况来选择。 数字IC后端低功耗设计实现案例分享(3个power domain&#xff0c;2个voltage domain) **ERROR: (I…

弧形导轨有什么优势及局限?

弧形导轨的设计允许负载沿着特定的曲线路径移动&#xff0c;这在许多自动化设备中是非常必要的。它具有高强度、刚性和稳定性&#xff0c;能够承受较大的负载和冲击力&#xff0c;并且在高速运动下仍能保持稳定&#xff0c;这使得弧形导轨在需要处理重型负载或进行高速运动的场…

【天壤智能-注册安全分析报告-无验证纯IP限制存在误拦截隐患】

前言 由于网站注册入口容易被机器执行自动化程序攻击&#xff0c;存在如下风险&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露&#xff0c;不符合国家等级保护的要求。短信盗刷带来的拒绝服务风险 &#xff0c;造成用户无法登陆、注册&#xff0c;大量收到垃圾短信的…

Linux13 传输层UDP和TCP协议

传输层UDP和TCP协议 1. UDP 协议1.1 UDP协议端格式1.2 UDP特点1.3 UDP 的缓冲区1.4 UDP数据长度1.5 基于 UDP 的应用层协议 2. TCP 协议TCP协议端格式确认应答序号和确认序号位通信机制&#xff1a; 超时重传连接管理三次握手 - 建立连接三次握手与TCPSocket问题 - 为什么要有三…

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

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

OpenCV 图片处理与绘制

目录 1. 图片处理 1.1 灰度处理 1.1.1 图像灰度化处理 1.1.2 图像灰度化的算法 1.2 图像二值化 1.3 边缘检测 ​编辑 2. 绘图 2.1 绘制线段 2.2 绘制矩形 2.3 绘制圆形 2.4 绘制椭圆 2.5 绘制多边形 2.6 绘制文字图片 1. 图片处理 1.1 灰度处理 将彩色图像转化为…

uniapp 城市选择插件

uniapp城市选择插件 如上图 地址 完整demo <template><view><city-selectcityClick"cityClick":formatName"formatName":activeCity"activeCity":hotCity"hotCity":obtainCitys"obtainCitys":isSearch&quo…

实验室资源调度系统:基于Spring Boot的创新

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

【Triton 教程】融合注意力 (Fused Attention)

Triton 是一种用于并行编程的语言和编译器。它旨在提供一个基于 Python 的编程环境&#xff0c;以高效编写自定义 DNN 计算内核&#xff0c;并能够在现代 GPU 硬件上以最大吞吐量运行。 更多 Triton 中文文档可访问 →https://triton.hyper.ai/ 这是根据 Tri Dao 的 Flash At…