准确点来说是用函数实现模块化程序设计~
直奔主题
以下程序
#define N 20
fun(int a[],int n,int m)
{ int i,j;
for(i=m;i>=n;i--)a[i+1]=a[i];
}
main()
{ int i,a[N]={1,2,3,4,5,6,7,8,9,10};
fun(a,2,9);
for(i=0;i<5;i++)printf("%d",a[i]);
}
程序运行后的输出结果是( )。
(A)10234 (B)12344 (C)12334 (D)12234
思路分析
作为一个编程小白哈,能看出来涉及到了函数和数字,鄙人能力有限,才疏学浅,去百度文库插了一下
本题函数fun的作用是将指定的数组元素(从下标n到下标m)向后移一位。由函数调用“fun(a,2,9);”可知,函数fun用于将a[2]到a[9]的各元素依次向后移一位,移完后,a数组中各元素的值分别为1,2,3,4,5,6,7,8,9,10,故输出的前5个数组元素为12334。//百度文库
仔细思考
这个函数a[2]到a[9]的元素一次向后移动一位,这个能理解,因为题目中是a[i+1]=a[i]嘛
我当时纠结的是,1,2,3,4,5,6,7,8,9,10,取前五个,为什么是12334???坑??
纠结了好久,推算出来了一点思路,
在最开始for循环中,a[9+1]=a[9];
然后以此类推 :a[8+1]=a[8];a[7+1]=a[7];a[6+1]=a[6];a[4+1]=a[4];a[3+1]=a[3];
a[2+1]=a[2];(这个时候得注意,因为有条件i>=n,n为2)
什么意思呢?简单来说,就是原始数组a[N]从a[2]到a[9]元素得向后移动一位,原来的a[2]对应元素3 , a[3]对应的元素为4,现在元素后移一位之后,即a[3]是原来a[2]对应的元素,即对应元素3,a[4]为4
前面的a[0]=1,a[1]=2,a[2]=3,这三个元素没有改变,所以排除AD选项.然后依次往后顺,a[3]=3,a[4]=4
即 1,2,3,3,4
撸写代码
#include<stdio.h>
#define N 20
fun(int a[],int n,int m) //n=2,m=9,测试的时候这两也可以换
{
int i,j;
for(i=m;i>=n;i--)
a[i+1]=a[i];
}
int main()
{
int i,a[N]={1,2,3,4,5,6,7,8,9,10};
fun(a,2,9);
for(i=0;i<5;i++) //取前五位,测试的时候i可以改为10,15,20,随意
printf("%d\n",a[i]);
}
出现了,和推测的一样,美滋滋,大家还可以多测试几组,如取前10位,前15位,前20位的.
或者元素从2-9,或3-10,2-15,多练练,其中的原理还是的自己多多感受~