分支循环(16)

分支循环(1~6)

目录

  1. if语句
  2. 关系操作符
  3. 条件操作符
  4. 逻辑操作符:&&,||,!
  5. switch语句
  6. while循环
  7. for循环
  8. do_while循环
  9. break和continue循环
  10. 循环的嵌套
  11. goto语句

​ C语言式结构化的程序设计语言,这里的结构指的是顺序结构、选择结构、循环结构。

我们可以使用ifswitch、实现分支结构,使用forwhiledo_while、实现循环结构。

1、if语句

1.1 if

if语句的语法格式:

if( expression )
    statement1 

**c语言中,0为真,非0为假,**当expression为真,则statement1执行,expression为假,statement1不执行。

**示例:**输入一个整数,判断是否为奇数

# include <stdio.h>
int main()
{
    in num = 0;
    scanf("%d", &num);
    if(num % 2 == 1)
    {
        printf("%d 是奇数\n", num);
    }
    return 0
}

1.2 else

else长和if连用构成 if...else...语句,语法如下:

if( expression )
	statement1 
else 
	statement2

如果expression为假,则执行else语句内容

**示例1:**输入一个整数,判断是否是奇数,如果是奇数打印奇数,否则打印偶数。

# include <stdio.h>
int main()
{
    int num = 0;
    scanf("%d", &num);
    if(num % 2 == 0)
    {
        printf("偶数\n")}
    else
    {
        printf("奇数\n")}
    return 0;
}

**示例二:**输入一个年龄,>=18就输出:成年,否则输出:未成年。

# include<stdio.h>
int main()
{
    int age = 0;
    scanf("%d", age);
    if(age >= 18)
    {
        printf("成年\n");
    }
    else
    {
        printf("未成年\n");
    }
    return 0;
}

1.3 分支语句中包含多条语句

else仅和最近的 if语句关联,在没有加大括号的时候。

示例:

# include <stdio.h>
int main()
{
    int age = 0;
    scanf("%d", &age);
    if(age >= 18)
        printf("成年了\n");
    	printf("可以谈恋爱了\n");
	return 0;
}

上述代码,无论年龄是否成年,都会打印“可以谈恋爱了”。

1.4 嵌套if

if else语句中,else可以和另一个 if连用,构成多重判断

**示例:**要求输入一个整数,判断输入的整数时0,还是正数或者负数。

# include<stdio.h>
int main()
{
    int num = 0;
    scanf("%d", &num);
    if(num == 0)
        printf("输入的数字时0\n");
    else if(num > 0)
        printf("输入的数字是正数\n")else
        printf("输入的数字是负数\n");
    return 0;
}

**示例:**输入一个整数,如果是正数,再判断是奇数还是偶数,并输出;如果不是正数则输出:非正数。

# include<stdio.h>
int main()
{
    int num = 0;
    scanf("%d", &num);
    if(num > 0)
    {
        if(num % 2 == 0)
            printf("偶数\n");
        else
            printf("奇数\n");
    }
    else
        printf("非正数\n");
    return 0;
}

1.5 悬空else问题

如果有多个 if else, 记住一条规则,else 总是和最接近的if匹配。

示例:

# include <stdio.h>
int main()
{
	int a = 0;
    int b = 2;
    if(a == 1)
        if(b == 2)
            printf("hehe\n");
    else
        printf("haha\n");
    return 0;
}

程序运行的结果是啥?

什么也没有执行

为什么?

​ else悬空问题,如果有多个 if else, 记住一条规则,else 总是和最接近的if匹配。else和第二个if进行匹配,但是如果第一个if不执行的话,第二个if就执行不了,最终都没有执行。

# include <stdio.h>
int main()
{
	int a = 0;
    int b = 2;
    if(a == 1)
    {
        if(n == 2)
            printf("haha\n");
        else
            printf("hehe\n");
    }
    return 0;
}

2. 关系操作符

c语言用于比较多表达式,称为“关系操作符”,里面使用的运算符就称为”关系运算符“,主要有六个:

  • > 大于运算符
  • < 小于运算符
  • >= 大于等于运算符
  • <= 小于等于运算符
  • == 相等运算符
  • != 不相等运算符

关系表达式通常返回0或者1,表示真假。

c语言中,0表示假,所有非0表示真.关系表达式常用于ifwhile结构

注意: 相等运算符 == 与赋值运算符 = 是两种不同的运算符,不可以混淆。

if( x = 3)

因此,为了避免上述的错误,我们可以改变我们的书写习惯。

if(3 == x)

另一个要避免的错误是:多个关系运算符不宜连用

i < j < k

应该写成:

i < j && j < k

3.条件操作符

条件操作符也叫做三目操作符,需要接受三个操作数,形式如下:

exp1 ? exp2 : exp3

条件操作符号的计算逻辑是:如果 exp1 为真,计算 exp2 ,计算结果是整个表达式的结果;如果 exp1 为假, 计算 exp3 ,计算结果是整个表达式的结果。

示例:

# inclue <stdio.h>
int main()
{
    int a = 0;
    int b = 0;
    scanf("%d", &a);
    b = a>5 ? 3 : -3;
    printf("%d", b);
    return 0;
}

4.逻辑操作符:&&,||,!

逻辑操作符提供逻辑判断功能,用于构架更加复杂的表达式,主要有三个运算符:

  • && :逻辑与运算符,就是并且的意思(两个表达式都为真,才为真,否则为假)
  • || : 逻辑或与运算符,就是或者的意思(两个表达式有一个为真则为真)
  • : 逻辑取反操作符,(改变单个表达的真假)

