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

网站空间大小 论坛wordpress 删除重复

网站空间大小 论坛,wordpress 删除重复,国外服装设计网站,查询网站后台登陆地址目录 何为函数 库函数 自定义函数 二分查找数组下标 链式访问 函数的声明 函数定义 递归 正向打印数字 打印字符个数 使用临时变量 递归(不使用临时变量) n的阶乘 一般形式 递归 斐波那契数 递归 正常做法 何为函数 在计算机科学中#xff0c;子程序是一个…目录 何为函数 库函数 自定义函数 二分查找数组下标 链式访问 函数的声明  函数定义 递归 正向打印数字  打印字符个数 使用临时变量 递归(不使用临时变量) n的阶乘 一般形式 递归 斐波那契数 递归 正常做法 何为函数 在计算机科学中子程序是一个大型程序中的某部分代码 由一个或多个语句块组 成。它负责完成某项特定任务而且相较于其他代 码具备相对的独立性。 一般会有输入参数并有返回值提供对过程的封装和细节的隐藏。这些代码通常被集成为软 件库。 函数分为库函数和自定义函数 库函数 库函数只提供函数名参数功能返回类型实现则由编译器厂商实现。库函数的使用需要包含对应的头文件。c/c库函数官网:https://cplusplus.com/ 自定义函数 实际很多情况我们不能靠库函数解决所以就诞生了自定义函数我们可以自己实现内部细节和功能。 现在实现一个交换函数 void Swap(int x, int y) {int z 0;z x;x y;y z; } 运行结果 为什么没有实现交换功能呢 我们可以看到它们的地址都不一样所以没能实现交换我们称传递的参数为实参接收的参数为形参形参是实参的拷贝形参的建立与销毁只在调用函数的过程发生。所以它的交换只在函数体内。 void Swap(int* x, int* y) {int z 0;z *x;*x *y;*y z; }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; } 我们传递地址这样就可以实现交换功能了。 二分查找数组下标 我们利用一组数据有序的特点这次我们试着用函数的方式封装二分查找这一功能。 找7发现找不到这是为什么呢我们来看函数部分 通过调试发现这里的right始终为0这就是问题所在了在c语言中数组的传参是传递的指针而非整个数组这是因为可以通过首元素地址找到整个下组从而减少了不必要的开销。 完整代码 int binary_search(int *arr, int k,int right) {int left 0;while (left right){int mid (left right) / 2;if (arr[mid] k){right mid - 1;}else if (arr[mid] k){left mid 1;}else{return 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 7;int right sizeof(arr) / sizeof(arr[0]);int ret binary_search(arr, k,sz);if (-1 ret)printf(找不到\n);elseprintf(找到了下标是:%d\n, ret); } 函数允许嵌套调用不允许嵌套定义。  链式访问 链式访问就是一个函数的返回值作为另一个函数的参数像链条一样串起来。 比如printf函数的返回值是字符的个数: 函数的声明  函数的声明一般是包含在.h文件里用于综合性的工程里。 //函数定义 int Add(int x, int y); int Add(int, int); 如果我们创建一个add.h的头文件里面写上函数的声明我们可以这样包含达到使用我们自己的“库”的效果。 #include add.h 当然,如果你不小心将函数的定义放在了main函数后你也可以这样使用 int main() {int Add(int, int);Add(a,b);return 0; } int Add(int a, int b) {//.. } 函数定义 同理我们可以把函数的定义放在.c文件里。 同时要想不让人知道函数的具体实现过程我们可以通过打包静态库的方式隐藏自己的函数文件。 递归 顾名思义递归的核心是大事化小通过一次一次迭代达到最终效果的过程。 正向打印数字  我们知道反向打印4个数可以: 1234%10 4; 1234/10 123; 123%10 3; 那正向怎么做呢在知道我们可以轻松拿到它的末尾数字时我们是不是可以反向思考一下 123 (4) 12 (34) 1 (234) void Print(unsigned int n)//1 {if (n 9){print(n / 10);}printf(%d , n % 10); } void Print(unsigned int x)//2 {if (x 10){printf(%d , x);}else{Print(x / 10);printf(%d , x % 10);} } 调用了4次函数开辟了4次函数栈帧在打印后返回上一层栈帧并销毁空间。  递归必须有限制条件每次递归会逐渐靠近这个限制条件 打印字符个数 使用临时变量 int my_strlen(char* s) {int count 0;while (*s ! \0){count;s;}return count; } 递归(不使用临时变量) 同理例如一个字符串abc拆分成1bc,11c,1110的形式。  int my_strlen(char* str) {if (*str ! \0)return 1 my_strlen(str 1);elsereturn 0; } 注意这里最好不要用前置它改变了数组的地址。  n的阶乘 阶乘公式 : n1,1n1,Fac(n-1) * n  一般形式 int Fac(int n) {int i 0, ret 1;for (i 1;i n; i){ret ret * i;}return ret; } 递归 int Fac(int n) {if (n 1){return 1;}elsereturn Fac(n - 1) * n; } 斐波那契数 1 1 2 3 5 8 13 .... 像这样前两个数加起来等于后一个数的数列叫做斐波那契数列。 递归 公式: n2, n 1 n2, Fib(n-1) Fib(n-2) int Fib(int n) {if (n 2)return 1;elsereturn Fib(n - 1) Fib(n - 2); } 测试  测试发现计算一个稍微大点的数据半天计算不出来结果可以得知递归的层次已经很深了就像一张很深的数 一样。 正常做法 在数字超出两个时我们可以用两个变量求和计算第三个变量依次更新达到想要的效果。 int Fib(int n) {int a 1;int b 1;int c 0;if (n 2){return 1;}if (n 2){while(n2){c a b;a b;b c;n--;}return c;} } 用这种方法几乎是一瞬间得出了结果不过注意数据太大可能会超出范围。  总之递归的使用需要我们多去总结和感悟并选择最合适的方法 。
http://www.zqtcl.cn/news/340586/

