初阶 《函数》 4. 函数的调用

4. 函数的调用

4.1 传值调用

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

4.2 传址调用

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

4.3 练习

  1. 写一个函数可以判断一个数是不是素数

方法一

#include <stdio.h>
int main()
{int i = 0;int count = 0;for (i = 100; i <= 200; i++){int flag = 1;int j = 0;for (j = 2; j <= i - 1; j++){if (i % j == 0){flag = 0;break;}}if (flag == 1){count++;printf("%d ", i);}}printf("\ncount=%d\n", count);return 0;
}

在这里插入图片描述
方法二

#include <stdio.h>
#include <math.h>
int main()
{int i = 0;int count = 0;for (i = 100; i <= 200; i++){int j = 0;int flag = 1;for (j = 2; j <= sqrt(i); j++){if (i % j == 0){flag = 0;break;}}if (flag == 1){count++;printf("%d ", i);}}printf("\ncount=%d\n", count);return 0;
}

在这里插入图片描述
方法三

#include <stdio.h>
#include <math.h>
int is_prime(int a)
{int j = 0;for (j = 2; j <= sqrt(a); j++){if (a % j == 0){return 0;}}return 1;
}
int main()
{int i = 0;int count = 0;for (i = 101; i <= 200; i+=2){if (is_prime(i)){printf("%d ", i);count++;}}printf("\ncount=%d\n", count);return 0;
}

在这里插入图片描述
方法四

#include <stdio.h>
#include <stdbool.h>
//bool布尔类型
bool is_prime(int a)
{int j = 0;for (j = 2; j <= sqrt(a); j++){if (a % j == 0){return false;}}return true;
}
int main()
{int i = 0;int count = 0;for (i = 101; i <= 200; i+=2){if (is_prime(i)){printf("%d ", i);count++;}}printf("\ncount=%d\n", count);return 0;
}
  1. 写一个函数判断一年是不是闰年
    方法一
#include <stdio.h>
int main()
{int year = 0;for (year = 1000; year <= 2000; year++){if (year % 4 == 0){if (year % 100 != 0){printf("%d ", year);}}if (year % 400 == 0){printf("%d ",year);}}return 0;
}

在这里插入图片描述
方法二

#include <stdio.h>
int main()
{int year = 0;for (year = 1000; year <= 2000; year++){if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)){printf("%d ", year);}}return 0;
}

在这里插入图片描述
方法三

#include <stdio.h>
int is_leap_year(int i)
{if (((i % 4 == 0) && (i % 100 != 0)) || (i % 400 == 0))return 1;elsereturn 0;
}
int main()
{int year = 0;for (year = 1000; year <= 2000; year++){if (is_leap_year(year)){printf("%d ", year);}}return 0;
}

在这里插入图片描述

  1. 写一个函数,实现一个整形有序数组的二分查找
#include <stdio.h>
int binary_search(int arr[], int k, int sz)
{int left = 0;int right = sz - 1;while (left <= right){int mid = left + (right - left) / 2;if (arr[mid] < k){left = mid + 1;}else if (arr[mid] > k){right = mid - 1;}else{return mid;}}return -1;
}
int main()
{int arr[] = { 1,2,3,4,5,6,7,8,9,10 };int k = 7;int sz = sizeof(arr) / sizeof(arr[0]);int ret = binary_search(arr, k, sz);if (ret == -1){printf("没找到\n");}else{printf("找到了,下标是:%d\n", ret);}
}
//形参和实参的名字可以相同,也可以不同

在这里插入图片描述

//下面是一个错误的示范
//数组传参实际上传递的是数组首元素的地址,而不是整个数组
//所以在函数内部计算一个函数传参部分的数组的元素个数是不可靠的
#include <stdio.h>
int binary_search(int arr[], int k)
{int sz = sizeof(arr) / sizeof(arr[0]);//形参arr看上去是数组,本质是指针变量int left = 0;int right = sz - 1;while (left <= right){int mid = left + (right - left) / 2;if (arr[mid] < k){left = mid + 1;}else if (arr[mid] > k){right = mid - 1;}else{return mid;}}return -1;
}
int main()
{int arr[] = { 1,2,3,4,5,6,7,8,9,10 };int k = 7;int ret = binary_search(arr, k);if (ret == -1){printf("没找到\n");}else{printf("找到了,下标是:%d\n", ret);}
}

