以下程序执行时,输入1 2 3 4 5<回车>输出为( )
#include<stdio.h>
#define N 5
void main()
{
int a[N];
int *p=a;
while(p<a+N)
scanf("%d", p++);
while(p>a)
printf("%d", *(--p));
}
A.5 4 3 2 1 B.1 2 3 4 5 C.2 3 4 5 1 D.4 3 2 1 5
第一个while循环使用scanf函数从标准输入读取整数,直到指针p到达数组a的末尾。由于p是指向数组a的指针,p++在每次循环后将指针移动到下一个元素。这意味着循环将读取5个整数并存储在数组a中。
while
scanf
p
a
p++
第二个while循环使用printf函数打印数组中的整数,直到指针p回到数组a的开始位置。由于--p在每次循环前将指针向后移动一个元素,循环将从数组的最后一个元素开始向前打印,直到打印完所有元素。
printf
--p
因此,如果输入是1 2 3 4 5,程序将输出5 4 3 2 1。这是因为数组被填充的顺序是1 2 3 4 5,但是打印的顺序是从数组的末尾开始向前的。
1 2 3 4 5
5 4 3 2 1
题目错了
改成%d,不然运行起来报错。
这个开始有点绕,读一读就好多了,很容易。第一个while循环之后,p的地址是p4,而a的地址是a0,所以正好能把a数组的元素倒着输出,,,最重要的是注意,两个while循环里面的自增自减运算符是先增还是后增,先减还是后减。
这是我做的时候的想法。
有点变态呀,这
有问题吧,为什么最后一个是%s,不应该是%d吗
蹲个解释
A
用户登录可进行刷题及查看答案
登录后提交答案