程序填空题:逆序输出整数
话说Bob是一位编程新手,他已经可以熟练的使用顺序、分支、循环结构处理问题,这天他碰到一个让人烦恼的问题。一开始问题描述很简单:
输入10个整数,逆序打印出来。
Bob想,这个问题解决很简单么。定义10个变量,名字分别为a0,a2,a3,…,a9,按照a0-a9的顺序输入,a9-a0的顺序输出,于是,代码出来了:
#include <stdio.h>
int main()
{
int a0,a1,a2,a3,a4,a5,a6,a7,a8,a9;
scanf("%d%d%d%d%d%d%d%d%d%d”,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9);
printf("%d%d%d%d%d%d%d%d%d%d”,a9,a8,a7,a6,a5,a4,a3,a2,a1,a0);
return 0;
}
Bob提交代码,答案正确,是不是很easy。紧跟着,第二道题来了:
输入10000个整数,逆序打印出来。
哇塞,那岂不是要定义10000个变量,累死!Bob想略过,看下一道题:
输入n个整数,逆序打印出来。
### 输入格式:
输入为两行,第一行为一个正整数n(n<=10000),代表整数的个数,接下来一行为n个整数,空格分割。
### 输出格式:
逆序输出输入的整数。
### 输入样例:
5
1 2 3 4 5
### 输出样例:
5 4 3 2 1
Bob看完更晕了,现在连定义多少个变量都不知道了。
即将成为大神的你,帮Bob解决下这两个问题吧。
C语言有没有能方便的定义多个变量的方式呢?答案是肯定的,数组就是一种将多个变量组织在一起的一种结构。我们可以这样定义多个变量:
int a[10];
这里的a就是数组的名字,中括号里面的常数10代表a数组中包括10个变量,前面的int表明这10个变量都是整型变量。那么问题来了,我们怎么访问这10个变量呢?咱们先到编译器中来看看数组a实际上分配的存储空间吧。

我们在编译器中可以看到a的值实际上是内存地址,并且这个值和数组元素a[0]的地址是一样的。继续观察,我们还可以看到a[0]、a[1]、a[2]…所在的内存地址正好都是相差4个字节。这说明数组名a实际上是数组所分配空间的首地址(指针常量),并且数组所有元素的存储地址都是连续的,因此我们可以用a+i*4(每个int数组元素都占4个字节)得到第i(i=0,1,2,…)个数组元素的地址,从而使用指针方式对这个元素进行操作。
当然,因为数组空间是连续的,所以C语言还为我们提供了一种更方便的使用方法:
数组名[下标]//注意下标从0开始
小伙伴们,你们观察到了么?数组元素在没有初始化的情况下,在上面的编译器中,初始值都是负值,所以一定不要忘记初始化。去查查资料,尝试下各种数组元素初始化方法吧。
好了,现在我们可以帮助Bob解决第二个和第三个问题了,我们一起完成第三个问题吧:
首先,我们需要定义一个数组,长度至少为10000;
读入整数个数n;
输入n个整数存储到数组中;
从后往前输出所有数组元素;
下面咱们来写出完整的程序实现:
#include <stdio.h>
int main()
{
int a[10000];//存储整数的数组
int n;//整数个数
scanf("%d", &n);
for (int i = 0; i < n; i++)//输入n个整数存储到对应的数组元素,注意数组下标从0开始
scanf("%d", );//读入a[i]的值,注意需要取地址
for (int i = ;; i--)//从后往前打印数组元素,注意下标范围(n-1)-0
printf("%d ", a[i]);
return 0;
}
答案:
第1空:&a[i]
第2空:n - 1
第3空: i >= 0
输入10个整数,逆序打印出来。
Bob想,这个问题解决很简单么。定义10个变量,名字分别为a0,a2,a3,…,a9,按照a0-a9的顺序输入,a9-a0的顺序输出,于是,代码出来了:
#include <stdio.h>
int main()
{
int a0,a1,a2,a3,a4,a5,a6,a7,a8,a9;
scanf("%d%d%d%d%d%d%d%d%d%d”,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9);
printf("%d%d%d%d%d%d%d%d%d%d”,a9,a8,a7,a6,a5,a4,a3,a2,a1,a0);
return 0;
}
Bob提交代码,答案正确,是不是很easy。紧跟着,第二道题来了:
输入10000个整数,逆序打印出来。
哇塞,那岂不是要定义10000个变量,累死!Bob想略过,看下一道题:
输入n个整数,逆序打印出来。
### 输入格式:
输入为两行,第一行为一个正整数n(n<=10000),代表整数的个数,接下来一行为n个整数,空格分割。
### 输出格式:
逆序输出输入的整数。
### 输入样例:
5
1 2 3 4 5
### 输出样例:
5 4 3 2 1
Bob看完更晕了,现在连定义多少个变量都不知道了。
即将成为大神的你,帮Bob解决下这两个问题吧。
C语言有没有能方便的定义多个变量的方式呢?答案是肯定的,数组就是一种将多个变量组织在一起的一种结构。我们可以这样定义多个变量:
int a[10];
这里的a就是数组的名字,中括号里面的常数10代表a数组中包括10个变量,前面的int表明这10个变量都是整型变量。那么问题来了,我们怎么访问这10个变量呢?咱们先到编译器中来看看数组a实际上分配的存储空间吧。

我们在编译器中可以看到a的值实际上是内存地址,并且这个值和数组元素a[0]的地址是一样的。继续观察,我们还可以看到a[0]、a[1]、a[2]…所在的内存地址正好都是相差4个字节。这说明数组名a实际上是数组所分配空间的首地址(指针常量),并且数组所有元素的存储地址都是连续的,因此我们可以用a+i*4(每个int数组元素都占4个字节)得到第i(i=0,1,2,…)个数组元素的地址,从而使用指针方式对这个元素进行操作。
当然,因为数组空间是连续的,所以C语言还为我们提供了一种更方便的使用方法:
数组名[下标]//注意下标从0开始
小伙伴们,你们观察到了么?数组元素在没有初始化的情况下,在上面的编译器中,初始值都是负值,所以一定不要忘记初始化。去查查资料,尝试下各种数组元素初始化方法吧。
好了,现在我们可以帮助Bob解决第二个和第三个问题了,我们一起完成第三个问题吧:
首先,我们需要定义一个数组,长度至少为10000;
读入整数个数n;
输入n个整数存储到数组中;
从后往前输出所有数组元素;
下面咱们来写出完整的程序实现:
#include <stdio.h>
int main()
{
int a[10000];//存储整数的数组
int n;//整数个数
scanf("%d", &n);
for (int i = 0; i < n; i++)//输入n个整数存储到对应的数组元素,注意数组下标从0开始
scanf("%d", );//读入a[i]的值,注意需要取地址
for (int i = ;; i--)//从后往前打印数组元素,注意下标范围(n-1)-0
printf("%d ", a[i]);
return 0;
}
答案:
第1空:&a[i]
第2空:n - 1
第3空: i >= 0