目录
1.if语句
语法结构:
if ( 表达式 )
语句 ;
if ( 表达式 )
语句 1 ;
else
语句 2 ;
// 多分支
if ( 表达式 1 )
语句 1 ;
else if ( 表达式 2 )
语句 2 ;
else
语句 3 ;
演示代码
#include <stdio.h> int main() { int age = 0; scanf("%d", &age); if(age<18) { printf("少年\n"); } else if(age>=18 && age<30) { printf("青年\n"); } else if(age>=30 && age<50) { printf("中年\n"); } else if(age>=50 && age<80) { printf("老年\n"); } else { printf("老寿星\n"); } }
如果条件成立,该如何执行多条语句
#include <stdio.h> int main() { if(表达式) { 语句列表1; } else { 语句列表2; } return 0; }
浮空else语句
//适当的使用{}可以使代码的逻辑更加清楚。 //代码风格很重要 #include <stdio.h> int main() { int a = 0; int b = 2; if(a == 1) { if(b == 2) { printf("hehe\n"); } } else { printf("haha\n"); } return 0; }
else的匹配:else是和他离得最近的if语句相匹配。
switch语句
switch语句也是一种多分支语句。通常适用于多分支的情况。
如:
输入 1 ,输出星期一
输入 2 ,输出星期二
输入 3 ,输出星期三
输入 4 ,输出星期四
输入 5 ,输出星期五
输入 6 ,输出星期六
输入 7 ,输出星期日
switch语句的实现
switch ( 整型表达式 )\\不能是浮点型 { case 整形常量表达式 : 语句 ; }
switch中的break
在switch语句中,我们没办法直接实现分支,搭配break使用才能实现真正的分支。
break可以阻断语句的进行
起到终止的作用
通过要求来设置break的位置
1.#include <stdio.h> int main () { int day = 0 ; switch ( day ) { case 1 : printf ( " 星期一 \n" ); break ; case 2 : printf ( " 星期二 \n" ); break ; case 3 : printf ( " 星期三 \n" ); break ; case 4 : printf ( " 星期四 \n" ); break ; case 5 : printf ( " 星期五 \n" ); break ; case 6 : printf ( " 星期六 \n" ); break ; case 7 : printf ( " 星期天 \n" ); break ; } return 0 ; } 2. #include <stdio.h> //switch 代码演示 int main () { int day = 0 ; switch ( day ) { case 1 : case 2 : case 3 : case 4 : case 5 : printf ( "weekday\n" ); break ; case 6 : case 7 : printf ( "weekend\n" ); break ; } return 0 ; }
break 语句 的实际效果是把语句列表划分为不同的分支部分。
编程好习惯
在最后一个 case 语句的后面加上一条 break 语句。
(之所以这么写是可以避免出现在以前的最后一个 case 语句后面忘了添加 break 语句)。
default子句
如果表达的值与所有的 case 标签的值都不匹配怎么办?
其实也没什么,结构就是所有的语句都被跳过而已。
程序并不会终止,也不会报错,因为这种情况在 C 中并不认为是个错误。
但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?
你可以在语句列表中增加一条 default 子句,把下面的标签
default :
写在任何一个 case 标签可以出现的位置。
当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。
所以,每个 switch 语句中只能出现一条 default 子句。
但是它可以出现在语句列表的任何位置,而且语句流会像执行一个 case 标签一样执行 default 子句。
编程好习惯
在每个switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个break 。
循环语句
while
for
do while
while循环
由于我们发现生活中很多的实际的例子是:同一件事情我们需要完成很多次。
那我们怎么做呢?
C 语言中给我们引入了: while 语句,可以实现循环。
//while 语法结构
while(表达式)
循环语句;
例如:打印1-10的数字
#include <stdio.h> int main () { int i = 1 ; while ( i <= 10 ) { printf ( "%d " , i ); i = i + 1 ; } return 0 ; }
while语句中break和continue的使用
break是跳出该循环
continue是不进行该次循环的下面步骤,重新开始下一次的循环
break 在 while 循环中的作用:
其实在循环中只要遇到 break ,就停止后期的所有的循环,直接终止循环。
所以: while 中的 break 是用于 永久 终止循环的。
eg:
//break 代码实例 #include <stdio.h> int main () { int i = 1 ; while ( i <= 10 ) { if ( i == 5 ) break ; printf("%d",i); i=i+1; } return 0; }这里代码输出的结果是什么? 1 2 3 4
continue 是用于终止本次循环的,也就是本次循环中 continue 后边的代码不会再执行,
而是直接跳转到 while 语句的判断部分。进行下一次循环的入口判断
eg:
//continue 代码实例 2 #include <stdio.h> int main () { int i = 1 ; while ( i <= 10 ) { i = i + 1 ; if ( i == 5 ) continue ; printf ( "%d " , i ); } return 0 ; } 这里代码输出的结果是什么 1 2 3 4 6 7 8 9 10
for循环
语法
for ( 表达式 1 ; 表达式 2 ; 表达式 3 ) 循环语句 ;
表达式 1
表达式 1 为 初始化部分 ,用于初始化循环变量的。
表达式 2
表达式 2 为 条件判断部分 ,用于判断循环时候终止。
表达式 3
表达式 3 为 调整部分 ,用于循环条件的调整。
eg:
打印1-10的数字
#include <stdio.h> int main () { int i = 0 ; //for(i=1/* 初始化 */; i<=10/* 判断部分 */; i++/* 调整部分 */) for ( i = 1 ; i <= 10 ; i ++ ) { printf ( "%d " , i ); } return 0 ; }
for和while比较
int i = 0 ; // 实现相同的功能,使用 while i = 1 ; // 初始化部分 while ( i <= 10 ) // 判断部分 { printf ( "hehe\n" ); i = i + 1 ; // 调整部分 } // 实现相同的功能,使用 while for ( i = 1 ; i <= 10 ; i ++ ) { printf ( "hehe\n" ); }
可以发现在 while 循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较
远,这样查找修改就不够集中和方便。所以,for 循环的风格更胜一筹; for 循环使用的频率也最高。
重点
// 请问循环要循环多少次? #include <stdio.h> int main () { int i = 0 ; int k = 0 ; for ( i = 0 , k = 0 ; k = 0 ; i ++ , k ++ ) k ++ ; return 0 ; }循环0次 //k=0直接是0,为假,直接不符合条件,跳出循环
do-while循环
语法
do 循环语句 ; while ( 表达式 );
do-while的break和continue
#include <stdio.h> int main () { int i = 1 ; do { if ( 5 == i ) break ; printf ( "%d " , i ); i = i + 1 ; } while ( i <= 10 ); return 0 ; } #include <stdio.h> int main () { int i = 1 ; do { if ( 5 == i ) continue ; printf ( "%d " , i ); i = i + 1 ; } while ( i <= 10 ); return 0 ; }