博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小甲鱼笔记C语言入门(三)——分支结构,运算符优先级,if语句注意事项,三目运算,Switch语句
阅读量:3505 次
发布时间:2019-05-20

本文共 3868 字,大约阅读时间需要 12 分钟。

表达式 优先级
()(小括号),[](数组下标).(结构成员)->(指针型结构成员) 最高
!(逻辑非).(位取反)-(负号)++(加1)–(减1)&(变量地址)
*(指针所指内容)type(函数说明)sizeof(长度计算)
*(乘)/(除)%(取模)
+(加)-(减)
<<(位左移) >>(位右移)
<(小于)<=(小等于)
>(大于)>=(大等于)==(等于) !=(不等于)
&(位与)
^(位异或)
| (位或)
&&(逻辑与)
| | (逻辑或)
?:(?表达式)
= += -=(联合操作)
,(逗号运算符) 最低

一、 关系运算符和表达式

关系运算符:在程序中经常要比较两个量的大小关系,以决定程序下一步的工作。比较两个量的运算符称为关系运算符。

1.C语言中的关系运算符:<,<=,>,>=,==,!=

其中前四个优先级相同,高于==和!=,后两个优先级相同

2.关系表达式一般形式为

表达式 关系运算符 表达式

二、 逻辑运算符和表达式

1. C语言提供了三种逻辑运算符

  • &&与运算:左右两边均为真则返回真
  • || 或运算:左右两边两个都为假则返回假
  • ! 非运算
    与运算符&&运算符||均为双目运算符。具有左结合性,非运算符!为单目运算符,具有右结合性。逻辑运算符和其他优先级关系表示如下:
    !(非)->&&(与)->||(或)

2.逻辑运算符的值用“1”和”0”来表示。

3.逻辑表达式一般形式为:

表达式  逻辑运算符 表达式

(自左向右为左结合性,自右向左为右结合性)

三、 if语句

用if语句可以构成分支语句,它根据给定的条件进行判断,以决定执行某个分支程序段。C语言有三种基本形式

1. 第一种形式:(基本语句)

if(表达式)语句
含义为:如果表达式的值为真,则执行其后的语句,否则不执行该语句。

2. 第二种形式:(if-else)

if(表达式)			语句1;		else				语句2;
含义为:如果表达式的值为真,执行语句1,否则执行语句2

3. 第三种形式:(if-else-if)

if(表达式1)       语句1;else if(表达式2)       语句2;…else       语句n;
含义为:如果表达式1为真,执行语句1 ;如果表达式2为真,执行语句2。否则执行else种的语句n。

例题

void main() {
char c; printf("input a character :"); c = getchar(); if (c<32) {
printf("This is a control character!\n"); }else if (c >='0' && c<='9') {
printf("This is a digit\n"); }else if (c>=97&& c<=122) {
printf("This is a small letter\n"); }else if (c >= 65&& c <= 90) {
printf("This is a capital letter\n"); }else {
printf("This is an other character!"); }}

4. 使用IF的一些注意事项

  • 在三种形式的if语句种,在if关键字之后均为表达式。该表达式通常是逻辑表达式或关系表达式,但也可以是其他表达式,如赋值表达式等,甚至也可以是一个变量
    例如:
if (a = 5)语句;if (b) 语句;

以上都是允许的。只要表达式的值为非0,即为”真”

案例:

void main() {
int a; a = 2; if (2==a) {
printf("equals 3"); } else {
printf("is not equals 3"); }}

建议:如果不小心写成2=a,会出现编译错误,因为一个常数是不能被赋值

  • 在if语句种,条件判断表达式必须用括号括起来,在语句之后必须加分号

  • 在if语句的三种形式种,所有的语句应为单个语句,如果想要在满足条件时执行一组(多个语句),则必须把这一组语句用花括号{ }括起来组成一个符合语句。但要注意在}之后不能加分号。

5. 补充例题:输入三个数a,b,c,要求按由小到大的顺序输出

void main() {
printf("请输入三个数"); int a, b, c; int temp; scanf("%d %d %d",&a,&b,&c); if (a > b) {
temp = b; b = a; a = temp; } if (a > c) {
temp = c; c = a; a = temp; } if (b > c) {
temp = c; c = b; b = temp; } printf("%d%d%d", a, b,c);}

6. if语句的嵌套

