流程控制
流程控制三种结构: 顺序结构, 选择结构, 循环结构
选择结构
- C语言中提供了两大选择结构,分别是if 和switch;
1. if条件语句
- if 的第一种表达式
- 如果表达式为真,执行语句块1,否者不执行;
if(条件表达式){
条件成立执行的语句;
}
if(age >= 18){
printf("上网去\n");
}
printf("买饮料\n");
- if的第二种表达式
- 如果表达式为真,执行语句块1,否者执行语句块2;
- else 不能脱离if单独使用;
if(条件表达式){
条件成立执行的语句;
}else{
条件不成立执行的语句;
}
if(num % 2 == 0){
printf("num is 偶数");
}else{
printf("num is 奇数");
}
- if的第三种表达式
- 从上到下依次判断条件跳大神,哪个表达式成立,就会执行那个条件表达式后面{}的内容;
- 如果所有条件表达式都不成立,就执行else后面括号中的内容;
if(表达式1){
条件满足执行语句块1;
}else if(表达式2){
条件满足执行语句块2;
}else if(表达式3){
条件满足执行语句块3;
}else{
条件不成立执行的语句;
}
if(age > 18){
printf("上大学");
}else if (age > 15){
printf("上高中");
}else if(age > 12){
printf("上初中");
}else if(age > 7){
printf("上小学")
}else{
printf("上幼儿园");
}
- if嵌套
- if中可以继续嵌套if, else中也可以继续嵌套;
if(表达式1){
语句块1;
if(表达式2){
语句块2;
}
}else{
if(表达式3){
语句块3;
}else{
语句块4;
}
}
-
if注意点
- if语句不用写分号;
#include <stdio.h> int main() { int num = 10; // (;)也是一条语句, 称之为空语句 if(num >18); // 写了这个分号;{}中的内容就脱离if的控制 { printf("该去上大学了"); } return 0; // 条件不满足还是会执行{}中的内容; // 输出该去上学了 }
- 当if else后面只有一条语句时, if else后面的大括号可以省略,如果省略大括号,那么仅仅距离if最近的那个条语句受到if的控制
- 当if else后面的大括号被省略时,** else会自动和距离最近的一个if匹配**
- 如果if 省略了大括号, 那么后面不能定义变量
#include <stdio.h> int main() { if(1) int num = 10; // 系统会报错 printf("num = %i", num); return 0; }
#include <stdio.h> int main(){ if(0){ int num1 = 10; }else int num2 = 20; // 系统报错 printf("num2 = %i", num2); return 0; }
- C语言中分号(;)也是一条语句, 称之为空语句
- 但凡遇到比较一个变量等于或者不等于某一个常量的时候,把常量写在前面
- 任何数值都有真假性;在企业开发中如果要判断是否相等,建议把常量写在前面,把变量写在后面
- {}可以单独出现,{}出现的时候是一个代码块; 主要用于隔离变量使用;代码块外面是不能访问代码块内的变量;代码块里面可以访问代码块外面的变量;
{ int age = 18; printf("age = %i\n", age); } printf("age = %i\n",age); //会报错
-
if 练习
- 从键盘输入一个整数,判断其是否是偶数,如果是偶数就输出YES,否则输出NO;
#include <stdio.h> int main(){ //从键盘输入一个整数,判断其是否是偶数,如果是偶数就输出YES,否则输出NO; // 定义一个变量 int num = -1; // 提示用户如何输入 printf("请输入一个整数,以回车键结束;\n"); // 接收用户的输入 scanf("%i", &num); // if语句判断是偶数则输出YES ,否则输出NO; if(0 == num % 2){ // 偶数 printf("YES"); }else{ // 奇数 printf("NO"); } return 0; }
- 接收用户输入的1~7的整数,根据用户输入的整数,输出对应的星期几
#include <stdio.h> int main() { //接收用户输入的1~7的整数,根据用户输入的整数,输出对应的星期几 // 定义变量 int num = -1; // 提示用户输入 printf("请输入1~7的整数:"); // 接收用户的输入 scanf("%i", &num); // 判断对应的值 if(num < 1 || num > 7){ printf("对不起,你输入的数有误! 请重新打开输入\n"); }else if(1 == num){ printf("星期一\n"); }else if(2 == num){ printf("星期二\n"); }else if(3 == num){ printf("星期三\n"); }else if(4 == num){ printf("星期四\n"); }else if(5 == num){ printf("星期五\n"); }else if(6 == num){ printf("星期六\n"); }else { printf("星期日"); } return 0; }
- 接收用户输入的一个整数month代表月份,根据月份输出对应的季节
#include <stdio.h> int main() { // 接收用户输入的一个整数month代表月份,根据月份输出对应的季节 // 定义变量 int month = -1; // 提示用户正确输入 printf("请输入月份:"); // 接收数据 scanf("%i", &month); // 判断输入,输出相应的季节 if(month < 1 || month > 12){ printf("请重新输入月份"); }else if(month >= 3 && month <= 5){ printf("春季\n"); }else if(month >=6 && month <= 8){ printf("夏季\n"); }else if(month >= 9 && month <= 11){ printf("秋季\n"); }else{ printf("冬季\n"); } return 0; }
- 接收用户输入的两个整数,判断大小后输出较大的那个数
#include <stdio.h> int main() { // 接收用户输入的两个整数,判断大小后输出较大的那个数 // 定义两个变量; int a = -1, b = -1; // 提示用户输入两个数 printf("请输入两个数, 以逗号隔开:\n"); // 接收用户输入的两个数 scanf("%i,%i", &a, &b); // 判断大小 if(a > b){ // a>b,输出a; printf("Max = %i", a); }else{ // b > a, 输出b; printf("Max = %i", b); } return 0; }
- 接收用户输入的三个整数,判断大小后输出较大的那个数
// 定义三个变量: int a = -1, b = -1, c = -1; // 定义最大值 int max = -1; // 提示用户输入三个整数; printf("请输入三个整数,以逗号隔开:\n"); // 接收数据 scanf("%i,%i,%i", &a, &b, &c); // 判断大小 if(a > b){ if(a > c){ max = a; }else{ max = c; } }else{ if(b > c){ max = b; }else{ max = c; } } // 输入最大值; printf("max = %i", max);
- 接收用户输入的三个整数,排序后输出
// 定义用户输入的三个数 int a = -1, b = -1, c = -1; // 定义临时变量 int temp = -1; //提示用户输入格式: printf("请输入三个整数, 以逗号隔开, 最后以回车结束:\n"); // 接收用户输入: scanf("%i,%i,%i", &a, &b, &c); // 进行两个比较; if(a > b){ temp = a; a = b; b = temp; } if(b > c){ // 得到最值c temp = b; b = c; c = temp; } if(a > b){ // 得到最值b temp = a; a = b; b = temp; } // 输出结果 printf("%i,%i,%i" , a, b, c);
2. 选择结构 switch
- 格式:
switch(表达式){
case 常量表达式1: // 相当于else if
语句1;
break;
case 常量表达式2:
语句2;
break;
case 常量表达式n:
语句n;
break;
default: // 相当于else
语句n+1;
break;
}
- 执行流程:
- 1.计算switch后面()中表达式的结果;
- 2.利用计算的结果从上之下的和switch后面{}中的case的表达式的值依次比较;
- 3.一旦发现switch 表达式的值和case表达式的值相同,就执行该case后面的语句;
- 4.一旦某个case被执行,其他的case就不会执行了
- 5.如果所有case表达式的值和switch表达式的值都不相等,那么执行default后面的语句;
int day = 3;
switch (day){
case 1:
printf("星期一");
break;
case 2:
printf("星期二");
break;
default :
printf("Other");
break;
}
// 执行结果为: Other;
switch注意点
- switch中只要任意一个case匹配, 其它所有的case和default都会失效. 所以如果case和default后面没有break就会出现穿透问题,break在switch中的作用,就是跳出switch语句(结束当前的switch语句);
switch条件表达式的类型必须是整型, 或者可以被提升为整型的值(char、short)
case的值只能是常量,不能是变量, 并且还必须是整型, 或者可以被提升为整型的值(char、short)
case后面常量表达式的值不能相同
case后面不能定义变量要想定义变量,必须给case加上大括号
switch中default可以省略
switch中default的位置不一定要写到最后, 无论放到哪都会等到所有case都不匹配才会执行(穿透问题除外)记住一点: default永远写在最后;