[C语言] 函数:库函数--自定义函数--函数的调用--练习--详解<个人>------(1)

18 篇文章 22 订阅
订阅专栏

文章目录



前言

本节内容主要记录函数的相关内容,其中包括:库函数,自定义函数,函数的调用,函数的习题练习。

在上节的循环语句中加入了 goto语句,有兴趣的朋友们可以去了解了解,有一个小整蛊哦。

循环语句链接:

[ C语言 ]循环语句---while---for---do while---详解及练习题巩固_小白又菜的博客-CSDN博客

本篇文章开始之前,首先感谢大家的关注和支持,让我人生首次在一件事情上粉丝破千!!!(真的想象不到)

         其实我开始写博客的初衷是记录自己的学习过程,通过写博客的方式对知识进行再次总结,加深自己对知识的记忆,我现在的目的如此,以后仍然是!每每看到关注量,浏览量这些数据增加,都会让我变得开心,这是大家给予我的一份肯定。在此,感谢各位一直以来的支持,我以后也会对自己的知识记录更加详细,更加丰富,在记录我进步的同时,希望大家通过看到我的博客也会进步。我们一起朝着自己的大厂梦前进吧!!!

 话不多说,上车!!!

———————————————————————————————————————————                                                            ****正文开始****

一. 函数是什么?

维基百科中对函数的定义:子程序
在计算机科学中,子程序(英语:Subroutine, procedure, function, routine, method,
subprogram, callable unit),是一个大型程序中的某部分代码, 由一个或多个语句块组
成。它负责完成某项特定任务,而且相较于其他代 码,具备相对的独立性。
一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软
件库。

二. C言中函数的分类。

1.   库函数
2.   自定义函数

三. 库函数

Q : 为什么会有库函数?

A :

1. 我们知道在我们学习C语言编程的时候,总是在一个代码编写完成之后迫不及待的想知道结果,想把这个结果打印到我们的屏幕上看看。这个时候我们会频繁的使用一个功能:将信息按照一定的格式打印到屏幕上(printf)。

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

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

像上面我们描述的基础功能,它们不是业务性的代码。我们在开发的过程中每个程序员都可能用的到,为了支持可移植性和提高程序的效率,所以C 语言的基础库中提供了一系列类似的库函数,方便程序员进行软件开发。
那怎么学习库函数呢?
会查询工具: MSDN(Microsoft Developer Network)
在这里给大家分享两个链接:
1 >  ​​​​​​cplusplus.com - The C++ Resources Network
2 >  cppreference.com       

i>举例:strlen

代码:

#include <stdio.h>
#include <string.h>
int main() {
	char arr[] = "abc";
	// size_t  -> unsigned int
	size_t len = strlen(arr);
	printf("%u\n", len);
	// %d  - 有符号
	// %u  - 无符号 (没有负数)
	return 0;
}

ii>举例:strcpy

代码演示:

#include <stdio.h>
#include <string.h>
int main() {
	char arr1[20] = { 0 };//  目的地
	char arr2[] = "hello" ;// 源数据
	strcpy(arr1, arr2);
	printf("%s\n",arr1);

	return 0;
}

结果:

我们发现本来是空的arr1中拷贝了arr2中的"hello"

iii>举例:memset

代码演示:

#include <stdio.h>
#include <string.h>
int main(){
	char arr[] = "hello world";
	memset(arr, 'x', 5);
	printf("%s\n", arr);

	return 0;
 }

演示结果:

简单的总结,C语言常用的库函数都有:
IO函数
字符串操作函数
字符操作函数
内存操作函数
时间/日期函数
数学函数
其他库函数

四. 自定义函数

1> 自定义函数存在的意义:

由于库函数不能干所有的事情,所以更加重要的是自定义函数

2>函数的组成

自定义函数和库函数一样,有函数名,返回值类型和函数参数。
但是不一样的是这些都是我们自己来设计。

