以下程序运行后输入:3,abcde<回车>,则输出结果是【 】。 # include<string.h> move(char *str,int n) { char temp int i; temp=str[n-1); for

admin2010-09-05  56

问题 以下程序运行后输入:3,abcde<回车>,则输出结果是【  】。
# include<string.h>
   move(char *str,int n)
   {   char temp int i;
   temp=str[n-1);
   for(i=n-1;i>0;i--)str=str[i-1];
   str[0]=temp
   }
   main()
   {    char s[50];iht n,i,z;
   scanf("%d,%s",&n,s);
   z=strlen(s);
   for(i=1;i<=n;i++)move(s,z);
   printf("%s\n",s);
   }

选项

答案cdeab

解析 本题中函数move的实参到形参是按地址传递,故形参的改变会影响实参。根据题目可知在main函数中,n=3、 s[0]=’a’、s[1]=’b’、s[2]=’c’、s[3]=’d’、s[4]=’e’,数组元素s[5]~s[49]全部为’\0’,故z= strlen(s)=5。
   第1次调用函数move时,形参str="abcd"、n=5,执行完函数move后str[4]=str[3]=’d’、str[3]=str[2]=’c’、 str[2]=str[1]=’b’、str[1]=str[0]=’a’、str[0]=str[4]=’e’。即s[0]=’e’、s[1]=’a’s[2]、s[2]=’b’、s[3]=’c’、s[4]=’ d’。
   第2次调用函数move时,形参str="eabcd、n=5,执行完函数move后str[4]=str[3]=’c’、str[3]=str[2]=’b’、str [2]=str[1]=’a’、str[1]=str[0]=’e’、str[0]=str[4]=’d’。即s[0]=’d’、s[1]c’e’、s[2]=’a’、s[3]=’b’、s[4]=’c’。
    第3次调用函数move时,形参str="deabc"、n=5,执行完函数move后str[4]=str[3]=’b’、str[3]=str[2]=’a’、str[2]=str[1]=’e’、str[1]=str[0]=’d’、str[0]=str[4]=’c’。即s[0]=’c’、s[1]=’d’、s[2]=’e’、s[3]=’a’、s[4]=’b’。
   所以printf函数的输出结果为:cdeab。
转载请注明原文地址:https://jikaoti.com/ti/91I0FFFM
0

最新回复(0)