C语言学习笔记(九)————函数相关

2023-10-27

1)库函数:需要学会查询工具的使用:MSDN(Microsoft Developer Network)

www.cplusplus.com

http://en.cppreference.com(英文版)

http://zh.cppreference.com(中文版)

英文很重要。最起码得看懂文献。

2)函数的参数

实际参数(实参): 真实传给函数的参数,叫实参。 实参可以是:常量、变量、表达式、函数等。 无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形 参。 

形式参数(形参): 形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内存单元),所以叫形式参数。形式参数当函数调用完成之后就自动销毁了。因此形式参数只在函数中有效。

形参实例化之后其实相当于实参的一份临时拷贝。

数组传参时候传过去的是首元素的地址,因此不能在函数内用数组长度除以数组元素大小的方法求数组元素个数。可以在外部主函数处计算。

3)函数调用:

传值调用 函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参。

传址调用 传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式。 这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操 作函数外部的变量。

#include <stdio.h>
int main()
{
    printf("%d", printf("%d", printf("%d", 43)));
    //结果是4321
    //注:printf函数的返回值是打印在屏幕上字符的个数
    return 0;
}

4)函数声明:

1. 告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,函数 声明决定不了。

2. 函数的声明一般出现在函数的使用之前。要满足先声明后使用。

3. 函数的声明一般要放在头文件中的。

5)函数递归

程序调用自身的编程技巧称为递归( recursion)。 递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的 一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解, 递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。 递归的主要思考方式在于:把大事化小 

递归的两个必要条件

存在限制条件,当满足这个限制条件的时候,递归便不再继续。

每次递归调用之后越来越接近这个限制条件。

接受一个整型值(无符号),按照顺序打印它的每一位。
例如:
输入:1234,输出 1 2 3 4.
参考代码:
#include "test.h"
//函数Add的实现
int Add(int x, int y)
{
 return x+y;
}
#include <stdio.h>
void print(int n)
{
     if(n>9)
     {
         print(n/10);
     }
     printf("%d ", n%10);
}
int main()
{
     int num = 1234;
     print(num);
     return 0;
}

 

编写函数不允许创建临时变量,求字符串的长度。
参考代码:
#incude <stdio.h>
int Strlen(const char*str)
{
 if(*str == '\0')
 return 0;
 else
        return 1+Strlen(str+1);
}
int main()
{
 char *p = "abcdef";
 int len = Strlen(p);
 printf("%d\n", len);
 return 0;
}

6)

1. 许多问题是以递归的形式进行解释的,这只是因为它比非递归的形式更为清晰。

2. 但是这些问题的迭代实现往往比递归实现效率更高,虽然代码的可读性稍微差些。

3. 当一个问题相当复杂,难以用迭代实现时,此时递归实现的简洁性便可以补偿它所带来的运行时开销。 

非递归求解阶乘和斐波那契数列 