//***自定义函数***
// 函数返回类型  函数名   参数
// ret_type fun_name(para1,*) 
// {                             //     
//   statement; // 语句项         //函数体
//               }               //


ret_type 返回类型
fun_name 函数名
para1    函数参数

3>举例

一:写一个函数可以找出两个整数中的最大值。

代码:

// 写一个函数,找出两个数的最大值
//返回类型   函数名   参数
int get_max(int x, int y) {
	int z = 0;
	z = (x > y ? x : y);
	return z;
}

int main() {
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int m = get_max(a, b);
	printf("%d\n", m);

	return 0;
}

演示结果:

二:写一个函数可以交换两个整形变量的内容。

按照我们正常的书写代码如下:

void Swap1(int x, int y) {
	int  temp = 0;
	temp = x;
	x    = y;
	y    = temp;
}
int main() {
	int a = 0, b = 0;
	scanf("%d %d", &a, &b);

	// 交换两个变量
	printf("交换前a = %d, b = %d\n", a, b);
	Swap1(a,b);   // 传值调用
	printf("交换后a = %d, b = %d\n", a, b);

	return 0;
}

正确的写法:

 正确写法    使用指针
void Swap2(int* pa,int* pb) {
	int t = 0;
	    t = *pa;
	  *pa = *pb;
	  *pb = t;

}
int main() {
	int a = 0, b = 0;
	scanf("%d %d", &a, &b);

	// 交换两个变量
	printf("交换前a = %d, b = %d\n", a, b);
	Swap2(&a,&b); // 传址调用
	printf("交换后a = %d, b = %d\n", a, b);

	return 0;
}

结果演示:

我们观察这段代码发现,a和b并没有交换。

失败的原因是:a 和 b 是实参 , x 和 y 是形参。当函数调用的时候,实参传给形参,形参其实是实参的一份临时拷贝。所以对形参的修改,不会影响实参。

实际参数(实参):
真实传给函数的参数,叫实参。
实参可以是:常量、变量、表达式、函数等。
无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形
参。
形式参数(形参):
形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内存单元)
所以叫形式参数。形式参数当函数调用完成之后就自动销毁了。因此形式参数只在函数中有效
上面 Swap1 Swap2 函数中的参数 x y px py 都是 形式参数 。在 main 函数中传给 Swap1 的 a ,b和传给 Swap2 函数的 &a  &b  实际参数
这里我们对函数的实参和形参进行分析:

代码对应的内存分配如下:

这里可以看到 Swap1 函数在调用的时候, x y 拥有自己的空间,同时拥有了和实参一模一样的内容。
所以我们可以简单的认为: 形参实例化之后其实相当于实参的一份临时拷贝

五. 函数的调用

1>传值调用

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

2>传址调用

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

六. 练习

一:写一个函数可以判断一个数字 是不是素数

 //is_prime()
 //是素数返回 1 ,不是素数返回 0
int is_prime(int n) {

	// 2 ~ n-1 的数字试除
	int j = 0;
	for (j = 2; j <= sqrt(n); j++) {
		if (n % j == 0) {
			return 0;
		}
		
	}
	return 1;

}

int main() {
	int i = 0;
	for (i = 100; i <= 200; i++) {

		// 判断 i 是否为素数 - 如果是素数就打印
		// i 取 100 - 200
		if (is_prime(i) == 1) {
			printf("%d ", i);
		}
	}

	return 0;
}

演示结果:

二:写一个函数判断一年是不是闰年

 //写一个函数判断一年是不是闰年
 //是闰年 返回1 不是闰年 返回0
int is_leap_year(int y) {
	//if (y % 100 != 0 && y % 4 == 0 || y % 400 == 0) {
	//	return 1;
	//}
	//else {
	//	return 0;
	//}

	return (y % 100 != 0 && y % 4 == 0 || y % 400 == 0);
}
int main() {

	int y = 0;
	for (y = 1000; y <= 2000; y++) {

		// 判断 y 是不是闰年
		if (is_leap_year(y) == 1) {
			printf("%d ",y);
		}
	}

	return 0;
}