4.1逻辑取反运算符!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通过flag来认识逻辑取反:

# include <stdio.h>
int main()
{
    int flag = 0;
    if(!flag)
    {
        printf("haha\n")
    }
    return 0;
}

4.2逻辑与运算符

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

# include <stdio.h>
int main()
{
    int month = 0;
    scanf("%d", &month);
    if(month >= 3 && month <= 5)
    {
        printf("春天\n")
    }
    return 0
}

4.3 逻辑或运算符

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

# include <stdio.h>
int main()
{
    int month = 0;
    scanf("%d", &month);
    if(month == 12 || month == 1 || month == 2)
    {
        printf("冬季\n");
    }
    return 0;
}

4.4 闰年的判断

闰年的判断规则:

能被4整除且不能被100整除
能被400整除
# include<stdio.h>
int main()
{
    int year = 0;
    scanf("%d", &year);
    if((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0))
    {
        printf("是闰年\n");
    }
    return 0;
}

4.5短路

c语言逻辑运算,总是先对左侧的表达式求值,再对右侧的表达式求值,这个顺序是保证的。

如果左侧的表达式满足了逻辑运算条件,就不再对右侧的表达式求值,这种情况称为短路

if(month >= 3 && month <= 5)
if(month == 12 || month == 1 || month == 2)

像这种仅仅根据左操作数的结果就能知道整个表达式的结果,不在对右操作数进行计算的运算称为短路求值

# include <stido.h>
int main()
{
    int i = 0,a=0,b=2,c=3,d=4;
    i = a++ && ++b && d++;
    printf("a = %d\n b = %d\n c = %d\n d = %d\n", a,b,c,d);
    return 0;
}

5. switch语句

ifswitch语句都可以用来实现分支结构。

switch(expression)
{
    case value1:statement
    case value1:statement
    deflaut:statement    
}

根据expression不同的值,执行相应case分支,如果找不到相应的值,就执行deflaut分支

注意:

  • switch 后的 expression 必须是整形表达式
  • case 后的值,必须是整型常量表达式

5.1 if语句和switch语句的对比

#include <stdio.h>
int main()
{
 	int n = 0;
 	scanf("%d", &n);
 	if(n%3 == 0)
 		printf("整除,余数为0\n");
	else if(n%3 == 1)
 		printf("余数是1\n");
 	else
 		printf("余数是2\n");
 	return 0;
}

改成switch语句

#include <stdio.h>
int main()
{
 	int n = 0;
 	scanf("%d", &n);
 	if(n%3 == 0)
 		printf("整除,余数为0\n");
 	else if(n%3 == 1)
 		printf("余数是1\n");
 	else
 		printf("余数是2\n");
 	return 0;
}

注意

  1. case 和后面的数字必须有空格
  2. 每一个 case 语句中的代码执行完成后,需要加上 break ,才能跳出switch语句

5.2 switch语句中的break

如果去去掉case语句中的break:

#include <stdio.h>
int main()
{
 	int n = 0;
 	scanf("%d", &n);
 	switch(n%3)
 	{
 		case 0:
 			printf("整除,余数为0\n"); 
 		case 1:
 			printf("余数是1\n"); 
 		case 2:
  			printf("余数是2\n"); 
 	}
 	return 0;
}        

结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果没有case则一直向下走

5.3 switch语句中的deflaut

在使⽤ switch 语句的时候,我们经常可能遇到⼀种情况,⽐如 switch 后的表达式中的值⽆法匹配代码中的 case 语句的时候,这时候要不就不做处理,要不就得在 switch 语句中加⼊default ⼦句。

switch (expression) {
 	case value1: statement
 	case value2: statement
 	default: statement
}

~switch~ 后边的 expression 的结果不是 value1 ,也不是 value2 的时候,就会执⾏default ⼦句。

示例:

#include <stdio.h>
int main()
{
 	int day = 0;
 	scanf("%d", &day);
 
 	switch(day)
 	{
 		case 1case 2:
 		case 3:
 		case 4:
 		case 5:
 			printf("⼯作⽇\n");
 			break;
 		case 6:
 		case 7:
 			printf("休息⽇\n");
 			break;
 		default:
 			printf("输⼊错误\n");
 			break;
 	}
 	return 0;
}

5.4 switch语句中的case和default的顺序问题

e value1: statement
case value2: statement
default: statement
}


`~switch`~ 后边的 `expression` 的结果不是 value1 ,也不是 value2 的时候,就会执⾏`default` ⼦句。

**示例:**

~~~c
#include <stdio.h>
int main()
{
 	int day = 0;
 	scanf("%d", &day);
 
 	switch(day)
 	{
 		case 1:
		case 2:
 		case 3:
 		case 4:
 		case 5:
 			printf("⼯作⽇\n");
 			break;
 		case 6:
 		case 7:
 			printf("休息⽇\n");
 			break;
 		default:
 			printf("输⼊错误\n");
 			break;
 	}
 	return 0;
}

5.4 switch语句中的case和default的顺序问题

switch 语句中 case ⼦句和 default ⼦句有要求顺序吗? default 只能放在最后吗?其实,在~ switch~ 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满⾜实际需求的就可以。不过我们通常是把 default ⼦句放在最后处理的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值