为什么我的程序没有将偶数除以2?

时间:2017-10-10 19:08:30

标签: c for-loop

它应扫描10个int数字,然后向后显示它们,将偶数除以2,但它只显示它们而不分割。

ES:
10 9 8 7 6 5 4 3 2 1 ==> 1 2 3 2 5 3 7 4 9 5
但我的确如此: 10 9 8 7 6 5 4 3 2 1 ==> 1 2 3 4 5 6 7 8 9 10

#include <stdio.h>

int main(void)
{
    int a[10];

    for(int i = 0; i < 10; i++)
        scanf("%d", &a[i]);

    for (int i = 0; i < 10; i++) {
        if (a[i] % 2 == 0 ) {
            a[i] = a[i] / 2; i++;
        }
        else
            i++;
    }

    for(int i = 9; i > -1; i--)
        printf("%d\n", a[i]);

    return 0;
}

3 个答案:

答案 0 :(得分:2)

每次迭代中间循环错误地递增i两次:

for (int i = 0; i < 10; i++) { // <<== One increment
    if (a[i]%2 == 0 ) {
        a[i] = a[i]/2; i++;    // <<== Another increment - first branch
    }
    else
        i++;                   // <<== Another increment - second branch
}

在你的情况下,所有偶数都恰好存储在你的循环跳过的偶数位置。

注意:更好的解决方案是完全放弃中间循环,并在打印时进行除法。

答案 1 :(得分:2)

第二个for循环的正文提前i。因为它在循环子句中也是先进的,所以它先进两次,有效地跳过任何其他元素。删除这些进步,你应该没问题:

for(int i=0; i<10; i++) {
    if (a[i] % 2 == 0)  {
        a[i] /= 2;
    }
}

答案 2 :(得分:0)

在你的程序中,你在循环中增加了for循环变量i两次,并且循环也增加了一次值,所以跳过了值,这就是你输出错误的原因。因为我已经附加了纠正的程序及其output.hope你理解这个概念。谢谢你

#include <stdio.h>
int main(void)
 {
   int a[10];
   printf("\n Given Values are");
   printf("\n-----------------");

   for(int i = 0; i < 10; i++)  
      scanf("%d", &a[i]);

   for (int i = 0; i < 10; i++) 
     {
        if (a[i] % 2 == 0 ) 
          {
           a[i] = a[i] / 2;

           }
      }
  printf("\n After dividing the even numbers by 2 and print in reverse  order");
  printf("\n ----------------------------------------------------------------\n");
  for(int i = 9; i > 0; i--)
    printf("%d\n", a[i]);
return 0;
}

输出

Given Values are                                                                                                                                                                            
-----------------                                                                                                                                                                            
1                                                                                                                                                                                            
2                                                                                                                                                                                            
3                                                                                                                                                                                            
4                                                                                                                                                                                            
5                                                                                                                                                                                            
6                                                                                                                                                                                            
7    
8                                                                                                                                                                                            
9                                                                                                                                                                                            
10                                                                                                                                                                                           

After dividing the even numbers by 2 and print in reverse order                                                                                                                             
----------------------------------------------------------------
5                                                                                                                           
9                                                                                                                                                                                            
4                                                                                                                                                                                            
7      
3                                                                                                                                                                                            
5                                                                                                                                                                                            
2                                                                                                                                                                                            
3                                                                                                                                                                                            
1