游戏攻略网
当前位置: 首页 游戏攻略

c语言用函数方法对十个数排序(C函数指针做参数)

时间:2023-07-31 作者: 小编 阅读量: 1 栏目名: 游戏攻略

更一般的方法是,写两个包含比较语句的函数和一个排序函数,在排序函数的参数列表中包含一个函数指针来引用包含比较语句的函数,在调用时,参数指向具体的包含比较语句的函数。函数指针用做参数时其指向的函数也称为回调函数。另外,可以使用函数指针数组来实现菜单或菜单选择。}静态成员函数指针的使用与普通函数指针的使用方法差不多。

c语言用函数方法对十个数排序?函数可以实现代码重用和封装,参数可以让函数更具一般化及函数之间发生关系(输入与输出),同时,有参数的函数可以实现递归调用,这就是函数的作用,接下来我们就来聊聊关于c语言用函数方法对十个数排序?以下内容大家不妨参考一二希望能帮到您!

c语言用函数方法对十个数排序

函数可以实现代码重用和封装,参数可以让函数更具一般化及函数之间发生关系(输入与输出),同时,有参数的函数可以实现递归调用,这就是函数的作用。

为了实现更一般的泛化,如果函数的参数数量不同,可以使用函数重载,如果函数参数类型不同,可以使用函数模板或函数重载。但如果几个函数只有几行代码不同,其它绝大多数代码都相同,怎么办?函数重载和函数模板都不能解决问题,可将这几行不同的代码分别抽出来,写成函数A、B、C等,再将共同的代码写成一个函数F,在F的参数中包含一个函数指针,去调用A、B、C即可。

举过例子,想通过函数实现数组的升序或降序排列(如果用两个函数实现,可能只有一行代码不同),是把代码写死再在需要时修改其中的一行代码(硬编码)?还是写一个包含比较语句的函数和一个排序函数,在排序函数中调用包含比较语句的函数,这样只需修改包含比较语句的函数,保证了排序函数的稳定性。

更一般的方法是,写两个包含比较语句的函数和一个排序函数,在排序函数的参数列表中包含一个函数指针来引用包含比较语句的函数,在调用时,参数指向具体的包含比较语句的函数。

以下就是以上三种方法的代码:(在排序函数分别写了三条函数头、函数体中的比较语句,以及函数调用的语句(运行时注释掉另两条 ),当然还有包含比较语句的函数。)

#include <iostream>using namespace std;#include <algorithm> // swap()bool ascending(int x, int y){ return x > y; // swap if the first element is greater than the second}bool descending(int x, int y){ return x < y; // swap if the second element is greater than the first}void printarr(int *arr, int size){ for (int index=0; index < size;index) cout << arr[index] << " "; cout << '\n';}//void SelectionSort(int *arr, int size) // 1.1 选择排序,直接比较(硬编码)//void SelectionSort(int *arr, int size) // 1.2 选择排序,调用函数比较(较软编码)void selectionSort(int *arr, int size, bool (*compFcn)(int, int)) // 1.3 选择排序,调用函数指针比较(软编码){ for (int start = 0; start < size;start) { int small = start; for (int curr = start1; curr < size;curr)//find the index of smallest value of array member { //if (arr[small] > arr[curr]) // 2.1 直接比较//if (ascending(arr[small], arr[curr])) // 2.2 调用函数比较if (compFcn(arr[small], arr[curr])) // 2.3 调用函数指针比较 small = curr; }swap(arr[start], arr[small]); }}int main(){ int arr[9] = { 3, 7, 9, 5, 6, 1, 8, 2, 4 }; //SelectionSort(arr, 9); // 3.1 调用函数(直接比较)//printarr(arr, 9); //SelectionSort(arr, 9); // 3.2 调用函数(调用函数比较)//printarr(arr, 9);selectionSort(arr, 9, ascending); // 3.3 调用函数(调用函数指针比较)printarr(arr, 9);selectionSort(arr, 9, descending); // 3.3 调用函数(调用函数指针比较)printarr(arr, 9);system("pause"); return 0;}/*1 2 3 4 5 6 7 8 99 8 7 6 5 4 3 2 1*/

函数指针用做函数参数,能够更好地实现函数的灵活性和一般性。函数指针用做参数时其指向的函数也称为回调函数。

另外,可以使用函数指针数组来实现菜单或菜单选择。

非静态成员函数指针做参数及使用稍微特殊一点:

void CAssistantsDlg::HaveText(void (CAssistantsDlg::*f)()){ //…… (this->*f)(); //……}

静态成员函数指针的使用与普通函数指针的使用方法差不多。

-End-

    推荐阅读
  • 海燕你可长点心吧片段(海燕呢你可长点心吧)

    我感觉不好,后来跟他提出了分手,还没完全断,目前又纠结,自己年龄大了,不知道还能遇到比他更好的吗,不知道是我想得太多了吗,他是适合我的人吗?这是前提,这是基础。自己家条件不好,所以要找一个经济条件好点的媳妇减轻负担。那么另外一个问题就来了,为什么这么明显的套路,你却看不透,到最后做决定,也只有“感觉不好”。行动力的缺乏,是缺乏承担责任的意识造成的。人只有被拿走依靠后,才能调动出生命的全部潜能。

  • 公共服务事项身份证首次申领(省内居民申领临时身份证)

    公共服务事项身份证首次申领来源:台海网台海网5月31日讯据莆田网报道记者昨日从仙游县公安局获悉,5月30日起,该局推出省内临时居民身份证“立等可取”便民新举措,实现全县公安机关19个派出所全覆盖。因辖区派出所受理县外居民临时居民身份证需户籍地派出所审核审批,受理后,户籍民警积极与当事人户籍所在地县区公安机关经办人联系,即时审核签发。在全省各县区公安机关积极协作配合下,确保协作机制规范化、常态化、具体化。

  • 御赐小仵作小金鱼是亲生的吗(御赐小仵作小金鱼和小锦鲤)

    因为女主楚楚也说过,萧瑾瑜和哥哥虽然是双胞胎,但是从骨相来看,这两个人不像是亲兄弟。薛大人表面上一直在维护小金鱼,但是他自己身份却并不简单,他自称“本王”,但是目前电视剧中除了小金鱼自己是安郡王之外,只有一个昌王是公开的王爷身份。也就是说,薛大人很有可能就是改头换面的昌王。相信,以王爷的智商与情商,他应该会选择理性处理,最终与薛汝成恩断义绝。萧瑾瑜的猜测没有错,昌王确实是打算造反的。

  • 单反拍照安全快门(小白学摄影第二十二期)

    所谓“安全快门”的基本条件,第一点是在手持相机拍摄的情况下,不使用三脚架和其他帮助稳定的器材。除了全画幅以外,数码相机中还存在APS-C画幅的相机。与全画幅不同的是,我们在计算APS-C画幅相机的“安全快门”时,要进行一些简单的换算,也就是我们常说的把实际焦距换算成等效焦距。所以“安全快门”在现在来看,其实仍然具有参考价值。

  • 党组词(党组词介绍)

    以下内容大家不妨参考一二希望能帮到您!党,汉语一级字,读作党,为了政治目的结合起来的团体:党派。

  • 新时代的城市设计(建设城市的体验)

    巴黎空运东京空运伦敦空运当游戏进行到了各种货运任务开启之后,想必市长竞赛系统已经入了玩家的法眼,这个就是本作可以最大限度获取模拟币以及大量氪金绿钞的活动了。竞赛内容包含一系列的任务,在限定时间完成任务获取绿水晶点数。

  • 近代为什么不能进资本主义(为什么要书写资本主义史)

    主要研究和教学领域为劳工史、企业史、消费史和资本主义史。对我来说,相比那些人身攻击而言,更加值得关注的是,这简直就是一场关于资本主义的新颖讨论。按照这种观点,资本主义史只不过是自然法则的逻辑展现,就像苹果从树上落下一样。作为一种学术性实践,历史学就是用来解释事件实际上是如何发生的,以及随之产生的所有不符合规律的情况。随着美国从自大萧条以来最为严重的金融危机中复苏,人们不难理解这种突如其来的紧迫感。

  • 最终幻想15mod怎么用(最终幻想15绅士mod3DM)

    在上个月时候,《最终幻想15》上线了自己的MOD工具,于是有一大批好事的MOD制作者开始在创意工坊上线了自己制作的MOD。其中有意思的是有许多人恶搞了游戏中的4名男性。救生员格拉迪欧拉斯将在这个MOD里扮演一名救生员。格拉迪欧拉斯的体型看起来就是大哥哥类型,扮演一名救生员那也是情理之中了。值得一提的是,这个MOD当中还有雷霆和克劳德的人物MOD。巴哈姆特将自己化身成巴哈姆特,那一定看起来很酷炫。

  • win11隐藏文件在哪(Win11怎么查看隐藏文件和文件夹)

    一般来说系统会对比较重要的文件和文件夹添加隐藏属性,很多朋友可能找半天都找不到,那么怎么找出这些隐藏文件和文件夹呢,今天系统之家小编来教大家Win11显示隐藏文件的设置方法,操作步骤其实挺简单的,希望能够帮到大家。Win11怎么显示隐藏文件:1、打开win11的此电脑,从而打开文件资源管理器,或者鼠标右键开始菜单选择文件资源管理器打开。以上便是查看Win11隐藏文件的方法,操作步骤相比以前方便了许多,可以直接选显示隐藏的项目。

  • 大年初一晚上吃饺子的寓意(大年初一晚上吃饺子的寓意是什么)

    大年初一晚上吃饺子的寓意“饺子”又名“交子”或者“娇耳”,是新旧交替之意。饺子是北方人年夜饭桌上必不可少的。主要是在中国大部地区主要是北方,包饺子、吃饺子,已经成为大多数家庭欢度除夕的一个重要活动。过年,是中国人一年一度最隆重的节日。从腊月二十三,俗称“小年”的时候起,就进入了过年的倒计时,张彩灯、贴对联、打扫庭院,准备迎接远方的亲人,过个团圆年。