在这里插入图片描述

  1. 写一个函数,每调用一次这个函数,就会将 num 的值增加1

方法一

#include <stdio.h>
void Add(int* p)
{(*p)++;
}
int main()
{int num = 0;Add(&num);printf("%d\n", num);Add(&num);printf("%d\n", num);Add(&num);printf("%d\n", num);Add(&num);printf("%d\n", num);Add(&num);printf("%d\n", num);return 0;
}

在这里插入图片描述

方法二

#include <stdio.h>
int Add(int n)
{return ++n;
}
int main()
{int num = 0;num = Add(num);printf("%d\n", num);num = Add(num);printf("%d\n", num);num = Add(num);printf("%d\n", num);num = Add(num);printf("%d\n", num);return 0;
}

在这里插入图片描述

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

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

相关文章

Bat脚本专栏目录及索引

文章目录 注释关闭回显和打印pauseerrorlevel 判断刚才的命令是否执行成功%value% 和 !value!的区别脚本名或路径有中文if条件判断语句for 循环语句set 变量设置findstr 搜索指令tasklist 进程列表指令文件操作时间延迟简单应用 注释 REM:: 关闭回显和打印 &#xff1a;字符…

大数据领域的workload是什么意思?

什么是workload&#xff1f; 在大数据领域&#xff0c;"workload"指的是需要处理的数据集和对其执行的操作的组合。它描述了大数据系统需要执行的任务的类型和规模。 我们可以从以下几个维度来理解大数据领域的 workload&#xff1a; 数据的特征: 数据量 需要处…

Linux下创建软raid(磁盘阵列)

raid &#xff0d;&#xff0d;磁盘阵列 RAID分为软RAID和硬RAID 如果cpu比较空闲&#xff0c;并且I/O比较慢的话&#xff0c;那么就比较适合使用软RAID 基本级别 0 1 5 0级别&#xff1a; 至少有两块硬盘&#xff0c;条带化&#xff0c;即把磁盘分散开&#xff0c; 写性能 …

sam_out 脱发预测

解释 这段代码是一个用于预测掉发问题的GPT模型的训练脚本。代码首先读取了一个包含预测特征的csv数据文件&#xff0c;并将特征进行编码。然后将数据集分成训练集和测试集。接下来定义了模型的结构&#xff0c;优化器和损失函数。然后进行多轮训练&#xff0c;每一轮都使用批…

堆和栈(heap and stack)

1、堆&#xff1a;一块内存空间&#xff0c;可以从中分配一个小buffer&#xff0c;用完后再把它放回去。 2、栈&#xff1a;也是一块内存空间&#xff0c;cpu的sp寄存器指向它&#xff0c;它可以用于函数调用、局部变量、多任务系统里保存现场。 PUSH [r3-r6,lr]; #将r3到r6寄…

C++之pair总结及其在点云数据存储中举例

1、前言 pair是将2个数据组合成一组数据&#xff0c;当需要这样的需求时就可以使用pair。如当一个函数需要返回2个数据的时候&#xff0c;可以选择pair。 pair的实现是一个结构体&#xff0c;主要的两个成员变量是first、second 因为是使用struct不是class&#xff0c;所以可以…

26.多边形的判定

上海市计算机学会竞赛平台 | YACSYACS 是由上海市计算机学会于2019年发起的活动,旨在激发青少年对学习人工智能与算法设计的热情与兴趣,提升青少年科学素养,引导青少年投身创新发现和科研实践活动。https://www.iai.sh.cn/problem/499 题目描述 给定 𝑛n 个整数 𝑎1,𝑎…

base上海,数据科学,数据挖掘,数据分析等岗位求收留

裁员了&#xff0c;base上海&#xff0c;数据科学&#xff0c;数据挖掘&#xff0c;数据分析等岗位&#xff0c;期望30k~40k&#xff0c;求推荐求收留 1&#xff0c;6年数据算法工作&#xff0c;做过指标体系搭建&#xff0c;用户画像&#xff0c;货品定价&#xff0c;社区分析…

Nacos注册中心和配置中心

