当前位置: 首页 > news >正文

C【函数】

1.常用API

1.strcpy:#include<string.h>

char * strcpy ( char * destination, const char * source );
 int main(){char arr1[] = "bit";char arr2[20] = "###########";//               bit\0########strcpy(arr2, arr1);printf("%s\n", arr2);//strcpy - string copy - 字符串拷贝//strlen - string length - 字符串长度有关return 0;}

2.menset

void * memset ( void * ptr, int value, size_t num );
int main()
{char arr[] = "hello world";memset(arr, '*', 5);printf("%s\n", arr);//***** worldreturn 0;
}

3.参考网站

cppreference.com

2.自定义函数

2.1 函数的组成

ret_type fun_name(para1, * )
{statement;//语句项
}
ret_type 返回类型
fun_name 函数名
para1    函数参数
//定义函数
//形参-形式参数-形式上参数
int get_max(int x, int y)
{if(x>y)return x;elsereturn y;
}int main()
{int a = 10;int b = 20;//函数的使用int max = get_max(a, b);printf("max = %d\n", max);max = get_max(100, 300+1);max = get_max(100, get_max(3, 7));printf("max = %d\n", max);return 0;
}

2.2 交换函数

void Swap1(int x, int y)
{int tmp = 0;tmp = x;x = y;y = tmp;
}void Swap2(int* pa, int* pb)
{int tmp = 0;tmp = *pa;*pa = *pb;*pb = tmp;
}int main()
{int a = 10;int b = 20;//int tmp = 0;//printf("a=%d b=%d\n", a, b);//调用Swap1函数-传值调用Swap1(a, b);//调用Swap2函数Swap2(&a, &b);/*tmp = a;a = b;b = tmp;*/printf("a=%d b=%d\n", a, b);return 0;
}

3.函数的参数

3.1 实际参数(实参)

3.2 形式参数(形参)

4.函数的调用

4.1 传值调用

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

2.传址调用

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

3.练习

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

//是素数返回1,不是素数返回0
#include <math.h>int is_prime(int n)//9
{//2->n-1int j = 0;for(j=2; j<=sqrt(n); j++){if(n%j == 0)return 0;}return 1;
}int main()
{//打印100-200之间的素数int i = 0;for(i=100; i<=200; i++){//判断i是否为素数if(is_prime(i) == 1)printf("%d ", i);}return 0;
}

2. 写一个函数判断一年是不是闰年。

 //2. 写一个函数判断一年是不是闰年。
int is_leap_year(int y)
{if((y%4==0&&y%100!=0) || (y%400==0))return 1;elsereturn 0;
}int main()
{int year=0;for(year=1000; year<=2000; year++){//判断year是否为闰年if(1 == is_leap_year(year)){printf("%d ", year);}}return 0;
}

3. 写一个函数,实现一个整形有序数组的二分查找。

  //本质上arr是一个指针//3. 写一个函数,实现一个整形有序数组的二分查找
int binary_search(int arr[], int k, int sz)
{//算法的实现int left = 0;int right = sz-1;while(left<=right){int mid = (left+right)/2;//中间元素的下标if(arr[mid] < k){left = mid+1;}else if(arr[mid] > k){right = mid-1;}else{return mid;}}return -1;
}int main()
{//二分查找//在一个有序数组中查找具体的某个数//如果找到了返回,这个数的下标。找不到的返回-1//int arr[] = {1,2,3,4,5,6,7,8,9,10};int k = 7;int sz = sizeof(arr)/sizeof(arr[0]);//                     传递过去的是数组arr首元素的地址int ret = binary_search(arr, k, sz);if(ret == -1){printf("找不到指定的数字\n");}else{printf("找到了,下标是:%d\n", ret);}return 0;
}

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

int main()
{int num = 0;Add(&num);printf("num = %d\n", num);//1Add(&num);printf("num = %d\n", num);//2Add(&num);printf("num = %d\n", num);//3return 0;
}int main()
{int len = 0;//1//len = strlen("abc");//printf("%d\n", len);//2printf("%d\n", strlen("abc"));return 0;
}

5.函数的嵌套调用和链式访问

函数和函数之间可以根据实际的需求进行组合的,也就是互相调用的。

5.1 嵌套调用

#include <stdio.h>
void new_line()
{printf("hehe\n");
}
void three_line()
{int i = 0;for(i=0; i<3; i++){new_line();}
}
int main()
{three_line();return 0;
}

函数可以嵌套调用,但是不可以嵌套定义

5.2 链式访问

#include <stdio.h>
#include <string.h>
int main()
{char arr[20] = "hello";int ret = strlen(strcat(arr,"bit"));//这里介绍一下strlen函数printf("%d\n", ret);return 0;
}
#include <stdio.h>
int main()
{printf("%d", printf("%d", printf("%d", 43)));//结果是啥?//注:printf函数的返回值是打印在屏幕上字符的个数return 0;
}

6.函数的声明和定义

6.1 函数声明

6.2 函数定义

7.函数递归

7.1 递归的两个必要条件

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

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

7.2 练习




int my_strlen(char* str)
{int count = 0;while(*str != '\0'){count++;//str+1:表示指向下一个地址str++;}return count;
}//递归的方法
//把大事化小
//my_strlen("bit");
//1+my_strlen("it");
//1+1+my_strlen("t");
//1+1+1+my_strlen("")
//1+1+1+0
//3int my_strlen(char* str)//char* str:str数组的首地址
{if(*str != '\0')//查看插入的数值的第一个是否为'\0'如果不是表示长度至少为1return 1+my_strlen(str+1);elsereturn 0;
}int main()
{char arr[] = "bit";//int len = strlen(arr);//求字符串长度//printf("%d\n", len);//模拟实现了一个strlen函数//arr是数组,数组传参,传过去的不是整个数组,而是第一个元素的地址int len = my_strlen(arr);printf("len = %d\n", len);return 0;
}

7.递归和迭代

1.求n的阶乘。(不考虑溢出)

int Fac1(int n)
{int i = 0;int ret = 1;for(i=1; i<=n; i++){ret *= i;}return ret;
}int Fac2(int n)
{if(n<=1)return 1;elsereturn n*Fac2(n-1);
}int main()
{//求n的阶乘int n = 0;int ret = 0;scanf("%d", &n);ret = Fac2(n);//循环的方式printf("%d\n", ret);return 0;
}

2.求第n个斐波那契数。(不考虑溢出)

斐波那契数列
1 1 2 3 5 8 13 21 34 55 ....描述第n个斐波那契数的时候
int count = 0;
int Fib(int n)
{if(n==3)//测试第3个斐波那契数的计算次数{count++;}if(n<=2)return 1;elsereturn Fib(n-1)+Fib(n-2);
}50
49 48
48 47 47 46
47 46 46 45 46 45 45 44int Fib(int n)
{int a = 1;int b = 1;int c = 1;while(n>2){c = a+b;a = b;b = c;n--;}return c;
}

相关文章:

C【函数】

1.常用API 1.strcpy&#xff1a;#include<string.h> char * strcpy ( char * destination, const char * source );int main(){char arr1[] "bit";char arr2[20] "###########";// bit\0########strcpy(arr2, arr1);printf("…...

【简单教程】利用Net2FTP构建免费个人网盘,实现便捷的文件管理

文章目录 1.前言2. Net2FTP网站搭建2.1. Net2FTP下载和安装2.2. Net2FTP网页测试 3. cpolar内网穿透3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 文件传输可以说是互联网最主要的应用之一&#xff0c;特别是智能设备的大面积使用&#xff0c;无论是个人…...

05-Flask-Flask查询路由方式

Flask查询路由方式 前言命令行方式代码实现返回所有路由 前言 本篇来学习下Flask中查询路由的方式 命令行方式 # window 用set linux 用 export set FLASK_APPtest_6_flask运行发方式# 打印所有路由 flask routes代码实现返回所有路由 # -*- coding: utf-8 -*- # Time …...

lua环境搭建数据类型

lua作为一门计算机语言&#xff0c;从语法角度个人感觉还是挺简洁的接下来我们从0开始学习lua语言。 1.首先我们需要下载lua开发工具包 在这里我们使用的工具是luadist 下载链接为&#xff1a;https://luadist.org/repository/下载后的压缩包解压后就能用。 2.接下来就是老生…...

c++11的一些新特性

c11 1. {}初始化2. 范围for循环3. final与override4. 右值引用4.1 左值引用和右值引用4.2 左值引用与右值引用比较 5. lambda表达式6. 声明6.1 auto6.2 decltype6.3 nullptr 7. 可变参数模版 1. {}初始化 在C中&#xff0c;使用花括号初始化的方式被称为列表初始化。列表初始化…...

K8S名称空间和资源配额

Kubernetes 支持多个虚拟集群&#xff0c;底层依赖于同一个物理集群。 这些虚拟集群被称为名称空间。名称空间namespace是k8s集群级别的资源&#xff0c;可以给不同的用户、租户、环境或项目创建对应的名称空间&#xff0c;例如&#xff0c;可以为test、dev、prod环境分别创建各…...

鼠标拖拽拖动盒子时,与盒子内某些点击事件冲突问题解决

目录 问题解决思路解决代码&#xff08;标注【主要代码】的为重点&#xff09; 问题 拖动该悬浮球时&#xff0c;鼠标弹起可能会触发悬浮球内事件 解决思路 鼠标拖动盒子时&#xff0c;将 isMove 设为 true 意为正在拖动盒子&#xff0c;此时将 class"btns_move" 遮…...

PMP项目管理证书是什么?有什么用?

什么是PMP证书&#xff1f; PMP全称是Project Management Professional&#xff0c;中文全称叫项目管理专业人士资格认证&#xff0c;是由美国项目管理协会(PMI)发起&#xff0c;严格评估项目管理人员知识技能是否具有高品质的资格认证考试&#xff0c;目的是为了给项目管理人…...

iframe的父子通讯

最近有个需求是在父页面打开一个弹窗&#xff0c;然后弹窗里面是一个iframe&#xff0c;在关闭弹窗时需要把iframe中的audio标签的音频链接清空和做一些其他的操作。因为以前很少接触iframe&#xff0c;所以对它有点陌生&#xff0c;在经过大佬的指点和上网查阅后找到了解决方法…...

使用docker创建minio镜像并上传文件,提供demo

使用docker创建minio镜像并上传文件&#xff0c;提供demo 1. 整体描述2. 环境搭建2.1 windows环境搭建2.2 docker部署 3. spring集成3.1 添加依赖3.2 配置文件3.3 创建config类3.4 创建minio操作类3.5 创建启动类3.6 测试controller 4. 测试操作4.1 demo运行4.2 页面查看4.3 上…...

02 java ---- Android 基础app开发

目录 相对布局 显示一个美女 显示两个美女 安卓APP启动过程 安卓布局控件 常用布局之相对布局 常用布局之相对布局 padding和margin 按键美化 常用布局之线性布局 安卓按键响应的几种方式 直接设置按键的onClick绑定的函数 自定义类实现按键监听事件的接口 匿名内…...

鲁棒性与稳定性区别

鲁棒性 所谓“鲁棒性”&#xff0c;是指控制系统在一定&#xff08;结构&#xff0c;大小&#xff09;的参数摄动下&#xff0c;维持其它某些性能的特性粗携。 稳定性 所谓“稳定性”&#xff0c;是指控制系统在使它偏离平衡状态的扰动作用消失后&#xff0c;返回原来平衡状…...

C++项目实战——基于多设计模式下的同步异步日志系统-⑦-日志输出格式化类设计

文章目录 专栏导读日志格式化类成员介绍patternitems 格式化子项类的设计抽象格式化子项基类日志主体消息子项日志等级子项时间子项localtime_r介绍strftime介绍 源码文件名子项源码文件行号子项线程ID子项日志器名称子项制表符子项换行符子项原始字符串子项 日志格式化类的设计…...

Android---底部弹窗之BottomSheetDialog

BottomSheetDialog 是Android开发中的一个弹出式对话框&#xff0c;它从屏幕底部弹出并覆盖部分主界面。 1. BottomSheetDialog的使用 // 参数2&#xff1a;设置BottomSheetDialog的主题样式&#xff1b;将背景设置为transparent&#xff0c;这样我们写的shape_bottom_sheet_…...

Cesium 地球网格构造

Cesium 地球网格构造 Cesium原理篇&#xff1a;3最长的一帧之地形(2&#xff1a;高度图) HeightmapTessellator 用于从高程图像创建网格。提供了一个函数 computeVertices&#xff0c;可以根据高程图像创建顶点数组。 该函数的参数包括高程图像、高度数据的结构、网格宽高、…...

C++深度优化——cacheline测试

cacheline是内存调度的基本结构&#xff0c;其大小一般为32B或者64B。关于本机具体的配置信息可以在配置文件中看到&#xff1a; 这里可以看到我的这台机器的cacheline大小是64B。对于cacheline在多核处理器中有一个伪共享的状态&#xff0c;具体可以参考以下博客&#xff1a;高…...

【数字IC/FPGA】Verilog中的递归调用

参考文章 在Verilog2001中,模块的递归调用是可能的,引用下面的一段话(出自上面的参考文章) Many designers think that recursive techniques cannot be applied to hardware design. I’m not really sure where this misconception comes from. While it is true that i…...

禁用Win10自动更新

第一步&#xff0c;winr&#xff0c;输入 gpedit.msc 并回车&#xff0c;打开【组策略】 第二步&#xff0c;依次点击 管理模板->Windows组件->Windows更新 第三步&#xff0c;双击Windows更新&#xff0c;然后在设置中双击 指定 intranet Microsoft 更新服务位置 第…...

算法通关村-----动态规划高频问题

最少硬币数问题 问题描述 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额&#xff0c;返回 -1 。你可以认为每种硬…...

记一起小意外事件引起的批量重命名文件名

一、事件描述 某次,因某业务系统迁移,一线人员对业务目录误操作,执行打包命令过程中导致Tomcat下的web应用程序无法使用,检查后发现项目下所有文件名都加了gz格式;询问一线,发现是对项目目录执行了:gzip -r ./tomcat导致程序文件找不到;报错如下: 二、事件处理 1、查看…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

wpf在image控件上快速显示内存图像

wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像&#xff08;比如分辨率3000*3000的图像&#xff09;的办法&#xff0c;尤其是想把内存中的裸数据&#xff08;只有图像的数据&#xff0c;不包…...

spring Security对RBAC及其ABAC的支持使用

RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型&#xff0c;它将权限分配给角色&#xff0c;再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...

Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程

鸿蒙电脑版操作系统来了&#xff0c;很多小伙伴想体验鸿蒙电脑版操作系统&#xff0c;可惜&#xff0c;鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机&#xff0c;来体验大家心心念念的鸿蒙系统啦&#xff01;注意&#xff1a;虚拟…...

用递归算法解锁「子集」问题 —— LeetCode 78题解析

文章目录 一、题目介绍二、递归思路详解&#xff1a;从决策树开始理解三、解法一&#xff1a;二叉决策树 DFS四、解法二&#xff1a;组合式回溯写法&#xff08;推荐&#xff09;五、解法对比 递归算法是编程中一种非常强大且常见的思想&#xff0c;它能够优雅地解决很多复杂的…...

LangChain【6】之输出解析器:结构化LLM响应的关键工具

文章目录 一 LangChain输出解析器概述1.1 什么是输出解析器&#xff1f;1.2 主要功能与工作原理1.3 常用解析器类型 二 主要输出解析器类型2.1 Pydantic/Json输出解析器2.2 结构化输出解析器2.3 列表解析器2.4 日期解析器2.5 Json输出解析器2.6 xml输出解析器 三 高级使用技巧3…...