初阶 《函数》 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,一经查实,立即删除!

相关文章

堆和栈(heap and stack)

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

26.多边形的判定

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

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;成员变量与局部变量的区别 区别 成员变量 局部变量 类中位置不同 …

【第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…

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

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

VM-Import 导入 Debian 12 系统

介绍 之前介绍过使用 VM-Import 导入 Windows 系统到 AWS 环境启动 EC2 实例, 本文将介绍如何导入 Debian 12 系统. 本地虚拟化使用 VMWare Workstation 创建虚拟机安装和准备 Debian 12 系统, 导出 OVA 文件后上传到 S3 存储桶中再使用 AWSCLI 执行 VM-Import 命令实现导入过…

【Vue】获取模块内的state数据

目标&#xff1a; 掌握模块中 state 的访问语法 尽管已经分模块了&#xff0c;但其实子模块的状态&#xff0c;还是会挂到根级别的 state 中&#xff0c;属性名就是模块名 使用模块中的数据 直接通过模块名访问 $store.state.模块名.xxx 通过 mapState 映射&#xff1a; 默认…

mac免费的ntfs软件哪个好 MAC读取NTFS硬盘格式

对于苹果用户来说&#xff0c;Mac电脑和移动硬盘已经成为日常工作中不可缺少的一部分&#xff0c;但有时我发现Mac打开移动硬盘只能读取无法写入&#xff0c;这是由于所连接的移动硬盘为NTFS格式。我们可以通过对硬盘格式化为Mac正常读写格式&#xff0c;或使用数据读写软件对N…

DNS协议 | NAT技术 | 代理服务器

目录 一、DNS协议 1、DNS背景 2、DNS协议 域名 域名解析 二、NAT技术 1、NAT技术 2、NAPT技术 3、NAT技术的缺陷 三、代理服务器 1、正向代理服务器 2、反向代理服务器 一、DNS协议 域名系统&#xff08;Domain Name System&#xff0c;缩写&#xff1a;DNS&#…

Zabbix配置中文显示及乱码问题

页面配置为中文显示 在zabbix 5.0版本开始用户菜单更改为左侧栏显示&#xff0c;找到并点击 User Settings&#xff0c;Language 修改语言为 Chinese (zh_CN) 即可。 PS&#xff1a;一般在部署后初始配置时&#xff0c;未找到 Chinese (zh_CN) 这一项&#xff0c;修改如下&…

深度学习中embedding层的理解

Embedding层作用 在深度学习领域中&#xff0c;Embedding层扮演着至关重要的角色&#xff0c;尤其在处理文本数据或类别数据。Embedding层的功能有两个&#xff1a; 1. 将高维稀疏的输入数据&#xff08;如单词、类别标签等&#xff09;转换为低维稠密的向量表示&#xff0c;…

数 据 类 型

概述 Java 是强类型语言。 每一种数据都定义了明确的数据类型&#xff0c;在内存中分配了不同大小的内存空间&#xff08;字节&#xff09;。 Java 中一共有 8 种基本类型&#xff08;primitive type&#xff09;&#xff0c;包括 4 种整型、2 种浮点型、1 种字符类型&#…

Vulnhub靶机之reven 1

一、信息收集 nmap扫描网段&#xff0c;靶机地址为192.168.145.129。 nmap -sP 192.168.145.* 扫一下端口&#xff0c;开放了22、80、111、50967。 nmap -sT -T4 -p1-65535 192.168.145.129 再看一下目录情况&#xff0c;发现一个疑似后台登录的地址。 dirsearch -u http://…