判断查找元素是否存在时

查找

请问这两串代码有什么不同吗

    int b,i;
            scanf("%d",&b);
            for(i=0; iif(b==a[i]) {
                    printf("YES\n");
                    break;
                }
            }
            if(i==N) {
                printf("NO\n");
            }

int b,flag=1;
            scanf("%d",&b);
            for(int i=0; iif(b==a[i]) {
                    flag=0;
                    printf("YES\n");
                    break;
                }
            }
            if(flag) {
                printf("NO");
            }

没有很大的区别,主要的区别应该就是判断输入的这个数b是否存在于数组a中的判断方式的不同,具体如下,供参考:

第一种通过判断循环临时下标是否等于N,等于N则说明判断完数组所有的数都没有找到输入的数b;

第二种方式通过判断一个标志flag是否改变,如果在遍历数组中,寻找到某数等于输入的数b则改变标志,如果循环结束标志之1没有改变说明没有找到;

两种方式的作用基本差不多,唯一区别应该就是判断方式的不同。

测试代码如下:

#include <stdio.h>
#define N 10

void findNum(int *a){

    int b,i;
    scanf("%d",&b);
    for(i=0; i<N; i++) {
        if(b==a[i]) {
            printf("YES\n");
            break;
        }
    }
    if(i==N) {
        printf("NO\n");
    }
 
}


void findFlagNum(int *a){
    int b,flag=1;
    scanf("%d",&b);
    for(int i=0; i<N; i++) {
        if(b==a[i]) {
            flag=0;
            printf("YES\n");
            break;
        }
    }
    if(flag) {
        printf("NO");
    }
 
}

int main(void){
    
    int a[N]={1,2,3,4,5,6,7,8,9,10};
    printf("第一种方法:");
    findNum(a);
    
    printf("第二种方法:");
    findFlagNum(a);
} 

img

如果b等于a最后一个元素 第一个代码判断不了

所展示的第一个代码查找的范围不含末尾字符,所以存在者些许问题
第一个代码建议把第6行改成return 0的方式,这样也能实现和第二种一样的效果
第二个是采用哨兵的方式去判断查找元素是否存在,如果flag为1就代表没有进入 if(b==a[i])这个条件里面,就会打印NO,如果不为1,就会打印YES

第一串代码是从a[0]-a[N-1]中寻找是否有与b相等的元素,有的话,输出yes;同时,因为i最多到N-1,所以永远不可能会输出no
第二串代码是从a[0]-a[N-1]中寻找是否有与b相等的元素,找到的话就输出yes,没找到就输出no
望采纳!