C语言编程技巧给定一个数,如何在数组

在编写测试测量类的仪器软件时,一些需要用户输入的参数,这些参数可能只能取一些离散的数值,如频谱仪软件中设置分辨率带宽时,可能只能取{1、2、5、10、20、50、}里面的数值,这时需要将用户输入的1-之内的任意数值要规整为这个数组里面的值。如当用户输入8、30、50时,假设向上规整的话,程序里面应该将其规整为10、50、50三个数值。

在C/C++语言里面实现这个功能,上面的问题实际上可以转化为,对于一个给定的数值,如何在一个已知的离散数组中向上查找与之相邻的元素数值。

C++语言中的实现方法

比较简单的方法,可以借助于C++标准库中的函数“lower_bound”来实现。

该函数的意义是,在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置。如果所有元素都小于val,则返回last的位置。

对于上面的问题,其C++语言的实现代码如下:

代码简要解释如下:

第1-2行,包含的头文件,lower_bound需要包含algorithm文件。

第7-14行,定义x数组,并在控件台程序中打印每个元素的值。

第17-19行,调用lower_bound函数,分别查找与a、b、c三个数值相邻的值。其返回的是指向查找到的元素的指针。

第20-22行,打印出查找到元素的值。

其运行结果如下图所示:

从运行结果可看出,对于要查找的数值8、30、50,可以正确找到与之相邻的数组中的值,分别为10、50、50三个数值。

说明

与“lower_bound”函数类似的,C++标准库中还提供了另一个函数“upper_bound”,其意义是,在first和last中的前闭后开区间进行二分查找,返回大于val的第一个元素位置。如果所有元素都小于val,则返回last的位置。

可以通过下面的例子看一下这两个函数的区别:

程序运行结果如下图所示:

在数组y中,lower_bound函数返回的是第一个大于等于30的值,所以位置是2,对应的值是30。而upper_bound函数返回的是第一个大于30的值,所以位置是5,对应的值是40。

另外,例子使用的编译环境是VC6.0。

如果你觉得这篇文章对你有用的话,请不要忘记点赞哦。




转载请注明:http://www.aierlanlan.com/cyrz/7313.html