C语言。定义20元素的一维数组 ,从键盘输入20个元素,找出20个元素中的最大值,最小值

哪里错了呢... 哪里错了呢 展开
 我来答
云淡风轻in苏州
推荐于2016-03-08 · TA获得超过599个赞
知道小有建树答主
回答量:418
采纳率:0%
帮助的人:573万
展开全部
#include <stdio.h>
int main()
{   
 int min = 0;
 int max = 0;
 int arr[20];
 int i = 0;
 scanf("%d", &arr[i]);
 min = max = arr[0];
 do 
 {
  if(arr[i] > max)
   max = arr[i];
  if(arr[i] < min)
   min = arr[i];
  scanf("%d", &arr[++i]);
 } while (i < 19);
 if(arr[i] > max)
  max = arr[i];
 if(arr[i] < min)
  min = arr[i];
 printf("max is %d, min is %d", max, min);
 return 0;
}

1、数组越界

2、找最大最小应该是每个都与最终的最大最小值比较的

 

如果不考虑特殊的输入值,可以给min和max初始值,代码会简单很多:

#include <stdio.h>
int main()
{   
 int min = 100000000;
 int max = 0;
 int arr[20];
 int i;
 for(i = 0; i < 20; ++i)
 {
  scanf("%d", &arr[i]);
  if(arr[i] > max)
   max = arr[i];
  if(arr[i] < min)
   min = arr[i];
 }
 printf("max is %d, min is %d\n", max, min);
 return 0;
}
追问

看不怎么懂,根据你得我给你看看我做得  但是 就是 要错。。

追答
20个数,所以x[5]改成x[20]
z=w=x[m];
这里你的x[0]是未定的数据,不能直接给z,w赋值,因为如果编译器给w的是个很小的负数,那你最后的最小值肯定不对。建议你的z和w都分别初始化为一个极小值和极大值!

m<5改成m<20

其他没有问题!
帐号已注销
2014-11-25 · TA获得超过1134个赞
知道小有建树答主
回答量:742
采纳率:73%
帮助的人:445万
展开全部
好好想想你的for循环是怎么进行的。
第一次,m=0,执行输出“qingshuru:”,然后执行一次输入,将输入结果保存在x[0]中,这时x[1]中还没有数字,你就开始拿x[1]来作比较了,怎么能实现。。。
追问
我 不 知道怎么改。第一次 只有x[0]   +1  -1 都不行,,
追答
首先你是比较20个数,所以数组长度改成20;然后:
#include
int main()
{
int x[20];
int max,min;
printf("请输入:");
scanf("%d",&x[0]); //先输入一个数
max=x[0];
min=x[0]; //此时最大值最小值都是它
for(int i=1;imax)
max=x[i]; //如果新输入的数比之前的最大值还大,那么最大值等于新输入的数
if(x[i]<min)
min=x[i]; //如果新输入的数比之前的最小值还小,那么最小值等于新输入的数
}
printf("max=%d,min=%d\n",max,min);
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
孤0鸿
2014-11-25 · TA获得超过186个赞
知道小有建树答主
回答量:92
采纳率:0%
帮助的人:57.9万
展开全部
数组越界了啊,,,,你定义的数组是5个元素,最大到x[4],你仔细看看你的循环,当m=4时,你里边有x[m+1],没有这个元素啊...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wm45904978
2014-11-25 · TA获得超过132个赞
知道答主
回答量:52
采纳率:0%
帮助的人:64万
展开全部
错误原因不说了,给一份我刚写的吧:

#include<stdio.h>

#define N 20

void main()
{
int data[N];
int num_min;
int num_max;
//循环输入N个整数
for (int i = 0; i < N; ++i)
{
scanf_s("%d", data+i);
}
num_min = data[0];
num_max = data[0];
//遍历一遍
for (int i = 0; i < N; ++i)
{
if (num_min > data[i])
{
num_min = data[i];
}
if (num_max < data[i])
{
num_max = data[i];
}
}
//输出最大与最小
printf("the max is:%d\nthe min is:%d", num_max, num_min);
}

PS:scanf_s是scanf的安全版本(VS2013版本)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式