写法一:
#include<stdio.h>
void intputarr(int arr[],int n)
{
int i;
for(i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
}
int judge_arr(int arr[],int n)
{
int i;
int flag=0;
for(i=0;i<n-1;i++)
{
if(arr[i]==arr[i+1])
{
continue;
}
else if(arr[i]>arr[i+1])
{
flag=1;
}
else if(arr[i]<arr[i+1])
{
flag=-1;
}
}
if(flag==1)
{
for(i=0;i<n-1;i++)
{
if(arr[i]<arr[i+1])
return 0;
}
}
else if(flag==-1)
{
for(i=0;i<n-1;i++)
{
if(arr[i]>arr[i+1])
return 0;
}
}
return 1;
}
int main()
{
int n;
scanf("%d",&n);
int arr[20];
intputarr(arr,n);
int ret=judge_arr(arr,n);
if(ret==1)
{
printf("数组是有序数列\n");
}
else
{
printf("数组不是有序数列\n");
}
}
代码解析:在 judge_arr函数中进行判断,总体分为俩个步骤,首先确定该数组第一组相邻的两个数是 升序还是降序并作出标记(flag的赋值)升序flag=1;降序flag=-1; 在第一个循环结束flag都没 有被重新赋值说明这组数字都相等自然flag=0;第一个for循环要注意i<n-1否则会越界访问
if语句先判断是否相等,相等就continue跳过后面的判断;
然后在第二部分判断flag它是升序还是降序;如果升后面的所有都升序,有一组降序都结束循环 返 回0;反之同理返回1;循环结束没有返回;说明改组数字是有序或者相等的;
写法二:
#include<stdio.h>
void intputarr(int arr[],int n)
{
int i;
for(i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
}
int main()
{
int n;
int i=0;
scanf("%d",&n);
int arr[20];
intputarr(arr,n);
int flag1=0;
int flag2=0;
for(i=0;i<n;i++)
{
if(i>0)
{
if(arr[i]>arr[i-1])
{
flag1=1;
}
else if(arr[i]<arr[i-1])
{
flag2=1;
}
}
}
if(flag1+flag2<=1)
{
printf("数组是有序数列\n");
}
else
{
printf("数组不是有序\n");
}
}
代码解析:设置升序标志flag1=0和降序标志flag2=0;第一个for循环中只有i>0时候才能比较两个相邻 的数;在for循环结束后如果一直是升序最后的flag1=1;flag2=0相加<=1; 反之同理;这里特 别说明相加<=1是因为在全部相等的情况下相加=0;为了最后的方便判断统称有序和相等 flag1+flag2<=1;如果结束循环后flag1+flag2=2说明相邻数字比较时有升有降;