[编程之美]写一个函数,回来一个数组中所有元素被第一个元素除的结果
[编程之美]写一个函数,返回一个数组中所有元素被第一个元素除的结果
错误原因:在循环的第一步,第一个元素就变成了1,然后再用它去除以其他元素,就不符合题目要求了
题目:
写一个函数,返回一个数组中所有元素被第一个元素除的结果;
错误的版本:
void DivArray(int *array, int n) { for (int i = 0; i < n; ++i) { array[i] /= array[0]; } }
错误原因:在循环的第一步,第一个元素就变成了1,然后再用它去除以其他元素,就不符合题目要求了
改进:
1:使用其他变量保存第一个元素:
void DivArray3(int *array, int n) { assert(array != NULL);//1:参数的检验 assert(n > 0); if (array[0] == 0)//2:除数不可以为0 { cout << "除数不能为0" << endl; exit(1);//终止进程:参数为0,表示正常退出,非0表示异常退出 } int tmp = array[0]; for (int i = 0; i < n; ++i)//3:陷阱 { array[i] /= tmp; } }
版本一:先处理其他元素,最后单独再处理第一个元素
<span style="font-family:KaiTi_GB2312;">void DivArray1(int *array, int n) { assert(array != NULL);//1:参数的检验 assert(n > 0); if (array[0] == 0)//2:除数不可以为0 { cout << "除数不能为0" << endl; exit(1);//终止进程:参数为0,表示正常退出,非0表示异常退出 } for (int i = 1; i < n; ++i)//3:陷阱 { array[i] /= array[0]; } array[0] /= array[0]; }</span>
版本二:循环倒着写:for(int i = n-1;i>=0;--i)
void DivArray2(int *array, int n) { assert(array != NULL); assert(n > 0); if (array[0] == 0) { cout << "除数不能为0" << endl; exit(1); } for (int i = n - 1; i >= 0;--i) { array[i] /= array[0]; } }
void assert(int expression)
功能:在函数开始处检验传入参数的合法性
参数:表达式expression为假,终止程序运行,为真继续执行程序
assert的作用是先计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。
assert具体用法:点击打开链接
void exit(int status)
功 能: 关闭所有文件,终止正在执行的进程。
参 数:参数为0,表示正常退出,非0表示异常退出
exit具体用法:点击打开链接
注意事项:
1:函数的参数要进行检验:assert()
2:特殊情况的处理:除数不能为0,根号下的范围>=0,范围的检验
3:倒着写循环的运用:本例,数组中插入元素(从后往前依次移动)
版权声明:本文为博主原创文章,未经博主允许不得转载。