代码演示结果:

三: 写一个函数 ,实现一个整形有序数组的二分查找

//写一个函数 ,实现一个整形有序数组的二分查找
//如果找到了返回 下标
//如果找不到返回  -1 
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 if (left == right) {
			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];
	   //      40        /  4
	// 数组arr传给binary_search函数的时候,其实传递的arr数组首元素的地址
	int ret = binary_search(arr,k,sz); // 在arr数组中找k
	if (-1 == ret) {

		printf("找不到\n");
	}
	else {
		printf("找到了,下标是%d\n", ret);
	}
	return 0;
}

代码演示结果:

四:实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定

如:输入9,输出9 * 9口诀表,输出12,输出12 * 12的乘法口诀表。

void Multiplication_formula_table(int i, int j,int n) {
	for (i = 1; i <= n; i++) {
		for (j = 1; j <= i; j++) {
			printf("%d*%d=%d ", j, i, i* j);
		}
		printf("\n");
	}
}
int main() {
	int n = 0;
	scanf("%d",&n);
	int i = 0;
	int j = 0;
	Multiplication_formula_table(i ,j,n);
	return 0;
}

结果演示:

                 

                                                     ****正文结束**** 

——————————————————————————————————————————


总结

本篇文章的内容就记录完毕,由于本人技术水平有限,若各位读者发现错误,欢迎及时纠正。

