学习C语言(三)——分支和循环(上)

       

目录

1.if语句

1.1 if

1.2  else语句

1.3 分支中包换多条语句

 1.4 嵌套if

2.关系操作符

3.逻辑操作符:&&、||、!

3.1 与运算符

3.2 或运算符

3.3 逻辑反运算符

3.4  判断润年练习

3.5 短路

4.switch语句

4.1 if 语句和 switch 语句的对比

4.2 switch语句中的break

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

5 while 循环

5.1 if 和 while 的对比

5.2 实践while循环

 6.for循环

6.2 实践 for 循环

7 do while 循环

7.1 语法形式

7.2 实践do while 循环

 8. break 和 continue 语句

8.1 while 循环中的 break 和 continue

8.1.1 break

8.1.2 continue

8.2 for 循环中的 break  和 continue

8.2.1 break

8.2.2 continue

8.3 do while循环中的 break 和 continue

8.3.1 break

10 goto语句


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

        我们可以使用 if、switch语句实现分支结构。使用for、while、do while实现循环结构

1.if语句

1.1 if

        if语句的语法形式如下:

if (表达式)
        语句 ;        //如果分支语句中,想包含更多语句,可以加上大括号

        在C语言中,0为假,非零为真。表达式成立,为真,即表达式结果为0,则执行语句;表达式不成立,为假,即表达式结果不是0,则不执行语句。

       

1.2  else语句

        上面的代码我们只能打印偶数,如果是奇数就不会有动作,这里就需要用到 if……else……语句,语法形式如下:

if (表达式)
    语句1
else
    语句2

        这样就可以对一个数进行奇偶判断了。

1.3 分支中包换多条语句

        默认if和else语句中默认都只控制一条语句,如果想要 同时控制多条语句,那么就需要在if语句和else语句跟上大括号 {} 示例如下:

 1.4 嵌套if

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

         方便可以直接使用 else if(表达式) 来代替,示例如下:

1.5 else就近匹配if

        请判断上面这个给程序运行的结果是什么呢?

        一些初学者会认为这个代码输出结果是222.但运行了之后会发现什么也不会输出。

        如果有多个语句,else 语句会和接近的 if 语句进行匹配。

        带上适当的大括号会使代码逻辑更加清晰。下面的代码运行才是一些初学者认为的结果。

2.关系操作符

        C语言用于比较的表达式,被称为“关系表达式”,里面使用的运算符就被称为“关系运算符”。

        主要的关系运算符有下面6个:

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

        关系表达式通常返回 0 表示假;返回 1 表示真

        注意:相等运算符 == 与赋值运算符 = 是两个不一样的运算符,不要混淆。有时候在表达式中把 == 写成 = 也能运行,但会出现意料之外的结果。所以写关系式时,可以先写数字,将变量放在后面。示例如下:

if (3 == X) 

        另一个需要注意的是:多个关系运算符不宜连用。示例如下:

a > b > c;       //写出来的   想表达的
(a > b ) > c;    //程序以为的

        程序会先将 a 和 b 进行比较,输入 0(表示假) 或者 1(表示真),然后再将输出的数字和 c 进行对比。想要表达两个关系式都满足,可以使用下面的这种形式

a < b && b < c  //这样才能满足两个表达式

3.逻辑操作符:&&、||、!

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

  • &&   与运算符,表示并且的意思(两侧的表达式都为真,则为真;一个为假,则为假)
  • ||     或运算符,就是或者得意思(两侧的表达式有一个为真,则为真;两个都为假,则为假)
  • !    逻辑饭运算符(改变单个表达式得真假)

3.1 与运算符

        && 就是与运算符,也是双目操作符,是并且的意思。&&两边的表达式都为真,则为真;一个为假,则为假。

3.2 或运算符

        ||就是或运算符,也是双目操作符,是或者的意思。||两边的表达式有一个为真,则为真;两个都为假,则为假

