比较两个数组内数值的大小,并统计各自大小的次数,主函数里面调用函数那一行报错
有两个数组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:51 编辑
14行就炸了吖
你定义的时候a中10是长度
你传参的时候a是啥是a的第11个元素
你a数组就只有10个元素,哪来的第11个元素.....,b数组同理
定义之后a就代表这个数组了,你传参数整个数组传进去直接compare(a, b)就可以了 factors = compare(a,b);什么鬼 本帖最后由 风过无痕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;
} yuxijian2020 发表于 2020-10-25 11:50
14行就炸了吖
你定义的时候a中10是长度
你传参的时候a是啥是a的第11个元素
改成compare(a,b)也不对啊 风过无痕1989 发表于 2020-10-25 15:50
已经通过 DEV_C++ 编译调试,请大家检验
C语言是不能返回数组?我把compare那改成compare(a,b)也不对啊 猪猪虾 发表于 2020-10-27 21:10
C语言是不能返回数组?我把compare那改成compare(a,b)也不对啊
正因为C语言不能返回数组,所以,在调用的函数中直接输出比较结果。
我这个是简单地实现题目的要求( 题目并没有要求要回到主函数中去输出 ),若一定要在主函数中输出,那么,通过指针对原数组各元素进行排序,然后在原数组中输出即可 本帖最后由 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;
} yuxijian2020 发表于 2020-10-27 22:23
我建议你直接传指针进去参数不要弄成你现在这样
好的好的,谢谢,python洗脑了,瞎传
页:
[1]