分支和循环

C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种结构的组合。我们可以使⽤ if 、 switch 实现分⽀结构,使⽤ for 、 while 、 do while 实现循环结构。

1.if语句

1.1 if

if的语法形式:

1 if(表达式)
2    语句

括号是if语句的一部分,而不是表达式的一部分,因此它是必须出现的,即使是那些极为简单的表达式也是如此。

表达式成⽴(为真),则语句执⾏,表达式不成⽴(为假),则语句不执⾏

在C语⾔中,0为假,⾮0表⽰真,也就是表达式的结果如果是0,则语句不执⾏,表达式的结果如果不是0,则语句执⾏。

1.2 else

如果⼀个数不是奇数,那就是偶数了,如果任意⼀个整数,我们要清楚的判断是奇数还是偶数怎么表⽰呢?

这里就需要if...else...语句了,语法形式如下:

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

警告:上面的两个语句部分都可以是代码块。一个常见的错误是在if语句中的任何一个子句中书写第二条语句时忘了添加花括号。许多程序员倾向于在任何时候都添加花括号,以避免这种错误。

1.3 分支中包含多条语句

默认在 if 和 else 语句中默认都只控制⼀条语句,比如:

1 #include<stdio.h>
2 int main()
3 {
4     int age=0;
5     scanf("%d",&age);
6     if(age>=18)
7         printf("成年了\n");
8         printf("可以谈恋爱了\n");
9     return 0;
10 }

上⾯的代码,你会发现输⼊的值不管是>=18 还是<18,"可以谈恋爱了" 都会打印在屏幕上。

这是因为 if 语句只能控制⼀条语句,就是 printf("成年了\n"); ,if语句为真,则打印成年了,if语句为假,则不打印,对于 printf("可以谈恋爱了\n"); 是独⽴存在的,不管if语句的条件的真假,都会被执⾏。那如果我们要if语句同时控制2条语句,怎么办呢?那就要使⽤ {} 将代码括起来,else 后也可以跟上⼤括号。

1.4 嵌套if

if else 语句中, else 可以与另⼀个 if 语句连⽤,构成多重判断。

⽐如:要求输⼊⼀个整数,判断输⼊的整数是0,还是正数或者负数。请看如下代码:

1 #include<stdio.h>
2 int main()
3 {
4     int num=0;
5     scanf("%d",&num);
6     if(num==0)
7         printf("输入的数字是0\n");
8     else if(num>0)
9         printf("输入的数字是正数\n");
10    else 
11        printf("输入的数字是负数\n");
12    return 0;
13 }

1.5 悬空else问题

当if语句出现嵌套时,就会出现“悬空的else问题”。例如,在下面的例子中,你认为else语句从属于哪一个if语句呢?

if(i>1)
    if(j>2)
        printf("i>1 and j>2 \n");
  else
        printf("no they are not\n");

我这里故意把else子句以奇怪的方式缩进,就是不给你任何提示。这个问题的答案和其他绝大多数语言一样,就是else子句从属于最接近它的不完整的if语句。如果你想让它从属于第一个if语句,你可以把第二个if语句补充完整,加上一条空的else语句,或者用一个花括号把它包围在一个代码块之内。

2.while语句

c的while语句也和其他语言的while语句有很多相似之处,唯一存在差别的就是它的表达式部分,和if语句类似。下面是while语句的语法:

while(表达式)
    语句

循环的测试在循环体开始执行之前进行,所以如果测试的结果一开始就是假,循环体就根本不会执行。同样,当循环体需要多条语句来完成任务的话,可以用代码块来实现。

2.1 break和continue语句

在while循环中可以用break语句,用于永久终止循环。在执行完break语句之后,执行流下一条执行的语句就是循环正常结束后应该执行的那条语句。

在while循环中也可使用continue语句,用于永久终止当前那次循环。在执行完continue语句之后,执行流接下来就是重新测试表达式的值,决定是否继续执行循环。

这两条语句的任意一条如果出现于嵌套语句的循环内部,它只对最内层的循环起作用,你无法使用break或continue语句影响外层循环的执行。

2.2 while语句的执行过程

我们现在可以用图的形式说明while循环中的控制流,考虑到有些读者可能以前从没见过流程图,所以这里略加说明。菱形表示判断,方框表示需要执行的动作,箭头表示它们之间的控制流。图说明了while语句的操作过程。它的执行从顶部开始,就是计算表达式expr值。如果它的值是0,循环就终止。否则就执行循环体,然后控制流回到顶部,重新开始下一个循环。例如,下面的循环从标准输入复制字符到标准输出,直至找到文件尾结束标志。

while((ch=getchar())!=EOF)
    Putchar(ch);

扣1继续打~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值