C++用函数判断降序排序问题
编写具有如下函数原型的递归与非递归两种函数f,负责判断数组a的前n个元素是否从大到小完全有序了,是则返回true,否则返回false。并编制主函数对它们进行调用,以验证其正确性。bool f(int a[], int n);
(一) 需求分析:
本程序主要解决的是: 编写具有如下函数原型的递归与非递归两种函数f,负责判断数组a的前n个元素是否从大到小完全有序了,是则返回true,否则返回false。并编制主函数对它们进行调用,以验证其正确性。
bool f(int a[], int n);
(二) 概要分析:
从题目的要求上看,编制一个函数bool f(int a[], int n) 就可以来判断数组是否排列顺序,首先定义一个数组,赋值,然后通过调用bool f(int a[], int n) 函数来进行验证是否顺序排列。程序的流程图如下:
(三) 详细设计:
首先定义数组并赋值,其方法上边的题目中多次给出,在这里不进行详细的描述,
再者,编制bool f(int a[], int n) 函数,它有两个方法:
1. 可以用非递归的方法,它可以用for 循环来判断数组元素的前后的大小是否按顺序排列
2. 用递归的方法,中间的循环地调用它自身的函数,可以用if—else—来结合使用
程序的主要的关键点都已经列出,因此很容易的就能做出这道题。
(四) 调试分析:
由于在非递归的算法中进行调用时,数据越界出现问题,最后改正后就没什么问题了。
(五) 用户使用说明:
用户的使用目的就是检验一个数组是否按从大到小的顺序排列,运行程序的输入只要根据提示就能很容易的作到。如果想改成从小到大的顺序也是可以的,还有数组的长度没有什么固定的限制,可以在main 函数里修改数组的长度。
(辣) 测试结果:
当a[5]={45,8,6,87,9 }时:
当a[5]={ 5 ,4,3,2,1}时:
(七) 源程序:(见上传代码)
(八) 编程体会:
这一道编程题目主要还是编制一个bool 型的函数,它的返回值为true or false ,程序的难点在于使用if—else—语句时判断什么时候return true,什么时候return false认识到算法对编程的影响。在非递归过程就遇到了点小问题。•
/*************************************************
Copyright (C), 2008
File name: 软件设计普通题 14(14.cpp)
Author: 计06-1 高战
Description:
Others: ....
Function List: // 主要函数列表,每条记录应包括函数名及功能简要说明
1.main() 完成各种提示与主操作输入输出
2.for 循环
3.f(int a[],int n) 递归函数
4 f1() 非递归函数
History:
<author> <time> <version > <desc>
*****************************************************/
#include<iostream>
using namespace std;
int main()
{
bool f(int a[],int n); /*声明两种函数*/
bool f1(int a[],int n);
int a[5],m,b=1;
while(b){ /*各种操作的提示和运行*/
cout<<"$$$$$$$$$$$$$$$$$$$$"<<endl;
cout<<"输入5个整数"<<endl;
cout<<"$$$$$$$$$$$$$$$$$$$$"<<endl;
for(int i=0;i<5;i++)
cin>>a[i];
cout<<"$$$$$$$$$$$$$$$$$$$$"<<endl;
cout<<"选用递归算法按1 非递归算法按2"<<endl;
cout<<"$$$$$$$$$$$$$$$$$$$$"<<endl;
cin>>m;
if(m==1) { if(f(a,5)) /*调用递归函数*/
cout<<"是从大到小有序的排列"<<endl;
else cout<<"不是从大到小的排列"<<endl;}
else if(m==2) {if(f1(a,5)) /*调用非递归函数*/
cout<<"是从大到小有序的排列"<<endl;
else cout<<"不是从大到小的排列"<<endl;}
原文请找腾讯752018766辣,文-论'文.网http://www.751com.cn/ return 0;
}
bool f(int a[],int n) /*递归函数的定义*/
{
if(n==1)
return true;
if(a[n-1]<a[n-2])
f(a,n-1);
else return false;
};
bool f1(int a[],int n) /*非递归函数的定义*/
{ for(int i=0;i<5;i++)
if(a[i]<a[i+1]) continue;
else return false;};1826