C程序设计(第五版)谭浩强著,第八章第四题。
#includeint main() { int i,n,m, a[10000], * p = a; void swap(int a[], int n,int m); printf("请输入n的值: "); scanf_s("%d", &n); printf("请输入n个整数: "); for (i = 0; i < n; i++) scanf_s("%d",p++);//输入 printf("使得前面各数顺序往后移m个位置,请输入m:"); scanf_s("%d", &m); swap(a, n,m); p = a; printf("调换后的顺序为:"); for (i = 0; i < n; i++,p++) printf("%5d", *p);//输出 return 0; } void swap(int a[], int n,int m) { int *p,b[1000],*p1; int i; for (p=&a[n-m],p1=b,i=0; i < m; i++,p++,p1++) *p1=*p;//将输入数组a后面的m个数放入b数组中 for (i = n - m - 1,p=&a[n-m-1]; i >= 0; i--,p--) a[i + m] = *p;//将a数组前面的n-m个数往后移动m个数 for (i = 0,p1=b,p=a; i < m; i++,p1++,p++) *p=*p1;//将b数组中存放的m个数放到a数组的前m个元素中 }
由于对指针掌握不熟练,在此之前先写了个用数组来实现的
#includeint main() { int swap(int a[],int n); int a[9], i; printf("请输入九个整数;"); for (i = 0; i < 9; i++) scanf_s("%d",&a[i]); printf("n"); swap(a, 9); printf("调换后的顺序为:"); for (i = 0; i < 9; i++) printf("%3d", a[i]); return 0; } int swap(int a[], int n) { int i,m=3; int b[9]; for (i = n - m; i < n; i++) b[i] = a[i];//将输入数组a后面的m个数放入b数组中 for (i = n - m - 1; i >= 0; i--) a[i + m] = a[i];//将a数组前面的n-m个数往后移动m个数 for (i = 0; i < m; i++) a[i] = b[n - m + i];//将b数组中存放的m个数放到a数组的前m个元素中 return(a[i]); }



