鱼C论坛

 找回密码
 立即注册
查看: 1367|回复: 4

[已解决]求大佬解决一下,我的代码没有输出值

[复制链接]
发表于 2019-9-26 22:24:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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个整数,用函数将最大值与最后一个数交换位置,最小与第一个交换位置,在用函数输出结果
最佳答案
2019-9-27 00:46:54
本帖最后由 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-27 00:46:54 | 显示全部楼层    本楼为最佳答案   
本帖最后由 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-27 01:09:51 From FishC Mobile | 显示全部楼层
本帖最后由 seglex 于 2019-9-27 01:26 编辑

……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-9-27 08:33:31 | 显示全部楼层

可是我照着你的最大和最小改了还是不对。没有输出值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-27 09:14:55 From FishC Mobile | 显示全部楼层
本帖最后由 superbe 于 2019-9-27 10:01 编辑

代码中有其它问题已修改过了,把完整代码复制过去编译运行。

1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-18 18:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表