0$房天下问答|请教大家几题C语言$https://m.fang.com/ask/ask_1850552.html$https://static.soufunimg.com/common_m/m_public/201511/images/asksharedefault.png
packc/pages/ask/detail/detail?askid=1850552
-
请教大家几题C语言
34.有以下程序 void change(int k[ ]){k[0]=k[5];} main() {int x[10]={1,2,3,4,5,6,7,8,9,10},n=0 while(n<=4) {change(&x[n]);n++;} [云南考试网]ynexam_cn for(n=0;n<5;n++) printf("%d",x[n]); printf("\n"); } 程序运行后输出的结果是___a_____。 A)678910 B)13579 C)12345 D)6234536.有以下程序 main() {int x[3][2]={0},I; for(I=0;I<3;I++) scanf("%d",x); printf("%3d%3d%3d\n",x[0][0],x[0][1],x[1][0]); } 若运行时输入:246<回车>,则输出结果为________。 A)2 0 0 B)2 0 4 C)2 4 0 D)2 4 6 28.有以下程序 fun(int x) {int p; if(x==0║x= =1) return(3); p=x-fun(x=2); retum p; }main() { prinf("%d\n",fun(7));} 执行后的输出结果是________。 A)7 B)3 C)3 D)0
更多
提问者:violetear
发布于2011-01-25
共1个回答
-
-
-
西嶺雪峰
丨Lv 2
34. 结果是678910分析:在C语言中,作为函数参数的数组退化为了指针。这样函数void change(int k[ ]){k[0]=k[5];} 其实相当于void change(int *k){ *k = *(k+5);}也就是相当于,指针k所指向的值被更改为,指针k+5所指向的值了。n=0时,指针k指向数组x的x[0],k+5就是x[5]了,所以这次就是相当于 x[0]=x[5]=6;n=1时,指针k指向数组x的x[1],k+5就是x[1+5]=x[6]了,所以这次就是相当于 x[1]=x[6]=7;同理n=2时是x[2]=x[7]=8;n=3时是x[3]=x[8]=9;n=4时是x[4]=x[9]=10;所以最后的结果是 678910.36.这道题楼主应该是写错了,如果按照原题输出结果应该为6 0 0分析:这是因为,在循环输出的时候,每次的值都被保存在x[0][0]了,即保存数据的位置没有变化。如果,原题改为for(I=0;I<3;I++) scanf("%d",x+I); 则结果为2 0 4分析:根据C语言规则,数组名可以看成是指向该数组类型的指针,由于x是二维数组int [3][2]的数组名,那么x就相当于一个指向一维数组int [2]的指针,那么x+I中的I所代表的步长就是一个int [2]的数组了。这样 x+0 指向 x[0][0], x+1 指向 x[1][0],x+2 指向 x[2][0].那么读入的数据也就保存在x[0][0]=2,x[1][0]=4,x[2][0]=6,在输出的是由于x[0][1]被初始化为0(int x[3][2]={0}),而没有被更改过,仍然为0,所以结果为2 0 4.28. 答案是 2分析:这是典型的C语言递归函数,做题的时候只要逐步展开就可以了。要求的是fun(7)根据函数的规则可知fun(n)=n - fun(n-2) (n>1)fun(1)=fun(0) = 3好了因为7>1fun(7) = 7 - fun(7-2) = 7 - fun(5)因为 5>1fun(5) = 5 - fun(5-2) = 5 - fun (3)因为 2>1fun(3) = 3 - fun(3-2) = 3 - fun(1) = 3 - 3 = 0那么fun(5) = 5 - fun(3) = 5 - 0 = 5 fun(7) = 7 - fun(5) = 7 - 5 = 2
免责声明:问答内容均来源于互联网用户,房天下对其内容不负责任,如有版权或其他问题可以联系房天下进行删除。

关注成功