设有一数列包含10 个数,已按升序排好。现要求编一程序,它能够把从指定位置m开始的n个数按逆序重新排列

并输出新的完整数列。进行逆序处理时要求使用指针方法(例如:原数列为2,4,6,8,10,12,14,16,18,20,m=4, n=5,即要求把从第4个数开始的5个数按逆序重新排列,则得到新数列为2,4,6,16,14,12,10,8,18,20。)输入10个整数和m, n;输出新的数组,数组元素之间以空格分隔。主函数如下:#include <stdio.h>void method(int m,int n,int *a);int main(){ int a[10]; int i, m, n; for ( i=0; i<10; i++ ) scanf("%d", &a[i] ); scanf( "%d%d", &m, &n ); method(m,n,a); for( i=0;i<10;i++ ) printf( "%d ", a[i] );}已经写好了一个程序,可以实现将逆序部分赋给一个指针型字符串*b,但是*b没有成功赋给*a不懂为什么,请大神帮帮我,看要怎么改一下,因为我刚学了一点指针,实在不知道怎么办了,谢谢。

你的*b没有成功赋给*a,可能是类型不匹配,因为*b是指针型字符串,而不是int型指针,我给你写了一个正确的用指针的程序,直接在数组*a上操作即可,你可以对照着看一下.

按照题目要求编写的C语言程序如下(其中有题目要求的用指针的method函数)

#include<stdio.h>

void method(int m,int n,int* a);

int main()

{

 int a[10];

 int i,m,n;

 for(i=0;i<10;i++)

  scanf("%d",&a[i]);

 scanf("%d%d",&m,&n);

 method(m,n,a);

 for(i=0;i<10;i++)

  printf("%d ",a[i]);

 return 0;

}

void method(int m,int n,int* a)

{

 int i,j,temp;

 for(i=m-1;i<m+n-1;i++)

 {

  for(j=i+1;j<m+n-1;j++)

  {

   if(*(a+i)<*(a+j))

   {

    temp=*(a+i);

    *(a+i)=*(a+j);

    *(a+j)=temp;

   }

  }

 }

}

运行结果

追问

说错了,我定义的指针*b是整数型,这是我完整的代码
void method(int m, int n, int *a)

{
int j = m + n - 2;
int *b = (a + j);
while (j >= m - 1)
{
j--;
b = (a + j);
}
for (j = 1; j < m; j++)
a++;
for (j = m; j < m + n; j++)
{
a = b;
a++;
b++;
}
}

追答

你的C语言逆序程序,我帮你改好了,你看看吧(改动的地方见注释)

#include<stdio.h>

void method(int m,int n,int* a);

int main()

{

 int a[10];

 int i,m,n;

 for(i=0;i<10;i++)

  scanf("%d",&a[i]);

 scanf("%d%d",&m,&n);

 method(m,n,a);

 for(i=0;i<10;i++)

  printf("%d ",a[i]);

 return 0;

}

//因为b指针如果指向a数组,a,b两个指针会冲突,所以把b指向另一个数组c,等于把a的逆序赋值给了c,然后再赋值回数组a

void method(int m, int n, int *a)

{

 int c[10]={0};//这里加一句,新建一个数组

 int j = m + n - 2;

 int *b = c;//这里把int *b=(a+j);改成int *b=c;让b指向新建的数组c

 while (j >= m - 1)

 {

  *b = *(a + j);//这里把b = (a + j);改成*b = *(a + j);

  b++;//这里加一句移动b指针

  j--;//这里把j--;移到这里

 }

 for (j = 1; j < m; j++)

  a++;

 for (j = 0; j < n; j++)//这里把b指针移到c数组头部

  b--;

 for (j = m; j < m + n; j++)

 {

  *a = *b;//这里把a=b;改成*a = *b;把b的值赋给a数组

  a++;

  b++;

 }

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-12-03
参考及测试代码如下:
#include<stdio.h>
void method(int m,int n,int *a)
{int t,i,l;
--m;
for(i=0;i<n/2;++i){
t=*(a+m+i);
*(a+m+i)=*(a+m+n-i-1);
*(a+m+n-i-1)=t;
}
}
int main()
{
int a[10]={1,2,3,4,5,6,7,8,9,0};
int i,n=10;
method(8,3,a);
for(i=0;i<10;i++)
printf("%d ",a[i]);
return 0;
}追答

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网