相关文章:

  • 网站设计的技能高端品牌网站建设公司哪家好
  • 专门做二手书网站或app陕西交通建设集团官方网站
  • 微信商城怎么开徐州网站推广优化
  • 服装店网站建设规划书山西网站的公司
  • 龙岩做网站改版一般多久wordpress后台登入
  • 网站建设税收编码怎么联系企业的网站建设
  • 色块布局网站首页模板各种网站解决方案
  • 电商建站工具手机编辑网页的软件有哪些
  • 网站腾讯备案吗wordpress英文主题怎么用
  • 网站内容建设的建议wordpress主题enfold
  • 哪里做网站优化石家庄学校网站建设
  • 诸暨北京有哪些网站制作公司wordpress菜单外链
  • 免费建网站的步骤wordpress分享可见内容
  • 成都网站建设公司服务商自己做网站还有出路吗
  • 汉南城乡建设局网站网站建设新手教程
  • 网站用途及栏目说明软件外包公司开发流程
  • 公司做网站做淘宝好还是自建网站好
  • 成功网站案例有哪些淮安市交通建设局网站
  • 购买虚拟机建网站网站开发合同变更
  • 备案的网站做跳转不影响备案把购彩网站建设
  • 2w网站建设模式百度应用市场
  • vps主机访问网站湖南建站网站
  • 滨州正规网站建设公司用r语言 做网站点击热力图
  • php网站模板wordpress自定义头像上传
  • 江油市规划和建设局网站一个app网站
  • 郑州网站建设up188WordPress响应式幻灯片
  • 幸运28网站代理怎么做网站后期维护工作包括哪些
  • 西安网站建设seo网络营销的职能
  • 大型网站建设哪家服务好dll网站服务
  • 怎样建设网赌网站江苏外贸网站建设