|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
int main()
{
int fac1(int *p1);
int fac2(int *p2);
int fac3(int *p3);
int fac4(int *p4,int x,int y);
int str[10];
int t,m;
fac1(str);
t=fac2(str);
m=fac3(str);
fac4(str,t,m);
}
int fac1(int *p) //函数1输入十个数
{
scanf("%d",*p);
}
int fac2(int *p) //函数二判断最大值
{
int b[5],c[3],t,i,j;
for(i=0,j=0;i<9;i+2,j++)
{
if(*(p+i)>*(p+i+1))b[j]=*(p+i);//这里从十个数中抽5个数,如果str[1}大于str[2],输出str[1],在比较str[3]和str[4]
else b[i]=*(p+i+1);
}
for(i=0,j=0;i<4;i+2,j++)
{
if(b[i]>b[i+1])c[j]=b[i];
else c[j]=b[i+1];
}
if(c[0]>c[1]&&c[0]>c[2])t=c[0];//判断三个值那个最大
if(c[1]>c[0]&&c[1]>c[2])t=c[1];
if(c[2]>c[0]&&c[2]>c[1])t=c[2];
return (t);
}
int fac3(int *p)//判断最小值,与最大值类似
{
int b[5],c[3],i,j,m;
for(i=0,j=0;i<9;i+2,j++)
{
if(*(p+i)<*(p+i+1))b[j]=*(p+i);
else b[i]=*(p+i+1);
}
for(i=0,j=0;i<4;i+2,j++)
{
if(b[i]<b[i+1])c[j]=b[i];
else c[j]=b[i+1];
}
if(c[0]<c[1]&&c[0]<c[2])m=c[0];
if(c[1]<c[0]&&c[1]<c[2])m=c[1];
if(c[2]<c[0]&&c[2]<c[1])m=c[2];
return (m);
}
int fac4(int *p,int x,int y)//判断最大值与最小值的位置,并将最大值与最后一个交换,最小与第一个交换
{
int i,j,k,g;
for(i=0;i<10;i++)
{
if(*(p+i)-x==0)j=i;
}
for(i=0;i<10;i++)
{
if(*(p+i)-y==0)k=i;
}
g=*(p+j);
*(p+j)=*(p+9);
*(p+9)=g;
g=*(p+k);
*(p+k)=*(p+0);
*(p+0)=g;
for(i=0;i<10;i++)
{
printf("%d ",*(p+i)); //输出新的排列
}
}
原题目为用函数输入10个整数,用函数将最大值与最后一个数交换位置,最小与第一个交换位置,在用函数输出结果
本帖最后由 superbe 于 2019-9-27 03:02 编辑
#include<stdio.h>
int main()
{
void fac1(int *p1);
int fac2(int *p2);
int fac3(int *p3);
void fac4(int *p4,int x,int y);
int str[10];
int t,m;
fac1(str);
t=fac2(str);
m=fac3(str);
fac4(str,t,m);
return 0;
}
void fac1(int *p) //函数1输入十个数
{
int i;
printf("输入10个整数:\n");
for(i=0;i<10;i++){
scanf("%d",p+i);
}
}
int fac2(int *p) //函数二判断最大值
{
int b[5],c[3],t,i,j;
for(i=0,j=0;i<9;i+=2,j++)
{
if(*(p+i)>*(p+i+1)) b[j]=*(p+i);//这里从十个数中抽5个数,如果str[1}大于str[2],输出str[1],在比较str[3]和str[4]
else b[j]=*(p+i+1);
}
for(i=0,j=0;i<4;i+=2,j++)
{
if(b[ i ]>b[i+1]) c[j]=b[ i ];
else c[j]=b[i+1];
}
c[2]=b[4];
if(c[0]>c[1] && c[0]>c[2]) t=c[0];//判断三个值那个最大
if(c[1]>c[0] && c[1]>c[2]) t=c[1];
if(c[2]>c[0] && c[2]>c[1]) t=c[2];
return (t);
}
int fac3(int *p)//判断最小值,与最大值类似
{
int b[5],c[3],i,j,m;
for(i=0,j=0;i<9;i+=2,j++)
{
if(*(p+i)<*(p+i+1)) b[j]=*(p+i);
else b[j]=*(p+i+1);
}
for(i=0,j=0;i<4;i+=2,j++)
{
if(b[ i ]<b[i+1]) c[j]=b[ i ];
else c[j]=b[i+1];
}
c[2]=b[4];
if(c[0]<c[1] && c[0]<c[2]) m=c[0];
if(c[1]<c[0] && c[1]<c[2]) m=c[1];
if(c[2]<c[0] && c[2]<c[1]) m=c[2];
return (m);
}
void fac4(int *p,int x,int y)//判断最大值与最小值的位置,并将最大值与最后一个交换,最小与第一个交换
{
int i,j,k,g;
for(i=0;i<10;i++)
{
if(*(p+i)-x==0){
j=i; break;
}
}
for(i=0;i<10;i++)
{
if(*(p+i)-y==0){
k=i; break;
}
}
g=*(p+j);
*(p+j)=*(p+9);
*(p+9)=g;
g=*(p+k);
*(p+k)=*(p+0);
*(p+0)=g;
for(i=0;i<10;i++)
{
printf("%d ",*(p+i)); //输出新的排列
}
}
最大值、最小值函数太繁琐了,可以改成这样:
int fac2(int *p) //函数二判断最大值
{
int i,max;
max=*p;
for(i=1;i<10;i++){
if(*(p+i)>max) max=*(p+i);
}
return max;
}
|
|