分支和循环

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

使用if、switch实现选择结构,使用for、while、do while实现循环结构

1.if语句

1.1 if

if的语法形式如下:

if(表达式)

     语句;

表达式成立(为真),则执行语句,表达式不成立(为假),则不执行语句

在C语言中,0为假,非0为真,如果表达式结果是0,语句不执行,表达式结果不是0,语句执行

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

1.2 else

if···else···语法如下

if(表达式)

    语句一

else

     语句二

例子:输入一个整数,判断是否为奇数,如果是奇数,打印奇数,否则打印偶数

           输入一个年龄,>=18就输出:成年,否则输出:未成年

1.3 分支中包含多条语句

默认if和else语句中都只控制一条语句,如果想要控制两条语句,就要使用{}将代码括起来,else后面也可以用{}括起来

1.4 嵌套if

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

例如:要求输入一个数字,判断输入的是整数0,还是整数或者负数,代码如下:

#include<stdio.h>

int main()

{

int a=0;

scanf("%d",&a);

if(a=0)

       printf("输入的数字是0");

else if(a>0)

        printf("输入的数字是正数");

else(a<0)

         printf("输入的数字是负数");

return 0;

}

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

#include<stdio.h>

int main()

{

int a=0;

scanf("%d",&a);

if(a>0)

{

if(a%2==1)

printf("a是奇数");

else

printf("a是偶数");

}

else

printf("非正数");

return 0;

}

练习:输入一个人的年龄,如果年龄<18,打印“少年”,如果年龄在18至44岁之间,打印“青年”,如果年龄在45至59岁打印“中老年”,如果年龄在60至89岁之间打印“老年”,如果90岁及以上打印“老寿星”

        以上代码留给大家自己练习

1.5悬空else问题

如果有多条if和else,else总是和最接近的if匹配

2.关系操作符

C语言中用于比较的表达式,称为关系表达式,里面使用的运算符称为关系运算符,主要有以下六个:

>大于运算符

<小于运算符

>=大于等于运算符

<=小于等于运算符

==相等运算符

!=不相等运算符

关系表达式常返回0或1,表示真假,常用于if或while结构

C语言中,0表示假,所有非0值表示真

注意:

相等运算符与等于运算符不同,为了防止这种情况,可以写为3=x,这样编译器就会报错

多个关系操作符不宜连用:例如i<j<k,判定时会(i<j)<k,最终结果为0或1与k比较,如果想判断j是否在i~k之间,应当使用以下写法:i<j&&j<k

3.条件操作符

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

exp1?exp2:exp3

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

练习:使用表达式实现找两个数中的较大值

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

4.1逻辑与运算符

两边表达式同时为真,才为真

4.2逻辑或运算符

一边为真,则为真

4.3逻辑取反运算符

!a就是a为假

4.4练习:闰年的判断

闰年判断的规则:能被4整除并且不能被100整除的年份是闰年

                             能被400整除的年份是闰年

4.5短路

逻辑运算符的运算有一个特点,总是先对左侧的表达式求值,再对右侧的表达式求值

如果左边的表达式已经满足运算符的条件,就不对右边的表达式进行求值,这种情况称为短路

练习:阅读代码,计算代码输出的结果
#include <stdio.h>
int main()

{
int i = 0,a=0,b=2,c =3,d=4;
i = a++ && ++b && d++;
//i = a++||++b||d++;
printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);

return 0;

}

5.switch语句

C语言也提供了switch语句来实现分支结构

代码格式:

switch(expression)

{

        case value1:statement

        case value2:statement

        default:statement

}

switch后的expression必须是整型表达式

case后的值,必须是整型常量表达式

5.1 if语句与switch语句的对比

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

1.case后面的数字必须有空格

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

5.2 switch语句中的break

如果不使用break跳出,有可能会去执行其它case中的语句

在switch中break可以实现真正的分支,但也不是每个case都要有break

练习:

1.输入一个1~7的数字,打印对应的星期几

2.输入1~5,输出的是工作日,输入6~7,输出休息日

5.3 switch中的default

如果switch后面的expresstion的结果不是value1也不是value2,就会执行default语句

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

