流程控制基本概念
-
顺序结构:默认的流程结构,按照书写顺序从上到下的执行
-
选择结构:对给定的条件进行判断,根据判断的结果来决定执行那一段代码
-
循环结构:在给定条件成立的情况下,反复执行某一段代码
选择结构 if
-
第一种格式
// 第一种结构
/*
if (条件表达式){
代码块
} // 如果条件表达式成立执行代码块
*/
int age = 18;
if (age >= 18){
printf("你可以去上网吧了\n");
}
printf("end\n");
if (age < 17){ // 条件满足执行代码块,不满足直接执行 end
printf("你可以去上网吧了\n");
}
printf("end\n");
- 第二种格式
// 第二种结构
/*
if (条件表达式){ // 如果条件表达式成立执行代码块1
代码块1
} else{ // 如果条件表达式不满足执行代码块 2
代码块 2
}
*/
int age = 10;
if(age >= 18){
printf("你可以去上网吧了\n");
}else{
printf("小屁孩未满十八周岁,回家洗洗睡吧\n");
}
- 第三种格式
// 第三种格式
/*
if (条件表达式){ // 如果条件表达式成立执行代码块1
代码块1
}
else if(条件表达式 2) { // 如果条件表达式2不满足执行代码块 2
代码块 2
}
else if(条件表达式 3){ // 如果条件表达式2不满足执行代码块 2
}
else{ // 如果前面的都没有满足,就会执行 else 中的代码块
}
// 只要条件表达式为真了,后面的 else if就不会执行了
// 如果前面的都没有满足,就会执行 else 中的代码块
// 众多的大括号只会执行一个
// 如果执行到后面的d条件表达式,就代表掐面的表达式都不成功
*/
int age = 6;
if (age == 1){
printf("该走路了");
}else if (age == 6)
{
printf("该上学了");
}else if(age == 18)
{
printf("你可以进入网吧了");
}else{
printf("你可以随便干一些事情了");
}
- 第五种格式 if 的嵌套使用
// 第五种格式 if 中的嵌套
/*
if (条件表达式 1){
代码块
if (嵌套中的条件表达式 1-1){
代码块
if ( 嵌套中的条件表达式 1-1-1){
代码块
}
}
}
*/
int number = 0;
if (number > 3){
if (number < 10){
printf("number 是在 3-10 之间的数字\n");
}else{
printf("number 是在大于 10的数字\n");
}
}else{
printf("number 是在 小于 3 的数字\n");
}
- if 的练习题
// if 练习
/*
// 从键盘c输入一个整数,判断是奇数还是偶数,偶数输出 yes,奇数c输出 no
printf("请您输入一个整数,以回车结束\n");
int number = 0;
scanf("%i",&number);
if (number % 2 == 0){
printf("YES");
}else{
printf("NO");
}
*/
// 根据用户输入的 1-7 的整数,输出对应的星期几
// 使用 else if 可以保证只执行一个代码块,执行后就不会继续往下执行,如果z使用多个 if,就是从上往下执行一个一个来
int number = -1;
printf("请输入一个1-7 的数字,我们将为您显示星期几");
scanf("%i",&number);
if(number > 7 || number < 1){
printf("哪有这样的星期呢?\n");
}
if(number == 1){
printf("星期一");
}else if (number == 2)
{
printf("星期二");
}else if (number == 3)
{
printf("星期三");
}else if (number == 4)
{
printf("星期四");
}else if (number == 5)
{
printf("星期五");
}else if (number == 6)
{
printf("星期六");
}else if (number == 7)
{
printf("星期日");
}
// 接收s用户输入的一个整数,根据月份输出对应的季节
// 3-5春季,6-8 夏季,9-11 秋季,12,1,2 冬季
printf("n请您输入一个1-12 之间的月份,以回车结束\n");
int month = -1;
scanf("%i",&month);
if (month < 1 || month > 12){
printf("一年就 12 个月,不会给你多发工资的\n");
}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");
}
// 注意点在于冬季的判断,12,1,2,此时可以利用 else if 只会执行一个条件表达式的代码块的特点,开头排除掉大于 12,和小于 1 的数字,剩下的数字肯定会走到下面的判断中,春季,夏季,秋季都好弄.
//键盘输入两个整数,判断大小后输出较大的内个数
int num1 = -1,num2 = -1;
printf("请输入两个整数,以回车结束\n");
scanf("%i,%i",&num1,&num2);
if (num1 > num2){
printf("%i\n",num1);
}else if(num1 < num2 )
{
printf("%i\n",num2);
}else{
printf("您输入的两个数相等\n");
}
// 但是使用三目运算符是不是更简单呢?
int max = num1 > num2 ? num1 : num2;
printf("您输入的两个数的最大值是:%i\n",max);
// 这两种方式的对比,三目运算符可以快速的找出最大值,但是 if,else 可以找到这个最大值,而且还可以对此变量进一步的操作
// 从键盘输入l三个数,输出最大的内个数
int num1,num2,num3;
printf("请输入a三个数,以逗号分割,回车结束");
scanf("%i,%i,%i,",&num1,&num2,&num3);
if (num1 > num2){
if (num1 > num3){
printf("最大值是:%i\n",num1);
}
else{
printf("最大值是:%i\n",num3);
}
}else{
if(num2 > num3){
printf("最大值是:%i\n",num2);
}
else{
printf("最大值是:%i\n",num3);
}
}
// 判断大小,交换变量的值
int num1,num2,num3;
printf("请输入a三个数,以逗号分割,回车结束");
scanf("%i,%i,%i,",&num1,&num2,&num3);
if (num1 < num2){
int temp = num1;
num1 = num2;
num2 = temp;
}
if (num1 < num3)
{
int temp = num1;
num1 = num3;
num3 = temp;
}
if (num2 < num3)
{
int temp = num2;
num2 = num3;
num3 = temp;
}
printf("%i,%i,%i,",num1,num2,num3);
-
if 的注意点
- 任何数值都有真假性,非 0 既是真,
if (1){ printf("你好\n"); }else{ printf("走不到这里"); }
- if条件判断后面最好加上大括号(如果省略大括号只会执行离他最近的一条语句)
if (1) printf("你好"); printf("end");
- If条件表达式没有加大括号,而且写了分号时,(分号也是一个语句)
if(1); printf("nihao"); printf("end"); // 此时只会执行 end,因为条件表达式后面有一个分号,分号是一个语句
- 如果要在 if里面定义变量,那么必须要写上大括号,不然会报错
if (1) int number = 20; printf("%i\n",number); // 没有大括号此时是报错的,因为if 后面没有写大括号只会管离得最近的一条语句,而在后面有要打印 number 的值,在这个作用域中找不到 number 变量, printf("end");
石头剪刀布
// 练习 石头剪刀布
// 有两个玩家,我,电脑
// 两个角色都可以出石头,剪刀,布
int computerNum = arc4random_uniform(3); // 生成随机数
int userNum;
printf("请您输入石头,剪刀,布--石头:0,剪刀:1,布:2\n");
scanf("%i",&userNum);
printf("电脑出:%i,玩家出:%i\n",computerNum,userNum);
if (userNum > 2 || userNum < 1){
printf("玩家莫要作弊");
}else if((userNum == 0 && computerNum == 1) ||
(userNum == 1 && computerNum == 2) ||
(userNum == 2 && computerNum == 0)){
printf("玩家获胜");
}else if ((userNum == 0 && computerNum == 2) ||
(userNum == 1 && computerNum == 0) ||
(userNum == 2 && computerNum == 1))
{
printf("电脑获胜");
}
else{
printf("平局");
}