3. C语言设计一个算法判断要求产生整数数组是否为:未排序(输出0:针对3个及以上元素列表)、升序(输出1:针对2个及以上元素列表)、降序(输出2:针对2个及以上元素列表)、先升后降(输出3:针对3个及以上元素列表)、或先降后升(输出4:针对3个及以上元素列表)状态,若数组中有不多于1个元素,则输出5;
时间: 2024-01-07 22:03:12 浏览: 93
单片机常用的14个C语言算法,看过的都成了大神!
以下是 C 语言的代码实现:
```c
#include <stdio.h>
int main()
{
int arr[100], n, i, flag = 0;
printf("Enter size of the array: ");
scanf("%d", &n);
printf("Enter elements of the array: ");
for(i=0; i<n; i++)
scanf("%d", &arr[i]);
if(n <= 1)
flag = 5; // 数组中有不多于1个元素
else if(arr[0] < arr[1]) // 升序
{
flag = 1;
for(i=2; i<n; i++)
{
if(arr[i-1] > arr[i])
{
flag = 3; // 先升后降
break;
}
}
}
else if(arr[0] > arr[1]) // 降序
{
flag = 2;
for(i=2; i<n; i++)
{
if(arr[i-1] < arr[i])
{
flag = 4; // 先降后升
break;
}
}
}
else // 未排序
{
flag = 0;
for(i=2; i<n; i++)
{
if(arr[i-1] > arr[i])
{
flag = -1; // 不是升序
break;
}
}
if(flag == -1)
{
flag = 0;
for(i=2; i<n; i++)
{
if(arr[i-1] < arr[i])
{
flag = -2; // 不是降序
break;
}
}
if(flag == -2)
flag = 3; // 先升后降
}
else
{
flag = 0;
for(i=2; i<n; i++)
{
if(arr[i-1] < arr[i])
{
flag = -3; // 不是降序
break;
}
}
if(flag == -3)
flag = 4; // 先降后升
}
}
printf("The array is ");
switch(flag)
{
case 0:
printf("unsorted");
break;
case 1:
printf("sorted in ascending order");
break;
case 2:
printf("sorted in descending order");
break;
case 3:
printf("sorted in ascending order first and then sorted in descending order");
break;
case 4:
printf("sorted in descending order first and then sorted in ascending order");
break;
case 5:
printf("empty or has only one element");
break;
}
return 0;
}
```
这段代码通过输入数组的元素,判断数组的排序状态,并输出对应的标识符。其中,flag 的取值范围是 0~5,分别表示未排序、升序、降序、先升后降、先降后升、数组中有不多于1个元素。根据 flag 的取值,使用 switch 语句输出对应的排序状态。
阅读全文