//求n的阶乘
int factorial(int n)
{
        int result = 1;
        while (n > 1)
       {
             result *= n ;
             n -= 1;
       }
        return result;
}
//求第n个斐波那契数
int fib(int n)
{
     int result;
     int pre_result;
     int next_older_result;
     result = pre_result = 1;
     while (n > 2)
     {
           n -= 1;
           next_older_result = pre_result;
           pre_result = result;
           result = pre_result + next_older_result;
     }
     return result;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言学习笔记(九)————函数相关 的相关文章

  • OpenMP学习笔记

    一 OpenMP简介 1 内存共享并行模型 机器必须多处理器 核 共享内存 底层架构可以是UMA和NUMA UMA NUMA 2 Fork Join模型 重复fork join操作 3 OpenMP特性 OpenMP仅通过线程来完成并行 O
  • Redis(二):基础之五种常见数据结构与使用方法

    五种常见数据结构与使用方法 一 字符串String Redis 中的字符串是一种 动态字符串 这意味着使用者可以修改 它的底层实现有点类似于 Java 中的 ArrayList 有一个字符数组 从源码的 sds h sdshdr 文件 中可
  • 【20170924】C语言每日一练

    程序1 题目 有数字1 2 3 4 能组成多少个互不相同且无重复数字的三位数 都是多少 include
  • docker容器内存分配

    1 和CPU控制一样 docker也提供了若干参数来控制容器的内存使用配额 可以控制容器的swap大小 可用内存大小等各种内存方面的控制 主要有以下参数 memory swappiness 控制进程将物理内存交换到swap分区的倾向 默认系
  • Python selenium(一般不使用,原因:打开浏览器,虽然简单但是性能低)

    selenium使用 1 创建浏览器对象 driver webdriver xxx 2 发送请求 driver get url driver对象常用的属性和方法 1 driver page source 当前标签页浏览器渲染后的页面源代码

随机推荐

  • ESP8266学习笔记(二)

    上篇文章提到了如何使用USB转TTL模块调试ESP8266模块以及该模块的几种工作方式 此篇将会介绍如何实现ESP8266模块与单片机的通信 功能介绍 esp8266模块与stm32单片机的串口三之间互相通信 本人测试的是esp8266模块
  • 【100天精通python】Day37:GUI界面编程_PyQt 从入门到实战(上)_PyQt6基本组件、事件和信号槽、界面设计

    目录 专栏导读 1 PyQt6 简介 1 1 安装 PyQt6 和相关工具 1 2 PyQt6 基础知识 1 2 1 Qt 的基本概念和组件 1 2 2 创建和使用 Qt 窗口 标签 按钮等基本组件 1 2 3 布局管理器 垂直布局 水平布
  • Qt信号槽连接在有默认形参下的情况思考

    写下这个给自己备忘 比如函数 void test int a 0 你在调用端如论是test 3 或者test 都可以正确调用到这个函数 但是 如果放到Qt中的信号槽的话 这个还是值得讲一讲的 不然的话 可能会引起相应的误会 其实说到底 Qt
  • 互联网JAVA面试常问问题(二)

    一 线程有几种创建方式 这是一道比较常见的java线程问题 一般就是两种线程创建方式 继承Thread类 实现Runnable接口 继承Thread类 public class MyThread extends Thread private
  • Android资源文件中颜色使用的总结

    本文对Android颜色的使用做总结 重点介绍颜色在资源文件中的创建和颜色的选择器的创建和使用 一 在xml中使用颜色资源文件和颜色选择器文件 一 颜色资源文件的创建 1 创建资源文件 如图所示 2 编辑colors xml资源文件 如图所
  • halcon 与PLC串口通信解决方案

    OpSystem environment OS if OpSystem Windows NT open serial COM1 SerialHandle else open serial dev tty SerialHandle endif
  • vite项目中导入图片后报找不到模块处理方法

    vite项目 typescript的项目中 导入图片后报找不到模块处理方法 问题 在使用ts书写代码时 导入本地文件夹中图片 会出现报错 找不到模块 但是又能正常使用该图片 这样的报错启动项目是没有问题 但是最后打包会报错 所以不得不处理
  • MPP架构、常见OLAP引擎分析

    MPP架构 常见OLAP引擎分析 一 MPP架构 1 SMP 2 NUMA 3 MPP 二 批处理架构和MPP架构 三 MPP架构的OLAP引擎 1 只负责计算 不负责存储的引擎 1 Impala 2 Presto 2 既负责计算 又负责存
  • 性能测试报告全解析:如何编写一份专业的性能测试报告!

    一 背景 性能测试是软件开发过程中非常重要的一环 它可以帮助开发人员和质量保障人员评估软件在不同负载下的表现 找出瓶颈并优化性能 从而提高用户的满意度 而一份专业的性能测试报告 则是评估软件性能的重要成果之一 因此今天我们将分享一份完整的性
  • 解决ThinkPHP3.2 将Debug 关闭 设置为False 报页面错误 请稍后再试

    1 最近系统要上线 就把Index php中的debug 关闭 设置成false 结果出现如下的错误 2 修改config php文件 加入 SHOW ERROR MSG gt TRUE 后 显示错误信息 又报如下的错 这才是真正的错误信息
  • Windows Server 2022 下 Hyper-V NAT外网访问配置

    Windows Server 2022 下 Hyper V NAT外网访问配置 一 前言 二 安装 配置虚拟网卡 三 角色安装 四 路由和远程访问服务配置 五 DHCP服务器配置 六 DNS服务器配置 七 Hyper V配置 八 结果 本篇
  • Docker安装Nginx并修改Nginx配置文件

    一 Docker安装Nginx 1 首先在虚拟机上要确保你已经启动了docker 2 其次登录DockerHub官网 然后搜索nginx 然后在虚拟机里面输入docker pull nginx 就可以下载nginx的镜像了 3 注意下载完以
  • Python爬虫——SQLite数据库

    SQLite数据库 声明 本篇文章仅仅是个人的浅薄理解 只是在爬虫过程中使用 其中若有不当之处 烦请理解并指出 谢谢 使用语言 Python 开发环境 pyCharm 在Python中使用SQLite数据库 主要使用按四个步骤进行 链接数据
  • PHP 微信公众号拉取微信授权

    PHP 微信公众号拉取微信授权 TP6B版本 前期准备工作 1 拿到开发者id 开发秘钥 设置IP白名单 2 设置业务域名 接口安全域名 授权域名 3 根据前端传入code参数获得用户微信信息 代码如下 获得用户信息 public func
  • vue diff算法

    vue中的diff算法概念 虽然点进来的大家应该都知道diff算法是什么 不过按照流程还是要简单说一下 按我个人的理解 Vue的diff算法是对新旧两条虚拟DOM进行逐层比较并更新真实DOM diff算法是平级比较 不考虑跨级的情况 采用深
  • 用 Rust 实现 Lisp 解释器

    文章标题 用 Rust 实现 Lisp 解释器 深度参考 https stopachka essay dev post 5 risp in rust lisp 本文作者 suhanyujie 文章来自 https github com su
  • 智能客流分析:构建智慧出行系统,提升交通效率!

    作者 禅与计算机程序设计艺术 在日益增长的移动互联网应用场景下 越来越多的人选择用智能手机作为主力通讯工具 随之而来的就是智能出行需求的爆发 作为交通运输工具的手机用户越来越多 如何为他们提供高效便捷的出行体验成为当下最重要的问题 移动出行
  • 程序员如何做副业

    有些人问我程序员如何做副业 我有一些经验 但是并不算多 因为我自己也在摸索中 下面我谈谈自己的一些思考和理解 为什么做副业 我认为主要有以下几个好处 副业是一个备用选项 可以让我们尝试如何能不依赖组织 自己创造价值 自己摸索出一条业务 副业
  • Python 多协程爬虫

    1 gevent库 1 1安装 window电脑 pip install gevent mac电脑 pip3 install gevent 1 2 切换协作式运行程序 monkey 也叫猴子补丁 它能给程序打上补丁 让程序变成异步模式 而不
  • C语言学习笔记(九)————函数相关

    1 库函数 需要学会查询工具的使用 MSDN Microsoft Developer Network www cplusplus com http en cppreference com 英文版 http zh cppreference c