请问这两串代码有什么不同吗
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);
}
如果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
望采纳!