1、流程控制语句介绍
流程控制语句可以控制程序的执行过程,流程控制语句可以分为4种结构:
a、顺序结构
b、选择结构
c、循环结构
d、跳转结构
2、顺序结构
程序是从main的第一句执行到最后一句
上一句执行完后才能执行下一句
顺序结构没有语句,是程序的一种自然而然的执行流程。
3、选择结构
两类:if-else组合 switch-case
3.1、if-else组合
3类:单个if 二选一if-else 多选一 if - else if... - else
a、单个if
if(条件表达式)
{
// 条件表达式为真执行的语句块
}
例: ·
#include<stdio.h>int main(void)
{int a; printf("------前-------\n"); scanf("%d",&a);if(!a) // a == 0{printf("---条件为真----\n");} printf("------后-------\n"); return 0;
}
b、二选一if-else
if(条件表达式)
{
// 语句块1 --- 条件表达式为真执行
}
else
{
// 语句块2 ---- 条件表达式为假执行
}
例:
需求:输入判断是偶数还是奇数
思路:
输入一个数
如果 数 % 2 == 0
{
输出 偶数
}
否则
{
输出 奇数
}
代码1:
#include<stdio.h>int main(void)
{int a;printf("请输入一个数据:");scanf("%d",&a);if(a % 2 == 0){printf("偶数");}else{printf("奇数");}return 0;
}
c、多选一 if - else if... - else
if(条件表达式1)
{
// 语句块1 --- 条件表达式1为真的时候执行
}
else if(条件表达式2)
{
// 语句块2 ---- 条件表达式1为假,条件表达式2为真的时候执行
}
// ...
else if(条件表达式n)
{
// 语句块n ---- 条件表达式1-n-1为假,条件表达式n为真的时候执行
}
else
{
// 语句块n+1 ---- 前面所有的表达式都为假的时候执行语句
}
例:
需求: 输入星期数字,输出对应的星期中文
#include<stdio.h>int main(void)
{int a;scanf("%d",&a);if(a==1){printf("星期一"); }else if(a==2){printf("星期二"); }else if(a==3){printf("星期三"); }else if(a==4){printf("星期四"); }else if(a==5){printf("星期五"); }else if(a==6){printf("星期六"); }else if(a==7) {printf("星期日"); }else{printf("输入错误"); } return 0;
}
3.2、switch-case
---- 等值判断 不适合表达范围
格式:
switch(表达式)
{
case 常量1:
语句块1;
break; // 结束匹配
case 常量2:
语句块2;
break; // 结束匹配
// 。。。
default:
语句块n;
break; // default里面的break可加可不加
}
执行流程:
计算表达式的是和常量进行判断是否相等,如果相等就执行后面的语句块,直到break;
如果不相等就继续向下匹配..
匹配了所有都不想等,就执行default后面的语句。
例:
需求:输入星期数字,输出对应的星期中文
#include<stdio.h>int main(void)
{int a;printf("输入一个数据:");scanf("%d",&a);switch(a){case 1:printf("星期一");break;case 2:printf("星期二");break;case 3:printf("星期三");break;case 4:printf("星期四");break;case 5:printf("星期五");break;case 6:printf("星期六");break;case 7:printf("星期日");break; default:printf("输入有误");break;}return 0;
}
拓展:
break在switch-case里面的作用:结束匹配
switch-case 某些case后面如果没有break的时候,会从匹配的case开始执行直到遇到break结束。
多个case数值可以共用同一段代码
例:
需求:求一个月的总天数 --- 输入月份和年份
分析:
1 3 5 7 8 10 12 -- 31天
4 6 9 11 --- 30天
2
年份 -- 闰年 -- 29天
年份 -- 闰年 -- 28天
#include<stdio.h>int main(void)
{int year,month;printf("请输入年份和月份");scanf("%d %d",&year,&month); switch(month){case 1:case 3:case 5:case 7:case 8:case 10:case 12:printf("31"); break;case 4:case 6:case 9:case 11:printf("30"); break;case 2:if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0){printf("29"); }else{printf("28"); }break;default:printf("输入有误"); }return 0;
}
4、循环结构
循环结构用于重复执行一段代码
循环结构分为:for while do-while
4.1、for循环
定义一个循环变量 -- 循环的数据或者循环的次数
for(变量赋初值;循环条件;变量的改变)
{
// 循环体
}
练习:
输出1~10中的每一个数
#include<stdio.h>int main(void)
{int i;for(i=1;i<=10;i++){printf("%d ",i);}return 0;
}
练习:
计算1+2+3...+10
#include<stdio.h>int main(void)
{int i;// 求和int sum = 0; for(i=1;i<=10;i++){// i值数据// printf("%d ",i);sum = sum + i; }printf("%d",sum);return 0;
}
4.2、while循环
while(条件表达式)
{
// 循环体
}
练习:
需求:输出所有小写字母 ‘a’ ~ 'z'
分析:
设置什么变量存储字符 char
起始填充'a'
循环执行的是
输出 变量里面的字符
变量 = 变量 + 1
循环条件: 变量 <= 'z'
#include<stdio.h>int main(void)
{char ch = 'a';while(ch <= 'z'){printf("%c ",ch);ch++;}return 0;
}
4.3、do-while循环
do
{
// 循环体
}while(条件表达式);
执行流程:
先执行循环体 判断条件表达式,如果为真继续执行,执行后再判断
如果为假结束循环
例:输出 1~ 10;
#include<stdio.h>int main(void)
{int i = 1;do{printf("%d",i);i++;}while(i<=10);return 0;
}
4.4、for、while、do-while区别
for和while
for循环一般适用于知道次数 ,知道开始数值和结束数值
while循环知道结束条件
while和do-while
while 先判断表达式 如果为真执行语句,如果为假结束循环 >=0
do-while 先执行一遍循环体,然后再判断表达式,如果为真继续执行,如果为假结束 >=1
5、跳转结构
跳转结构有:break; continue; goto; return;
5.1、break
break:跳出离它最近的一层循环
#include<stdio.h>int main(void)
{int i;for(i=1;i<10;i++){if(i % 3 == 0){break;}printf("%d ",i); // 1 2 } return 0;
}
5.1、continue
continue:跳出本次循环,循环还在继续
#include<stdio.h>int main(void)
{int i;for(i=1;i<10;i++){if(i % 3 == 0){continue;}printf("%d ",i); // 1 2 4 5 7 8 --- 除了3的倍数都会输出 }return 0;
}
5.3、goto
goto:无条件跳转
执行goto要跳转到哪一个标识符就跳到对应标识符定义的位置。
标识符:标记符号 -- 自定义 -- 建议大写
标识符定义:标识符名:
使用标识符跳转:goto 标识符名;
注意:标识符定义和goto跳转语句必须在一个函数内。
例:
#include<stdio.h>int main(void)
{ int count = 0; A:printf("-----goto语句之前-------\n");count++;if(count < 3){goto A;}printf("-----goto语句之后-------\n");printf("------最后一条语句-------\n"); return 0;
}