解一个简单的小程序

来源:百度知道 编辑:UC知道 时间:2024/05/27 18:32:50
有以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。
#include N 10
void arrin(int x[N])
{int i=0;
.while(i<n)
.scanf("%d",__);
}
在下划线处填入的是(C)
A x+i B &x[i+1] C x+(i++) D &x[++i]
为什么选C,说出原因。

首先A、B不对,因为A、B里面i的值没变化,i<N这个循环条件恒成立,这个循环就是死循环。
D也不对,++i是先加1再赋值,所以D赋值是从x[1]开始的,不满足题意中“为所有元素赋值”
C是正确答案,这里用了指针的相关知识,数组名就是数组第一个元素的地址,即x[0]的地址就是x+0,x[1]的地址就是x+1,以此类推。
另外&是取地址符所以&x[i++]就等价于x+(i++)

首先排除AB对吧!其他的我也不太确定,所以写了个测试代码:
#include<stdio.h>
#define N 10
void arrin(int x[N])
{int i=0;
while(i<N)
scanf("%d",__);
}
void main()
{
int a[N];
arrin(a);
}

选c的时候没问题,选d出错.后来想想因为++i是先加一后赋值,所以数组是从a[1]开始的,导致最后输入的数据溢出了,所以不对
改成&x[i++]就对了

x 代表 int x[N]的首地址 也就是 x = &x[0] x+i = &x[i];
所以选c
另外 宏定义 错了 应该是define
while(i<n) n 应该大写 N

选c
++i肯定不行,因为那样就没有给第一个元素赋值,而且会越界

#define N 10

应该选择D
scanf的格式要求下划线处的参数要是个地址,就只能在BD中选择。由题意,要把输入的数放到数组中所以必须是i++或者++i,所以只能选择D

你自己代一下自己就明白了
取 N=5;
i从0自增到5;