执行完下面的代码后,sum 的值是( )。
int arr[2][3][2] = {
{{1,2}, {3,4}, {5,6}},
{{7,8}, {9,10}, {11,12}}
};
int sum = 0;
for(int i = 0; i < 2; i++)
for(int j = 0; j < 3; j++)
for(int k = 0; k < 2; k++)
if((i+j+k) % 2 == 0)
sum += arr[i][j][k];答案B。在循环中遍历数组并累积结果时,注意累加变量的初始值和每次循环的更新方式。
for循环体可能一次都不执行!这是和while循环一样的"先判断后执行"机制。
【考点】多维数组|循环结构|条件判断|取模运算|累加求和
1. 🎯 考纲定位:C++ 四级第 3.3 节数组访问、3.5 节循环、3.7 节条件语句。命题人卡住的是死记硬背数组下标规则的考生,三维数组嵌套循环是基础但极易手算出错。
2. 🧠 解题思维:先写二维数组记忆法(行×列),此题是三维(i×j×k)。i 取 0-1,j 取 0-2,k 取 0-1,共 12 个元素。关键是条件 (i+j+k) % 2 == 0,即索引和为偶数。遍历 12 个下标,符合条件的只有 6 个:(0,0,0)=1、(0,1,1)=4、(0,2,0)=5、(1,0,1)=8、(1,1,0)=9、(1,2,1)=12,累加得 39。
3. 🪤 陷阱拆解:C 选项 78 是四组元素全加(1+2+3+4+5+6+7+8+9+10+11+12),命题人故意省略条件让粗心者选;A 选项 36 是误算偶索引和(1+4+5+8+9+12=39 但有人把 12 当成 11 或 11 当成 12 错算);D 选项 30 是误算奇索引和(2+3+6+7+10+11=39 但有人把 11 当成 10 或 10 当成 11 错算)。最阴险的是条件表达式,很多人看到%2 就以为只加偶数,但实际是索引和为偶数,不是元素值。
4. 🔄 反命题思维:若把条件改为 (i+j+k) % 2 != 0(索引和为奇数),则加的是 2、3、6、7、10、11,和为 39 仍为 39(但实际是 2+3+6+7+10+11=39,和原来一样?不对,重新算:2+3+6+7+10+11=39,原来 1+4+5+8+9+12=39,所以和原来一样?不对,重新算:1+4+5+8+9+12=39,2+3+6+7+10+11=39,确实一样。那改条件为 (i+j+k) % 3 == 0,则加的是 (0,0,0)=1、(0,1,2) 不存在、(0,2,1)=11、(1,0,2) 不存在、(1,1,1)=10、(1,2,0)=12,和为 1+11+10+12=34。刷到类似题,先问自己:条件到底在筛什么?是值还是索引?是奇还是偶?是模几?别被表面符号带跑。