1比2.05是多大:c编程高手请进:看个极原始的程序。

来源:百度文库 编辑:高校问答 时间:2024/04/29 09:21:40
/*找最大值的子函数*/
max_of_num(int *p,int num)
{
int i,k=0;
int temp=*p;//p为一维int数组的一级指针
for(i=0;i<num;i++)
{
if(temp<*(p+i))
{temp=*(p+i);
k=i;//我的问题所在
}
}
return k;
}
问题是:如果把k换成i或者是(i-1),结果错误,把i换成i-num;结果有时正确,有时错误。为什么?
/*源程序如下,谢谢帮忙!!*/
#include"stdio.h"
void array_output(int(*p)[3],int index);
int *min_of_array(int *p,int num);
void same();
void main()
{
int b[2][3]={{1,2,3},{4,5,6}};
array_output(b,0);
array_output(b,1);
same();

}
void array_output(int(*p)[3],int index)
{
int i=0;
printf("数组b的第%d行的元素值为:",index+1);//初次编译有5个莫名错误,原因是",index+1的“,”为半角格式,错了!
for(i=0;i<3;i++)
printf("%d ",*(*(p+index)+i));
printf("\n");

}
void same()
{
int b[6]={12,41,23,65,85,32};
int *p=min_of_array(b,6);
printf("数组b中的元素最小值为:%d",*p);
}
int * min_of_array(int *p,int num)
{
int j,k=0;
int temp=*p;
for(j=0;j<num;j++)
if(temp>*(p+j))
{
temp=*(p+j);
k=j;
}
return p+k;//return p+k,返回的值为12,是对的。改为return p+j;则返回1245056,错了,但是改为return p+j-6;为什么?
}

你的程序没错
max_of_num(int *p,int num)
{
int i,k=0;
int temp=*p;
for(i=0;i<num;i++)
{
if(temp<*(p+i))
{
temp=*(p+i);
k=i;
}
}
return *(p+k);//你原先是返回下标
}

请记住, 你这个函数返回的结果是数组下标
所以,如果你把i变成i-1,结果肯定是不对的
本来最大值是数组的第i个,你偏要返回是第i-1个, 能对吗

至于i-num就更荒谬了,i-num应该是负值(i<=num)
不管结果正确还是错误,都是没有意义的