#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];
}
这里把*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;
}
}
}
}本回答被网友采纳
#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根本没有执行.
本回答被提问者采纳按说不应该加,但是你之前的max和min都没赋值,里面不知道存了什么数字,可能是非法地址,运行当然出错追问
那个if语句判断最大值 最小值 为什么不好使呢?