C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实 现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种 结构的组合。
我们可以使⽤ if 、 switch 实现分⽀结构,使⽤ for 、 while 、 do while 实现循环结构。
1、if语句
1.1 if
语法形式如下:
表达式成⽴(为真),则语句执⾏;表达式不成⽴(为假),则语句不执⾏。
在C语⾔中,0为假,⾮0表⽰真,也就是表达式的结果如果是0,则语句不执⾏,表达式的结果如果不 是0,则语句执⾏。
例⼦:输⼊⼀个整数,判断是否为奇数
1.2 else
语法形式如下:
4 语句 2
例⼦:输⼊⼀个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印偶数。 (自己试试)
练习:输⼊⼀个年龄,>=18岁就输出:成年,否则就输出:未成年 (大家可以先自己试试)
1.3 分支中包含多条语句
在 if 和 else 语句中默认都只控制⼀条语句,如下
可以看到,不管是>=18 还是 <18,“可以自在恋爱了 ” 都可以打印在屏幕上
这是因为 if 语句只能控制⼀条语句,就是 printf("成年了\n"); ,if语句为真,则打印成年了, if语句为假,则不打印;对于 printf("可以谈恋爱了\n"); 是独⽴存在的,不管if语句的条件的真假,都会被执⾏。
那如果我们要if语句同时控制2条语句,怎么办呢?那就要使⽤ {} 将代码括起来, else后也可以跟上⼤括号。 【if 后使⽤{} 控制多条语句-这个块也叫:程序块,或者复合语句 】
1.4 嵌套if
在 if else 语句中, else 可以与另⼀个 if 语句连⽤,构成多重判断。
比如:要求输⼊⼀个整数,判断输⼊的整数是0,还是正数或者负数。请看如下代码:
再⽐如: 输⼊⼀个整数,如果是正数,再判断是奇数还是偶数,并输出;如果不是正数则输出:⾮正数。
练习: ( 大家先自己试试)
参考代码:
1.5 悬空else问题
如果有多个 if 和 else ,可以记住这样⼀条规则: else 总是跟最接近的 if 匹配。
或者如果我们希望else确实和第⼀个if匹配,可以这样修改代码:
只要带上适当的⼤括号{},代码的逻辑就会更加的清晰,所以⼤家以后在写代码的时候要注意括号的使 ⽤,让代码的可读性更⾼。
2、关系操作符
C语⾔⽤于⽐较的表达式,称为“关系表达式”,⾥⾯使⽤的运算符就称 为“关系运算符”,主要有下⾯6个。
> ⼤于运算符 < ⼩于运算 符 >= ⼤于等于运算符
<= ⼩于等于运算符 == 相等运算符 != 不相等运算符
关系表达式通常返回 0 或 1 ,表⽰真假。 C语⾔中, 0 表⽰假,所有⾮零值表⽰真。
⽐如, 20 > 12 返回 1 , 12 > 20 返回 0 。
3、条件操作符
条件操作符也叫三⽬操作符,需要接受三个操作数的,形式如下:
计算逻辑:如果 exp1 为真, exp2 计算,计算的结果是整个表达式的结果;如果 exp1 为假, exp3 计算,计算的结果是整个表达式的结果。
练习:使⽤条件表达式实现找两个数中较⼤值。(自己试试)
4、逻辑操作符:! && ||
! :逻辑取反运算符(改变单个表达式的真假)。
&& :逻辑与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
|| :逻辑或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)。
注:C语⾔中,⾮0表⽰真,0表⽰假。
4.1 逻辑取反运算符 !
4.2 逻辑与运算符 &&
&& 就是与运算符,也是并且的意思, && 是⼀个双⽬操作符,使⽤的⽅式是 a&&b , && 两边的表达式都是真的时候,整个表达式才为真,只要有⼀个是假,则整个表达式为假。
【全真才真 一假即假】
4.3 逻辑或运算符 ||
|| 就是或运算符,也就是或者的意思, || 也是⼀个双⽬操作符,使⽤的⽅式是 a || b , || 两边的表达式只要有⼀个是真,整个表达式就是真,两边的表达式都为假的时候,才为假。
【全假才假 一真即真】
4.4 练习:闰年的判断
输⼊⼀个年份year,判断year是否是闰年
闰年判断的规则:
1. 能被4整除并且不能被100整除是闰年
2. 能被400整除是闰年
4.5 短路
像这种仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进⾏计算的运算称为短路求值。
5、switch语句
switch 语句⽤于判断条件有多个结果的情况。
根据 expression 不同的值,执⾏相应 case 分⽀。如果找不到对应的值, 就执⾏ default 分⽀。
【注: • switch 后的 expression 必须是整型表达式 • case 后的值,必须是整形常量表达式】
练习:输⼊任意⼀个整数值,计算除3之后的余数
上述的代码中,我们要注意的点有:
1. case 和后边的数字之间必须有空格
2. 每⼀个 case 语句中的代码执⾏完成后,需要加上 break ,才能跳出这个switch语句。
如果某⼀个 case 语句的后边没有 break 语句,代码会继续往下执⾏,有可能执⾏其他 case 语句中的代码,直到遇到 break 语句或者 switch 语句结束。
当然, break 也不是每个 case 语句都得有,这就得根据实际情况来看了。
switch语句中的case和default的顺序问题
6、while循环
⾸先上来就是执⾏判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执⾏循环语 句,语句执⾏完后再继续判断,是否进⾏下⼀次判断。
练习:在屏幕上打印1~10的值
练习:
7、for循环
for (表达式1; 表达式2; 表达式3)
语句;
表达式1⽤于循环变量的初始化 表达式2⽤于循环结束条件的判断
表达式3⽤于循环变量的调整
练习:计算1~100之间3的倍数的数字之和
8、do-while循环
在循环语句中 do while 语句的使⽤最少,它的语法如下:
练习:在屏幕上打印1~10的值
练习:
9、break和continue语句
9.1 while循环中的break和continue
break
continue
9.2 for循环中的break和continue
break
其实和 while 循环中的 break ⼀样, for 循环中的 break 也是⽤于终⽌循环的,不管循环还需要循环多少次,只要执⾏到了 break ,循环就彻底终⽌,我们上代码。
break 的作⽤是永久的终⽌循环,未来我们在某个条件发⽣的时候,不想再继续循环的时候,就可以 使⽤ break 来完成。
continue
【do.while 语句中的 break 和 continue 的作⽤和 while 循环中⼏乎⼀模⼀样 可以自己试试】
10、循环的嵌套
前⾯学习了三种循环 while , do while , for ,这三种循环往往会嵌套在⼀起才能更好的解决 问题,就是我们所说的:循环嵌套,这⾥我们就看⼀个例⼦。
练习:找出100~200之间的素数,并打印在屏幕上。
注:素数⼜称质数,只能被1和本⾝整除的数字。
题⽬解析:
1. 要从100~200之间找出素数,⾸先得有100~200之间的数,这⾥可以使⽤循环解决。
2. 假设要判断i是否为素数,需要拿2~i-1之间的数字去试除i,需要产⽣2~i-1之间的数字,也可以使⽤ 循环解决。
3. 如果2~i-1之间有数字能整除i,则i不是素数,如果都不能整除,则i是素数。