【考研C语言】【王道】哭哭羊进阶史(选择、循环)2024.8.3

3 篇文章 0 订阅
2 篇文章 0 订阅

01.3.1  选择语句(if-else)

1 关系表达式和逻辑表达式

程序员控制程序执行逻辑运算需要选择和循环结构,涉及关系表达式与逻辑表达式。算术运算符的优先级高于关系运算符、关系运算符的优先级高于逻辑与和逻辑或运算符、相同优先级的运算符从左至右进行结合等,那么表达式5>3&&8<4-!0的最终值是多少?

其计算过程如下图所示。

5>3&&8<4-!0 的计算过程
5>3&&8<4-!0 的计算过程

2 if-else语句

在你打开衣柜拿出最上面的一件衣服时,你会判断这件衣服是不是你想穿的。如果是,那么你就会穿上;如果不是,那么你就会去找其他衣服。在计算机中,我们用if判断语句来实现这样的效果:if判断条件(表达式)为真,就执行某个语句,反之不执行这个语句。当然,也可以if 判断条件(表达式)为真,就执行某个语句,反之用 else 分支执行另一个语句,具体流程如下图1和图2所示。
【李】判断输入值是否大于0

图1  if语句流程1                                                          图2   if语句流程2

当输入值大于0时,打印“i is bigger than 0”,当输入值小于等于0时,打印“i is not biggerthan 0”。

 【例】判断输人值是否大于0

#include <stdio.h>

//选择语句if-else

int main() {
    int i;
    while(scanf("%d",&i))
    {
        if(i>0)  //if下面加一个大括号
        {
            printf("i is bigger than 0\n");
        }
        else
        {
            printf("i is not bigger than 0\n");
        }
    }
    return 0;
}

注意:在这个例子中,if 后面不能加分号,因为如果有 else分支语句,那么加分号会导致编译不通过;如果没有 else 分支语句,那么加分号会导致i无论取何值,都会打印“i is bigger than 0”。 

运行结果

if 语句和 else 语句也可以多个同时使用(多分支语句),如下图3所示。但是,无论有多少个 if 语句或 else if 语句,程序都只会执行其中的一个语句。

同时,if 语句也支持多层嵌套,在 if 语句中又包含一个或多个 if 语句称为 if 语句的嵌套,如图4所示。

                    图3   多分支语句                                                     图4   if语句的嵌套

注意:if 和 else 配对时遵循“就近原则”。

01.3.2  循环语句

1 while循环

while 语句用来实现“当型”循环结构,其一般形式为“while(表达式)语句;”,当表达式的值非0时,执行 while 语句中的内嵌语句。其特点是:先判断表达式,后执行语句,具体流程如下图所示。当表达式的值非0时,就会执行语句,从而实现语句多次执行的效果。为了避免程序进入死循环(不停地进行循环操作),在语句中需要有让表达式趋近于假的操作来使程序跳出循环

图   while循环流程

注意:while后面不能加分号,否则虽然编译可以通过,但是执行程序时会发生死循环。通常我们会将 while语句用花括号括起来,就算 while语句只有一句,也会用花括号括起来,这么做是因为一个程序往往会经过多次修改,使用花括号可以让程序更加清晰,避免向循环内添加语句时出错。

【例】while循环实现计算 1到 100 之间所有整数之和

#include <stdio.h>

//while循环  --计算从1到100的和

int main() {
    int i=1,total=0;
    while(i<=100)  //在这里加分号会造成死循环
    {
        if(i%2==0)
        {
            i++;
            continue;  //continue下面的代码均不会得到执行
        }
        total=total+i;//把i加到total上
        i++;//i++等价于 i+=1; 在循环体内没有让while判断表达式趋近于假的操作,死循环
    }
    printf("total=%d\n",total);
    return 0;
}

运行结果

2 for循环

C语言中的 for 循环语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替 while 循环语句。其一般形式为

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

for 循环语句的执行过程如下,具体流程如下图所示。
(1)先求解表达式1;
(2)求解表达式 2,若其值为真(值为非 0),则先执行 for 语句中指定的内嵌语句,后执行第(3)步。若其值为假(值为 0),则结束循环,转到第(5)步;
(3)求解表达式 3;
(4)转回第(2)步继续执行;
(5)循环结束,执行for语句下面的语句。

图    for循环语句流程

for 循环语句中必须且只能有两个分号,用于分割表达式1、表达式 2 和表达式 3。表达式 1、表达式 2、表达式 3 也可省略,省略写法用得较少。如下例所示,“i=1,total=0”是表达式1,即表达式1可以使用逗号初始化多个变量,表达式3的作用是使表达式2趋近于假。

【例】for循环实现计算 1到 100 之间所有整数之和

#include <stdio.h>

//for循环  --从1加到100的和

int main() {
    int i,total;
    for(i=1,total=0;i<=100;i++)  //for小括号后不要加分号
    {
        total+=i;
    }
    printf("total=%d\n",total);
    return 0;
}

运行结果

 

01.3.3  continue语句

continue 语句的作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行是否执行下一次循环的判断。其一般形式为

continue;

下面来看一个对1到 100 之间的奇数进行求和的例子,如下例所示。这个例子是对上一节中的 for 循环的改写,执行“continue;”语句后,执行的语句是“i++;”。当continue 用于while和 do while 循环中时,注意不要跳过让循环趋近于假的语句。

【例】对1到100 之间的奇数进行求和

#include <stdio.h>

//for循环  --从1到100之间的奇数进行求和
//使用continue

int main() {
    int i,total;
    for(i=1,total=0;i<=100;i++)  //for小括号后不要加分号
    {
        if(i%2==0)
        {
            continue;  //continue下面的代码均不会得到执行
        }
        total+=i;
    }
    printf("total=%d\n",total);
    return 0;
}

运行结果

01.3.4  break语句

break语句的作用是结束整个循环过程,不再判断执行循环的条件是否成立。

下例是关于break语句的例子,从1开始累加,当累加的和大于 2000 时,结束 for 循环,同时打印此时 total 的值和 i 的值。一旦执行break语句,下一句要执行的就是“printf("total=%d,i=%d\n",total,i);”。break 语句也可用在while 循环和 do while 循环中,起结束对应循环的作用。

【例】 break 语句实例

#include <stdio.h>

//for 循环实现从1加到100

int main() {
    int i,total;
    for(i=1,total=0;i<=100;i++)  //for小括号后不要加分号
    {
        if(total>2000)
        {
            break;  //当和大于2000时,循环结束
        }
        total+=i;
    }
    printf("total=%d,i=%d\n",total,i);
    return 0;
}

运行结果

练习题

1.while(i<10);这条语句没有问题,程序可以正常运行
A.正确     B.错误
答案:B
解释:当在 while 语句的小括号后面加分号后,会造成死循环。

  • 28
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值