目录
一、关系运算符的优先级
二、逻辑运算符
2.1 &&,||,!。
2.2 逻辑符的优先级
三、switch语句
四、条件运算符
五、循环
5.1 while循环
5.2 do while循环
5.3 for循环
六、break和continue解释
6.1 break
6.2 continue语句
一、关系运算符的优先级
关系运算符都是双目运算符,其结合性均为左结合。关系运算符的优先级低于算术运算符,高于赋值运算符。在六个关系运算符中,<、<=、>、>=的优先级相同,高于==和!=,==和!=的优先级相同。
理解一下下面的代码:
1
2
3
4
5
6
7
8
9
10#include <stdio.h> int main(){ char c='k'; int i=1, j=2, k=3; float x=3e+5, y=0.85; int result_1 = 'a'+5<c, result_2 = x-5.25<=x+y; printf( "%d, %dn", result_1, -i-2*j>=k+1 ); printf( "%d, %dn", 1<j<5, result_2 ); printf( "%d, %dn", i+j+k==-2*j, k==j==i+5 ); return 0;
输出结果:
1
2
3
4
5
61, 0 1, 1 0, 0 对于含多个关系运算符的表达式,如 k==j==i+5,根据运算符的左结合性, 先计算k==j,该式不成立,其值为0,再计算0==i+5,也不成立,故表达式值为0。
下面的这个代码有点意思,是while((c=getchar())!='n'&&c!=EOF)的解释。代码如下:
1
2
3
4if(a=b) printf("%d",a); else printf("a=0");
意思是,把 b 的值赋予 a,如果为非0输出a的值。这种用法在后面的程序中会经常出现。
二、逻辑运算符
2.1 &&,||,!。
&&:参与运算的两个表达式都为真时,结果才为真,否则为假。例如:
15&&0
5为真,0为假,相与的结果为假,也就是 0。
2.2 逻辑符的优先级
赋值运算符(=) < &&和|| < 关系运算符 < 算术运算符 < 非(!)
&& 和 || 低于关系运算符,! 高于算术运算符。
按照运算符的优先顺序可以得出:
- a>b && c>d 等价于 (a>b)&&(c>d)
- !b==c||d<a 等价于 ((!b)==c)||(d<a)
- a+b>c&&x+y<b 等价于 ((a+b)>c)&&((x+y)<b)
逻辑运算符举例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#include <stdio.h> int main(){ char c='k'; int i=1,j=2,k=3; float x=3e+5,y=0.85; printf( "%d,%dn", !x*!y, !!!x ); printf( "%d,%dn", i&&j-3, i<j&&x<y ); 先计算j-3的值为非0,再求i && j-3的逻辑值为1. printf( "%d,%dn", i==5&&c&&(j=8), x+y||i+j+k ); return 0; } 运行结果: 0,0 1,0 0,1
三、switch语句
首先一个示例代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17#include <stdio.h> int main(){ int a; printf("Input integer number:"); scanf("%d",&a); switch(a){ case 1: printf("Mondayn"); break; case 2: printf("Tuesdayn"); break; case 3: printf("Wednesdayn"); break; case 4: printf("Thursdayn"); break; case 5: printf("Fridayn"); break; case 6: printf("Saturdayn"); break; case 7: printf("Sundayn"); break; default:printf("errorn"); break; } return 0; }
接下来是需要注意的点:
(1)switch后面是一个表达式,可以有变量。
但是case 后面必须是一个整数,或者是结果为整数的表达式,但不能包含任何变量。请看下面的例子:
1
2
3
4
5
6
7case 10: printf("..."); break; //正确 case 8+9: printf("..."); break; //正确 case 'A': printf("..."); break; //正确,字符和整数可以相互转换 case 'A'+19: printf("..."); break; //正确,字符和整数可以相互转换 case 9.5: printf("..."); break; //错误,不能为小数 case a: printf("..."); break; //错误,不能包含变量 case a+10: printf("..."); break; //错误,不能包含变量
(2)break必须存在,default 不是必须的。当没有 default 时,如果所有 case 都匹配失败,那么就什么都不执行。
四、条件运算符
1max = (a>b) ? a : b;
该语句的语义是:如a>b为真,则把a赋予max,否则把b 赋予max。
条件运算符(?:)的优先级低于关系运算符和算术运算符,但高于赋值符。因此上述代码可以去掉括号应用。
条件运算符的结合方向是自右至左。例如:
1
2
3a>b ? a : c>d ? c : d; 应理解为: a>b ? a : ( c>d ? c : d );
五、循环
5.1 while循环
5.2 do while循环
do-while循环与while循环的不同在于:它会先执行“语句块”,然后再判断表达式是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do-while 循环至少要执行一次“语句块”。格式如下,注意while括号后面有分号。
1
2
3
4do{ sum+=i; i++; }while(i<=100);
5.3 for循环
思想:1) 先执行“表达式1”。
2) 再执行“表达式2”,如果它的值为真(非0),则执行循环体,否则结束循环。
3) 执行完循环体后再执行“表达式3”。
4) 重复执行步骤 2) 和 3),直到“表达式2”的值为假,就结束循环。
特殊点:
for( ; ; ) 语句 相当于: while(1) 语句
六、break和continue解释
6.1 break
If break和while(1)真的是一个不错的搭配。
在多层循环中,一个 break 语句只向外跳一层。
简单举例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21#include <stdio.h> int main(){ int i=1, j; while(1){ // 外层循环 j=1; while(1){ // 内层循环 printf("%-4d", i*j); j++; if(j>4) break; //跳出内层循环 } printf("n"); i++; if(i>4) break; // 跳出外层循环 } return 0; } 运行结果: 1 2 3 4 2 4 6 8 3 6 9 12 4 8 12 16
6.2 continue语句
break是直接离它最近的一层循环就终止了。
continue是离它最近的一层循环仍然继续,只不过这层循环的该次continue后面的语句不再执行了,直接跳到下一次。
break和它的区别就是break不跳到下一次了,没得跳了,终止了。不想举例子,算了还是举例子吧。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15#include <stdio.h> int main(){ char c = 0; while(c!='n'){ //回车键结束循环 c=getchar(); if(c=='4' || c=='5'){ //按下的是数字键4或5 continue; //跳过当次循环,进入下次循环 } putchar(c); } return 0; } 运行结果: 0123456789↙ 01236789
C语言求π的值:http://c.biancheng.net/cpp/html/2813.html
最后
以上就是温柔大叔最近收集整理的关于C语言归纳三-C语言循环结构和选择结构的全部内容,更多相关C语言归纳三-C语言循环结构和选择结构内容请搜索靠谱客的其他文章。
发表评论 取消回复