鱼C论坛

 找回密码
 立即注册
查看: 1427|回复: 8

[已解决]比较两个数组内数值的大小,并统计各自大小的次数,主函数里面调用函数那一行报错

[复制链接]
发表于 2020-10-25 10:43:01 | 显示全部楼层 |阅读模式

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

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

x
有两个数组a和b,各有10个元素,将它们对应地逐个相比(即a[0]与b[0]比,a[1]与b[1]比……)。如果a数组中的元素大于b数组中的相应元素的数目多于b数组中元素大于a数组中相应元素的数目(例如,a[i]>b[i]6次,b[i]>a[i]3次,其中i每次为不同的值),则认为a数组大于b数组,并分别统计出两个数组相应元素大于、等于、小于的次数。


#include <stdio.h>
#include <string.h>
#include <math.h>
//*****************比较两个数组内数的大小,并统计大小次数******************
int main()
{
        int compare(int a[],int b[]);
    int a[10],b[10],i,j,factors[3];
    for(i = 0;i < 10;i++)
    {
            printf("enter a[i],b[i]:");
        scanf("%d %d\n",a[i],b[i]);
        }
        factors = compare(a[10],b[10]);
        if(factors[0] >factors[1])
        {
                printf("a is bigger");
                printf("the times that a is bigger:",factors[0]);
                printf("the times that b is bigger:",factors[1]);
        }
        else if(factors[0] <factors[1])
        {
                printf("b is bigger");
                printf("the times that a is bigger:",factors[0]);
                printf("the times that b is bigger:",factors[1]);
        }
        else
        {
                printf("a,b is same");
                printf("the times that a is bigger:",factors[0]);
                printf("the times that b is bigger:",factors[1]);
        }
    return 0;
}

int compare(int a[],int b[])
{
        int i,j,a_bigger = 0,b_bigger = 0,same = 0;
        int factors[3];
        for(i = 0;i < 10;i++)
        {
                if(a[i] > b[i])
                {
                        a_bigger++;
                }
                else if (a[i] < b[i])
                {
                        b_bigger++;
                }
                else
                {
                        same ++;
                }
        }
        factors[0] = a_bigger;
        factors[1] = b_bigger;
        factors[2] = same;
        return factors;
}
最佳答案
2020-10-25 15:50:26
本帖最后由 风过无痕1989 于 2020-10-25 18:26 编辑

已经通过 DEV_C++ 编译调试,请大家检验
//*****************比较两个数组内数的大小,并统计大小次数******************
#include <stdio.h>

int main()
{
    int compare(int a[],int b[],int n);
    int i,*p,*q; 
    int x = 0;
    int y = 0;
    int z = 0;
    int a[10] = {0},b[10] = {0},factors[10] = {0};
    p = a;
    q = b;
    printf("enter a[i],b[i]:");
    for(i = 0;i < 10;i++)
    {
        scanf("%d %d\n",&a[i],&b[i]);
    }
        
    for(i = 0;i < 10;i++)
    {        
        factors[i] = compare(p,q,i);  调用函数比较两数组
    } 

    for(i = 0;i < 10;i++)
    {
        if(factors[i] == 1)
        {
                x += 1;                // 统计 a[] > b[] 的次数 
        }
        else if(factors[i] == -1)
        {
                y += 1;                // 统计 a[] < b[] 的次数 
        }
        else
        {
                z += 1;                // 统计 a[] = b[] 的次数 
        } 
    }
    printf("a[] > b[] 的次数: %d\n",x);
    printf("a[] = b[] 的次数: %d\n",z);
    printf("a[] < b[] 的次数: %d\n",y);
    return 0;
}

int compare(int a[],int b[],int n)
{
    int count = 0;

    if(a[n] > b[n])
    {
        count = 1;
    }
    else if (a[n] < b[n])
    {
        count = -1;
    }
    else
    {
        count = 0;
    } 


        return count;
}

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2020-10-25 11:50:28 | 显示全部楼层

回帖奖励 +4 鱼币

本帖最后由 yuxijian2020 于 2020-10-25 11:51 编辑

14行就炸了吖
你定义的时候a[10]中10是长度
你传参的时候a[10]是啥  是a的第11个元素
你a数组就只有10个元素,哪来的第11个元素.....,b数组同理
定义之后a就代表这个数组了,你传参数  整个数组传进去  直接  compare(a, b)就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-25 12:06:26 | 显示全部楼层