当if语句种的执行语句又是if语句时,则构成了if语句嵌套的情形

一般形式为

if(表达式)		if语句:		if (){
if () ……;}

或者为

if(表达式)		if语句;	else		if语句;		if ()	if ()		语句1;	else		语句2;else	if ()		语句3;	else		语句4;
  • 当在嵌套内的if语句可能有时if-else型的,这将会出现多个if和多个else重叠情况,这时要特别注意if和else的配对问题
  • 例如
if (表达式1)if (表达式2)	语句1;else	语句2;

此时我们应当遵循else原则,else与哪个if相近就与哪个构成配合,所以应当理解为

if (表达式1)		if (表达式2)			语句1;		else			语句2

四、 条件运算符和条件表达式

4.1概述

条件运算符为”?”和“:”,它是一个三目运算符,即三个参与运算的量

4.2由条件运算符组成条件表达式的一般形式为:

表达式1?表达式2:表达式3

4.3其求值规则为

如果表达式1的值为真。则以表达式2的值作为条件表达式的值,否则以表达式3的值作为整个条件表达式的值

4.4条件表达式通常用于赋值语句之中

if(a>b) max =a;  else max=b;

可以表示为

max =(a>b)?a:b;

如a>b为真,则把a赋予max,否则b赋予max

4.5注意事项

1.条件运算符的运算优先级低于关系运算符和算数运算符,但高于赋值符。

max(a>b)?a:b

可以更改为

max=a>b?a : b;

2.条件运算符?和:是一对运算符,不能分开

3.条件运算符的结合方法是左结合性(从右到左)

a>b?a:c>d?c:d

理解为

a>b?a:(c>d?c:d)

五、 Switch语句

1. 多分支语句,其一般形式为

switch (表达式)	{
case 常量表达式1:语句1; ... case 常量表达式n:语句n; default: 语句n + 1; break; }

其语句是:计算表达式的值。并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同,则执行default后的语句。

为了避免出现一个case情况符合,导致后面所有结果输出,提供break语句。用来进行跳出操作。

int a;	printf("input integer number:");	scanf("%d", &a);	switch (a)	{
case 1: printf("Monday\n"); break; case 2: printf("Tuesday\n"); break; case 3: printf("Wednesday\n"); break; case 4: printf("Thursday\n"); break; default: printf("error"); }

2. 注意以下几点

在使用switch语句应当注意以下几点

  • 在case后的名常量表达式的值不能相同,否则会出现错误。
  • 在 case 后,允许有多个语句,可以不用{ }括起来。
  • 各 case 和 default 子句的先后顺序可以变动,而不会影程序行结果。
  • default 子句可以省略不用

六、几个经典例题

判断输入的年份是不是闰年

void main() {
int year, n; scanf("%d", &year); if (year %4 ==0) {
if (year %100==0) {
if (year %400==0) {
n = 1; } else {
n = 0; } } else {
n = 1; } } else {
n = 0; } if (n) {
printf("是闰年"); } else {
printf("不是闰年"); }}

以上可以升级出很多版本

推荐做C语言经典100题

转载地址:http://ntxmj.baihongyu.com/

你可能感兴趣的文章
条件表达式于运算符的点点滴滴的积累
查看>>
最短路径最基本的三种算法【此后无良辰】
查看>>
class的点点滴滴的总结
查看>>
vector 的点点滴滴的总结
查看>>
测试用例
查看>>
自动化测试学习步骤
查看>>
自动化测试需要掌握的知识
查看>>
HTTP协议
查看>>
Python问题总结01
查看>>
Python小程序——冒泡排序
查看>>
cmd中输入net start mysql 提示:服务名无效或者MySQL正在启动 MySQL无法启动
查看>>
LeetCode 206反转链表 [javsScript]
查看>>
[LeetCode javaScript] 3. 无重复字符的最长子串
查看>>
[LeetCode javaScript] 6. Z字形变换
查看>>
[LeetCode javaScript]455. 分发饼干
查看>>
[LeetCode javaScript] 735. 行星碰撞
查看>>
[LeetCode javaScript] 125. 验证回文串
查看>>
[LeetCode javaScript] 226. 翻转二叉树
查看>>
[LeetCode javaScript] 520. 检测大写字母
查看>>
[LeetCode javaScript] 350. 两个数组的交集 II
查看>>