C语言调用函数将数组指定范围内元素按逆序重新放置
如图,我的代码中无论输入什么,形参b一直是0,运行显示有未经处理的异常。
请问大家是什么原因?
(代码只能在绿线之内更改)
测试输入:1 5 3 4 8 0 6 9 12 13
0 9
预期输出:13 12 9 6 0 8 4 3 5 1
你这个 p 一直在变,p + m 不是 一直 大于 p 嘛,死循环了呀
开始的 指针 重新用 一个 int *n = p + a; 然后用这个 n指针 操作循环
修改如下:
void reverse(int *p, int a,int b)
{
int *q=p+b;
int *n=p+a;
int m=(a+b)/2;
for(; n<=p+m; n++)
{
int temp;
temp=*n;
*n=*q;
*q=temp;
q--;
}
}
#include "stdio.h"
#define N 10
void reverse(int *p1, int a, int b)
{
/***** Begin *****/
int *p=p1,*q=p1+b;
int m=(a+b)/2;
for (p=p1+a;p<p1+m;p++)
{
int temp;
temp=*p;
*p=*q;
*q=temp;
q--;
}
/***** End *****/
}
int main()
{
int a[N],i,begin, end;
for (i=0;i<N;i++)
scanf("%d",&a[i]);
scanf("%d%d",&begin,&end);
reverse(a, begin, end);
for (i=0; i<N; i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
//输入
//1 5 3 4 8 0 6 9 12 13
//0 9
//输出
//13 12 9 6 8 0 4 3 5 1
//
逆置函数这么改,供参考:
void reverse(int* p, int a, int b)
{
/******Begin*****/
int* qa, * qb, tmp;
for (qa = p + a, qb = p + b; qa < qb; qa++, qb--)
{
tmp = *qa; *qa = *qb; *qb = tmp;
}
/********End*****/
}
题主的代码里,for (p = p + a; p < p + m; p++) 这里死循环了,p < p+m; p++。
输入的代码你改不了?那么你怎么输入的,要加上空格
别输入09
要输入 0 9
但问题可能出在绿线外,%d%d之间加个空格试试