c语言,输入5个数,用指针比较,输出最大值,不知道哪里错了

#include <stdio.h>
void main()
{
void sort(int x[],int n);
printf("input 5 numbers:\n");
int *p,i,a[5],max;
p=a;
for (i=0;i<5;i++)
scanf("%d",p++);
p=a;
sort(p,5);
printf("the max is :%d",max);
}

void sort(int x[],int n)
{
int i,j,k,t,max;
for (i=0;i<n-1;i++)
{k=i;
for (j=i+1;j<n;j++)
if(*(x+j)<*(x+k)) k=j;
if(k!=1)
{t=*(x+k);*(x+k)=*(x+i);*(x+i)=t;}
max=x[i];
}
}

不知道错在哪里~请各位帮忙看下~

#include <stdio.h>
int main()
{
void sort(int x[],int n,int *);
printf("input 5 numbers:\n");
int *p,i,a[5],max;
p=a;
for(i=0;i<5;i++)
scanf("%d",p++);
p=a;
sort(p,5,&max); //这里将max的地址传进去,子函数才能返回其值。
printf("the max is :%d",max);
getchar();
getchar();
return 0;
}

void sort(int x[],int n,int *max)
{
int i,j,k,t;
*max = x[0];
for (i=0;i<n;i++) //这里如果只求最大值,没有那么繁琐。
{
if(x[i]>*max)
{
*max = x[i];
}
}
}追问

这个不行啊,输出的是a[0]

追答

我已经测试过了。
你输入的是什么?
输出的是什么?

追问

我知道了,要有空格的,我输入的时候用的是逗号

这两个有什么区别呢,起初没有定义怎么输入的
这两天头都大了,啥都不知道了

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-06-25
#include <stdio.h>
void main()
{
int sort(int x[],int n);
printf("input 5 numbers:\n");
int *p,i,a[5],max;
p=a;
for (i=0;i<5;i++)
scanf("%d",p++);
p=a;
max=sort(p,5);
printf("the max is :%d",max);
}

int sort(int x[],int n)
{
int i,j,k,t,max;
for (i=0;i<n;i++)
{
k=i;
for (j=i+1;j<n;j++)
if(*(x+j)<*(x+k)) k=j;
if(k!=1)
{t=*(x+k);*(x+k)=*(x+i);*(x+i)=t;}
max=x[i];
}
return max;
}
帮你改好了追问

max=sort(p,5);
这一行不行,每次都是这种错误cannot convert from 'void' to 'int'

不解

第2个回答  2011-06-25
首先max分别在主函数和sort函数中都声明了
你用的主函数的max输出,用sort的max保存值,肯定不能对啊
sort函数的排序算法也有问题
第3个回答  2011-06-25
#include <stdio.h>

void sort(int *p,int *n);

void main()
{
int *p,i,a[5],max;
printf("input 5 numbers:\n");
p=a;
for (i=0;i<5;i++)
scanf("%d",p++);
sort(&a[0],&max);
printf("the max is :%d\n", max);
}

void sort(int *p,int *n)
{
int i;

*n = *p;
for (i = 0;i < 5; i++)
{
if (*n < *p)
{
*n = *p;
}
p++;
}
}

——————————————————————————————————

这是你说的,全部用的是指针。

——————————————————————————————————————————
第4个回答  2011-06-25
main里的max哪里取到值了呢?main里的max范围可不在sort函数内哦~
再有,scanf("%d",p++); 这句,%d的数是送到*p里了,不是p里哦~

