鱼C论坛

 找回密码
 立即注册
查看: 1757|回复: 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数组,并分别统计出两个数组相应元素大于、等于、小于的次数。



  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <math.h>
  4. //*****************比较两个数组内数的大小,并统计大小次数******************
  5. int main()
  6. {
  7.         int compare(int a[],int b[]);
  8.     int a[10],b[10],i,j,factors[3];
  9.     for(i = 0;i < 10;i++)
  10.     {
  11.             printf("enter a[i],b[i]:");
  12.         scanf("%d %d\n",a[i],b[i]);
  13.         }
  14.         factors = compare(a[10],b[10]);
  15.         if(factors[0] >factors[1])
  16.         {
  17.                 printf("a is bigger");
  18.                 printf("the times that a is bigger:",factors[0]);
  19.                 printf("the times that b is bigger:",factors[1]);
  20.         }
  21.         else if(factors[0] <factors[1])
  22.         {
  23.                 printf("b is bigger");
  24.                 printf("the times that a is bigger:",factors[0]);
  25.                 printf("the times that b is bigger:",factors[1]);
  26.         }
  27.         else
  28.         {
  29.                 printf("a,b is same");
  30.                 printf("the times that a is bigger:",factors[0]);
  31.                 printf("the times that b is bigger:",factors[1]);
  32.         }
  33.     return 0;
  34. }

  35. int compare(int a[],int b[])
  36. {
  37.         int i,j,a_bigger = 0,b_bigger = 0,same = 0;
  38.         int factors[3];
  39.         for(i = 0;i < 10;i++)
  40.         {
  41.                 if(a[i] > b[i])
  42.                 {
  43.                         a_bigger++;
  44.                 }
  45.                 else if (a[i] < b[i])
  46.                 {
  47.                         b_bigger++;
  48.                 }
  49.                 else
  50.                 {
  51.                         same ++;
  52.                 }
  53.         }
  54.         factors[0] = a_bigger;
  55.         factors[1] = b_bigger;
  56.         factors[2] = same;
  57.         return factors;
  58. }
复制代码
最佳答案
2020-10-25 15:50:26
本帖最后由 风过无痕1989 于 2020-10-25 18:26 编辑

已经通过 DEV_C++ 编译调试,请大家检验

  1. //*****************比较两个数组内数的大小,并统计大小次数******************
  2. #include <stdio.h>

  3. int main()
  4. {
  5.     int compare(int a[],int b[],int n);
  6.     int i,*p,*q;
  7.     int x = 0;
  8.     int y = 0;
  9.     int z = 0;
  10.     int a[10] = {0},b[10] = {0},factors[10] = {0};
  11.     p = a;
  12.     q = b;
  13.     printf("enter a[i],b[i]:");
  14.     for(i = 0;i < 10;i++)
  15.     {
  16.         scanf("%d %d\n",&a[i],&b[i]);
  17.     }
  18.         
  19.     for(i = 0;i < 10;i++)
  20.     {       
  21.         factors[i] = compare(p,q,i);  调用函数比较两数组
  22.     }

  23.     for(i = 0;i < 10;i++)
  24.     {
  25.         if(factors[i] == 1)
  26.         {
  27.                 x += 1;                // 统计 a[] > b[] 的次数
  28.         }
  29.         else if(factors[i] == -1)
  30.         {
  31.                 y += 1;                // 统计 a[] < b[] 的次数
  32.         }
  33.         else
  34.         {
  35.                 z += 1;                // 统计 a[] = b[] 的次数
  36.         }
  37.     }
  38.     printf("a[] > b[] 的次数: %d\n",x);
  39.     printf("a[] = b[] 的次数: %d\n",z);
  40.     printf("a[] < b[] 的次数: %d\n",y);
  41.     return 0;
  42. }

  43. int compare(int a[],int b[],int n)
  44. {
  45.     int count = 0;

  46.     if(a[n] > b[n])
  47.     {
  48.         count = 1;
  49.     }
  50.     else if (a[n] < b[n])
  51.     {
  52.         count = -1;
  53.     }
  54.     else
  55.     {
  56.         count = 0;
  57.     }


  58.         return count;
  59. }
复制代码

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://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)就可以了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

回帖奖励 +4 鱼币

  1. factors = compare(a[10],b[10]);
复制代码
什么鬼
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

已经通过 DEV_C++ 编译调试,请大家检验

  1. //*****************比较两个数组内数的大小,并统计大小次数******************
  2. #include <stdio.h>

  3. int main()
  4. {
  5.     int compare(int a[],int b[],int n);
  6.     int i,*p,*q;
  7.     int x = 0;
  8.     int y = 0;
  9.     int z = 0;
  10.     int a[10] = {0},b[10] = {0},factors[10] = {0};
  11.     p = a;
  12.     q = b;
  13.     printf("enter a[i],b[i]:");
  14.     for(i = 0;i < 10;i++)
  15.     {
  16.         scanf("%d %d\n",&a[i],&b[i]);
  17.     }
  18.         
  19.     for(i = 0;i < 10;i++)
  20.     {       
  21.         factors[i] = compare(p,q,i);  调用函数比较两数组
  22.     }

  23.     for(i = 0;i < 10;i++)
  24.     {
  25.         if(factors[i] == 1)
  26.         {
  27.                 x += 1;                // 统计 a[] > b[] 的次数
  28.         }
  29.         else if(factors[i] == -1)
  30.         {
  31.                 y += 1;                // 统计 a[] < b[] 的次数
  32.         }
  33.         else
  34.         {
  35.                 z += 1;                // 统计 a[] = b[] 的次数
  36.         }
  37.     }
  38.     printf("a[] > b[] 的次数: %d\n",x);
  39.     printf("a[] = b[] 的次数: %d\n",z);
  40.     printf("a[] < b[] 的次数: %d\n",y);
  41.     return 0;
  42. }

  43. int compare(int a[],int b[],int n)
  44. {
  45.     int count = 0;

  46.     if(a[n] > b[n])
  47.     {
  48.         count = 1;
  49.     }
  50.     else if (a[n] < b[n])
  51.     {
  52.         count = -1;
  53.     }
  54.     else
  55.     {
  56.         count = 0;
  57.     }


  58.         return count;
  59. }
复制代码
小甲鱼最新课程 -> https://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)也不对啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

C语言是不能返回数组?我把compare那改成compare(a,b)也不对啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

使用道具 举报

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


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

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

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

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

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

  23.     return 0;
  24. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

好的好的,谢谢,python洗脑了,瞎传
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-6 21:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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