【408专项篇】C语言笔记-第七章(函数)

news2024/11/30 6:38:13

第一节:函数的声明与定定义

1. 函数的声明与定义

函数间的调用关系是:由主函数调用其他函数,其他函数也可以互相调用。同一个函数可以被一个或多个函数调用任意次。

#include "func.h"

int main() {
    int a=10;
    a=print_star(a);
    print_message();
    print_star(a);
    return 0;
}
#include "func.h"

int print_star(int i){
    printf("***************\n");
    printf("print_start %d\n",i);
    return i+3;
}

void print_message(){
    printf("how do you do\n");
    print_star(3);
}
#ifndef INC_7_1_STATEMENT_FUNC_H
#define INC_7_1_STATEMENT_FUNC_H
#include <stdio.h>
#include <stdlib.h>

int print_star(int i);
void print_message();
#endif //INC_7_1_STATEMENT_FUNC_H
F:\Computer\Project\practice\7\7.1-statement\cmake-build-debug\7_1_statement.exe
***************
print_start 10
how do you do
***************
print_start 3
***************
print_start 13

进程已结束,退出代码为 0

func.c是子函数print_star和print_message的实现,也称定义。main.c是main函数,func.h中存放的是标准头文件的声明和main函数中调用的两个子函数的声明。如果不在头文件中对使用的函数进行声明,那么在编译时会出现警告。

C语言编译和执行具有以下特点:

  1. 一个C程序由一个或多个程序模块组成,每个程序模块作为一个源程序文件。这样处理便于分别编写、分别编译、进而提高调试效率。一个源程序文件可以为多个C程序公用。

  2. 一个源程序文件由一个或多个函数及其他有关内容(如命令行,数据定义等)组成。一个源程序文件是一个编译单位

  3. C程序的执行是从main函数开始的,如果在main函数中调用其他函数,那么在调用后会返回到main函数中,在main函数中结束整个程序的运行。

  4. 所有函数都是平行的,即在定义函数时是分别进行的,并且是互相独立的。一个函数并不从属于另一个函数,即函数不能嵌套定义。但函数间是可以互相调用的,即可以嵌套调用,但不能调用main函数,main函数时由系统调用的。

函数的声明与定义的差异:

  1. 函数的定义是指对函数功能的确立,包括指定函数名、函数值类型、形参及其类型、函数体等。它是一个完整的,独立的函数单位。

  2. 函数声明的作用是把函数的名字、函数类型及形参的类型、个数和顺序通知编译系统,以便在调用该函数时编译系统能正确识别函数并检查调用是否合法。

隐式声明:函数如果不显示地声明返回类型,那么它默认返回整型。一般都需要显示声明。

2. 函数的分类

函数分为两种类型:

  1. 标准函数:即库函数,这是由系统提供的,用户不必自己定义的函数,可以直接使用他们。如printf函数,scanf函数。

  2. 用户自己定义的函数:用以解决用户的专门需要。分为无参函数和有参函数

第二节:函数的递归调用

函数自身调用自身的操作,称为递归函数,递归函数一定要有结束条件,否则会产生死循环。

使用递归在解决一些问题时,可以让问题变得简单,降低编程难度。

题目:假如有n个台阶,一次只能上1个台阶或2个台阶,请问走到第n(n为正整数,可自行指定)个台阶有几种走法?

#include <stdio.h>

int step(int n){
    if(1==n || 2==n){  // 结束条件
        return n;
    }
    return step(n-1)+step(n-2);  // 公式
}
int main() {
    int n;
    int ret;
    scanf("%d",&n);
    ret=step(n);
    printf("step total=%d\n", ret);
    return 0;
}
F:\Computer\Project\practice\7\7.2-recursion\cmake-build-debug\7_2_recursion.exe
5
step total=8

进程已结束,退出代码为 0

方法步骤:找公式,写结束条件。

第三节:全局变量

1. 全局变量-形参-实参解析

在不同函数之间传递数据时,可以使用的方法如下:

  1. 参数:通过形式参数和实际参数。
  2. 返回值:用return语句返回计算结果。
  3. 全局变量:外部变量。

全局变量存储在数据段,所以main函数和print函数都是可见的。全局变量不会因为某个函数执行结束而消失,在整个进程的执行过程中是始终有效。工作中应尽量避免使用全局变量

如果局部变量和全局变量重名,那么将采取就近原则,即实际获取和修改的值是局部变量的值

全局变量在程序的全部执行过程中都占用存储单元,而不是仅在需要时才开辟存储单元

关于形参与实参的一些说明:

  1. 定义函数中指定的形参,如果没有函数调用,那么他们并不占用内存中的存储单元,只有在发生函数调用时,形参才会被分配内存单元。调用结束后,形参所占的内存单元会被释放。

  2. 实参可以是常量,变量或者表达式,但要求他们有确定的值。

  3. 形参可以有多个,使用逗号隔开。同时指定形参的类型。

  4. 实参与形参的个数相等,类型相匹配,且实参与形参按照顺序对应,一一传递。

  5. 实参向形参数据传递是单向“值传递”,只能由实参传给形参。

  6. 形参相当于局部变量,因此不能在定义局部变量与参数同名。

2. 局部变量与全局变量

1. 局部变量

在一个函数内部定义的变量称为内部变量。它只在本函数范围内有效,即只有在本函数内才能使用这些变量,也称局部变量。

局部变量的有效范围是离自己最近的花括号

2. 外部变量

函数之外定义的变量称为外部变量。外部变量可以为文件中的其他函数共用,它的有效范围是从定义变量的位置开始到本源文件结束,所以也称全程变量。

C语言一般要求把程序中的函数做成一个封闭体,除可以通过“实参->形参”的渠道与外界发生联系外,没有其他渠道

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

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

相关文章

SPI和API还在傻傻分不清楚?

什么是SPI 介绍 再聊下一个类加载器框架OSGI之前&#xff0c;我们首先学习一下前驱知识SPI 全称&#xff1a;Service Provider Interface 区别于API模式&#xff0c;本质是一种服务接口规范定义权的转移&#xff0c;从服务提供者转移到服务消费者。 怎么理解呢&#xff1f…

JavaScript游戏开发(3)(笔记)

文章目录七、支持移动设备的横向卷轴游戏准备7.1 角色的简单移动7.2 背景7.3 加入敌人与帧数控制7.4 碰撞、计分、重新开始7.5 手机格式7.6 全屏模式7.7 存在的问题附录素材可以去一位大佬放在github的源码中直接下&#xff0c;见附录。 七、支持移动设备的横向卷轴游戏 使用…

手摸手使用IDEA创建多模块(maven)项目

有了前面两篇手摸手打底&#xff0c;相信大家对IDEA创建项目和配置使用maven已经没有什么问题了。那么这篇文章阅读起来也会非常流畅。 对于IDEA来说&#xff0c;可以用拼接模块&#xff08;Module&#xff09;并引用的方式来“搭”一个项目&#xff08;Project&#xff09;。…

【全志T113-S3_100ask】15-2 linux系统gpio模拟spi驱动屏幕——ILI9341

【全志T113-S3_100ask】15-2 linux系统gpio模拟spi驱动屏幕——ILI9341背景&#xff08;一&#xff09;查阅参考文档&#xff08;二&#xff09;使能内核模块&#xff08;三&#xff09;修改设备树&#xff08;四&#xff09;测试&#xff08;五&#xff09;后语背景 在上一小…

nginx的安装与nginx降权+匹配php

安装nginx: 安装的插件的作用: 1.gcc 可以编译 C,C,Ada,Object C和Java等语言&#xff08;安装 nginx 需要先将官网下载的源码进行编译&#xff0c;编译依赖 gcc 环境&#xff09; 2.pcre pcre-devel pcre是一个perl库&#xff0c;包括perl兼容的正则表达式库&#xff0c;ngin…

样本于抽样分布(1)-基本概念

从理论上讲&#xff0c;只要对随机现象进行足够多次的试验&#xff0c;被研究的随机现象的规律 性就能清楚地呈现出来&#xff0e; 但实际上&#xff0c;试验的次数只能是有限的&#xff0c;有时甚至是很少 的&#xff0c;因为采集某些数据时&#xff0c;常要将研究的对象破坏&…

【Gradle】四、使用Gradle创建SringBoot微服务项目

使用Gradle创建SringBoot微服务项目一、 创建Springboot项目0、阿里云脚手架创建项目1、引入 t springboot2 、引入依赖3、执行 geradle bootRun 指令4、spring-boot-gradle-plugin 插件‘二、多模块项目1、settings.gradle2、build.gradle3、version.gradle4、test_service的配…

图论:自反与对称

图论1.自反与反自反2.对称与反对称3.传递与非传递1.自反与反自反 自反&#xff1a;相同顶点都在集合内。 反自反&#xff1a;相同顶点都不在集合内。 参考下图&#xff1a;有三部分&#xff0c;红色的自反&#xff0c;蓝色的反自反&#xff0c;以及白色的都不是。 例1&#…

Animation

1、Animation窗口 Window——>Animation——>Animation Animation窗口 直译就是动画窗口&#xff0c;它主要用于在Unity内部创建和修改动画&#xff0c;所有在场景中的对象都可以通过Animation窗口为其制作动画 原理&#xff1a; 制作动画时&#xff1a;记录在固定时间…

