分析如下:由main()
{ int i=0
func1(i)
printf("\n")
}
i=0;
执行fun(i)
printf("%c",st[i])输出w;
又:
i+=2
则i=2
执行func2(i)
输出:l;
接着: i+=2;
i=4
执行:func1(i)
输出:o;
最后输出:wlo
2.运行结果:22;
main函数执行f(a);
j=0
则i=0
执行s+=b[i][j]
s=1;
接着j=1
i=1
s=+=b[i][j]
s=1+6=7
i=3
s=7+11=18
接着j=3;
i=3;
执行i=3-j;
i=0;
s=18+4;
s=22;
分析完毕:
本题输出结果是:1#3#2for循环共循环3次,i的值分别是9,10,11
当i=9,9/10等于0,所以执行case 0中的语句,这时m=1,n=1,k=0
当i=10,10/10等于1,没有case 1,就执行default下面的语句,执行完后,m=1,n=2,k=1
当i=11,11/10等于1,还是执行default里的语句,完成后m=1,n=3,k=2
完成循环,屏幕最终显示:1#3#2
首先void de(int a[],int x,int *m)函数:void de(int a[],int x,int *m) // 函数形参为数组a[],整型x,整型指针*m
{ int i=x+1 //定义i=x+1
for(i<=*mi++) a[i-1]=a[i] //for循环,从i位置起,将后面的数组元素向前移动一个位置。
*m=*m-1 //*m-1,也就是数组长度减1
}
该函数的作用是将数组a[]从x位置起,把后面的元素向前移动,覆盖(删除)掉x位置的元素。
然后,主函数中static的意思:
static是将数组a[]声明为静态局部变量(main函数内),静态局部变量保存在全局数据区,而不是保存在栈中,每次的值保持到下一次调用,直到下次赋新值。这个具体的你得看看书,了解下,不过在这里可以无视掉,无特殊作用。
最后主函数:
第一层for循环中,读取第一个数组元素赋值给x。然后第二层for循环中,依次将x与比较后面的值比较,如果发现重复值,则利用de()函数将重复的元素删除。最后一个for循环输出。
另外需要说一下的是,de(a,j,&m)的意思,数组做实参时直接使用数组名即可,如a。j为普通的形参。而&m的意思是将变量m的地址作为形参,这是指针作为实参时的使用方法,地址为实参,作用是这样de()函数中便可直接对m值进行 *** 作。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)