填空题 给定程序中,函数fun()的功能是:把形参s所指字符串中下标为奇数的字符右移到下一个奇数位置,最右边被移出字符串的字符绕回放到第一个奇数位置,下标为偶数的字符不动(注:字符串的长度大于等于2)。
例如,形参s所指的字符串为:abcdefgh,执行结果为:ahcbedgf。
注意:部分源程序给出如下。
请勿改动main()函数和其他函数中的任何内容,仅在fun()函数的横线上填入所编写的若干表达式或语句。
试题程序:
#include<stdio.h>
void fun(char*s)
{
int i,n,k;
char c;
n=0;
for(i=0;s[i]!="/0";i++)
n++;
if(n%2==0)
k=n- 1;
else
k=n- 2;
c=s[k];
for(i=k-2;i>=1;i=i-2)
s[i+2]=s[i];
s[1]= 3;
}
void main()
{
char s[80]="abcdefgh";
printf("/nThe original string is:%s/n",s);
fun (s);
printf("/nThe result is:%s/n",s);
}
【正确答案】
【答案解析】1 s[k]或*(s+k) c[解析] 本程序的作用是将字符串(即字符数组)中奇数位置(下标)的字符循环后移,即最后一个奇数位置的字符移到第一个奇数位置,其他奇数位置字符后移一个位置。第一个for循环的作用是求出字符串s的长度n。如果n是偶数,字符串下标为奇数的最后一个字符就是前一个字符,k=n-1;如果n是奇数,k=n-2。将字符s[k]保存到c中,通过循环实现减遍历,将下标为奇数的字符都后移2位(因为包含偶数,所以后移2位,就是后移到下一个奇数位)。最后将最右边被移出字符串的字符放到第一个奇数位置。