[Linux]-----进程信号

文章目录前言一、什么是信号我们是如何得知这些信号呢&#xff1f;我们知道对应的信号产生时&#xff0c;要做什么呢&#xff1f;二、进程信号前台进程和后台进程注意三、信号列表信号的捕捉四、信号产生前用户层产生信号的方式signal函数killraiseabort由软件条件产生信号硬件…

【Java】才疏学浅·小石Java问道之路

大家好&#xff0c;这里是喜爱编程&#xff0c;又热爱生活的小石~———— ————个人情报昵称&#xff1a;小石&#xff08;起源于姓氏啦~&#xff09;破壳日&#xff1a;4月12日身高&#xff1a;1 m ↑技术基础&#xff1a;c node.js mysql 爱好&#xff1a;上网冲浪 听…

【学习笔记45】JavaScript的分页效果

highlight: an-old-hope 一、分页效果 (一) 首次打开页面 从数组内截取部分数据展示调整页码信息为&#xff1a;当前页 / 总页码处理按钮 3.1 如果当前在第一页&#xff0c;禁用上一页按钮(添加类名disable)3.2 如果当前页在最后一页(当前页 总页码),禁用下一页按钮(添加类名…

SpringCloud微服务实践之六 Feign最佳实践(抽取)

传统Feign面临的问题&#xff1a; 1、每个子项目都要写所要调用服务的pojo 2、每个子项目都要写所要调用服务的feign client客户端 优化思路&#xff1a;由提供服务服务的子项目统一归集代码&#xff0c;统一对外提供接口服务、Feign子项目统一管理服务远程调用、 将FeignClien…

【菜菜的sklearn课堂笔记】逻辑回归与评分卡-用逻辑回归制作评分卡-分箱

视频作者&#xff1a;菜菜TsaiTsai 链接&#xff1a;【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili 分训练集和测试集 from sklearn.model_selection import train_test_split X pd.DataFrame(X) y pd.DataFrame(y)Xtrain,Xtest,Ytrain,Ytest …

DSP-FIR滤波器设计

目录 Gibbs现象:用三角函数逼近间断点: Gibbs现象特点: 常见窗函数&#xff1a; 窗函数的主要频谱参数: 矩形窗(Rectangular)&#xff1a; 汉宁窗(Hanning)&#xff1a; 汉明窗(Hamming)&#xff1a; 布莱克曼窗(Blackman)&#xff1a; 窗函数之间的性能对比&#xff…

Script file ‘F:.....\pip-script.py‘ is not present 原因及解决办法

一 报错类型 二 原因 可能我们使用pip install --upgrade pip或者conda安装一下包时因为网络原因导致只是卸载旧版本而未安装。 三 解决策略 3.1 Anaconda 切换到你的anaconda安装目录并进入Scripts文件夹内(D:\Apps\anaconda3\Scripts) 运行以下代码&#xff1a; conda i…

【Kafka】Kafka基础架构及相关概念

文章目录前言一、Kafka基础知识二、Kafka分区副本参考前言 在以前的定义中&#xff0c;Kafka被定义为一个分布式的基于发布/订阅模式的消息队列&#xff08;Message Queue&#xff09;&#xff0c;主要应用于大数据实时处理领域&#xff0c;类似的产品主要有ActiveMQ、RabbitM…

flutter useRootNavigator属性的作用

useRootNavigator 用于确定是否将对话框推到距给定上下文最远或最接近给定上下文的Navigator 问题&#xff1a; 在使用showDatePicker的时候&#xff0c;android手机如果侧滑返回的时候&#xff0c;页面会关闭&#xff0c;showDatePicker弹出的dailog缺没有关闭。 使用如下…

【学习笔记42】操作DOM

操作DOM一、操作DOM1、步骤2、创建元素节点3、创建文本节点4、增加dom(添加到指定父节点的最后)5、增加dom(添加到指定父节点的最后)6、增加dom(添加到父节点的最前边)7、删除DOM8、修改某一个节点二、克隆DOM1、说明2、复制(克隆)一个LI三、获取元素尺寸(占地面积)四、获取浏览…

WordPress怎么禁止用户使用HTML标签,自动过滤HTML代码?

WordPress怎么禁止用户使用HTML标签&#xff0c;自动过滤HTML代码&#xff1f;出于安全考虑WordPress默认禁止角色为作者的用户写文章时直接添加HTML代码&#xff0c;包括读者留言时也是不允许的。如果想开放此限制&#xff0c;允许作者撰写文章和读者留言时添加HTML代码&#…