当前位置: 代码迷 >> C语言 >> 错在那里///??
  详细解决方案

错在那里///??

热度:141   发布时间:2006-03-07 15:10:00.0
以下是引用zhangjuan在2006-3-7 13:29:00的发言:

我也编了一个,不知道怎么回事运行不对,我自己都有点晕了,还是楼主的算法好一点,我对指针还不怎么熟,望大家给我指点指点
int input(int *p,int n)
{int i;
for(i=0;i<n;i++,p++)
scanf("%d",p);//要去掉*
}
int sort(int *p,int n)
{int temp,t,i;
temp=*p;
for(i=1;i<n;i++,p++) /*求最小*/
if(temp>*p)t=i;
else t=0;
p=p-n-1;//你这是想干什么呢,如果想指到最后一个数字的话,你用错了
*p=*(p+t);*(p+t)=temp;//这里如果是想替换,也不对

p=p-t;//变量利用严重了点,没看懂你这里的想法
i=n-1;//这里你的i已经赋值了,后面再用,有问题
temp=*(p+i);
p=p-i;
for(i=0;i<n-1;i++,p++) /*求最大*/
if(*p<temp)t=i;
*p=*(p-n+t);*(p-n+t)=temp;//没实现调换的目的
}
int print1(int *p,int n)
{int i;
for(i=0;i<n;i++,p++)
printf("%2d",*p);
}
main()
{int a[10];
int *q;
q=a;
input(q,10);
q=a;
sort(q,10);
q=a;
print1(q,10);
getch();//要调用getch库函数,需要添加#include<conio.h>头文件
}







基本上你的程序很混乱,指针调用有问题,但是要改的话,还不好改
看来俺功力也有限


----------------解决方案--------------------------------------------------------

谢谢楼上的了,我再好好看看吧


----------------解决方案--------------------------------------------------------
不知道zhangjuan是不是想比较后记录最大最小数的下标?
注意看下temp在for中是不会变的
----------------解决方案--------------------------------------------------------
我知道temp不会变,我只是想通过选择排序的方法来求出最大值呢
----------------解决方案--------------------------------------------------------
不知道zhangjuan是不是想比较后记录最大最小数的下标?
注意看下temp在for中是不会变的


选择排序不是不变的啊,定向是随时指向最小数,只是先假设第一个最小

我就前进后退再前进再后退就出来俩相同回复,感叹!

[此贴子已经被作者于2006-3-7 21:37:33编辑过]


----------------解决方案--------------------------------------------------------
以下是引用yeti3在2006-3-7 7:03:00的发言:

输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数:1) 输入10个数
2)进行处理 3)输出10个数

#include<stdio.h>
void shuru(int *p,int n) /*输入n个数字*/
{ int i;
printf("please input ten numbers");
for(i=0;i<n;i++,p++)
scanf("%d",*p);
}

void sort(int *p,int n) /*将其中最小的数与第一个数交换,把最大的数与最后一个交换*/
{int max,t1,t2,t,u,min,i;
t1=max=min=*p;
t2=*(p+n-1);p++;
for(i=1;i<n;i++,p++) /*找出最大值与最小值*/
if(*p>max) max=*p;
else if(*p<min) min=*p;

p=p-n;

for(i=0;i<n;i++,p++) /*最小的数与第一个数交换,把最大的数与最后一个交换*/
if(*p==max)
{t=t2;
t2=*p;
*p=t;
}
else if(*p==min)
{t=t1;
t1=*p;
*p=t;
}
}

void shuchu(int *p,int n) /*输出n个数*/
{int i;
for(i=0;i<n;i++,p++)
printf("%d\n",*p);
getch(); /*这个我不明白,乱加的,请求帮助*/
}

main()
{ int a[10]; int *q;
q=a;
shuru(q,10);
q=a;
sort(q,10);
q=a;
shuchu(q,10);
}

我现在重新审查了边
#include<stdio.h>
void shuru(int *p,int n) /*输入n个数字*/
{ int i;
printf("please input ten numbers");
for(i=0;i<n;i++,p++)
scanf("%d",p); /*太粗心*/
}

void sort(int *p,int n) /*将其中最小的数与第一个数交换,把最大的数与最后一个交换*/
{int max,t,u,min,i;
max=min=*p;
p++;
for(i=1;i<n;i++,p++) /*找出最大值与最小值*/
if(*p>max) max=*p;
else if(*p<min) min=*p;

p=p-n;

for(i=0;i<n;i++,p++) /*最小的数与第一个数交换,把最大的数与最后一个交换*/
if(*p==max)
{t=*(p+n-1-i); /*原来我这里有错,没看出来,用指针应该小心滴~~~*/
*(p+n-1-i)=*p;
*p=t;
}
else if(*p==min) /*原来我这里有错,没看出来,用指针应该小心滴~~~*/
{t=*(p-i);
*(p-i)=*p;
*p=t;
}
}

void shuchu(int *p,int n) /*输出n个数*/
{int i;
for(i=0;i<n;i++,p++)
printf("%5d",*p);
printf("\n");
getch(); /*谢谢帮助*/
}

main()
{ int a[10]; int *q;
q=a;
shuru(q,10);
q=a;
sort(q,10);
q=a;
shuchu(q,10);
}


----------------解决方案--------------------------------------------------------
我重新弄了一下,还有一点小问题,大家能不能帮我看看,不知道为什么这个程序如果顺序输入是正确的,不按一定秩序输入就有错误,我不太明白
int input(int *p,int n)
{int i;
printf("请输入数组元素:\n");
for(i=0;i<n;i++,p++)
scanf("%d",p);
}
int sort(int *p,int n)
{int max,min,i,*t,*t1,*t2;
max=min=*p;
t=p+n-1;
for(i=1;i<n;i++)
{if(min>*(p+i)){min=*(p+i);t1=p+i;}
if(max<*(p+i)){max=*(p+i);t2=p+i;}
}
p=p-n;
printf("\n%d,%d,%d,%d\n",min,max,t1,t2);
*t1=*p;*p=min;printf("\n%d,%d\n",*t1,*p);
*t2=*t;*t=max; printf("\n%d,%d\n",*t2,*t);
}
int print1(int *p,int n)
{int i;
for(i=0;i<n;i++)
printf("%2d",*(p+i));
}
main()
{int *q,a[10];
q=a;
input(q,10);
q=a;
sort(q,10);
q=a;
print1(q,10);
getch();
}
----------------解决方案--------------------------------------------------------

int input(int *p,int n)
{
int i;
printf("please input the array:\n");
for(i=0;i<n;i++,p++)
scanf("%d",p);

}

int sort(int *p,int n)
{
int max,min,i,m,*t,*t1,*t2;

max=min=*p;
t=p+n-1;
m=*t;

for(i=1;i<n;i++)
{
if(min>*(p+i))
{
min=*(p+i);
t1=p+i;
}
if(max<*(p+i))
{
max=*(p+i);
t2=p+i;
}
}
*t1=*p;
*p=min;

*t2=m;
*t=max;

}

int print1(int *p,int n)
{
int i;

for(i=0;i<n;i++)
printf("%2d",*(p+i));
printf("\n");
}

void main()
{
int *q,a[10];

q=a;
input(q,10);
sort(q,10);
print1(q,10);

getch();
}

zhangjuan 注意看


----------------解决方案--------------------------------------------------------

谢谢,我应该细心一点


----------------解决方案--------------------------------------------------------
  相关解决方案