急!!!!!!大侠帮忙编写一个指针程序
设有一数列,包含10 个数,已按升序排好。现要求编一程序,它能够把从指定位置开始的n个数按逆序重新排列并输出新的完整数列。进行逆序处理时要求使用指针方法。(例如:原数列为2,4,6,8,10,12,14,16,18,20,若要求把从第4个数开始的5个数按逆序重新排列,则得到新数列为2,4,6,16,14,12,10,8,18,20。)
[解决办法]
嗯,sorry啊,上面有问题,下面是正确的……
#include <stdio.h>
void main()
{
void f(int b[],int x,int y);
int a[10]={1,3,5,7,9,11,13,15,17,19};
int m,n,i;
printf("指定开始位置:");
scanf("%d",&m);
printf("指定按倒叙输出的个数:");
scanf("%d",&n);
f(a,m,n);
printf("按要求输出如下:\n");
for(i=0;i<10;i++)
printf("%d\t",a[i]);
}
//函数实现n个数倒序输出……
void f(int b[],int x,int y)
{
int *i,temp,*j,*pt;
pt=b;
i=pt+x-1;j=pt+x+y-2; //i是第n个数的地址,j是第j=pt+x+y-2的地址
for(;i<=pt+(x+x+y-2)/2;i++,j++) //pt+(x+x+y-2)/2,第n个数和第n+m个数之间中间数
{
temp=*i;
*i=*j;
*j=temp;
}
return;
}
另外,pt+x+y-2,这里的减2,是为了凑题目要求的!用为数组是从零开始的嘛!
lz仔细看下,很容易理解的……
[解决办法]
- C/C++ code
#include <stdio.h>#include <stdlib.h>int main(){ int num[10]; int temp; int i; int m, n; printf("请输入原序列:"); for (i = 0; i < 10; i++) scanf("%d", num + i); printf("请输入开始的位置:"); scanf("%d", &m); if (m > 10) { printf("位置有误!"); exit(1); } printf("请输入要倒序输出的个数:"); scanf("%d", &n); if ((m + n) > 10) { printf("位置有误!"); exit(1); } for (i = 0; i < n / 2; i++) { temp = num[i + m - 1]; num[i + m - 1] = num[m + n - 2 - i]; num[m + n - 2 - i] = temp; } printf("改变后的序列为:"); for (i = 0; i < 10; i++) printf("%d ", num[i]); return 0;}