问题 问答题

请编写函数fun(),该函数的功能是:移动字符串中的内容,移动的规则是把第1到第m个字符,平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。 例如,字符串中原有的内容为ABCDEFGHIJK,m的值为 3,移动后,字符串中的内容应该是DEFGHIJKABC。 注意:部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: #include <stdio. h> #include <string.h> #define N 80 void fun (char *w, int m) { } main ( ) { char a[N]= "ABCDEFGHIJK"; int m; printf ("The origina string : \n"); puts (a); printf("\n\nEnter m: "); scanf ("%d", &m); fun (a, m); printf (" \nThe string after moving : \n"); puts (a); printf ("\n\n"); }

答案

参考答案:

解析:void fun(char *w,int m) { int i,j; char t; for(i=1;i<=m;i++) /*进行m次的循环左移*/ {t=w[0]; for(j=1/w[j]!=’\0’;j++) /*从第2个字符开始以后的每个字符都依次前移一个字符*/ w[j-1]=w[j]; w[j-1]=t; /*将第1个字符放到最后一个字符中*/ } } 我们在学习C语言的时候,应该广泛地应用到循环的方法,本题应采用“循环左移”的算法。即从第2个字符开始以后的每个字符都依次前移一个字符,而原来的第1个字符放在串中的最后一个字符。当要平移m个字符时,则要进行m次的循环左移。内嵌的循环的作用是完成从第2个字符开始以后的每个字符都依次前移一个字符,w[j-1]=t的作用是将第1个字符放到最后一个字符中。

单项选择题
选择题