输入一个数组,找出其中最大最小元素,错误在哪?

来源:百度知道 编辑:UC知道 时间:2024/08/22 02:17:42
#include<stdio.h>
void max_min(int a[],int n,int *max,int *min){
int *p;
max=min=a;
for(p=a+1;p<=a+n;p++){
if(*max<*p)
*max=*p;
if(*min>*p)
*min=*p;
}
}
void main(){
int a[100];
int n;
int *max=NULL;
int *min=NULL;
printf("please input the scale of the array:\n");
scanf("%d",&n);
printf("please input each value:\n");
for(int i=0;i<n;i++)
scanf("%d",&(a[i]));
max_min(a,n,max,min);
printf("max=%d", * max);
printf("min=%d", * min);
}
编译没有问题,只是运行时出现错误,请指出错误在哪。急等。。。

主函数中调用
max_min(a,n,max,min)的时候max,min都是NULL,你要知道函数是不能改变实际参数的值的,所以运行完了,max和min还是NULL。

解决方法
把max和min改成int型,去掉*
调用函数时,用max_min(a,n,&max,&min)
输出时也去掉*

另外,函数里把max=min=a; 去掉,这样做除了会修改原始数据,还会使存储数据的位置发生变化,并不是主函数里的max和min的存储空间。改成*max = *min = a[0];

最后再加上楼上说的,越界问题。

for(p=a+1;p<=a+n;p++){
把<=改成<就对了,仔细想想,取a+n数组就越界了

随机生成n个两位正整数构成的一位数组 a(n) 找出其中的最大和最小数组 pascal问题:输入一个二维数组,找出其中最小的数,输出它的值以及所在行号和列号 PASCAL题目:输入一个二维数组,找出其中最小的数,输出它的值以及所在的行号和列号? 输入N个数(N不能事先确定),找出其中最大和最小的数输出。 用C语言定义一个数组,其长度为5行5列,实现从其行中找出最大的数,然后在其中找出最小的数 有一个4*4矩阵 找出其中的最大元素和最小元素 输入N个数(N不能事先确定),找出其中最大和最小的数输出。这个题怎么写程序? c++编程 输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。 设计一个程序,输入4个数,找出其中最大的一个,并显示出来 C#编写一个程序,对输入的四个正数,求出其中最大和最小的