Jochen Arndt
Существует множество проблем. Некоторые из них уже должны быть указаны компилятором.
Смотрите комментарии:
int main()
{
int a[100],n,i;
/* Hopefully the user know what to enter without guiding him. */
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
/* The element a[n] is not initialised: Garbage will be printed out */
printf("%d",a[n]);
/* C basics: How to call a function. The compiler should complain about this */
check(int n,int a[]);
/* As above.
Using a value of 1 as not sorted is rather uncommon.
*/
if (check(int n,int a[]) = 1)
{
printf("the array isn't sorted");
}
return 0;
}
int check(int n,int a[])
{
int i,s;
for(i=0;i<n;i++)
{
/* Whith the last loop iteration (i == n-1)
this will access again the unitialised element a[n].
So the loop should start at 1 when comparing with the previous item
or the end condition should be < n-1.
*/
if(a[i] < a[i+1])
{
s = a[i];
a[i] = a[i+1];
a[i+1] = s;
return 0;
}
else {
return 1;
}
}
}
Требование состоит в том, чтобы проверить, отсортирован ли массив, но приведенный выше код изменит один элемент и вернет ноль, когда
какой-нибудь элемент меньше, чем следующий. С моей точки зрения, массив не должен быть изменен. Кроме того, я бы подумал, что сортировка означает, что
все элементы расположены в порядке возрастания. Таким образом, условие выхода из цикла и возврата "не отсортированного" будет заключаться в том, что любой элемент больше следующего (или меньше предыдущего).