猪猪虾 发表于 2020-10-25 10:43:01

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

有两个数组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,b,i,j,factors;
    for(i = 0;i < 10;i++)
    {
            printf("enter a,b:");
      scanf("%d %d\n",a,b);
        }
        factors = compare(a,b);
        if(factors >factors)
        {
                printf("a is bigger");
                printf("the times that a is bigger:",factors);
                printf("the times that b is bigger:",factors);
        }
        else if(factors <factors)
        {
                printf("b is bigger");
                printf("the times that a is bigger:",factors);
                printf("the times that b is bigger:",factors);
        }
        else
        {
                printf("a,b is same");
                printf("the times that a is bigger:",factors);
                printf("the times that b is bigger:",factors);
        }
    return 0;
}

int compare(int a[],int b[])
{
        int i,j,a_bigger = 0,b_bigger = 0,same = 0;
        int factors;
        for(i = 0;i < 10;i++)
        {
                if(a > b)
                {
                        a_bigger++;
                }
                else if (a < b)
                {
                        b_bigger++;
                }
                else
                {
                        same ++;
                }
        }
        factors = a_bigger;
        factors = b_bigger;
        factors = same;
        return factors;
}

yuxijian2020 发表于 2020-10-25 11:50:28

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

14行就炸了吖
你定义的时候a中10是长度
你传参的时候a是啥是a的第11个元素
你a数组就只有10个元素,哪来的第11个元素.....,b数组同理
定义之后a就代表这个数组了,你传参数整个数组传进去直接compare(a, b)就可以了

永恒的蓝色梦想 发表于 2020-10-25 12:06:26

factors = compare(a,b);什么鬼

风过无痕1989 发表于 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 = {0},b = {0},factors = {0};
    p = a;
    q = b;
    printf("enter a,b:");
    for(i = 0;i < 10;i++)
    {
      scanf("%d %d\n",&a,&b);
    }
      
    for(i = 0;i < 10;i++)
    {       
      factors = compare(p,q,i);调用函数比较两数组
    }

    for(i = 0;i < 10;i++)
    {
        if(factors == 1)
        {
                x += 1;                // 统计 a[] > b[] 的次数
        }
        else if(factors == -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 > b)
    {
      count = 1;
    }
    else if (a < b)
    {
      count = -1;
    }
    else
    {
      count = 0;
    }


      return count;
}

猪猪虾 发表于 2020-10-27 21:07:40

yuxijian2020 发表于 2020-10-25 11:50
14行就炸了吖
你定义的时候a中10是长度
你传参的时候a是啥是a的第11个元素


改成compare(a,b)也不对啊

猪猪虾 发表于 2020-10-27 21:10:56

风过无痕1989 发表于 2020-10-25 15:50
已经通过 DEV_C++ 编译调试,请大家检验

C语言是不能返回数组?我把compare那改成compare(a,b)也不对啊

风过无痕1989 发表于 2020-10-27 21:43:08

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

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

我这个是简单地实现题目的要求( 题目并没有要求要回到主函数中去输出 ),若一定要在主函数中输出,那么,通过指针对原数组各元素进行排序,然后在原数组中输出即可

yuxijian2020 发表于 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 - b;
}

int main()
{
    int a = {10, 20};
    int b = {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;
}

猪猪虾 发表于 2020-10-27 22:30:08

yuxijian2020 发表于 2020-10-27 22:23
我建议你直接传指针进去参数不要弄成你现在这样

好的好的,谢谢,python洗脑了,瞎传
页: [1]
查看完整版本: 比较两个数组内数值的大小,并统计各自大小的次数,主函数里面调用函数那一行报错