C语言 为什么数值交换不了?

#include<stdio.h>
#include<string.h>
void order(int a[10],int*max,int*min);
void main()
{
int a[10],i,c,d,e,*max,*min;
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
order(a,&max,&min);//这里为什么要加&,如果不加程序会崩溃,可是书上许多例子没有&//

for(i=0;i<10;i++)
{if(a[i]=*max) /*这里为什么运行到这一步直接跳过,数值交换不了呢?*/
a[i]=*min;
if(a[i]=*min)
a[i]=*max;
printf("%d ",a[i]);
}

system("pause");

}
void order( int a[10],int*max,int*min)
{ int b[10];
memcpy(b,a,10*sizeof(int));
int i,j,k,t;
for(i=0;i<9;i++)
{

k=i;
for(j=i+1;j<10;j++)
{if(b[k]>b[j])
{k=j;}
if(k!=i)
{
t=b[i];
b[i]=b[k];
b[k]=t;

}k=i;
}
}
printf("the max is %d\the min is %d ",b[9],b[0]);//降序排列,求最大值最小值//

*max=&b[9];
*min=&b[0];

}

第1个回答  2014-12-04
int a[10],i,c,d,e,*max,*min;

这里把*max *min改成 max min ,不然就是个野指针 或者*max 和*min 需要malloc一段空间

order(a,&max,&min);//这里为什么要加&,如果不加程序会崩溃,可是书上许多例子没有&//
因为需要改变max和min的值 所以要传max和min的地址进去,不然无法改变max和min的值。
加不加需要看具体的需求

{if(a[i]=*max) /*这里为什么运行到这一步直接跳过,数值交换不了呢?*/

是if(a[i]==max) C语言=是赋值用的 ==才是判断是否相等用的追问

改成判等后,为什么还交换不了?

追答#include <stdio.h>

void order(int *num,int *max,int *min);

int main(void)
{
    int max=-1,min=1000,i,num[10];

    for(i=0;i<10;i++)
     {
          scanf("%d",&num[i]);
     }
    order(num,&max,&min);

    printf("最大值:%d 最小值:%d\n",max,min);
    for(i=0;i<10;i++)
    {
        printf("%d ",num[i]);
    }
    putchar('\n');

    return 0;
}

void order(int *num,int *n_max,int *n_min)
{
    int i,j,tmp=0;
    //获得最大值最小值 
    for(i=0;i<10;i++)
    {
        if(num[i]>*n_max)
            *n_max=num[i];
        else if(num[i]<*n_min)
            *n_min=num[i];
    }

    //冒泡排序
    for(i=0;i<9;i++)
    {
        for(j=i;j<10;j++)
        {
            if(num[i]<num[j])
            {
                tmp=num[i];
                num[i]=num[j];
                num[j]=tmp;
            }
        }
    }
}

本回答被网友采纳
第2个回答  2014-12-04
#include<stdio.h>
#include<string.h>
#include <stdlib.h>

void order(int a[10],int*max,int*min);

void main()
{
int a[10],i;
int* max = new int();
int* min = new int();
for(i=0;i<10;i++)
{
scanf_s("%d",&a[i]);
}

//不用加&
order(a,max,min);//这里为什么要加&,如果不加程序会崩溃,可是书上许多例子没有&

for(i=0;i<10;i++)
{
if(a[i]==*max)       /*这里为什么运行到这一步直接跳过,数值交换不了呢?*/
a[i]=*min;   

if(a[i]==*min)       //没看懂这两个if在干嘛???
a[i]=*max;

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

system("pause");

}
void order( int a[10],int*max,int*min)
{   
int b[10];
memcpy(b,a,10*sizeof(int));
int i,j,k,t;
for(i=0;i<9;i++)
{
k=i;
for(j=i+1;j<10;j++)
{
if(b[k]>b[j])
{
k=j;
}
if(k!=i)
{
t=b[i];
b[i]=b[k];
b[k]=t;
}
k=i;
}
}
printf("the max is %d \t the min is %d \n",b[9],b[0]);//降序排列,求最大值最小值//

*max= b[9];
*min= b[0];

}

if(a[i]==*max)       
a[i]=*min;  
if(a[i]==*min) 
a[i]=*max;

不知道你这两句的目的是什么? 修改如上!

追问

就是把数组中的最大值和最小值位置交换一下

追答

if(a[i]==*max) /*这里为什么运行到这一步直接跳过,数值交换不了呢?*/
a[i]=*min;
else if(a[i]==*min) //没看懂这两个if在干嘛???
a[i]=*max;

添个else,改成这样就行了!

追问

还是不好使 ,if根本没有执行.

本回答被提问者采纳
第3个回答  2014-12-04
order(a,&max,&min);//这里为什么要加&,如果不加程序会崩溃,可是书上许多例子没有&//
按说不应该加,但是你之前的max和min都没赋值,里面不知道存了什么数字,可能是非法地址,运行当然出错追问

那个if语句判断最大值 最小值 为什么不好使呢?

相关了解……

你可能感兴趣的内容

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