C中的基本函数

1函数是是什么

    1.1维基百科中对函数的定义:子程序

   在计算机科学中,子程序是一个大型程序中的某部分代码,由一个或多个语句块组成,他负责完成某项特定任务,而且相较于其他代码,具备相对的独立性。

   一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏,这些代码通常被集成为软件库。

   c语言中把常用的功能,进行了封装,封装成一个个的函数,提供出来大家都可以使用。

比如:scanf,printf,strlen,strcmp,rand,srand,time

    c语言并不直接去实现库函数,而是提供了c语言的标准和库函数的约定

2库函数

    为什么有库函数?

     1我们知道在我们学习c语言编程的时候,总是在一个代码编写完成之后迫不及待的想知道结果,想把这个结果打印到我们屏幕上,这个时候我们就会使用printf

    2在编程的过程中我们会频繁的做一些字符串的拷贝工作(strcpy)

    3在编程是我们也会计算,总是会计算n的k次方这样的运算(pow)

常用的库函数由:IO函数,字符串操作函数,字符操作函数,内存操作函数,时间/日期函数,数学函数,其他库函数  (scanf,printf,getchar,putchar,strlen,strcmp,islower,memset,time,sqrt,pow)

3自定义函数

//函数的组成:
// ret_type fun_name(para1,*)
// {
//     statement;//语句项
// }
// ret_type 返回类型
// fun_name 函数名
// para1 函数参数//自定义函数和库函数一样: 函数名,函数参数,返回类型
//写一个函数可以找出两个整数中的最大值
int main()
{int a = 0;int b = 0;//输入scanf("%d %d",&a,&b);//计算int m = (a > b ? a : b);//输出printf("较大值是:%d\n",m);return 0;
}//自定义函数和库函数一样: 函数名,函数参数,返回类型
//写一个函数可以找出两个整数中的最大值
int  get_max(int x, int y)
{int z = (x > y ? x : y);return z;
}
int main()
{int a = 0;int b = 0;//输入scanf("%d %d",&a,&b);//计算//int m = (a > b ? a : b);//使用函数来完成int m = get_max(a,b);//输出printf("较大值是:%d\n",m);return 0;
}//形式参数 -形参
// void Swap(int x,int y)
// {
//     int tmp = x;
//     x = y;
//     y = tmp;
// }
// int main()
// {
//     int a = 0;
//     int b = 0;
//     scanf("%d %d",&a,&b);
//     printf("交换前:a=%d b=%d\n",a,b);
//     //实际参数 - 实参
//     //当实参传递给行参的时候
//     //行参是实参的一份临时拷贝
//     //使用对行参对修改不会影响实参
//     Swap(a,b);
//     printf("交换后:a=%d b=%d\n",a,b);
//     return 0;
// }// int main()
// {
//     int num = 10;
//     int* p = #//     *p = 20;
//     printf("%d\n",num);//     return 0;
// }//形式参数 -形参
void Swap(int *px,int *py)
{int tmp = *px;*px = *py;*py = tmp;
}
int main()
{int a = 0;int b = 0;scanf("%d %d",&a,&b);printf("交换前:a=%d b=%d\n",a,b);//实际参数 - 实参//当实参传递给行参的时候//行参是实参的一份临时拷贝//使用对行参对修改不会影响实参Swap(&a,&b);printf("交换后:a=%d b=%d\n",a,b);return 0;
}

4函数参数

    实际参数(实参)

    实参可以是:常量、变量、表达式、函数等;

    无论实参是何种类型的量,在进行函数调用时,他们都必须有确定的值,以便把这些值传送给行参。

    形式参数(形参)

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

5函数调用

