switch选择结构
- switch选择结构格式
* switch(表达式)
* case 表达式1:
* 表达式1控制的语句;
* break;
* case 表达式2:
* 表达式2控制的语句;
* break;
* default:
* 表达式3控制的语句;
- switch执行流程
// 执行流程:
// 根据switch()表达式的结果在case中匹配,一旦某个case被执行,其他的case就不会
// 再被执行,如果所有case都没有匹配到,就执行default中的语句
- switch选择结构的应用场景
int main()
{
//在企业开发中,能用if就选择使用if结构,if更适合对区间的判断,或者对多条件判断
//switch更适合对固定的几个数据进行判断
//switch理论上的性能比if高一点
return 0;
}
- case穿透问题
int main()
{
int main()
{
/*
* case穿透问题
*
* 1.在switch中,只要有一个case被匹配了,其他的case和default都会时效
* 2.default写在最后,可以省略break
* 3.break 作用是结束当前switch语句
* 4.case后面只能放常量和表达式,且值不能重复
* 5.case后面不能定义变量,如果要定义变量必须加{},防止作用域混乱问题
*/
int day = 1;
switch (day) {
case 1:
printf("星期一\n");
//break; //此处省略break就会发生穿透问题
case 1: //值相同会报错
printf("星期二\n");
break;
default:
printf("其他");//此处可以省略break
}
return 0;
}
- 练习题
int main()
{
/*
* 实现一个小型的计算器 + - * /
*
*/
//1.定义三个变量
int a = -1, b = -1;
char ch;
//2.提示用户输入内容
printf("请按照如下格式输入\n");
printf("示例 1 + 1\n");
//3. 键盘接收用户输入内容
scanf("%i %c %i", &a, &ch, &b);
//4. 判断当前操作
switch (ch) {
case '+':
printf("%i %c %i = %i", a, ch, b, a+b);
break;
case '-':
printf("%i %c %i = %i", a, ch, b, a-b);
break;
case '*':
printf("%i %c %i = %i", a, ch, b, a*b);
break;
case '/':
printf("%i %c %i = %i", a, ch, b, a/b);
break;
case '%':
printf("%i %c %i = %i", a, ch, b, a%b);
break;
}
//5.输入当前结果
return 0;
}
while循环语句
- while循环语句格式
int main()
{
/*
* while(条件表达式){
* 条件满足时候才执行的代码
* }
*/
return 0;
}
- while循环语句注意点
int main()
{
/*
* 特点:
* 1.只有条件满足才会执行{}中的语句,执行完成后会再次判断条件是否满足
* 如果满足就会再次执行,直到表达式条件不满足为止
*
* 2. 和if一样都可以省略大括号
* 省略{}只会控制紧随其后的语句,而且后面不能定义变量
* 3. while()和{}之间不能书写;
* 4. while和if一样可以嵌套其他合法代码
*/
while (0); {
//此处不能写分号,如果加上;就会对后面的语句失去控制
}
return 0;
}
- 练习题
int main()
{
/*
* 需求:要求统计1~n中有多少个能被7整除的数
*
*/
//1. 定义变量记录被7整除的个数
int count = 0, num = 1;
//2. 定义变量记录用户输入的n
int n = 0;
//3. 键盘输入
printf("请输入一个整数\n");
scanf("%i", &n);
//4. 判断是否能整除
while (num <= n) {
// 这里使用了编程开发中计数器实现
if(num % 7 == 0){
//能整除
count++;
}
num++;
}
//5. 打印个数
printf("%i", count);
return 0;
}
dowhile循环语句
- 格式
int main()
{
/*
* do{
* 被控制语句
* }while(条件表达式);
*/
return 0;
}
- dowhile特点
int main()
{
/*
* do{
* 被控制语句
* }while(条件表达式);
*
*
* 特点: 不会先判断条件是否满足,会先执行依次{}中的代码,然后再判断条件
*
* 大部分情况下while和dowhile可以互换,一般选择while
*
* 执行流程:
* 先执行一次do中的语句,然后判断条件是否成立,如果成立再次执行do中的语句,直到条件不成立
*
*/
//1. 定义一个变量
int num = -1;
//2. 提示用户输入1~3的整数
do{
printf("请输入1~3之间的整数\n");
//3. 接收用户输入再判断
scanf("%i", &num);
}while (num < 1 || num >3);
printf("%i\n", num);
return 0;
}
for循环语句
- 格式
for(初始化表达式;条件表达式;循环后增量表达式){
被控制语句
}
- 注意点
int main()
{
/*
* for循环注意点:
* 初始化表达式的作用: 有且只有被执行一次
* 循环表达式的作用: 想要执行循环体,表达式必须为真
*
* 增量表达式:只有循环体执行完后才会执行
*
* 执行流程:
* 1.执行一次初始化表达式
* 2.判断条件表达式是否为真
* 3.如果条件表达式为真,执行循环体
* 4.执行完循环体,执行循环后增量表达式
* 5.重复2~4步
*/
return 0;
}
- 特点
int main()
{
/*
* while循环特点:
* 控制循环的变量,定义在了while的外面,因此在循环内部和外部都可以使用该变量
*
* for循环特点:
* 控制循环的变量,定义在了for的内部,只能在循环内部使用,外面不能使用该变量
*
* 企业开发中,能用for就用for循环
*/
return 0;
}
- for循环作用域的问题
结论: 在for循环中定义和初始化表达式同名的变量不会报错
- 注意点
int main()
{
//在for的()中不能使用循环体中定义的变量
for(int i =0; i < 10; conunt++){
int count = 20;
i++;
}
return 0;
}
break
- 注意点
break只用在switch和循环结构中,离开应用的范围没有任何意义
break的作用就是结束当前语句
离开应用范围会报错
在应用范围内,break后面不能编写语句,因为永远执行不到
在循环嵌套的时候,break只会结束所在的循环
continue
int main()
{
/*
* continue
* 只能用在循环中,离开后没有意义
* 作用: 跳出本次循环,执行下一次循环,只要在循环中遇见continue,就会直接跳回到条件表达式
*
* 注意点:
* 和break一样后面不能写语句,因为永远执行不到
* 循环嵌套的时候continue只会跳出所在的循环
*
*
*/
for(int i = 0; i < 10; i++){
if(i == 5){
continue;
}
printf("i = %i\n", i);
}
return 0;
}
goto
int main()
{
//goto只能用于在同一个函数中跳转,可以往前跳,也可以往后跳,只要是在同一个函数中
//注意点:
//goto需要配合标签使用
//标签可以是任意的名称后面加:(冒号)即可
printf("打印1");
goto lenj;
printf("打印2");
lenj: printf("打印3");
return 0;
}
循环练习
规律: 外部循环是控制行数,内部循环是控制列数
int main()
{
/*
* *
* **
* ***
* ****
*
*/
//控制行数
for(int i = 0; i <= 3; i++){
//控制列数
for(int j = 0; j<= i; j++){
printf("*");
}
printf("\n");
}
return 0;
}
int main()
{
/*
* *---
* **--
* ***-
* ****
*
*
*/
for(int i = 0; i <= 3; i++){
for(int j = 0; j <= i; j++){
printf("*");
}
for(int k = i; k <= 2; k++){
printf("-");
}
printf("\n");
}
return 0;
}
#include
int main()
{
/*
* *
* ***
* *****
*
*/
for(int i = 0; i <= 2; i++){
for(int j = 0; j <= 2*i; j++){
printf("*");
}
printf("\n");
}
return 0;
}