c语言,输入5个数,用指针比较,输出最大值,不知道哪里错了
int main(){ void sort(int x[],int n,int *);printf("input 5 numbers:\\n");int *p,i,a[5],max;p=a;for(i=0;i<5;i++)scanf("%d",p++);p=a;sort(p,5,&max); \/\/这里将max的地址传进去,子函数才能返回其值。printf("the max is :%d",max);getchar();getchar()...

c语言 输入五行六列的数组,求最大值
include <stdio.h>int main(){ int a[5][6], i, j, maxv; for (int i = 0; i < 5; ++i){ for (int j = 0; j < 6; ++j){ scanf ("%d", &a[i][j]); } } maxv = a[0][0]; for (int i = 0; i < 5; ++i){ for (int j...

C语言程序求问哪里错了,目的是求出最大值
va_start(quantity, number1); \/\/开始移动指针,偏移量是number1的大小,即int型大小 while(iTmp >= 0) \/\/遇到小于0的数就结束 { printf("%d ", iTmp);\/\/输出每个数 iTmp = *((int *)(quantity));\/\/quantity其实是char *类型的,所以要转换成int \/\/计算最大值 if(answer < iTmp...

输入5个字符串,按由小到大的顺序输出(用指针做)
include<string.h> main(){ int i,j;char t[5];char a[5][5]={'\\0'};printf("输入5个字符串");for(i=0;i<5;i++)scanf("%s",&a);for(i=0;i<5;i++)for(j=0;j<5-i;j++){ if(strcmp(a[j],a[j+1])>0){ strcpy(t,a[j]);strcpy(a[j],a[j+1]);strcpy(...

一道c语言程序题: 输入5个字符串,按字典顺序将其重新排列输出。用字符串...
include<stdio.h> include<string.h> void main(){ void sort(char (*p)[20]);char a[5][20];\/\/五行20列 int i;printf("请输入5个字符串:\\n");for(i=0;i<5;i++)\/\/这里输入五个字符串 gets(a[i]);sort(a);\/\/调用函数进行排列 } void sort(char (*p)[20]){ char a[20...

c语言利用数组指针方法 输入五个数字求出最小值 将最小值和数组第一个...
main(){int arr[N];int i,min,j,tmp;printf("输入5个数字: ");for(i=0;i<N;i++)scanf("%d",&arr[i]);for(i=0,min=arr[0];i<N;i++){if(min>arr[i]){min=arr[i];j=i;}}arr[j]=arr[0];arr[0]=min;printf("输出结果为: ");for(i=0;i<N;i++)printf("...

C语言,用指针指向一个地址,从这个地址开始输入数据,超过五个出错_百度...
char *p=&a;\/\/p指向的是a的首地址。当你++后,便指向它的下个地址,这样是不安全的,也就是说非法的指向了不属于你的内存(因为你p只拥有a这个内存)。前面5个数对,只是意外。你要输入多个字符都是正常的,那必须给p分配足够的内存空间。比如讲a定义成数组,或者malloc内存。

c语言用指针找出最大值
"%d",*p);p=str;\/\/缺少指针重置 max=*p;for(i=1;i<N;i++){if(max<*(p+i))max=*(p+i);}printf("\\n%d\\n",max);}您好,很高兴为您解答,流星不死为您答疑解惑 如果本题还有不懂的地方请追问,望采纳我的回答。祝楼主学习进步。上面的代码可以直接复制到编译器里,带换行。

输入5个字符串,将它们储存在一个字符指针数组中,按从小到大得顺序排序...
include<stdio.h> include<string.h> void main(){ char a[5][20];char *p[5];int i,j;char *t;for(i=0;i<5;i++){ p[i]=a[i];gets(p[i]);} for(i=0;i<5;i++){ for(j=i+1;j<5;j++){ if(strcmp(p[i],p[j])>0){ t=p[i];p[i]=p[j];p[j]=t;}...

c语言任意输入5个数,并按从大到小顺序输出
可以采用以下的代码进行计算:include <stdio.h> include <stdlib.h> int main(){ int a[5];int i,j,k;for(i=0;i<=4;i++){ scanf("%d",&a[i]);} for(i=0;i<=4;i++){ for(j=0;j<=4;j++){ if(a[i]>a[j]){ k=a[i]; a[i]=a[j]; a[j]=k;} } } pri...

相似回答
大家正在搜