//写一个数,判断这个数是不是素数
//是素数返回1
//不说素数返回0
//2~sqrt(n)//判断素数
int is_prime(int n)
{int j = 0;for ( j = 2;j<=sqrt(n);j++) //sqrt需要使用math.h函数库{if(n % j == 0){return 0;}}return 1;
}int main()
{int i = 0;int count = 0;for(i = 100; i <= 200; i++){//判断i是否为素数if(is_prime(i) == 1){printf("%d\n",i);count++;}}
}//写一个函数判断一年是不是闰年
//是润年返回1
//非闰年返回0
int is_leap_year(int y)
{// if((y%4==0)&&(y%100!=0) || (y%400 == 0))// {//     return 1;// } else// {//     return 0;// }return ((y%4==0)&&(y%100!=0) || (y%400 == 0));
}
int main()
{int y = 0;int count = 0;for(y =1000;y<=2000;y++){if (is_leap_year(y) == 1){printf("%d\n",y);count++;}}printf("\ncount = %d\n",count);
}//写一个函数,实现一个整形有序数组的二分查找int binary_search(int arr[], int k, int sz)
{int left = 0;int right = sz -1;while(left <= right){//int mid = (left+right)/2;int mid = left + (right -left)/2;if (arr[mid] < k){left = mid + 1;} else if(arr[mid] > k){right = mid -1;} else{return mid;}}}int main()
{int arr[] = {1,2,3,4,5,6,7,8,9,10};int k = 5;int sz = sizeof(arr) / sizeof(arr[0]);//二分查找//找到了返回下标//找不到:返回-1int ret = binary_search(arr,k,sz);if (ret == 1){printf("找不到\n");} else{printf("找到了,下标是:%d\n",ret);}return 0;
}void test(int* p)
{(*p)++;
}int main()
{int num = 0;//调用函数,num增加1test(&num);test(&num);printf("%d\n",num);return 0;}

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

//链式访问
// int main()
// {
//     // int len = strlen("abcdef");
//     // printf("%d\n",len);//     printf("%d\n",strlen("abcdef"));
//     return 0;
// }int main()
{printf("%d ",printf("%d ",printf("%d ",43)));// 43 3 2  多个空格就多个字符return 0;
}

7函数的声明和定义

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

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

函数的定义:放在源文件中

使用:

//函数的声明和定义通常不是这样使用的
//函数的声明说放在头文件中的//#include "add.h"
//.lib -静态库
//导入静态库
//#pragma comment(lib,"add.lib");
// int main()
// {
//     int a = 0;
//     int b = 0;
//     //输入å
//     scanf("%d %d",&a,&b);
//     //加法
//     int c = Add(a,b);  //函数调用//     printf("%d\n",c);
// }

8函数递归

    什么是递归?程序调用自身的编程技巧称为递归 ,函数自己调用了自己

递归作为一种算法在程序设计语言中广泛应用,一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,他通常吧一个大型复杂的问题层层转化为一个原问题相似的规模较小的问题来求解,递归策略只需要少量的程序就可描述出解题过程所需呀的多次重复计算,大大减少了程序的代码量。

递归的主要思考方式在于:把大事化小 

递归的两个必要条件:1存在限制条件,当满足这个限制条件的时候,递归便不再继续  2每次递归调用之后越来越接近这个限制条件

//求字符串的长度// int my_strlen(char* s)
// {
//     int count = 0;
//     while(*s != '\0')
//     {
//         count++;
//         s++;
//     }//     return count;
// }int my_strlen(char* s)
{if(*s == '\0'){return 0;} else{return 1 + my_strlen(s + 1);}
}
int main()
{char arr[] = "abc";//[a b c \0]int len = my_strlen(arr);printf("%d\n",len);//printf("abcvd");
}

//n! = 1*2*3*4*...*n
//循环(迭代)
// int Fac(int n)
// {
//     int r = 1;
//     int i = 0;
//     for(i=1;i<=n;i++)
//     {
//         r = r*i;
//     }//     return r;
// }//求阶乘
// int Fac(int n)
// {
//     if (n <= 1)
//     {
//         return 1;
//     } else
//     {
//         return n*Fac(n-1);//10 * 9 * 8....*1
//     }
// }
// int main()
// {
//     int n = 0;
//     scanf("%d",&n);//     int ret = Fac(n);
//     printf("%d\n",ret);
// }//求第n个斐波那契数
//1 1 2 3 5 8 13 21 34 55 ....
//前2个数的和是第三个数
//递归方法可能会溢出
// int Fib(int n)
// {
//     if (n <= 2)
//     {
//         return 1;
//     } else 
//     {
//         return Fib(n -1) + Fib(n-2);
//     }// }int Fib(int n)
{int a = 1;int b = 1;int c = 0;while( n >= 3){c = a+b;a = b;b = c;n--;}return c;
}int main()
{int n = 0;scanf("%d",&n);int ret = Fib(n);printf("%d\n",ret);
}

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

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

相关文章

浅析安防视频监控平台EasyCVR视频融合平台接入大量设备后是如何维持负载均衡的

安防视频监控平台EasyCVR视频融合平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。视频汇聚融合管理平台EasyCVR既具备…

【C++】学习STL中的list

❤️前言 大家好&#xff01;&#xff0c;今天为大家带来的一篇博客是关于STL中的list&#xff0c;内容主要包括list的介绍使用、list的模拟实现。以及list与vector的对比。 正文 list的介绍和使用 首先&#xff0c;让我们看看list的文档介绍&#xff1a; list是可以在常数范…

LabVIEW检测润滑油中的水分和铁颗粒

LabVIEW检测润滑油中的水分和铁颗粒 润滑油广泛应用于现代机械设备&#xff0c;由于工作环境日益恶劣&#xff0c;润滑油经常被水分乳化&#xff0c;加速对机械设备的腐蚀。此外&#xff0c;润滑油还受到机械零件摩擦中产生的Fe颗粒的污染&#xff0c;削弱了其机械润滑效果。润…

微服务-gateway基本使用

文章目录 一、前言二、gateway网关1、什么是微服务网关&#xff1f;2、微服务架构下网关的重要性2.1、没有网关2.2、有网关 3、gateway的功能4、gateway实战4.1、依赖配置4.2、添加网关配置4.3、添加网关启动类4.4、查看项目是否启动成功4.5、验证路由配置是否正确 三、总结 一…

设备管理系统的优势是什么?设备管理系统对企业运营管理有什么帮助?

传统的设备报修维护方式存在一些问题&#xff0c;例如指派传递速度慢和故障信息不准确等。然而&#xff0c;使用设备管理系统就可以轻松地解决这些问题&#xff0c;并且报修全流程只需短短的30秒。设备管理系统具有许多优势&#xff0c;首先它支持多种渠道的报修&#xff0c;包…

视频集中存储/直播点播平台EasyDSS点播文件分类功能新升级

视频推拉流EasyDSS视频直播点播平台&#xff0c;集视频直播、点播、转码、管理、录像、检索、时移回看等功能于一体&#xff0c;可提供音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务。 TSINGSEE青犀视频的EasyDSS平台具有点播文件分类展示方法&#xf…

MojoTween:使用「Burst、Jobs、Collections、Mathematics」优化实现的Unity顶级「Tween动画引擎」

MojoTween是一个令人惊叹的Tween动画引擎&#xff0c;针对C#和Unity进行了高度优化&#xff0c;使用了Burst、Jobs、Collections、Mathematics等新技术编码。 MojoTween提供了一套完整的解决方案&#xff0c;将Tween动画应用于Unity Objects的各个方面&#xff0c;并可以通过E…

MySQL——索引

索引在 MySQL 数据库中分三类&#xff1a; B 树索引Hash 索引全文索引 目的&#xff1a;在查询的时候提升效率 b树 参考&#xff1a;https://blog.csdn.net/qq_40649503/article/details/115799935 数据库索引&#xff0c;是数据库管理系统中一个排序的数据结构&#xf…

Linux之Shell概述

目录 Linux之Shell概述 学习shell的原因 shell是什么 shell起源 查看当前系统支持的shell 查看当前系统默认shell Shell 概念 Shell 程序设计语言 Shell 也是一种脚本语言 用途 Shell脚本的基本元素 基本元素构成&#xff1a; Shell脚本中的注释和风格 Shell脚本编…

合宙Air724UG LuatOS-Air LVGL API控件-滑动条 (Slider)

滑动条 (Slider) 滑动条看起来和进度条是有些是有些像&#xff0c;但不同的是滑动条可以进行数值选择。 示例代码 -- 回调函数 slider_event_cb function(obj, event)if event lvgl.EVENT_VALUE_CHANGED then local val (lvgl.slider_get_value(obj) or "0")..&…

postgresql-常用日期函数

postgresql-常用日期函数 简介计算时间间隔获取时间中的信息截断日期/时间创建日期/时间获取系统时间时区转换 简介 PostgreSQL 提供了以下日期和时间运算的算术运算符。 获取当前系统时间 select current_date,current_time,current_timestamp ;-- 当前系统时间一周后的日…

C语言“牵手”拼多多商品详情数据方法,拼多多商品详情API接口,拼多多API申请指南

拼多多是中国最大的自营式电商企业&#xff0c;在线销售计算机、手机及其它数码产品、家电、汽车配件、服装与鞋类、奢侈品、家居与家庭用品、化妆品与其它个人护理用品、食品与营养品、书籍与其它媒体产品、母婴用品与玩具、体育与健身器材以及虚拟商品等。 拼多多平台的商品…

Linux之history、tab、alias、命令执行顺序、管道符以及exit

目录 Linux之history、tab、alias、命令执行顺序、管道符以及exit history历史命令 格式 参数 修改默认记录历史命令条数 案例 案例1 --- 显示history历史记录中出现次数最高的top10 案例2 --- 增加history显示的时间信息 命令与文件名补全 --- tab 命令别名 格式 案…

16 “count(*)“ 和 “count(1)“ 和 “count(field1)“ 的差异

前言 经常会有面试题看到这样的问题 “ select count(*) ”, “ select count(field1) ”, “ select count(1) ” 的效率差异啥的 然后 我们这里 就来探索一下 这个问题 我们这里从比较复杂的 select count(field1) 开始看, 因为 较为复杂的处理过程 会留一下一些关键的调试…

Briefings in Bioinformatics2021 | Bert-Protein+:基于Bert的抗菌肽识别

论文标题&#xff1a;A novel antibacterial peptide recognition algorithm based on BERT 论文地址&#xff1a;novel antibacterial peptide recognition algorithm based on BERT | Briefings in Bioinformatics | Oxford Academic 代码&#xff1a;https://github.com/B…

【笔记】大模型时代下做科研的四个思路 - 论文精读·52

视频地址&#xff1a;大模型时代下做科研的四个思路 相关大模型 CV: ViT(22B) , ViT-G(2B) from google 多模态&#xff1a;ViT-E(4B) from google NLP&#xff1a;LLaMA(70B,130B,330B,651B) from Meta 提问&#xff1a;在模型越来越大的时代背景下&#xff0c;如何利用有限…

Maven编译java及解决程序包org.apache.logging.log4j不存在问题

1、首先新建一个文件夹&#xff0c;比如hello Hello里新建pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi…

【网络编程】IO多路复用

IO多路复用是一种高效的I/O处理方式&#xff0c;它允许单个进程能够同时监视多个文件描述符&#xff08;sockets、文件等&#xff09;&#xff0c;并在其中任何一个文件描述符准备好进行I/O操作时进行处理。它的核心在于使用少量的线程或进程来管理多个I/O操作&#xff0c;以提…

BCSP-玄子Share-Java框基础_工厂模式/代理模式

三、设计模式 3.1 设计模式简介 软件设计中的三十六计是人们在长期的软件开发中的经验总结是对某些特定问题的经过实践检验的特定解决方法被广泛运用在 Java 框架技术中 3.1.1 设计模式的优点 设计模式是可复用的面向对象软件的基础可以更加简单方便地复用成功的设计和体系…

一维数组笔试题及其解析

Lei宝啊 &#xff1a;个人主页 愿所有美好不期而遇 前言&#xff1a; 数组名在寻常情况下表示首元素地址&#xff0c;但有两种情况例外&#xff1a; 1.sizeof(数组名)&#xff0c;这里的数组名表示整个数组&#xff0c;计算的是整个数组的大小 2.&数组名&#xff0c;这里的…