题目:输入10个数字,把最小数字和第一个交换,最大数字和最后一个交换,用动态分配内存实现!
动态分配内存我第一次用不会用,下面是我写的程序,编译有两个警告,没有错误,但是执行是有错(请大家指点谢谢啦)
上面说
“0×00401060″指令引用的”0xcccccccc“内存。该内存不能”writen“
# include <stdio.h>
# include <stdlib.h>
# define N 10
void fun(void)
{
int i;
int *p,*pmax,*pmin;
p=(int *)calloc(N,sizeof(int));
scanf(“%d”,p);
*pmin=*p;
*pmax=*p;
for (i=1;i<=N-1;i++)
{
scanf(“%d”,(p+i));
if (*(p+i)>*pmax) *pmax=*(p+i);
if (*(p+i)<*pmin) *pmin=*(p+i);
}
*p=*pmin;
*(p+N-1)=*pmax;
for(i=1;i<=N-1;i++)
{
printf(“%d”,*(p+i));
}
printf(“\n”);
free(p);
}
int main ()
{
fun();
return 0;
}
>> 本文固定链接: http://www.vcgood.com/archives/2548
# include <stdio.h>
# include <stdlib.h>
# define N 10
void fun(void)
{
int i;
int *p,*pmax,*pmin,*head,t;
clrscr();
p=(int *)calloc(N,sizeof(int));
head=p;
scanf(“%d”,p);
pmin=p;
pmax=p;
for (i=1;i<=N-1;i++)
{
scanf(“%d”,++p);
if (*p>*pmax) pmax=p;
if (*p<*pmin) pmin=p;
}
printf(“\n”);
if(*head==*pmax&&*p==*pmin)
{
t=*p;*p=*pmax;*head=t;
for(i=1;i<=N-1;i++,p–);
}
else
{
t=*p;*p=*pmax;*pmax=t;
for(i=1;i<=N-1;i++,p–);
t=*p;*p=*pmin;*pmin=t;
}
for(i=0;i<=N-1;i++)
{
printf(“%d\n”,*p++);
}
free(p);
}
int main ()
{
fun();
return 0;
}
有时测试数据会出现一点小错误
不过不影响结果
收益,谢谢了
我的程序大概就是这里错了
*pmin=*p;
*pmax=*p;
pmax只是指针,没有开辟存储空间,不可以*pmax=*p;
如果第一个数是最大数,最后一个数是最小数的话就要用到程序里加的那个判断条件。
还有题目要求是交换,如果按照你的程序就是覆盖而不是交换了。
呵呵……