输入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>
#include<conio.h>//这个是函数getch()库
void shuru(int *p,int n) /*输入n个数字*/
{ int i;
printf("please input ten numbers\n");
for(i=0;i<n;i++,p++)
scanf("%d",p); //p是指针地址,在scanf函数里不要带*
}
void sort(int *p,int n) /*将其中最小的数与第一个数交换,把最大的数与最后一个交换*/
{int max,t1,t2,t,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("%2d",*p);//让输出的数列不会挨在一起
printf("\n");
getch(); //getch()是一个函数,这个函数的作用是读取按键的值。一般放在程序末尾是为了起到暂停的作用。
}
void main()
{ int a[10]; int *q;
q=a;
shuru(q,10);
q=a;
sort(q,10);
q=a;
shuchu(q,10);
}
[此贴子已经被作者于2006-3-7 12:53:52编辑过]
----------------解决方案--------------------------------------------------------
getch()是一个函数,这个函数的作用是读取按键的值。一般放在程序末尾是为了起到暂停的作用。
----------------解决方案--------------------------------------------------------
还是重新确定算法吧
[此贴子已经被作者于2006-3-8 21:54:50编辑过]
----------------解决方案--------------------------------------------------------
我也编了一个,不知道怎么回事运行不对,我自己都有点晕了,还是楼主的算法好一点,我对指针还不怎么熟,望大家给我指点指点
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;
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();
}
你怎么还是犯了楼主的错误?
scanf函数里不能出现*p这种格式啊,要不就改成&*p
----------------解决方案--------------------------------------------------------
还是不对啊,我知道这种算法太复杂了,但是还是请你仔细看看有什么错误
----------------解决方案--------------------------------------------------------
这好象是潭浩强那本C语言教材上的一道作业题是吧?
----------------解决方案--------------------------------------------------------
是的,我和楼主同时做到了那道题,但是我们的思路不一样
----------------解决方案--------------------------------------------------------
可以在定义一个变量,用新定义的去读入,然后在付过去嘛!问题不就解决了
----------------解决方案--------------------------------------------------------
在2000以上的系统中编译才要加getch(),2000以下的可以不加
----------------解决方案--------------------------------------------------------