我一直想写一个代码来显示suceceding元素大于前面元素的次数,但我不认为我的逻辑是正确的。这是我的代码。请给我建议改进代码以获得所需的输出。
int main(void)
{
int arr[10] = { '\0' };
int i = 0, n = 0, count = 0, j = 0;
printf("\nEnter the number of elements in the array: ");
scanf("%d", &n);
printf("\nEnter the elements");
for (i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
}
printf("\nThe array elements are: ");
for (i = 0; i < n; i++)
{
printf("%d\t", arr[i]);
}
for (i = arr[0], j = arr[1]; i < arr[n], j = arr[n]; i++, j++)
{
if (i < j)
count++;
}
printf("\nThe count is: %d", count);
return 0;
}
答案 0 :(得分:1)
你的最后一个循环是远离的。通常更容易将索引增加到数组中 例如,假设你有这个数组:
5 4 3 2 1
您的代码执行此操作:
5
分配给i
,将4
分配给j
。 i
和j
(这是正确的目前)i
和j
,现在分别为6
和5
。这不是你想要的。此外,循环中的条件是错误的。一旦您正在查看的值(例如第一个元素)大于最后一个元素,它就会突破循环。在我的示例数组中,它会立即中断。 (i=5
不低于arr[n]=1
。
相反,您应该将索引增加到数组中,并在到达最后一个索引时跳出循环。
for(i = 0, j = 1; j < n; i++, j++) {
if(arr[i]<arr[j])
count++;
}
您还要确保n
小于或等于10,否则您将在数组外写字。
添加
if(n > 10) {
n = 10;
}
或
if(n > 10) {
printf("Max number of elements is 10.\n");
return -1;
}
获得n
后。
答案 1 :(得分:0)
问题出在最后一个for循环中。你正在做一些非常奇怪的迭代。
简化:
for(i=0;i<n;i++){
if(arr[i]<arr[i+1])
count++;
}
答案 2 :(得分:0)
这应该适合你。主要成分是循环
for (i = 0; i < n-1; i++)
{
if (arr[i] < arr[i+1])
count++;
}
让我们说你有5个元素。 {0}将从0到3进行评估。
在这种情况下,您要将i
与arr[i]
进行比较。这意味着,循环将进行比较
arr[i+1]
至arr[0]
,arr[1]
至arr[1]
,arr[2]
至arr[2]
,最后arr[3]
至arr[3]
,是你想要实现的目标。
arr[4]