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