【C语言】C语言函数
qq_51931342的博客
05-04 1023
前言 我们在使用c语言的时候经常找不到某个函数,今天我就整理了一份C语言常用的函数。 C语言常用的头文件 <stdio.h><ctype.h>   <time.h>   <stdlib.h>   <math.h>   <string.h> <stdio.h> 简介 stdio .h头文件定义了三个变量类型、一些宏和各种函数来执行输入和输出。 三个...
【C语言进阶】最常用的函数大全——从入门到精通
睿的博客
01-18 1万+
常见函数的使用大全!快来看看吧!
C语言-函数(详尽版)
qq_58662017的博客
06-16 1305
目录函数【C语言的第二个重点】: 什么叫做函数如何定义函数函数的分类函数注意的问题形参和实参常用的系统函数变量的作用域和存储方式 为什么需要函数:【定义之后就把他当工具来使用】 操作一样,针对的数据不一样,我们就需要减少代码量,来使用函数来简化这些代码量, 函数使用完毕之后,空间就会释放,不然的话每次调用占一块空间 那调用100次,内存不就爆炸了(满了)! 程序一定从main()函数开始,也一定从main()结束
【C语言函数详解——函数和自定义函数(超全)
最新发布
炸掉地球的博客
03-23 1433
本文主要探讨C语言函数和自定义函数的使用,函数的形参,实参,传值调用,传址调用,嵌套调用,链式访问,递归等
C语言常用函数(含详细用法)
Crazy程序猿
06-06 5595
一、数学函数 调用数学函数时,要求在源文件中包下以下命令行:#include 函数原型说明功能返回值说明int abs( int x)求整数x的绝对值计算结果double fabs(double x)求双精度实数x的绝对值计算结果double acos(double x)计算cos-1(x)的值计算结果x在-1~1范围内double asin(double x)计算sin-1(x)的值计算结果x在-1~1范围内double atan(double x)计算tan-1(x)的值计算结果doub......
C语言标准函数大全
yang1fei2的博客
06-27 1万+
原文链接 C语言作为影响力最为深远的语言之一,应用范围非常广泛。在一些对性能要求比较高的领域,C语言依然有不可撼动的地位。但是C语言标准函数比较多,很多时候我们要实现某个逻辑功能,不知道调用哪些函数。这时就不得不去查询对应的函数文档,这样比较费时。这里把大家能用到的几乎的所有的C语言函数以表格的形式列出来,供大家参考。根据功能将C语言标准函数分为:数学运算、文件和目录操作、事件和日期、进程操作、内存分配、字符串处理、系统函数、类型转换、绘图函数九类。下面以表格的形式分别介绍。 数学运算 主
单片机C51程序设计基础-2012PPT课件.ppt
11-17
#include <> // 预处理命令 char fun1(); // 函数说明 float fun2(); // 函数说明 int x; // 全局变量说明 void main() // 主函数 { 声明部分 函数体 执行部分 } char fun1() // 功能函数1 { 声明部分 函数体...
C语言程序设计期末考试练习题(带详解答案)PDF
08-11
"C语言程序设计期末考试练习题(带详解答案)PDF" 这是一份C语言程序设计期末考试练习题的PDF文件,包含了多道选择题、填充题和编程题,涵盖了C语言的基础知识、数据类型、运算符、控制结构、函数、数组、指针、...
C语言常用函数(含详细用法)可用.pdf
02-21
字符函数是C语言中用于处理字符的函数,需要在源文件中#include <ctype.h>命令来调用。 1. isalnum(int ch):检查ch是否为字母或数字,如果是,返回1;否则返回0。 2. isalpha(int ch):检查ch是否为字母,如果...
C语言常用函数[借鉴].pdf
10-11
C 语言常用函数详解 C 语言中有许多函数可以用于不同的操作系统和应用场景,本文将对一些常用的函数进行详解。 1. absread() 和 abswrite() 函数 absread() 函数原型为 `int absread(int drive, int num, ...
详解C语言中的错误报告errno与其相关应用方法
12-31
errno在<errno>头文件中定义,如下 #ifndef errno extern int errno; #endif 外部变量errno保存程序中实现定义的错误码,通常被定义为errno.h中以E开头的宏, 所有错误码都是正整数,如下例子 # define EDOM 33...
C 语言函数大全
05-13
C 语言函数大全C 语言函数大全C 语言函数大全C 语言函数大全C 语言函数大全C 语言函数大全
建立自己的C语言函数
07-31
建立自己的C语言函数,培养面向对象思想,拥有自己的函数,程序封装良好
函数定义调用
ouyangxikun的博客
11-28 3782
函数定义调用 一,自定义函数定义 二,自定义函数调用 三,函数中参数的传递 1.1自定义函数定义: 1)基本格式: def 函数名(): →(参数(0个或者多个)) pass →指函数体 return 表达式or返回值 2)参数分类: 形参:定义函数里面的参数,它的值是不确定的,因此称之为形式参数,简称形参。 实参:指键盘上输入的...
C++中常用的函数
热门推荐
陕西师范大学 人工智能 周一卓 的博客
03-28 1万+
常用的函数 sort 之类的函数整理
【例7-5】自定义函数调用
zgc_1026999的博客
02-01 3788
(一)函数调用的形式 函数调用的一般形式为:函数名(实际参数列表) 1.若调用无参函数,实际参数列表(简称实参)为空;调用有参函数时,在()内写出实参, 当有多个实参时,用[英]逗号隔开,且实参与形参的类型、数量需一致。 2.若函数无返回值,函数调用通常单独作为一个语句; 若函数有返回值,函数调用通常出现在表达式中,或者作为某个函数的实参。 (二)函数调用过程中的参数传递 对于有参函数函数调用过程中参数传递有两种情况,分别为数值传递、地址传递。 1.数值传递:实参传递给形参的数据是数值,实参和形参在内.
C语言当中的函数(函数及自定义函数)
persistence_Y的博客
04-01 7623
C语言当中函数的分类一般为函数和自定义函数两种. 首先来看函数一些例子: 1.在我们C语言的学习过程中,把程序想要得到的结果打印到屏幕上是必不可少的,这个时候我们就会频繁的使用一个功能,即printf(将信息按照一定的格式打印到屏幕上). 2.在编程过程中,我们常常会需要拷贝字符串,这个时候也就用到了(strcpy). 3.当我们在计算一个数n的k次方时,若幂数较小(比如为3),我们可以通过n...
C语言函数调用-常用函数
qq_62591161的博客
06-24 267
C语言函数调用-常用函数
c语言字符串处理函数大全-简书
09-10
"C语言字符串处理函数大全-简书"是一篇在简书上的教程,介绍了C语言中常用的字符串处理函数。 该教程详细介绍了C语言中字符串操作的相关函数,包括函数的使用方法和示例代码。通过该教程,读者可以学习到如何...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • [C语言]第一个代码HelloWorld 初识C语言(一) 40373
  • [C++] 一篇带你搞懂引用(&)-- C++入门(3) 24520
  • 【C语言】解决n!和求1!+2!+3!+......+n!问题;求前n项和c语言 24258
  • [ C语言 ] 用C语言实现小游戏 ---- 三子棋 代码 + 解析 18493
  • [ C++ ] 一篇带你了解C++中隐藏的this指针 17717

分类专栏

  • 自述 2篇
  • 工具 2篇
  • C++ 32篇
  • Linux 32篇
  • 剑指offer第二版 7篇
  • MySQL 10篇
  • 数据结构 22篇
  • C语言 18篇
  • 排序算法 12篇
  • 网络 7篇
  • 项目 1篇
  • 链表OJ题 10篇

最新评论

  • [ 网络 ] 传输层协议——TCP/UDP

    mango_milk_: 你好请教一下 iperf udp打流服务端出现ack报错是什么原因 Mbits/sec 0.381 ms 274241/2890296 (9.5%) sec 9.14 GBytes 2.61 Gbits/sec 0.520 ms 777578/7785361(10%) sec 2 datagrams received out-of-order sec 3.42 GBytes 976 Mbits/sec 0.800 ms 265115/2885436 (9.2%) sec 2 datagrams received out-of-order 0. 07 07 sec 3.39 GBytes 969 Mbits/sec 0.435 ms 269574/2872615(9.48) sec 168 datagrams received out-of-order Transfer Bandwidth [SUM] 98 [SUM] sec 152 GBytes 43.4 Gbits/sec 11101640/127748447 (8.78) 0.00-30.08 sec write-ackfin failed: 4739 datagrams received out-of-order Connection refused 17] WARNING: ack of last datagram failed. ~Croot@debian123:~# Remote side unexpectedly closed network connection

  • [ C++ ] 一篇带你了解C++中隐藏的this指针

    Wormwaker: 现在支持显式传递this了: int get(this A const& a) { return a.i; }

  • 剑指 Offer 06. 从尾到头打印链表

    蘑菇屯梁村长: 哥,这是用c++写的吗?

  • [ C++ ] 一篇带你了解C++中隐藏的this指针

    liyuliu555: 那是初始化对象 不是函数里面的this this是函数里面的形参

  • [ 数据结构 -- 手撕排序算法第五篇 ] 快速排序 非递归实现

    一切想写成歌: 谢谢佬,加着调试讲清晰了好多

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • git 工具使用--分支管理
  • Git 工具原理及使用 -- 基本使用
  • Centos 7 Xshell 免密提交至gitee仓库
2023年33篇
2022年96篇
2021年22篇

目录

目录

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白又菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司东莞百度竞价包年推广价格玉树网站关键词优化哪家好白城企业网站制作价格合肥百姓网标王推广龙岗SEO按天计费价格海东网站设计报价武威关键词按天收费哪家好桂林网页设计多少钱山南百度网站优化延安网站建设吕梁企业网站改版报价石家庄百度标王多少钱洛阳优秀网站设计酒泉网站优化推荐宣城百度关键词包年推广公司潍坊seo网站优化推荐酒泉关键词排名推荐桂林外贸网站建设推荐大鹏网站推广多少钱郴州设计网站哪家好海南网络营销报价襄阳seo网站优化太原网站优化按天扣费推荐遵义网站排名优化推荐咸阳百度关键词包年推广公司贵阳网络推广多少钱迁安网站建设设计报价新余优化公司石岩百度网站优化多少钱临夏网站改版推荐歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化