首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一路老谭的题,遇到了特殊情况

2012-07-28 
一道老谭的题,遇到了特殊情况#include stdio.hint exchange(int a[],int n){int *p0,*p1,max,minint te

一道老谭的题,遇到了特殊情况
#include <stdio.h>

int exchange(int a[],int n)
{
int *p0,*p1,max,min;
int temp1,j,temp2;
p0=p1=a;
max=min=a[0];
for(j=1;j<n;j++)
{
if(min>a[j])
{
min=a[j];
p0=&a[j];
}
else if(max<a[j])
{
max=a[j];
p1=&a[j];
}
}
temp1=*p0;
*p0=*(a+0);
*(a+0)=temp1;

temp2=*p1;
*p1=a[4];
a[4]=temp2;
return 0;
}
int main(int argc, char *argv[])
{
int a[5]={98,5,77,65,1},i,*r;
/*
for(i=0;i<5;i++)
{
scanf("%d,",&a[i]);
}
*/ 
exchange(a,5);
for(i=0,r=a;i<5;i++,r++)
printf("%d\n",a[i]);
return 0;
}输出原数组还是没有变化,是最大的数和最后的数交换,最小的数和第一个数交换,其他不动!

[解决办法]

C/C++ code
#include <stdio.h>#define N 5void print_ia(const char *msg, int *ia, int len){    printf("%s\n", msg);    for (int i = 0; i < len; i++)    {        printf("%d\t", *(ia+i));        }    putchar('\n');}void spc_swap(int *ia, int len){    int max, min;    max = min = *ia;    for (int i = 0; i < len; i++)    {        if (ia[i] > max)            max = ia[i];        if (ia[i] < min)            min = ia[i];    }    ia[0] = min;    ia[len-1] = max;}int main(){    int ia[N] = {5,2,3,4,1};    print_ia("origin:", ia, N);    spc_swap(ia, N);    print_ia("changed:", ia, N);    return 0;} 

热点排行