请编写函数fun,该函数的功能是:移动字符串中的内容,移动的规则如下:把第1~m个字符平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。
例如:字符串中原有的内容为ABCDEFGHIJK,m的值为3,则移动后字符串中的内容应该是DEFGHIJKABC。
注意:部分源程序在文件PROG1.C中,请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
文件PROG1.C内容如下:
#include<stdio.h>
#include<string.h>
#define N 80
void fun(char *w,int m)
void main( )
char a[N]="ABCDEFGHIJK":
int m;
printf("The original string:\n");
puts(a);
printf("\nEnter m:\n");
scanf("%d",&m);
fun(a,m);
printf(:\n The string after moving: \n");
puts(a);
printf("\n");
参考答案:void fun(char{w,int m){
int i,j,n;
char c:
n=strlen(w);
for(i=0;i<m;i++){
c=w[0];
fbr(j=1;j<n;j++)w[j-1]=w[j];
w[j-1]=c;
}
}
解析: 参考答案:中使用的算法是:循环m次,每次左移一个字符。i循环控制循环的次数,总共进行m轮循环,每轮循环都将字符串第一个字符取出放在变量c中,通过j循环将剩余字符顺序左移一个位置,跳出j循环后,将c中存放的第一个字符赋值到字符串的末尾。经过m轮处理后,实现题目要求把第1~m个字符平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。
[归纳总结] 本套试题的程序填空和程序设计题考查的是数据的移动算法。数据在移动时会覆盖数组中的一些元素,所以通常在做此类题目时,会引入一个中间变量或一个中间数组将要被覆盖的数据暂时存放在其中,原数组处理完毕后,再将中间变量的值赋值到原数组合适的位置上。
假设n是数组的长度,左移m个元素的常用程序段如下:
for(i=0;i<m;i++){
c=a[0];
for(j=1;j<n;j++)a[j-1]=a[j];
a[j-1]=c;
}
假设n是数组的长度,右移m个元素的常用程序段如下:
for(i=0;i<m;i++){
c=a[n-1];
for(j=n-1;j>0;j--)a[j]=a[j-1];
a[0]=c;
}