C++题目,为什么输出的总是最后一个数呢?

#include<iostream.h>
const int n=5;
void main()
{
int a[n],*p,*t,i;
p=a;t=a;
for(i=0;i<n;i++)
cin>>a[i];
for(i=0;i<n;i++)
{
if(*p<*(a+i)) *p=*(a+i);
if(*t>*(a+i)) *t=*(a+i);
}
cout<<"max="<<*p<<endl;
cout<<"min="<<*t<<endl;
}

你的数组在执行for(i=0;i<n;i++)
{
if(*p<*(a+i)) *p=*(a+i);
if(*t>*(a+i)) *t=*(a+i);
}
之后数组已经被改变了,会缺少很多值。,你可以在cout<<nax=之前 对数组输出试试, 就是加一个for循环,输出整个数组。你就知道为什么结果不对了。
你看看这个代码参考一下
#include<iostream.h>
const int n=5;
void main()
{
int a[n],*p,*t,i;
p=a;t=a;
for(i=0;i<n;i++)
cin>>a[i];
for(int j=0;j<n;j++)
{
for(int k=j+1;k<n;k++)
{
if(*(a+j)>*(a+k))
{
int temp;
temp=*(a+j);
*(a+j)=*(a+k);
*(a+k)=temp;
}
}
}

cout<<"Max="<<a[n-1]<<endl;
cout<<"Min="<<a[0]<<endl;

}
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-12-08
在循环中:
for(i=0;i<n;i++)
{
if(*p<*(a+i)) *p=*(a+i);
if(*t>*(a+i)) *t=*(a+i);
}
每次循环都只会走一个同一个if语句!
你可以假设数组a[n]的数据为:1 2 3 4 5或5 4 3 2 1
前者只会用到第一个if语句,后者只会用到第二个if语句!
第2个回答  2011-12-08
改成
if(*p<*(a+i)) p=a+i;
if(*t>*(a+i)) t=a+i;
就行了
*p=*(a+i);*t=*(a+i);会把数组元素的值给修改了,当然不对。
第3个回答  2011-12-08
#include<iostream.h>
const int n=5;
void main()
{
int a[n],*p,i,max,min
max=a[0];
min=a[0];
p=a;
for(i=0;i<n;i++)
cin>>a[i];
for(i=0;i<n;i++)
{
if(max<*p) max=*p;
if(min>*p) min=*p;
}
cout<<"max="<<*p<<endl;
cout<<"min="<<*t<<endl;
}
第4个回答  2011-12-08
p=a;t=a;//有误
相似回答