回 帖 发 新 帖 刷新版面

主题:哪一位大侠来帮忙解释一个问题~~~~~

这是一道比较数组元素的题,要求用数组元素做实参,如果a数组中元素大于b数组中元素次数 多于 b数组中元素大于a数组中元素的次数,则认为a数组比b数组大。

[code=c]
#include<stdio.h>

int larger(int,int);

void main()
{
    int a[10],b[10];
    int n=0,m=0,k=0,i,test;


    printf("请输入A数组的元素\n");
    for(i=0;i<10;i++)
    {
        scanf("%d",&a[i]);
    }
    printf("\n");
    printf("请输入数组B的元素\n");
    for(i=0;i<10;i++)
    {
        scanf("%d",&b[i]);
    }
    printf("\n");


    for(i=0;i<10;i++)
    {
        if(larger(a[i],b[i])==1)
            n+=1;
        else if(larger(a[i],b[i])==0)
            m+=1;
        else
            k+=1;
    }




    printf("a[i]>b[i]%d次\na[i]=b[i]%d次\na[i]<b[i]%d次\n",n,m,k);
    if(n>k)
        printf("A数组大于B数组\n");
    else if(n<k)
        printf("A数组小于B数组\n");
    else
        printf("A数组等于B数组\n");
//*************************************************//
//    if(n>k)
        printf("A数组大于B数组\n");
    else if(n=k)
        printf("A数组等于B数组\n");
    else
        printf("A数组小于B数组\n");
为什么这样不行,会在明明n=k时说小于???
//
//*************************************************//
    scanf("%d",&test);
}



int larger(int a,int b)
{
    int c=0;
    if(a>b)
        c=1;
    else if(a<b)
        c=-1;
    return(c);
}


[/code]
可是,小生在调试时发现,如果按照说明行中的写法,会在a数组完全等于b数组时显示  a数组小于b数组。。。。。。这是为什么呢????

回复列表 (共8个回复)

沙发

if(n>k)
        printf("A数组大于B数组\n");
    else if(n=k)
        printf("A数组等于B数组\n");
这个地方发现错了没?

板凳

要把C语言和数学适当的分开来- -#

3 楼

啊。。。。发现错误了。。。少写了一个  =  。。。。。。谢谢啊~~~~大侠~~

4 楼


可是要怎么避免这种小错误呢???[em18][em18]

5 楼

这种错误也没什么好办法可以帮你避免,只有你平时自己多注意,以后慢慢会好的。。

6 楼


谢谢大侠~~~~~~·[em2]

7 楼

5==a或0==a-b

8 楼

一个好的编译器是会给你一个Warning的。
虽然常量左置一般情况下是不错的,但当你在对字符串做==比较时,左置常量的方式却非常容易导致不易查觉的“陷井”——这才是更要命的,且此种情况编译器也不易查觉!!!

要养成重视编译器给你提示的Warning才是一个非常好的习惯!

当然,如果有条件的话,还可以用更专业的代码分析器——但它们的价格嘛,,,呵呵~~~~

我来回复

您尚未登录,请登录后再回复。点此登录或注册