概述
目录
一、关系运算符的优先级
二、逻辑运算符
2.1 &&,||,!。
2.2 逻辑符的优先级
三、switch语句
四、条件运算符
五、循环
5.1 while循环
5.2 do while循环
5.3 for循环
六、break和continue解释
6.1 break
6.2 continue语句
一、关系运算符的优先级
关系运算符都是双目运算符,其结合性均为左结合。关系运算符的优先级低于算术运算符,高于赋值运算符。在六个关系运算符中,<、<=、>、>=的优先级相同,高于==和!=,==和!=的优先级相同。
理解一下下面的代码:
#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, 0
1, 1
0, 0
对于含多个关系运算符的表达式,如 k==j==i+5,根据运算符的左结合性,
先计算k==j,该式不成立,其值为0,再计算0==i+5,也不成立,故表达式值为0。
下面的这个代码有点意思,是while((c=getchar())!='n'&&c!=EOF)的解释。代码如下:
if(a=b)
printf("%d",a);
else
printf("a=0");
意思是,把 b 的值赋予 a,如果为非0输出a的值。这种用法在后面的程序中会经常出现。
二、逻辑运算符
2.1 &&,||,!。
&&:参与运算的两个表达式都为真时,结果才为真,否则为假。例如:
5&&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)
逻辑运算符举例:
#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语句
首先一个示例代码:
#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 后面必须是一个整数,或者是结果为整数的表达式,但不能包含任何变量。请看下面的例子:
case 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 都匹配失败,那么就什么都不执行。
四、条件运算符
max = (a>b) ? a : b;
该语句的语义是:如a>b为真,则把a赋予max,否则把b 赋予max。
条件运算符(?:)的优先级低于关系运算符和算术运算符,但高于赋值符。因此上述代码可以去掉括号应用。
条件运算符的结合方向是自右至左。例如:
a>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括号后面有分号。
do{
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 语句只向外跳一层。
简单举例:
#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不跳到下一次了,没得跳了,终止了。不想举例子,算了还是举例子吧。
#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语言循环结构和选择结构所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复