3.3 逻辑反运算符

        假设有一个 flag 的变量,如果、flag为真,那 !flag 就为假。如果 !flag 是表达式,那么就是flag为假的时候执行后面的代码。

3.4  判断润年练习

        判断闰年的规则:1.能被4整除并且不能被100整除是闰年    2.能被400整除也是闰年

        if 中的表达式, year % 4 == 0 && year % 100 != 0 意思是年份能被4整除,但不能被100整除,&&式并且的意思;year % 400 == 0  意思是年份能被400整除,|| 是或者的意思。

3.5 短路

        C语言逻辑运算符还有一个特点:先对左侧的表示求值,再对右边的表达式求值。如果左侧的表达式满足逻辑运算符的条件,就不再对右侧的表达式求值,这种情况称为”短路“。

        例如,&&是并且的意思,左边的表达式为假,整个表达式都为假,就不再对右侧求值;||是或者的意思,左侧的表达式为真,即整个表达式为真,也不对右侧求值。这种运算称为“短路求值”。

4.switch语句

        除了 if 语句,C语言还提供了 switch 语句来实现分支结构,用于判断条件多个结果的情况,表达式语法如下:

switch (表达式)
{
    case 值1:
            语句
    case 值2:
            语句
    default:
            语句
}

        根据表达式不同的值,执行相应的case分支,如果找不到对应的值,就执行default分支。

        注意:1..switch语句后的表达式必须是整型表达式

                    2.case后的值,必须是整型常量表达式,不能是 a、b这样的变量 

4.1 if 语句和 switch 语句的对比

        练习:输出任意一个整数值,计算除3之后的余数。

        使用 if 分支语句如下:

int main()
{
	int a = 0;
	printf("请输入一个整数:");
	scanf("%d",&a);
	if (a % 3 == 0)
		printf("余数是0\n");
	else if(a%3==1)
		printf("余数是1\n");
	else if (a % 3 == 2)
		printf("余数是2\n");
	return 0;
}

        使用 switch 分支语句如下:

int main()
{
	int a = 0;
	printf("请输入一个整数:");
	scanf("%d",&a);
	switch (a % 3)
	{
	case 0:
		printf("余数是0\n");
		break;
	case 1:
		printf("余数是1\n");
		break;
	case 2:
		printf("余数是2\n");
		break;
	}
	return 0;
}

        注意:1. case和后边的数字之间必须有空格

                    2. 每一个case语句中所有的代码执行完成后,需要加上 break ,才能跳出switch语句。

4.2 switch语句中的break

        在之前的代码中,如果我们去掉了break会的到什么样的结果呢?

         我们发现,当执行完表达式结果相对应的 case语句之后,会继续执行后面的语句,直到语句结束。所以合理使用 break 语句才能实现真正的分支效果。

        当然,break语句也不一定每一个case语句都要有,这得根据实际情况来判断。当输入1-5时,显示工作日;输入6、7时,显示休息日。示例如下:

 4.3 switch 语句中的 default 语句

        在使用 switch 语句时,有时会遇到表达式的值无法与 case 语句进行匹配,这时就没有动作,使用 default 语句可以解决这个问题。以之前的代码为例:

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

        在 switch 语句中,case 和 default 语句是没有顺序要求的,只是通常将 default 语句放在最后方面理解。

5 while 循环

5.1 if 和 while 的对比

        while 语句的语法结果和 if 语句非常相似

if (表达式)
        语句;     //如果分支语句中,想包含更多语句,可以加上大括号

while (表达式)
        语句;     //如果循环想包含更多语句,可以加上大括号

        在C语言中非零为真,0为假。假设 if 和 while 的表达式都为非零时,能够满足表达式,if 中的语句会执行一次语句,而 while 则会一直执行语句,直到不满足表达式或者遇到 break 为止。

5.2 实践while循环

        练习:打印1-10

        语句分析:赋予变量 a 一个初始值 1,执行 while 语句时,满足 <=10 的表达式,开始循环打印 a 和  a自增 1,直到不满足表达式 >10 之后停止。

 6.for循环

        6.1 语法形式

        for 循环是三种循环中使用的最多的,for 循环的语法形式如下:

