#include<iostream>
using namespace std;
void enter(int*m)
{
for(int i=0;i<10;i++)
cin>>m;
}
void key(int*m)
{
int max=m[0],min=m[0],n=0,k=0,z;
for(int i=1;i<10;i++)
{
if(max<m)
{
max=m;
n=i;
}
}
for(int i=1;i<10;i++)
{
if(min>m)
{
min=m;
k=i;
}
}
if(n==0&&k==9)
{
z=m[0];m[0]=m[9];m[9]=z;
}
else if(n==0&&k!=9)
{
z=m[9];m[9]=m[n];m[n]=z;
z=m[0];m[0]=m[k];m[k]=z;
}
else
{
z=m[0];m[0]=m[k];m[k]=z;
z=m[9];m[9]=m[n];m[n]=z;
}
}
void print(int*m)
{
for(int i=0;i<10;i++)
cout<<m<<'';
}
int main()
{
int ans[10];
enter(ans);
key(ans);
print(ans);
return 0;
}
include用法:
#include命令预处理命令的一种,预处理命令可以将别的源代码内容插入到所指定的位置;可以标识出只有在特定条件下才会被编译的某一段程序代码;可以定义类似标识符功能的宏,在编译时,预处理器会用别的文本取代该宏。
插入头文件的内容
#include命令告诉预处理器将指定头文件的内容插入到预处理器命令的相应位置。有两种方式可以指定插入头文件:
1、#include<文件名>
2、#include"文件名"
#include
//-------------------------------------
int * max_proc(int *p)
{
int i;
int *m;
m = p;
for (i = 1; i < 10; i++)
if (*m < *(p + i)) m = (p + i);
return m;
}
//-------------------------------------
int * min_proc(int *p)
{
int i;
int *m;
m = p;
for (i = 1; i < 10; i++)
if (*m > *(p + i)) m = (p + i);
return m;
}
//-------------------------------------
void change(int *p, int *q)
{
int temp;
temp = *p;
*p = *q;
*q = temp;
}
//-------------------------------------
int main()
{
int aa[10] = {0};
int i;
int *max, *min;
for (i = 0; i < 10; i++) scanf("%d", &aa[i]);
printf("\n");
printf("befor:\n");
for (i = 0; i < 10; i++) printf("%d ", aa[i]);
printf("\n");
max = max_proc(aa);
min = min_proc(aa);
change(max, min);
printf("after:\n");
for (i = 0; i < 10; i++) printf("%d ", aa[i]);
printf("\n");
// printf("max = %d, min = %d\n", *max, *min);
return 0;
}
//-------------------------------------
以上是把最大、最小,两个数,掉换位置。
----------------------
下面的,符合题目要求:
//输入10个整数,将其中最小的数与第一个数对换,
//把最大的数与最后一个对换,要求用三个函数来写
#include
//-------------------------------------
int max_proc(int *p)
{
int i;
int m, n;
m = *p;
n = 0;
for (i = 1; i < 10; i++)
if (m < *(p + i)) {m = *(p + i); n = i;}
return n;
}
//-------------------------------------
int min_proc(int *p)
{
int i;
int m, n;
m = *p;
n = 0;
for (i = 1; i < 10; i++)
if (m > *(p + i)) {m = *(p + i); n = i;}
return n;
}
//-------------------------------------
void change(int p, int q, int *x)
{
int temp;
temp = *(x + 0); *(x + 0) = *(x + q); *(x + q) = temp;
temp = *(x + 9); *(x + 9) = *(x + p); *(x + p) = temp;
}
//-------------------------------------
int main()
{
int aa[10] = {0};
int i;
int max, min;
for (i = 0; i < 10; i++) scanf("%d", &aa[i]);
printf("\n");
printf("befor:\n");
for (i = 0; i < 10; i++) printf("%d ", aa[i]);
printf("\n");
max = max_proc(aa);
min = min_proc(aa);
change(max, min, aa);
printf("after:\n");
for (i = 0; i < 10; i++) printf("%d ", aa[i]);
printf("\n");
// printf("max = %d, min = %d\n", *max, *min);
return 0;
}
//-------------------------------------
# include
void input (int * p);
void paixu (int * p);
void print (int * p);
int main ()
{
int a[10];
input (a);
paixu (a);
print (a);
return 0;
}
void input (int * p)
{
int *q = p;
while (p < q + 10)
{
scanf("%d",p++);
}
}
void paixu (int * p)
{
int *q = p;
int *max = p,*min = p,tmp;
for (;p < q + 10;p++)
{
if (*max < *p)
max = p;
if (*min > *p)
min = p;
}
tmp = *q;
*q = *min;
*min = tmp;
if(max == q)//如果max的位置正好是第一个元素的地址,这是已经被改变了,所以要改成新地址。
{
max = min;
}
q+=9;
tmp = *q;
*q = *max;
*max = tmp;
}
void print (int * p)
{
int *q = p;
while (p < q + 10)
{
printf("%d ",*p++);
}
}
关于你那死循环的问题,你可以这样理解,p
while (p < p + 10) 这里 这是一定会死循环的
p是首地址 p+10是首地址后的第10个整形位置 这个关系是永远不会变的所以循环不会结束
看了你全部的代码感觉你对指针的理解还很不够, 如果想完成功能建议你把参数换为数组
完成以后再慢慢研究指针。
还有我感觉,只是个人感觉你对题的理解有误。
题所说用三个函数应该是 让你编写 取最小值 ,最大值, 交换位置的三个函数 。(这里只是我个人的理解)
请输入十个元素:
5
4
3
2
1
0
9
8
7
6
0
4
3
2
1
5
6
8
7
9
press
any
key
to
continue
#include"stdio.h"
void
input(int
number[10]);
//此函数向首地址为number的数组输入10个元素
void
max_min_value(int
array[10]);
//此函数交换array数组的对应元素
void
output(int
array[10]);
//此函数输出array数组的10个元素
void
input(int
number[10])
{
int
i;
printf("请输入十个元素:\n");
for
(i=0;i<10;i++)
{
scanf("%d",&number[i]);
}
}
void
max_min_value(int
array[10])
{
int
i,imin,imax,tmp,bg,sm;
imin
=
imax
=
array[0];
for
(i=0;i<10;i++)
{
if
(imax
array[i])
{
imin
=
array[i];
sm
=
i;
}
}
//最小换第一个
tmp=array[0];
array[0]=array[sm];
array[sm]=tmp;
//最大换第十个
tmp=array[9];
array[9]=array[bg];
array[bg]=tmp;
}
void
output(int
array[10])
{
int
i;
for
(i=0;i<10;i++)
{
printf("%d
",array[i]);
}
printf("\n");
}
main()
{
int
number[10];
input(number);
max_min_value(number);
output(number);
return
0;
}