case和default没有顺序要求,只不过通常把default放在最后处理

6. while循环

C语言提供了3中循环语句,while就是其中一种,while语法结构与if非常相似

6.1 if和while的对比

if用于判断,while实现循环效果

6.2 while语句的执行流程

首先上来执行判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执行循环语句,语句执行完后再判断是否要执行下一次判断

6.3 while循环的实践

练习:在屏幕上打印1~10的值

6.4 练习

输入一个正的整数,逆序打印这个整数的每一位

题目解析:

1.想到得到n的最低位,可以使用n%10,得到的余数就是最低位

2.想要去掉n的最低位,可以使用n/10操作去掉最低位

3.循环一和循环二两个步骤,在n变成0之前,就能得到所有的位

7. for循环

7.1语法形式

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

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

语句;

表达式1用于循环变量的初始化,表达式2用于循环结束条件的判断,表达式3用于循环变量的调整

7.2 for循环的执行流程

首先执行表达式1,初始化循环变量,接下来执行表达式2的判断部分,如果等于0,则循环结束;如果不等于0,则继续执行循环语句,循环语句执行后,再去执行表达式3,然后返回表达式2进行判断,决定循环是否继续

在整个循环过程中,初始化只被执行一次,剩下的就是表达式2,循环语句,表达式3在循环

7.3 for循环的实践

练习:在屏幕上打印1~10的值

7.4 while循环和for循环的对比

for和while在实现循环的过程中,都有初始化,判断,调整这三部分,但是for循环的这三部分相对较于集中,从形式上来看for循环梗优一点

7.5 练习

计算1~100间3的倍数的数字之和

8. do while循环

8.1 语法形式

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

do

语句

while(判断表达式);

8.2 do while循环的执行流程

在do while循环中,先执行语句,执行完语句后,再去执行判断表达式,判断结果如果不等于0,则继续执行循环语句,判断结果如果是0,则循环结束

do while在循环体中至少是被执行一次的,这是do while比较特殊的地方

8.3 do while循环的实例

在屏幕上打印1~10的值

8.4 练习

输入一个正整数,计算这个整数是几位数

这里使用do while语句比较合适,因为n即使是0,也是一位数,要统计位数的

9.break和continue语句

在循环执行过程中,如果发生某些情况,需要提前终止循环,C语言中提供了break和continue来进行操作

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

continue的作用是跳过本次循环中continue后面的代码,在for和while循环中是有所差异的

9.1 while循环中的break和continue
9.1.1 break举例

#include<stdio.h>

int main()

{

        int i=1;

        while(i<=10)

        if(i==5)

        break;//当i=5时,程序终止

        printf("%d",i);

        i+=1;

        return 0;

}

9.1.2 continue举例

#include<stdio.h>

int main()

{

int i=1;

while(i<=10)

if(i==5)

continue;//此处i=5陷入死循环

printf("%d",i);

i+=1;

return 0;

}

9.2 for循环中的break和continue
9.2.1 break举例

#include<stdio.h>

int main()

{

int i=1;

for(i=1;i<=10;i++)

        {

        if(i==5)

        break;//到此处结束

        printf("%d",i);

        }

return 0;

}

9.2.2 continue举例

#include<stdio.h>

int main()

{

int i=1;

for(i=1;i<=10;i++)

        {

        if(i==5)

        continue;//继续执行i++语句

        printf("%d",i);

        }

return 0;

}

9.3 do while循环中的break和continue

和while几乎一样

10.循环嵌套

do while、while、for嵌套在一起才能更好的解决问题,这就是我们所说的循环嵌套

10.1 练习

找出100~200之间的素数,并打印到屏幕上

注:素数又称质数,只能被1和本身整除

10.2 题目解析

第一步:产生100~200之间的数字

第二步:假设判断i是否为素数,产生2~i-1的数字去试除i

第三步:如果有可以整除的,则不是素数,不能整除的,则为素数

11. goto 语句

实现在同一个函数内跳转到设置好的编号

如果使用不当,会导致在函数内随意乱跳转,但是在多层循环的代码中,使用goto跳出非常方便

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值