C语言,求过程
void main()
{
int i,a[10]={0,1,2,3,4,5,6,7,8,9};
for(i=1;i<9;i++)
a[i]=a[i-1]+a[i+1];
printf("%d%d",a[5],a[7]);
}
A.1014 B.2035 C.812 D.2744 展开
这题的重点是在循环中理解数组的变化,即数组和循环的组合使用,这类问题很常见。
先看循环,起始i=1,条件i<9,即i的变化为1到8,所以数组a也是从a[1]到a[8]的变化,数组的下标是从0开始的,即a[0]=0、a[1]=1...a[9]=9,没有a[10]。
接着看循环体语句:a[i]=a[i-1]+a[i+1],这条语句就像一个公式,代入一个数字,例如i=1,那么有:a[1]=a[0]+a[2],即:
当前元素a[i]的值=上一个元素a[i-1]的值+下一个元素a[i+1]的值。
已知i是1到8,根据a[i]=a[i-1]+a[i+1],
数组原来的值:a[10]={0,1,2,3,4,5,6,7,8,9}
当i=1时,那么有:
a[1]=a[0]+a[2],即a[1]=0+2=2
此时a[10]={0,2,2,3,4,5,6,7,8,9}
原来a[10]={0,1,2,3,4,5,6,7,8,9}
当i=2时,有:
a[2]=a[1]+a[3],即a[2]=2+3=5
此时a[10]={0,2,5,3,4,5,6,7,8,9}
原来a[10]={0,1,2,3,4,5,6,7,8,9}
当i=3时,有:
a[3]=a[2]+a[4],即a[3]=5+4=9
此时a[10]={0,2,5,9,4,5,6,7,8,9}
原来a[10]={0,1,2,3,4,5,6,7,8,9}
当i=4时,有:
a[4]=a[3]+a[5],即a[4]=9+5=14
此时a[10]={0,2,5,9,14,5,6,7,8,9}
原来a[10]={0,1,2,3, 4,5,6,7,8,9}
当i=5时,有:
a[5]=a[4]+a[6],即a[5]=14+6=20
此时a[10]={0,2,5,9,14,20,6,7,8,9}
原来a[10]={0,1,2,3, 4, 5, 6,7,8,9}
当i=6时,有:
a[6]=a[5]+a[7],即a[6]=20+7=27
此时a[10]={0,2,5,9,14,20,27,7,8,9}
原来a[10]={0,1,2,3, 4, 5, 6, 7,8,9}
当i=7时,有:
a[7]=a[6]+a[8],即a[7]=27+8=35
此时a[10]={0,2,5,9,14,20,27,35,8,9}
原来a[10]={0,1,2,3, 4, 5, 6, 7, 8,9}
当i=8时,有:
a[8]=a[7]+a[9],即a[8]=35+9=44
此时a[10]={0,2,5,9,14,20,27,35,44,9}
原来a[10]={0,1,2,3, 4, 5, 6, 7, 8, 9}
循环结束,根据输出语句printf("%d%d",a[5],a[7]),那么a[5]=20,a[7]=35,即输出结果为“2035”,答案选B。
for循环,当i=1时,a[1]=a[0]+a[2]=0+2=2,当i=2时,a[2]=a[1]+a[3]=2+3=5,当i=3时,a[3]=a[2]+a[4]=5+4=9,当i=4时,a[4]=a[3]+a[5]=9+5=14,当i=5时,a[5]=a[4]+a[6]=14+6=20,当i=6时,a[6]=a[5]+a[7]=20+7=27,当i=7时,a[7]=a[6]+a[8]=27+8=35,依次类推
最后输出a[5]和a[7]的值,分别为20和35,所以选B
a[i] = a[i-1] +a[i+1]
它的意思是数组中当前位的值等于前一位与后一位的和
第一个次进循环
a[1] = a[0] +a[2]
所以a[1]=2
以此类推
数组a为0,2,5,9,14,20,27,35,44
所以输出20和35