

c语言入门6,掌握它,世界上还有解决不了的问题吗?if分支语句
source link: https://blog.popkx.com/c-entry-6-mastering-it-are-there-any-problems-that-can-not-be-solved-in-the-world-if-branch-statement/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

c语言入门6,掌握它,世界上还有解决不了的问题吗?if分支语句
到目前为止,我们举的 c 语言程序例子都是顺序执行的,都是从 main 函数开始,一条一条按顺序执行的。但是,现实中的问题可不一定都是这么简单的,例如,给定一个数,如果是 0 就打印 zero,否则打印 nonzero。要解决这个问题,只使用顺序式语句就很难解决了。
事实上,C 语言提供了一些分支语句语法,再来分析一下上述问题:给定一个数,【如果】是 0,就打印 zero,【否则】就打印 nonzero,用伪代码来写这个问题就是:
一个数;
如果 一个数 不等于 0
打印 nonzero
否则
打印 zero
C 语言作为高级语言,设计的时候就应该贴合人类的使用,实际上,C 语言解决这个问题,语句风格和上面的伪代码风格非常一致,请看:
int a = 3;
if(a != 0){
printf("nonzero\n");
}else{
printf("zero\n");
}
以上就是 C 语言的 if 语句,只不过我们要把判断条件“a!=0”用括号括起来。C 语言的关系运算符和数学中的略有差异,请看下图:
if 的中文意思是“如果”,else 的中文意思是“否则”。
- 这里的==表示数学中的相等关系,相当于数学中的=号,初学者常犯的错误是在控制表达式中把==写成=,在C语言中=号是赋值运算符,两者的含义完全不同。
- 如果表达式所表示的比较关系成立则值为真(True),否则为假(False),在C语言中分别用1和0表示。例如x是-1,那么x>0这个表达式的值为0,x>-2这个表达式的值为1。
- 在数学中a<b<c表示b既大于a又小于c,但作为C语言表达式却不是这样。以上几种运算符都是左结合的,请读者想一下这个表达式表示什么?
- 这些运算符的两个操作数都应该是相同类型的,例如两边都是字符型、都是整型或者都是浮点型,但不能比较两个字符串,以后我们会介绍比较字符串的方法。
- ==和!=称为相等性运算符(Equality Operator),其余四个称为关系运算符(Relational Operator),相等性运算符的优先级低于关系运算符。
总结一下 if(a!=0){...}else{...} 语句,首先计算 a!=0,判断它是真的还是假的,如果是真的,就执行 if 后的 {} 里的语句,打印 nonzero;否则就执行 else 后 {} 里的语句,打印 zero。这里的 3 不等于 0 是真的,所以就打印 nonzero 了。
应该注意到,if(a!=0) 后没有用 “;”结束,而是紧跟着 {} 了,这说明这条语句到 if(a!=0) 还没有结束,它的处理语句在 {} 里。if 的判断语句要持续到遇到 ; 或者 {} 才结束。
实际上,上述代码中的 {} 可以省去,请看:
int a = 3;
if(a != 0)
printf("nonzero\n");
else
printf("zero\n");
这是因为 if 和 else 后只有一条语句。如果有两条语句,就必须用 {} 了。例如:
int a = 0;
if(a != 0)
printf("I know, it is ");
printf("nonzero\n");
这几句代码会打印出 “nonzero”,这显然是错误的。为什么呢?上面,其实我们已经解释了,“if 的判断语句遇到 ; 或者 {} 结束。”,if(a!=0) 的作用范围持续到 printf("I know, it is "); 就结束了。所以 printf("nonzero\n"); 无论 a 是不是 0,都会输出。这种情况下,就需要 {} 了。
int a = 0;
if(a != 0){
printf("I know, it is ");
printf("nonzero\n");
}
这样的代码就什么也不会输出了,因为 a 不等于 0 是假的。
在C语言中,任何可以放“语句”的地方都既可以是一条语句,也可以是由{}括起来的若干条语句组成的语句块,如果是语句块则不需要在{}后面加;号。如果}后面加了;号,则这个;号本身又是一条新的语句了,在C语言中一个单独的;号表示一条空语句。
语句块中也可以定义局部变量,就像函数体一样。比如:
void foo(void)
{
int i = 0;
{
int i = 1;
int j = 2;
printf("i=%d, j=%d\n", i, j);
}
printf("i=%d\n", i); /* 这里不能访问 j */
}
以上代码输出
i = 1, j = 2
i = 0
这个和函数的局部变量是同样的到里,可以参照《》一节。
if else 嵌套使用
现在又来了一个新问题:给定一个数,如果它大于 0 就输出 positive,如果等于 0 就输出 zero,如果小于 0,就输出 negative。这样的代码可以按照下面写:
int a = 3;
if(a>0)
printf("positive\n");
else if(a==0)
printf("zero\n");
else
printf("negative\n");
好了,现在你已经学会 C 语言中 if/else 语句了,可以思考下面的问题了。刚刚那个代码也可以按照下面的方法写:
int a = 3;
if(a>0)
printf("positive\n");
if(a==0)
printf("zero\n");
if(a<0)
printf("negative\n");
这两种写法有什么区别呢?(提示:执行效率)
另外,下面这几行代码编译时正常的,但是输出结果却是错的,虽然 x 并不大于 0,它还是输出了 “x is positive”,这是为什么呢?
int x = -3;
if (x > 0);
printf("x is positive.\n");
阅读更多: C语言
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK