网站软件下载,wordpress movie,php 创建网站开发,dede 电商网站模板函数是什么
数学中我们其实就⻅过函数的概念#xff0c;⽐如#xff1a;⼀次函数 y kx b #xff0c;k和b都是常数#xff0c;给⼀个任意的x #xff0c;就得到⼀个 y 值。其实在C/C语⾔中就引⼊了函数#xff08;function#xff09;的概念#xff0c;有些翻译为⽐如⼀次函数 y kx b k和b都是常数给⼀个任意的x 就得到⼀个 y 值。其实在C/C语⾔中就引⼊了函数function的概念有些翻译为⼦程序⼦程序这种翻译更加准确⼀些。函数就是⼀个完成某项特定的任务的⼀⼩段代码这段代码是有特殊的写法和调⽤⽅法的。 其实⼤家在前⾯学习的时候就⻅过函数了⽐如main函数、scanf函数、printf函数、pow函数、sqrt函数等。C/C语⾔程序其实是由若⼲个⼩的函数组合⽽成的也可以说⼀个⼤的计算任务可以分解成若⼲个较⼩的函数对应较⼩的任务完成。同时⼀个函数如果能完成某项特定任务的话这个函数也是可以复⽤的提升了开发软件的效率。
#include iostream
using namespace std;
int main()
{ int arr[10] { 0 }; //打印数组的内容 //给数组的元素赋值为1~10 //打印数组 return 0;
}如果没有函数我们能写出的代码如下的代码1其中橙⾊部分的内容和绿⾊部分的代码是重复的⽬的就是打印数组内容那如果我能把这部分封装成⼀个函数在需要的时候调⽤就⽅便很多这就是代码2
//代码1
#includeiostream
using namespace std;
int main()
{ int arr[10] { 0 }; //打印数组的内容 int i 0; for (i 0; i 10; i) { cout arr[i] ; } cout endl; //给数组的元素赋值为1~10 for (i 0; i 10; i) { arr[i] i 1; } //打印数组 for (i 0; i 10; i) { cout arr[i] ; } cout endl; return 0;
}//代码2
#includeiostream
using namespace std;
void print_arr(int arr[])
{ int i 0; for (i 0; i 10; i) { cout arr[i] ; } cout endl;
} int main()
{ int arr[10] { 0 }; //打印数组的内容 print_arr(arr); //给数组的元素赋值为1~10 for (int i 0; i 10; i) { arr[i] i 1; } //打印数组 print_arr(arr);return 0;
}在代码2中 print_arr 就是我们⾃⼰定义的⼀个函数使⽤函数能有什么好处呢
模块化开发⼀个⼤的功能总能拆分成各种⼦功能每个⼦功能都可以设计成⼀个函数每个函数可以作为⼀个独⽴的模块存在程序的逻辑更加清晰逻辑关系更加明确。代码可以复⽤只要根据需要定义出⼀个函数需要这个功能的地⽅直接调⽤函数就⾏降低了代码的冗余提升了开发效率。⽅便多个程序员之间协作开发⽅便程序的多个模块之间互相交互。熟悉函数的使⽤之后代码的编写、阅读、调试、维护都变得更加容易。
函数的分类
在C/C中函数⼀般分为库函数和⾃定义函数
库函数
printf 、 scanf 都是库函数库函数是标准库中提供的现成的函数我们只要学习函数的功能就能直接使⽤。有了库函数⼀些常⻅的功能就不需要程序员⾃⼰实现了⼀定程度提升了效率同时库函数的质量和执⾏效率上都更有保证。 编译器的标准库中提供了⼀系列的库函数这些库函数根据功能的划分都在不同的头⽂件中进⾏了声明。 库函数的学习和查阅⼯具很多⽐如 C/C官⽅参考⼿册https://zh.cppreference.com/w/cpp/header C/C第三⽅⽹站https://legacy.cplusplus.com/reference/ 库函数中有数学相关的有⽇期相关的有算法相关的等等。这些库函数相关的信息都有⾃⼰对应的头⽂件每⼀个头⽂件中都包含了相关的⼀组函数和类型等信息库函数的学习不⽤着急⼀次性全部学会慢慢学习各个击破就⾏。 C是兼容C语⾔所以在C中也包含了⼀些来⾃C语⾔的头⽂件这些头⽂件的后缀是 .h ,如果需要也可以直接包含使⽤有⼀些来⾃C语⾔的头⽂件在C中会在原来C语⾔的头⽂件进⾏了封装在C程序中更推荐C的头⽂件写法以下是常⻅C和C对应的头⽂件
解释C头文件C头文件常用数学函数math.hcmath浮点类型的极限float.hcfloatC风格输入输出stdio.hcstdio字符串处理string.hstring
库函数使⽤举例
sqrt
double sqrt (double x);sqrt 是函数名x 是函数的参数表⽰调⽤ sqrt 函数需要传递⼀个 double 类型的值double 是返回值类型表⽰函数计算的结果是 double 类型的值
作用
Compute square root计算平⽅根 Returns the square root of x.返回平⽅根
头文件
库函数是在标准库中对应的头⽂件中声明的所以库函数的使⽤务必包含对应的头⽂件不包含是可能会出现⼀些问题的。
#include iostream
#include cmath //数学函数头⽂件不包含则⽆法使⽤sqrt函数
using namespace std;
int main()
{ double d 16.0; double r sqrt(d); cout r endl; return 0;
}⾃定义函数
了解了库函数其实库函数的功能是有限的实际开发过程中还是得根据需要将代码封装成⾃定义的函数⾃定义的函数就是⾃⼰设计和实现的函数
函数的语法形式
ret_type fun_name(形式参数)
{ }ret_type 是⽤来表⽰函数计算结果的类型有时候返回类型可以是 void 表⽰什么都不返回fun_name 是为了⽅便使⽤函数就像⼈的名字⼀样有了名字⽅便称呼函数有了名字⽅便调⽤所以函数名尽量要根据函数的功能起的有意义。函数的参数就相当于⼯⼚加⼯需要的原材料函数的参数也可以是 void 明确表⽰函数没有参数。如果有参数多个参数⽤逗号隔开每个参数要分别交代清楚参数的类型和名字。{} 括起来的部分被称为函数体函数体就是完成计算的过程。
函数定义
写⼀个加法函数完成2个整型变量的加法操作
#includeiostream
using namespace std;
int main()
{ int a 0; int b 0; //输⼊ cin a b; //任务调⽤加法函数完成a和b的相加 //求和的结果放在r中 //to do //输出 cout r endl; return 0;
}给函数取名 Add 函数 Add 需要接收2个整型类型的参数函数计算的结果也是整型
#includeiostream
using namespace std;
//这就是函数的定义
int Add(int x, int y)
{ int z 0; z x y; return z;
} int main()
{ int a 0; int b 0; //输⼊ cin a b; //调⽤加法函数完成a和b的相加 //求和的结果放在r中 int r Add(a, b); //输出 cout r endl; return 0;
}Add 函数也可以简化为
int Add(int x, int y)
{
return x y;
}函数的参数部分需要交代清楚参数个数每个参数的类型是啥形参的名字叫啥
函数参数和返回值
实参和形参
实际上在函数定义和使⽤的过程中函数的参数要被分为两种
实际参数简称实参形式参数简称形参
实参
实际参数就是真实传递给函数的参数。 在上⾯代码中第4~6⾏是 Add 函数的定义有了函数后再第19⾏调⽤ Add 函数的。 我们把第19⾏调⽤ Add 函数时传递给函数的参数 a 和 b 称为实际参数简称实参。
形参
在上⾯代码中第4⾏定义函数的时候在函数名 Add 后的括号中写的 x 和 y 称为形式参数简称形参。 为什么叫形式参数呢实际上如果只是定义了 Add 函数⽽不去调⽤的话 Add 函数的参数 x 和 y 只是形式上存在的不会向内存申请空间不会真实存在的所以叫形式参数。形式参数只有在函数被调⽤的过程中为了存放实参传递过来的值才向内存申请空间这个过程就是形式的实例化。
实参和形参的关系
虽然我们提到了实参是传递给形参的他们之间是有联系的但是形参和实参各⾃是独⽴的内存空间。 这个现象是可以通过调试来观察的。请看下⾯的代码和调试演⽰
#includeiostream
using namespace std;
int Add(int x, int y)
{ int z 0; z x y; return z;
}
int main()
{ int a 0; int b 0; //输⼊ cin a b; //调⽤加法函数完成a和b的相加 //求和的结果放在r中 int r Add(a, b); //输出 cout r endl; return 0;
}我们在调试的可以观察到 x 和 y 确实得到了 a 和 b 的值但是 x 和 y 的地址和 a 和 b 的地址不⼀样的当 a 和 b 传参给形参x和y的时候 x 和 y 只是得到了 a 和 b 的值他们得有⾃⼰独⽴的空间。所以我们可以理解为形参是实参的⼀份临时拷⻉。
函数传参
数组做函数参数
在使⽤函数解决问题的时候难免会将数组作为参数传递给函数在函数内部对数组进⾏操作。⽐如写⼀个函数将⼀个整型数组的内容全部置为 -1 再写⼀个函数打印数组的内容。
#inculude iostream
using namespace std;
int main()
{ int arr[] {1,2,3,4,5,6,7,8,9,10}; set_arr(); //设置数组内容为-1 print_arr(); //打印数组内容 return 0;
}这⾥的 set_arr 函数要能够对数组内容进⾏设置就得把数组作为参数传递给函数同时函数内部在设置数组每个元素的时候也得遍历数组需要知道数组的元素个数。所以我们需要给 set_arr传递2个参数⼀个是数组另外⼀个是数组的元素个数。仔细分析 print_arr 也是⼀样的只有拿到了数组和元素个数才能遍历打印数组的每个元素。
int main()
{ int arr[] {1,2,3,4,5,6,7,8,9,10}; int sz sizeof(arr)/sizeof(arr[0]); set_arr(arr, sz); //设置数组内容为-1print_arr(arr, sz); //打印数组内容return 0;
}数组作为参数传递给了 set_arr 和 print_arr 函数了那这两个函数应该如何设计呢 这⾥我们需要知道数组传参的⼏个重点知识
函数的实参的名字和形参的名字可以相同也可以不同函数的形式参数要和函数的实参个数匹配函数的实参是数组形参也写成数组形式的形参如果是⼀维数组数组⼤⼩可以省略不写形参如果是⼆维数组⾏可以省略但是列不能省略数组传参形参是不会创建新的数组的形参操作的数组和实参的数组是同⼀个数组
void set_arr(int arr[], int sz)
{ int i 0; for(i 0; i sz; i) { arr[i] -1; }
}
void print_arr(int arr[], int sz)
{ int i 0; for(i 0; i sz; i) { cout arr[i] ; } cout endl;
}字符串做函数参数
那如果将字符串做函数参数呢其实也很简单直接在形参的部分使⽤字符串来接收就可以。这⾥的形参 s 也是实参 s 的⼀份临时拷⻉对形参的修改不能影响实参。
void test(string s)
{ cout s endl;
}
int main()
{ string s(hello world); test(s);
}全局变量不⽤传参
全局变量的作⽤域很⼤在整个程序中都可以使⽤那么只要把变量、数组等定义成全局变量在函数中使⽤是可以不⽤传参的在竞赛中为了⽅便经常使⽤但是在软件⼯程中很少这么使⽤
#include iostream
using namespace std;
int arr[10] { 0 }; void print_arr()
{ int i 0; for (i 0; i 10; i) { cout arr[i] ; } cout endl;
} int main()
{ //打印数组的内容 print_arr(); //给数组的元素赋值为1~10 for (int i 0; i 10; i) { arr[i] i 1;} //打印数组 print_arr(); return 0;
}有时候变量或者数组定义成全局的时候是不能解决问题⽐如递归等场景这时候就得考虑传参的问题 文章转载自: http://www.morning.kgxyd.cn.gov.cn.kgxyd.cn http://www.morning.wyfpc.cn.gov.cn.wyfpc.cn http://www.morning.rmyt.cn.gov.cn.rmyt.cn http://www.morning.wxwall.com.gov.cn.wxwall.com http://www.morning.iknty.cn.gov.cn.iknty.cn http://www.morning.byshd.cn.gov.cn.byshd.cn http://www.morning.nnwmd.cn.gov.cn.nnwmd.cn http://www.morning.rqsr.cn.gov.cn.rqsr.cn http://www.morning.dyhlm.cn.gov.cn.dyhlm.cn http://www.morning.ljcf.cn.gov.cn.ljcf.cn http://www.morning.rxsgk.cn.gov.cn.rxsgk.cn http://www.morning.ykqbs.cn.gov.cn.ykqbs.cn http://www.morning.sjpht.cn.gov.cn.sjpht.cn http://www.morning.tnrdz.cn.gov.cn.tnrdz.cn http://www.morning.rrqgf.cn.gov.cn.rrqgf.cn http://www.morning.ghyfm.cn.gov.cn.ghyfm.cn http://www.morning.zkzjm.cn.gov.cn.zkzjm.cn http://www.morning.3dcb8231.cn.gov.cn.3dcb8231.cn http://www.morning.pwmm.cn.gov.cn.pwmm.cn http://www.morning.jhswp.cn.gov.cn.jhswp.cn http://www.morning.ljyqn.cn.gov.cn.ljyqn.cn http://www.morning.lskyz.cn.gov.cn.lskyz.cn http://www.morning.bdwqy.cn.gov.cn.bdwqy.cn http://www.morning.wfdlz.cn.gov.cn.wfdlz.cn http://www.morning.dqcpm.cn.gov.cn.dqcpm.cn http://www.morning.wjxtq.cn.gov.cn.wjxtq.cn http://www.morning.xqgfy.cn.gov.cn.xqgfy.cn http://www.morning.nrftd.cn.gov.cn.nrftd.cn http://www.morning.rywn.cn.gov.cn.rywn.cn http://www.morning.hrpjx.cn.gov.cn.hrpjx.cn http://www.morning.wqbfd.cn.gov.cn.wqbfd.cn http://www.morning.langlaitech.cn.gov.cn.langlaitech.cn http://www.morning.srndk.cn.gov.cn.srndk.cn http://www.morning.txjrc.cn.gov.cn.txjrc.cn http://www.morning.hpprx.cn.gov.cn.hpprx.cn http://www.morning.fpzz1.cn.gov.cn.fpzz1.cn http://www.morning.lflsq.cn.gov.cn.lflsq.cn http://www.morning.ypqwm.cn.gov.cn.ypqwm.cn http://www.morning.yixingshengya.com.gov.cn.yixingshengya.com http://www.morning.gassnw.com.gov.cn.gassnw.com http://www.morning.rfbq.cn.gov.cn.rfbq.cn http://www.morning.hsflq.cn.gov.cn.hsflq.cn http://www.morning.fsfz.cn.gov.cn.fsfz.cn http://www.morning.znsyn.cn.gov.cn.znsyn.cn http://www.morning.fqnql.cn.gov.cn.fqnql.cn http://www.morning.jqjnx.cn.gov.cn.jqjnx.cn http://www.morning.yqndr.cn.gov.cn.yqndr.cn http://www.morning.tbqdm.cn.gov.cn.tbqdm.cn http://www.morning.tscsd.cn.gov.cn.tscsd.cn http://www.morning.qieistand.com.gov.cn.qieistand.com http://www.morning.kqgqy.cn.gov.cn.kqgqy.cn http://www.morning.nmhpq.cn.gov.cn.nmhpq.cn http://www.morning.plnry.cn.gov.cn.plnry.cn http://www.morning.hmpxn.cn.gov.cn.hmpxn.cn http://www.morning.rdkgw.cn.gov.cn.rdkgw.cn http://www.morning.fldrg.cn.gov.cn.fldrg.cn http://www.morning.frcxx.cn.gov.cn.frcxx.cn http://www.morning.jmlgk.cn.gov.cn.jmlgk.cn http://www.morning.pqjlp.cn.gov.cn.pqjlp.cn http://www.morning.mprpx.cn.gov.cn.mprpx.cn http://www.morning.lxctl.cn.gov.cn.lxctl.cn http://www.morning.kmwbq.cn.gov.cn.kmwbq.cn http://www.morning.ksjmt.cn.gov.cn.ksjmt.cn http://www.morning.wnqfz.cn.gov.cn.wnqfz.cn http://www.morning.bgpb.cn.gov.cn.bgpb.cn http://www.morning.plxhq.cn.gov.cn.plxhq.cn http://www.morning.wnjwb.cn.gov.cn.wnjwb.cn http://www.morning.pqypt.cn.gov.cn.pqypt.cn http://www.morning.ndmh.cn.gov.cn.ndmh.cn http://www.morning.mrccd.cn.gov.cn.mrccd.cn http://www.morning.wbxrl.cn.gov.cn.wbxrl.cn http://www.morning.psdsk.cn.gov.cn.psdsk.cn http://www.morning.gczzm.cn.gov.cn.gczzm.cn http://www.morning.hyyxsc.cn.gov.cn.hyyxsc.cn http://www.morning.kwcnf.cn.gov.cn.kwcnf.cn http://www.morning.ngznq.cn.gov.cn.ngznq.cn http://www.morning.rzbcz.cn.gov.cn.rzbcz.cn http://www.morning.lphtm.cn.gov.cn.lphtm.cn http://www.morning.rwrn.cn.gov.cn.rwrn.cn http://www.morning.ztqj.cn.gov.cn.ztqj.cn