C语言世界林子有点大,什么代码都有,我这只程序猿有点想迁徙 ==,
一,原题
题型概述:遍历一个字符数组,符合for循环条件的进行内层if语句一旦字符串中有’‘a’ - ‘z’ n就自增一。
问:最后运行结果n的结果?
该为选择题,对于我来说有争议的两个答案 A.0 B.2
我选择了A,答案为B。
#include <stdio.h>
int main()
{
char s[] ={"012xy"};
int n = 0;
for(int i = 0;s[i]!=0,i++){
if(s[i]>='a'&&s[i]<'z')n++;
}
printf("%d",n);
return 0;
}
二,分析
1,该问题的关键点在于for循环中的 "s[i] != 0;"
2,"s[i] != 0;"的初步理解为 当字符数组s中的元素不为0时执行for循环,否则循环结束
3,而这其中的0为讨论的关键点
4,
一,为字符'0'
二,为字符串结束标志'\0'
三,为布尔值的假值 0
三,讨论
由于for(表达式1;表达式2;表达式3)中的"表达式2"为布尔判断的一种,即"表达式2"为真执行循环,为假结束循环,并且“==”与“!=”相对而言,因此可以借助修改过的if语句的基础上语句来探讨
简化代码
char s[] = {"012xy"};
if(s[i] == 0){ //i指占位符,无意义,讨论时填值
prinf("程序执行!");
}
1,假设此0为字符’0’
探讨s[0]的值’0’ == 0是否成立
char s[] = {"012xy"};
if(s[0] == 0){
prinf("程序执行!");
}
结果:该假设不成立
2,假设此0为结束字符串’\0’
探讨s[5]的值’\0’ == 0是否成立
char s[] = {"012xy"};
if(s[5] == 0){
prinf("程序执行!");
}
结果:该假设成立
3,假设此0为布尔值的假值0
探讨s[5]的值无字符串为布尔假值 == 0是否成立
这个比较绕弯,所以我们先理顺思路:
1,if( 表达式 ){} 语句是通过表达式的布尔值来决定分支,这里是通过 关系运算符表达式来决定布尔值,此运算符为双目运算符,
即操作符需要两个值来运算。
2,即 == 运算符两边是通过值是否相等而判断真假,而非通过布尔值的是否相等而判断真假,
比如 表达式1为真 == 表达式2为真 ---> 运算结果为真,像通过布尔值来判断布尔值,不过&&、|| 可以如此。
结果:通过上述讨论,该结论为假
四,总结
关于s[i] != 0的讨论,结果为:此处的 0 等同于结束标志’\0’