【发布时间】:2021-09-30 22:17:24
【问题描述】:
C 编程新手^^。
我正在处理一项任务,我必须创建一个函数来验证我的数组是否已排序。我必须使用预定义的代码模板并以某种方式解决它。
说明:
让我们创建一个函数来告诉我们数组是否已排序。什么是排序的? :-)
编写一个将整数数组作为参数(输入)并返回布尔值(真/假)的函数。
如果整数数组按 ASC(升序)或 DESC(降序)排序,您的函数应该返回 true。 如果整数数组未排序,您的函数应返回 false。
数字将从 -2_000_000 到 2_000_000 数组可能有重复。
我必须用它来解决我的问题。
#ifndef STRUCT_INTEGER_ARRAY
#define STRUCT_INTEGER_ARRAY
typedef struct s_integer_array
{
int size;
int* array;
} integer_array;
#endif
bool my_is_sort(integer_array* param_1)
{
}
The inputs that will be used to verify my code:
Exemple 0:
Input: [1, 1, 2]
Output:
Return Value: true
Exemple 1:
Input: [2, 1, -1]
Output:
Return Value: true
Exemple 2:
Input: [4, 7, 0, 3]
Output:
Return Value: false
Exemple 3:
Input: []
Output:
Return Value: true
这是我的代码:
#include <stdbool.h>
#ifndef STRUCT_INTEGER_ARRAY
#define STRUCT_INTEGER_ARRAY
typedef struct s_integer_array
{
int size;
int* array;
} integer_array;
#endif
bool my_is_sort(integer_array* a)
{
if (a->size == 1 || a-> size == 0)
{
return true;
}
int i;
for (i=0;i<a->size;i++)
{ //ascending order
if (a->array[i] <= a->array[i+1]){
return true;
}else if (a->array[i] >= a->array[i+1]){
return true;
} else {
return false;
}
}
}
验证代码的输出: The output failure i get
我的错误在于输入 -> 输入:[4, 7, 0, 3] 我的代码在应该返回 false 时返回 true。 它返回 true 因为前两个索引 4 小于 7 所以我的代码假定它是按升序排列的,但我不希望我的代码在返回布尔值之前继续循环到下一个。检查 7 之后的数字是否大于 7。但我不知道如何在代码中做到这一点。
谢谢你们!
我知道这对你们很多人来说可能是个愚蠢的问题,但请帮忙。我是新手,我非常喜欢编程。
【问题讨论】:
-
您总是在循环的第一次迭代中返回。如果你不是,你也会在循环的最后一次迭代中索引数组的末尾,所以你应该在你的 for 循环条件中使用
size -1。尝试在循环外添加一个标志变量。当您比较两个值时,它们可以是升序、降序或相等。将当前结果与标志进行比较,如果相反则返回 false。 -
if (a <= b) { ... } else if (a >= b) { ... } else { puts("This line cannot be printed."); }。因为如果a不是<= b,那么它必须是> b,至少对于整数来说是这样。 (如果比较表达式中的一个或两个都是 NaN,则几乎所有的 NaN 实现中的浮点数可以执行puts。)加上 @RetiredNinja 所说的。 -
顺便说明一下:定义数组(或其他)大小的正确类型是来自
stddef.h的size_t,而不是int... -
两个元素也被排序,所以你可以简单地做
if(size <= 2) return true;。 -
提示:找到第一对不相等的
array[n]和array[n+1]并记住这种关系(例如),则返回 false。如果你没有发现这样的不匹配(即循环完成),返回 true。
标签: arrays c sorting pointers structure