编的程序错在哪儿??!(很简单的C++)

来源:百度知道 编辑:UC知道 时间:2024/07/04 04:24:54
一个C++程序,要求输出长度为n的数组中绝对值最大与最小的数。为什么绝对值最大的数输出都对了最小的还是有问题啊!!。。一下是我编的程:
int a=0,k=0,l=0,max,min;
for(i=0;i<n;i++){
if(sz[i]<0){
if(-sz[i]>a){
a=-sz[i];
k++;}
}
else{
if(sz[i]>a){
a=sz[i];
k++;}
}
}
max=sz[k];
for(i=0;i<n;i++){
if(sz[i]<0){
if(-sz[i]<a){
a=-sz[i];
l++;}
}
else{
if(sz[i]<a){
a=sz[i];
l++;}
}
}
min=sz[l];
printf("%d\n%d\",max,min);
请问是为什么啊??!万分感谢!!
madouling,用你的方法确实得到正确结果啦,但是再多问一句,为什么k++这个不对我还是不很明白,如果不满足if里的条件那k就应该保持为原来的值啊。。最后输出的不应该是绝对值最大的数么。。

#include "stdio.h"
#include "conio.h"

main()
{ int i ,n=6;
int sz[6]={87,9,126,-778,-4,47};
int a=0,k=0,l=0,max,min;
for(i=0;i<n;i++)
{
if(sz[i]<0)
{
if(-sz[i]>a){
a=-sz[i];
k=i;}
}
else{
if(sz[i]>a) {a=sz[i];k=i;}
}
}
max=sz[k];
for(i=0;i<n;i++)
{
if(sz[i]<0)
{
if(-sz[i]<a){
a=-sz[i];
l=i;}
}
else
{
if(sz[i]<a){
a=sz[i];
l=i;}
}
}
min=sz[l];
printf("%d\n%d\n",max,min);
}这样就正确了,关键是你的k,l的作用是把最大、最小的数组元素的位置记录下来。

最大值最小值都不对。k++只有在当前值比目前找到的最大值大的时候才执行。所以max=sz[k