for ( 表达式1 ; 表达式2 ; 表达式3 )

        表达式1:用于循环变量的初始化

        表达上2:用于循环结束条件的判断

        表达式3:用于循环变量的调整

        注意:三个表达式之间使用英文分号(;)隔开

        for 循环先使用表达式1的初始值在表达式2中进行判断,符合继续执行的条件之后,执行循环语句,执行结束后进行变量的调整,然后在表达式2中进行判断,继续执行循环语句...

        整个循环过程中,只有表达式1执行一次,表达式2、循环语句、表达式3都在循环中。

6.2 实践 for 循环

        练习:打印1-10

        语句分析:在 for 的表达式1中赋予 a 一个初始值 1,再放到表达式2中进行判断,满足条件,执行循环语句,执行完循环语句之后,在表达式3中进行自增1,再放到表达式2中进行判断,直到 a>10 为止

 6.3 for 循环和 while 循环的对比

        两者在实现循环过程中,都有初始化、判断、变量调整这三个部分。但是 for 循环中的这三个部分更加集中,方便代码维护。当循环语句过长之后,while 循环不方便查找这三个部分。

7 do while 循环

7.1 语法形式

        在循环语句中 do while 语句使用的最少,它的语法如下:

do
    语句;            //如果循环语句中,想包含更多语句,可以加上大括号
while (表达式)

        while 和 for 这两种循环,都是先判断,如果条件满足就进入循环,如果不满足就跳出循环。

        而 do while 循环则是先进入循环,执行循环语句,然后再执行 while 后的判断表达式,表达式为真,则进行下一次;表达式为假;则不再继续循环。

7.2 实践do while 循环

    练习:打印1-10

        语句分析:赋予 a 一个初始值 1,先放到进行 do 语句后面的打印整形和自增1,再放到 while 后面的判断表达式中进行判断,满足条件,继续执行下一次循环。知道 a>10 不满足表达式之后跳出循环。

 8. break 和 continue 语句

        在循环执行的过程中,遇到一些情况时,需要提前终止循环。这就需要使用到 break 语句和 continue 语句。

        break 的作用是永久的终止循环,只要 break 被执行,就会直接跳出循环。

        continue 的作用是跳过本次循环,即跳过 continue 后面的代码。

8.1 while 循环中的 break 和 continue

8.1.1 break

 

        当 a 满足了 if 语句中的条件后,执行 break 语句,直接跳出循环,只打印了1 2 3 4 。

8.1.2 continue

  

         当把上面的 break 换成了 continue 之后,也打印出了 1 2 3 4,但是还有光标在闪烁,程序并没有执行完。这是因为当 a 满足 if 语句的条件之后,执行 continue  语句,跳过本次循环,并没执行到后面的自增1的操作,于是 a 一直满足 if 的条件。死循环跳过本次循环。

8.2 for 循环中的 break  和 continue

8.2.1 break

        for 循环中的 break 和 while 循环中的 break 执行得到的结果一样,都是直接终止了循环。

8.2.2 continue

         当把上面的 break 换成了 continue 之后,打印出了1-10之间除了5的数。当 a 满足 if 的条件时,跳过本次循环,回到表达式2中进行判断,满足条件之后,到表达式3中进行自增1,继续进行后面的循环。

8.3 do while循环中的 break 和 continue

8.3.1 break

        do while 语句中的 break 和 continue 语句的作用与while循环中的作用几乎一模一样。

10 goto语句

        C语言提供了一种特别的语法,就是 goto 语句和跳转标号,实现在同一个函数内跳转到设置好的标号处。

        如果goto语句使用不当,就会导致在函数内随意乱跳,打乱程序的执行流程。

        goto 语句在多层循环的代码中,在最内层中使用 goto 语句,将调准标号设置到最外层,能够很方便得跳出多重循环。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值