函数怎么学最简单方法,函数自学网
1.函数分为库函数和自定义函数。
查找图书馆功能的网站:http://www.cplusplus.com还是https://legacy.cplusplus.com/reference/
中文版C语言函数网站:cpprefenrerence.com
功能组成:
ret_type fun_name ( paral,*)
{
声明;//语句项
}
Ret_type返回类型
Fun_name函数名
并行函数参数
2.交换两个数子函数
第一种方法打印a=10b=20该函数不实现交换函数。由于主函数中A和B的地址与子函数中X和Y的地址不同,我们只是改变了X和Y的内容,并不等同于改变A和B的内容#define _CRT_SECURE_NO_WARNINGS
#包含stdio.h
#包含stdlib.h
#包含字符串. h
void swap(int x,int y)
{
int temp=0;
temp=x;
x=y;
y=温度;
}
int main()
{
int a=10
int b=20
互换(a,b);
printf(a=%d b=%d\n ,a,b);
返回0;
}
第二种方法#define _CRT_SECURE_NO_WARNINGS
#包含stdio.h
#包含stdlib.h
#包含字符串. h
Void swap(int* x,int* y)//当子函数没有返回值时,写Void作为返回函数类型。
{
int temp=0;
temp=* x;
* x=* y;
*y=温度;
}
int main()
{
int a=10
int b=20
互换(a,
printf(a=%d b=%d\n ,a,b);
返回0;
}
3.stringcopy字符串复制函数
头文件是# includestring.h。
通用格式:
strcpy(目的地,来源);
注意:复制字符串时,源字符串中的终止符\0也会被复制,目的地址的大小要大于原字符串所占的空间,否则会溢出。
#包含stdio.h
#包含字符串. h
int main()
{
char arr 1[20]={ 0 };
char arr 2[20]={ 0 };
“你好!”;
arr2= # # # # # # # # # # # #
strcpy(arr2,arr 1);
printf(%s\n ,arr 2);
返回0;
}
4.memset函数——内存设置
memset( void* ptr,int value,size _ t num);
ptr:
被修改事物的第一个地址。
价值:
要修改的值
数量:
要修改的位数
intmain()
{
char arr[]= hello world ;
memset(arr, * ,5);
printf(%s\n ,arr);
返回0;
}
这个程序的作用是将arr数组中的前五位替换为 * ,即最终结果为“* * * *世界”。
5.什么是实际的论点:
实际传递给函数的参数称为实参。参数可以是常量、变量、表达式、函数等。无论实参是什么类型的量,在进行函数调用时,它们都必须有特定的值,以便这些值可以传递给形参。
比如:Max (100,200);这个论点是不变的。
什么是形参:
形参指的是函数名后面括号中的变量。因为形参只在被调用函数的过程中被实例化(分配内存单元),所以称为形参。形参在函数被调用时自动销毁,所以形参只在函数中有效。形参可以看作是实参的临时副本,会开辟一个新的地址,所以修改形参不会改变实参的值。
6.函数调用:
按值调用:函数的形参和实参占用不同的内存块,修改形参不会影响实参。
地址调用:(如果是需要在函数外改变变量的函数,可以使用地址调用)
地址调用是通过将函数外部创建的变量的内存地址传递给函数参数来调用函数的一种方式。这种传递参数的方式可以使函数和函数外的变量建立真正的联系,即函数外的变量可以在函数内直接操作。练习:
1.写一个函数来判断一个数是否是质数。
#define _CRT_SECURE_NO_WARNINGS
#包含stdlib.h
#包含数学. h
int is_prime(int x)
{
int j=0;
for(j=2;j sqrt(x);j)
{
如果(x%j==0)
{
返回0;
打破;
}
}
if (j sqrt(x))
返回1;
}
int main()
{
int I=0;
for(I=101;i=200我)
{
is _ prime(I);
if(is_prime(i)==1)
printf(%d ,I);
}
返回0;
}
2.写一个判断一年是不是闰年的函数。
#define _CRT_SECURE_NO_WARNINGS
#包含stdio.h
整数年(整数x)
{
if ((x % 4==0) (x % 100!=0))
返回1;
else if (x % 400==0)
返回1;
其他
返回0;
}
int main()
{
int I=0;
Printf(请输入年份:\ n );
scanf(%d ,
第一年;
如果(年份(i)==1)
Printf(今年是闰年\ n );
其他
Printf(年份不是闰年\ n );
返回0;
}
3.写一个函数实现一个形状有序的数组的二分搜索法。
正确编写#define _CRT_SECURE_NO_WARNINGS。
#包含stdio.h
intbinary_search(int arr[],int k,int sz)
{
int left=0;
int right=SZ-1;
while(左=右)
{
int mid=(左右)/2;
if (arr[mid] k)
{
左=中1;
}
else if (arr[mid] k)
{
右=中1;
}
其他
{
返回mid
}
}
return-1;
}
int main()
{
int arr[10]={ 1,2,3,4,5,6,7,8,9,10 };
int SZ=sizeof(arr)/sizeof(arr[0]);
int k=8;
int get=binary_search(arr,k,SZ);
if (get==-1)
{
Printf(您要找的号码不存在\ n );
}
其他
{
Printf(你要找的数字的下标是%d\n ,get);
}
返回0;
}
写错了:不同的是,计算数组长度的语句放在函数体中,此时的结果完全不同。因为不可能在函数中开辟一个新的地址来放数组,因为数组的空间可能很大,浪费了很多地方。因此,当数组传递参数时,它只传递数组中的第一个元素。所以在函数体中计算数组的长度会导致错误,所以我们可以在主函数中计算数组的总长度,然后传递给函数。#define _CRT_SECURE_NO_WARNINGS
#包含stdio.h
intbinary_search(int arr[],int k,int sz)
{
int left=0;
SZ=sizeof(arr)/arr[0];
int right=SZ-1;
while(左=右)
{
int mid=(左右)/2;
if (arr[mid] k)
{
左=中1;
}
else if (arr[mid] k)
{
右=中1;
}
其他
{
返回mid
}
}
return-1;
}
int main()
{
int arr[10]={ 1,2,3,4,5,6,7,8,9,10 };
int SZ=sizeof(arr)/sizeof(arr[0]);
int k=8;
int get=binary_search(arr,k,SZ);
if (get==-1)
{
Printf(您要找的号码不存在\ n );
}
其他
{
Printf(你要找的数字的下标是%d\n ,get);
}
返回0;
}
4.写一个函数。每次调用这个函数,num的值都会加1。
#define _CRT_SECURE_NO_WARNINGS
#包含stdio.h
void ADD(int* p)
{
(* p);//注意:千万不要写*p,因为的优先级高于*
}
int main()
{
int num=0;
添加(数字);
printf(%d\n ,num);//1
添加(数字);
printf(%d\n ,num);//2
添加(数字);
printf(%d\n ,num);//3
返回0;
}
7.函数的嵌套调用:函数和函数可以有机结合。
也可以调用不同的子功能。
8.函数的链式访问:将一个函数的返回值作为另一个函数的参数。
#包含stdio.h
int main()
{
printf(%d ,printf(%d ,printf(%d ,43));
返回0;
}
这个程序是链式访问的经典案例。
一个关键是使用printf函数,它的返回值是打印出来的字符数。
第一次打印43,因为打印了两个字符,返回值是2。
然后打印2,即打印一个字符,返回值为1,然后再打印1。
那么最终结果是4321。
9.函数的定义和声明
函数声明:
告诉编译器一个函数叫什么,它的参数是什么,它的返回类型是什么,但是否存在无关紧要。函数的声明通常出现在函数使用之前,所以必须先声明再使用。(如果程序前面没有声明函数,如果主函数后面出现子函数,会出现错误,说明子函数没有声明。)函数的声明一般应该放在头文件(。h)。例如,如果函数声明和主函数不在同一个文件中
#include“头文件名称”来声明自己写的函数。用双引号声明应该取函数库中的函数。
函数定义:
函数的定义是指函数的具体实现,讲述函数的功能实现。
在以后的工作中或者我们自己写代码的过程中,我们一般会把函数声明放在(。h)文件中的函数。c)文件,以及文件中的主函数。
喜羊羊
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。