例如,数组a[]={2,8,3,-7,21,-18,16,5,-9,12},若要求把从第四个数开始的五个数按逆序重新排列,则得到新数列为2,8,3,5,16,-18,21,-7,-9,12.
int main()
{
int a[10];
int *p = a;
int *q;
int start_position;
int num;
int temp;
for( int i = 0; i < 10; i++ )
{
printf( "输入第%d个数:\n", i );
scanf( "%d", p++ );
}
printf( "输入开始位置:\n" );
scanf( "%d", &start_position );
printf( "输入要交换的数字的个数:\n" );
scanf( "%d", &num );
if ( start_position < 1 || num < 0 || start_position + num > 11 )
return 0;
printf( "交换前:\n" );
for ( int i = 0; i < 10; i++ )
printf( "%d ", a[i] );
p = a + start_position - 1;
q = p + num - 1;
for ( p; p != q ; p++, q-- )
{
temp = *p;
*p = *q;
*q = temp;
}
printf( "\n交换后:\n" );
for ( int i = 0; i < 10; i++ )
printf( "%d ", a[i] );
return 0;
}
我试了可以,你自己再试试。
{
int a[10];
int *p = a;
int *q;
int start_position;
int num;
int temp;
for( int i = 0; i < 10; i++ )
{
printf( "输入第%d个数:\n", i );
scanf( "%d", p++ );
}
printf( "输入开始位置:\n" );
scanf( "%d", &start_position );
printf( "输入要交换的数字的个数:\n" );
scanf( "%d", &num );
if ( start_position < 1 || num < 0 || start_position + num > 11 )
return 0;
printf( "交换前:\n" );
for ( int i = 0; i < 10; i++ )
printf( "%d ", a[i] );
p = a + start_position - 1;
q = p + num - 1;
for ( p; p != q ; p++, q-- )
{
temp = *p;
*p = *q;
*q = temp;
}
printf( "\n交换后:\n" );
for ( int i = 0; i < 10; i++ )
printf( "%d ", a[i] );
return 0;
}
我试了可以,你自己再试试。
温馨提示:答案为网友推荐,仅供参考