它应扫描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;
}
答案 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