1 nacos简介 1.1nacos介绍 Nacos是阿里的一个开源产品&#xff0c;它是针对微服务架构中的服务发现、配置管理、服务治理的综合型解决方案。是微服务的注册中心和配置中心&#xff0c;相当于springcloudEureka和springconfig的集合。 Nacos 致力于帮助您发现、配置和管理微服务…

使用Leaflet-canvas-label进行个性化标注实践详解

目录 前言 一、leaflet-canvas-label属性 1、地图展示属性 2、Canvas文本标注属性 3、事件列表 二、属性设置实战 1、标注放大比例 2、字体颜色和方向偏移 3、标注文字透明色设置 4、标注显示层级 三、事件绑定 1、颜色改变 2、事件绑定解析 3、标记初始化的一个小…

28.找零

上海市计算机学会竞赛平台 | YACSYACS 是由上海市计算机学会于2019年发起的活动,旨在激发青少年对学习人工智能与算法设计的热情与兴趣,提升青少年科学素养,引导青少年投身创新发现和科研实践活动。https://www.iai.sh.cn/problem/744 题目描述 有一台自动售票机,每张票卖 …

一文详解大模型微调全流程

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学. 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总合集&…

【大学物理】波动光学:光的衍射

23.2 单缝的夫琅禾费衍射_哔哩哔哩_bilibili 1 光的衍射和惠更斯-菲涅尔原理 干涉vs衍射&#xff1a;干涉研究的是两个分立的子光源&#xff0c;衍射研究的是连续的子光源。 两位科学家用分解的思想&#xff0c;一个解决了方向一个解决了光强。 2 单缝的夫琅禾费衍射 夫琅禾…

【JAVASE】java语法(成员变量与局部变量的区别、赋值运算符中的易错点)

一&#xff1a;成员变量与局部变量的区别 区别 成员变量 局部变量 类中位置不同 …

MySQL之查询性能优化(十四)

查询性能优化 使用用户自定义变量 优化排名语句 使用用户自定义变量的一个特性是你可以在给一个变量赋值的同时使用这个变量&#xff0c;换句话说&#xff0c;用户自定义变量的赋值具有"左值"特性。下面的例子展示了如何使用变量来实现一个类似"行号(row num…

【第14章】SpringBoot实战篇之多环境配置

文章目录 前言一、通用配置文件1. 定义2. 使用2.1 application.yml2.2 启动类 3. 测试 二、多环境配置文件1.定义1.1 application-local.yml1.2 application-dev.yml1.3 application-test.yml1.4 application-prod.yml 2.使用2.1 application.yml2.2 启动类 3.测试 三、多环境配…

OpenGL-ES 学习(6)---- Ubuntu OES 环境搭建

OpenGL-ES Ubuntu 环境搭建 此的方法在 ubuntu 和 deepin 上验证都可以成功搭建 目录 OpenGL-ES Ubuntu 环境搭建软件包安装第一个三角形基于 glfw 实现基于 X11 实现 软件包安装 sudo apt install libx11-dev sudo apt install libglfw3 libglfw3-dev sudo apt-get install…

​2020-2024 idea最新安装激活

前言&#xff1a;怎么才能既免费&#xff0c;又能使用上正式版呢&#xff01;&#xff08;不是正版用不起&#xff0c;而是‘激活’更有性价比&#xff09; 1-2 下载安装&#xff0c;此处省略 记得安装好不要打开&#xff0c;看下一步。 3.开始 3.1打开idea 首先打开idea&am…

CodeWF.EventBus:轻量级事件总线,让通信更流畅

1. CodeWF.EventBus EventBus(事件总线)&#xff0c;用于解耦模块之间的通讯。本库&#xff08;CodeWF.EventBus&#xff09;适用于进程内消息传递&#xff08;无其他外部依赖&#xff09;&#xff0c;与大家普遍使用的MediatR部分类似&#xff0c;但MediatR库侧重于ASP.NET C…

Dish-TS: 缓解分布转移的一般范例 时间序列预测

摘要 时间序列预测(TSF)中的分布移位(即序列分布随时间的变化)在很大程度上阻碍了TSF模型的性能。现有的关于时间序列中分布变化的研究大多局限于分布的量化&#xff0c;更重要的是&#xff0c;忽视了回望窗和地平线窗之间的潜在变化。为了应对上述挑战&#xff0c;我们系统地…