A-A+

以下程序运行后输入:3 abcde<回车> 则输出结果是【 】。 include<strin

2022-08-12 18:18:49 问答库 阅读 197 次

问题详情

以下程序运行后输入: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[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("%sn",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。

考点:程序