问题 填空题

以下程序运行后输入: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。

填空题
单项选择题 A型题