1.顺序结构 从上到下依次执行
2.分支结构 需要根据条件 选择性执行某些代码或跳过某些代码
3.循环结构 根据条件 对某些代码 重复执行
分支结构:
二分支:
if( 条件表达式 )
{
语句块1; //当 条件表达式 的值为 真 时 语句块1执行
}
else
{
语句块2; //当 条件表达式 的值为 假 时 语句块2执行
}
格式简化或变种:
1. 语句块 只有一行C代码 即只有一个; 结束
代码块的 {} 可以省略不写
2. else 部分 没有代码 else {} 都可以省略
练习: 输入你的成绩 输出 及格 60 不及格
练习2: 输入你的成绩 输出 优90良80中60差
if嵌套: 即 if的代码块中包含 if结构
多分支:
结构:
switch( 整型表达式 )
{
case 常量整型表达式1:
语句块1;
break;
case 常量整型表达式2: 语句块2; break;
.....
default: 语句块n;
}
整型表达式: 表达式的值 是一个整数 可以有变量 a / 10;
常量整型表达式: 表达式的值 是一个整数 不能有变量 5+3;
运算逻辑:
计算 整型表达式 的值, 依次 从上到下 与 case 中的
常量整型表达式 的值 比较 ==
若相等, 则 执行 对应case 后的 语句块,
若 遇到break关键字 退出switch结构
若 没有break关键字 继续向下执行 后续case中的语句块
若不相等 则 继续向下比较 其他case中的值
default 语句块 在 没有命中 case中的值时
执行该语句块 若一直没有break关键字,也会执行到default 语句块
若不需要 default也可以省略
使用注意: 1.switch结构只对整型结构有效
2. 不能对变量进行case
3. case中的值不能存在相等的
练习:
输入一个 日期 年月日 计算 这个一天 是 这一年的第几天?
循环结构:
通常在程序中 需要反复执行某些动作, 则需要循环
即在某些情况下,程序会跳转到前面去继续执行代码
while 循环
结构:
while( 条件表达式 )
{
循环语句块;
}
执行逻辑:
1.先判断 条件表达式的 真假
若真: 执行一次循环语句块; 再回到动作1
若假: 退出循环 即循环结束了
do while循环
结构:
do{
循环语句块;
}while( 条件表达式 );
执行逻辑:
1. 先执行一次 循环语句块;
2. 再 判断 条件表达式的 真假
若真: 执行一次循环语句块; 再回到动作2
若假: 退出循环 即循环结束了
示例: 求 1+2+3+4+.... 100=的和
存在循环 sum += i++;
退出条件 i <= 100
for循环
结构:
for( 循环初始化语句 ; 循环条件表达式 ; 递进表达式 )
{
循环体;
}
执行逻辑:
1. 先执行一次 循环初始化语句
2. 判断 循环条件表达式 的真假
若真 执行 循环体一次; 在执行一次递进表达式; 回到 动作2
若假 退出 循环
递进表达式: 即使continue提前结束了本次循环,下一次循环开始前 递进表达式 也要执行
缩略写法:
若 循环初始化语句 没有 可以不写
若 循环条件表达式 不写 表示一直为真
若 递进表达式 不需要 也可以省略不写
死循环:
for(;;)
{}
while(1)
{}
练习: 输入一个数num 输出这个数的阶乘 5! = 1*2*3*4*5
循环控制关键字:
break; 提前跳出循环 不执行循环了 对于嵌套循环 只能跳出本循环
continue; 继续 提前结束 本次循环 重新开始下一次循环
goto 程序跳转关键字 只能在同一个函数中进行跳转
示例:
打印 0-10 中 的 奇数 与 偶数
作业3: 打印输出 99乘法表 循环实现
作业4: 求 斐波那契数据 第 25项的值
1 1 2 3 5 8 13 ....
goto示例:
银行转账:
A ---> B
1. A -= 100; 若 1 失败 goto end;
2. B += 100; 若 2 失败 goto err;
printf("操作成功");
return 0;
err: // 操作回滚
A += 100;
end:
printf("操作失败!");