回帖奖励 +4 鱼币

factors = compare(a[10],b[10]);
什么鬼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-25 15:50:26 | 显示全部楼层    本楼为最佳答案   
本帖最后由 风过无痕1989 于 2020-10-25 18:26 编辑

已经通过 DEV_C++ 编译调试,请大家检验
//*****************比较两个数组内数的大小,并统计大小次数******************
#include <stdio.h>

int main()
{
    int compare(int a[],int b[],int n);
    int i,*p,*q; 
    int x = 0;
    int y = 0;
    int z = 0;
    int a[10] = {0},b[10] = {0},factors[10] = {0};
    p = a;
    q = b;
    printf("enter a[i],b[i]:");
    for(i = 0;i < 10;i++)
    {
        scanf("%d %d\n",&a[i],&b[i]);
    }
        
    for(i = 0;i < 10;i++)
    {        
        factors[i] = compare(p,q,i);  调用函数比较两数组
    } 

    for(i = 0;i < 10;i++)
    {
        if(factors[i] == 1)
        {
                x += 1;                // 统计 a[] > b[] 的次数 
        }
        else if(factors[i] == -1)
        {
                y += 1;                // 统计 a[] < b[] 的次数 
        }
        else
        {
                z += 1;                // 统计 a[] = b[] 的次数 
        } 
    }
    printf("a[] > b[] 的次数: %d\n",x);
    printf("a[] = b[] 的次数: %d\n",z);
    printf("a[] < b[] 的次数: %d\n",y);
    return 0;
}

int compare(int a[],int b[],int n)
{
    int count = 0;

    if(a[n] > b[n])
    {
        count = 1;
    }
    else if (a[n] < b[n])
    {
        count = -1;
    }
    else
    {
        count = 0;
    } 


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

使用道具 举报

 楼主| 发表于 2020-10-27 21:07:40 | 显示全部楼层
yuxijian2020 发表于 2020-10-25 11:50
14行就炸了吖
你定义的时候a[10]中10是长度
你传参的时候a[10]是啥  是a的第11个元素

改成compare(a,b)也不对啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-27 21:10:56 | 显示全部楼层
风过无痕1989 发表于 2020-10-25 15:50
已经通过 DEV_C++ 编译调试,请大家检验

C语言是不能返回数组?我把compare那改成compare(a,b)也不对啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-27 21:43:08 | 显示全部楼层
猪猪虾 发表于 2020-10-27 21:10
C语言是不能返回数组?我把compare那改成compare(a,b)也不对啊

正因为C语言不能返回数组,所以,在调用的函数中直接输出比较结果。

我这个是简单地实现题目的要求( 题目并没有要求要回到主函数中去输出 ),若一定要在主函数中输出,那么,通过指针对原数组各元素进行排序,然后在原数组中输出即可
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-27 22:23:19 | 显示全部楼层
本帖最后由 yuxijian2020 于 2020-10-27 22:30 编辑
猪猪虾 发表于 2020-10-27 21:07
改成compare(a,b)也不对啊


我建议你直接传指针进去  参数不要弄成你现在这样
#include<stdio.h>

//a:数组a b:数组b size:两个数组的大小 index:需要比较的值得下标
int compare(int* a, int* b, int size, int index)
{
    //如果传入的下标比数组元素个数多,直接返回0
    //这里你可以设置一下越界应该返回啥
    if(index > size + 1)
        return INT_MAX;
    //返回比较结果
    return a[index] - b[index];
}

int main()
{
    int a[2] = {10, 20};
    int b[2] = {15, 25};

    int result = compare(a, b, 2, 1);

    if(result > 0)
        printf("a的第二个元素大于b的第二个元素...");
    else if(result < 0)
        printf("a的第二个元素小于b的第二个元素...");
    else
        printf("a的第二个元素等于b的第二个元素...");

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

使用道具 举报

 楼主| 发表于 2020-10-27 22:30:08 | 显示全部楼层
yuxijian2020 发表于 2020-10-27 22:23
我建议你直接传指针进去  参数不要弄成你现在这样

好的好的,谢谢,python洗脑了,瞎传
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 20:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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