C语言用动态数组解决输入几个数并输出其中最小值的问题结果总是输出-33686019

#include <stdio.h>
#include <malloc.h>

void main()
{
int l, i, t;
int * p;

printf("您想比较几个数的大小 :");
scanf("%d", &l);

p = (int *)malloc(4 * l);

for(i = 0; i < l; ++i)
{
printf("请输入第 %d 个数字 :", i+1);
scanf("%d", &p[i]);
}

for(i = 0; i < l; ++i)
{
if(p[0] > p[i+1])
{
t = p[0];
p[0] = p[i+1];
p[i+1] = t;
}
}

printf("最小值为 %d\n", p[0]);

return;
}

#include <stdio.h>
#include <malloc.h>

void main()
{
int l, i, t;
int * p;

printf("您想比较几个数的大小 :");
scanf("%d", &l);

p = (int *)malloc(4 * l);

for(i = 0; i < l; ++i)
{
printf("请输入第 %d 个数字 :", i+1);
scanf("%d", &p[i]);
}

for(i = 1; i < l; ++i)    /*因为判断条件是i<l,所以i应该从第二个元素(也就是下标为1)开始,到l-1结束*/
{
if(p[0] > p[i])    /*i下标不需要加1,否则当i达到l-1时,下标l就越界了*/
{
t = p[0];
p[0] = p[i];
p[i] = t;
}
}

printf("最小值为 %d\n", p[0]);

return;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-02-09
#include <stdio.h>
#include <malloc.h>

void main()
{
int l, i, t;
int * p;

printf("您想比较几数 :");
scanf("%d", &l);

p = (int *)malloc(4 * l);

for(i = 0; i < l; ++i)
{
printf("请输入第 %d 数字 :", i+1);
scanf("%d", &p[i]);
}

for(i = 0; i < l; ++i)
{
if(p[0] > p[i]) //这地方不要+1
{
t = p[0];
p[0] = p[i]; //这地方不要+1
p[i] = t; //这地方不要+1
}
}

printf("值 %d\n", p[0]);

return;
}本回答被提问者采纳
第2个回答  2015-06-27
if(p[0] > p[i+1])
改为
if(p[0] > p[i])
相似回答