C语言基础第三篇--控制语句

看完了基本数据类型,就可以处理基本数据了,这些基本数据类型在以后会经常用到,用法也会慢慢接触到。本篇文本主要讲述C语言中的控制语句,在C语言中,控制语句一共有九种,主要分为:

分支语句(条件判断语句):if、if-else条件判断,switch语句;

循环语句 : for循环、while循环、do-while循环;

辅助控制语句(转向语句)  :break语句、return 语句、continue语句、goto语句;

下面我们一一介绍这几种语句的使用,由于辅助控制语句是和其他两种控制语句组合使用的,我们会在介绍前两种语句的同时介绍辅助控制语句。

分支语句:

// if if-else 语句
if(condition){
    //statements   当满足条件时执行这里的语句
}else{
   //statements    当不满足条件时执行这里的语句
}
//or
if(condition1){
//statements       当满足条件1时执行这里的语句
}else if(condition2){
//statements<span style="white-space:pre">	</span>   当满足条件2时执行这里的语句
}else{
//statements<span style="white-space:pre">	</span>   当前两个条件都不满足时执行这里的语句
}
if-else语句判断语句中经常使用到的语句,原理很简单如上面的写法 if(condition) 这里的condition是一个整型变量,在C语言中当condition==0时,条件判断为假,当condition为非零值,条件判断为真,以一个例子来说明:

#include <stdio.h>
int main(int argc, const char * argv[]) {
    int condition = 1; //定义变量condition,并初始化为1,此时condition为非零值,因此为真
    if (condition) {
        printf("line 5:true\n"); //当 condition 为真值时,即 condition 非零时执行
    }else{
        printf("line 7:false\n");//当 condition 为假值时,即 condition 为零时执行
    }
    
    condition = 0;//更改变量condition的值为零,在C语言中0代表假
    if (condition) {
        printf("line 12:true\n"); //当 condition 为真值时,即 condition 非零时执行
    }else{
        printf("line 14:false\n");//当 condition 为假值时,即 condition 为零时执行
    }
    
    condition = -2;//更改变量condition的值为负值-2,也是非零值,因此为真
    if (condition) {
        printf("line 19:true\n");
    }else{
        printf("line 21:false\n");
    }
    return 0;
}
输出结果如下:
line 5:true
line 14:false
line 19:true
Program ended with exit code: 0
通常情况下,可能会有多个条件同时满足时才会执行if代码块中的语句,或多个条件中的任意一个条件满足就执行if代码块中的语句,这里就要用到嵌套的if语句或者组合逻辑运算符来解决这个问题,先来看嵌套的if语句,原理和单层if语句是一样的,以一个例子来说明

  int condition1 = 0,condition2 = 1;
    if (condition1) {
        if (condition2) {
            printf("All of the two conditions are false\n");
        }else{
            printf("Condition1 is true but condition2 is false\n");
        }
    }else{
        if (condition2) {
            printf("Conditon1 is false but condition2 is true\n");
        }else{
            printf("All of the two conditions are false\n");
        }
    }

输出结果如下:

Conditon1 is false but condition2 is true
Program ended with exit code: 0
很多时候我们只要知道两者之中都是真或都是假,甚至有时候我们可以不用理会到底谁是真谁是假,只要他们组合到一块是真的或都是假的就行,这时我们可以使用逻辑运算符来解决这个总是,首先我们先认识一下C语言中的几个常用逻辑运算符,有时它们也是条件语句中的一部分。

C语言中提供了三种逻辑运算符,分别为&&与、||或、!非。

&& 逻辑与运算符,&&运算符两边的变量或表达式同时为真是 表达式才为真,一方为假,表达式即为假。

|| 逻辑或运算符,||运算符两边的变量或表达式一方为真,整个表达式即为真。

! 逻辑非运算符,! 运算符是对 !后面的变量或表达式取反(所有非零值取反后为0,0值取反后为1)

因此在上面的例子中要表达condition1和condition2同时为真时可用如下方式表达

if(condition1 && condition2){
    printf("All of the two conditions is true\n");
}

同理,若要表达condition1和condition2中至少有一个为真时可用如下方式表达

if(condition1 || condition2)
{
   printf("At least one of the two conditions is true\n");
}

而这里的逻辑非只是返回一个对其后的表达式取反后的值,但并不会对原表达式赋值,如下面表示如果condition为假

if(!condition)
{
   printf("Condition is false\n");
}

switch语句是多分支语句,在判定条件比较多时可使用switch语句:

//switch语句

switch(condition){
case condition1:
  //statements1;<span style="white-space:pre">	</span>当满足条件1时执行这里的语句
break;
case condition2:
//statements2<span style="white-space:pre">		</span>当满足条件2时执行这里的语句
break;
.
.
.
default:
//statementsn+1<span style="white-space:pre">		</span>当以上条件都不能满足时执行这里的语句
break;
}

switch语句语义为,计算condition的值,并逐一与内部的case语句的条件进行比较,如果相同,则继续执行该case中的statements,若不相同则跳过case中的statements并对比下一个case,若所有case中的condition都不相同则执行default中的statements+1,需要注意的是switch语句中的condition应该传入的值应该是整数类型的值,也可以传入一个char型的值,因为前边说过char其实也是一种整数类型,下面一个例子来深入感受switch语句。

#include <stdio.h>

int main(int argc, const char * argv[]) {
    int condition; //定义一个condition变量来存储输入的值
    printf("请输入1 - 12 中的整数,将输出对应月份的英文\n");
    scanf("%d",&condition);//从控制台接收一个数字并保存到condition变量中
    switch (condition) {
        case 1:
            printf("January\n");
            break;
        case 2:
            printf("February\n");
            break;
        case 3:
            printf("March\n");
            break;
        case 4:
            printf("April\n");
            break;
        case 5:
            printf("May\n");
            break;
        case 6:
            printf("June\n");
            break;
        case 7:
            printf("July\n");
            break;
        case 8:
            printf("August\n");
            break;
        case 9:
            printf("September\n");
            break;
        case 10:
            printf("October\n");
            break;
        case 11:
            printf("November\n");
            break;
        case 12:
            printf("December\n");
            break;
        default:
            printf("您输入的数字有错误");
            break;
    }
    return 0;
}

输出结果如下:

请输入1 - 12 中的整数,将输出对应月份的英文
2
February

请输入1 - 12 中的整数,将输出对应月份的英文
13
您输入的数字有错误
在if 语句中可以做一些复杂的判断,但在switch中只能判断整型数值,因此若要判断复杂条件应先将相关复杂条件转换为数值条件后,再使用switch来判断。

在这里我们还使用到了一个辅助控制语句--break,我们称之为跳出语句,其语义是跳出当前switch判断,并执行switch代码块下面的语句,在这里即执行return 0;语句,这里的return语句在前面已经说过,它后面所跟着的变量类型对应于函数定义时的返回值类型。break语句一般用于switch语句中,若在某一case中没有使用break语句,那么将不会跳出switch判断,而是继续进行下一case的判断,直到执行到break语句才会跳出switch判断语句。

循环语句

// for 循环
for(stateInitialValue;stateEndCondition;changeExpression){
//do something;
}
在c语言中使用for循环需要先定义一个状态变量,在for语句中给定初始值、结束值和变化量,表示为for(初始值;结束条件;变化表达式),定义好之后,状态量将从状态量初始值开始,每次改变一个状态量的变化量,直到满足结束条件,跳出for循环,下面以一个例子来感受一下for循环的使用:

#include <stdio.h>

int main(int argc, const char * argv[]) {
    int i;//定义变量i
    for (i = 0; i < 10; i++) {
        printf("%d ",i);
    }
    return 0;
}

输出结果为:

0 1 2 3 4 5 6 7 8 9 
这里的i 为状态变量,在for 语句中首先初始化这0,然后设定其结束条件为i < 10,即当执行到i >= 10时循环结束,且for语句的代码块中的代码不再执行,此时在本例中的i == 10 但这个10并没有输出,随后设置i 的变化量为每循环一次加一,之后便是for语句的代码块,在里面输出i的当前值。

使用while循环也可以达到这一目的,只需将for循环的那一段代码替换为:

 while (i < 10) {
        printf("%d ",i++);
    }
此时输出与上面的输出也是一样的,while循环的表达式可表示为while(条件语句){//while代码块},这里的条件语句也需要是一个整型数值。

同样这一语句用do while也可以完成,代码如下:

  do {
        printf("%d ",i++);
    } while (i < 10);
需要注意的是,使用do-while时会先执行一次do代码块中的语句,然后再进行判断,而使用while和for 时需要先进行条件判断再执行代码块中的语句,两者在输出上有时是有差另的。


最后来看一下goto 语句和continue语句,这两个语句的使用频率不是很高,且不推荐使用goto语句,因为goto语句是强制跳转语句,在运行过程中可能会出现各种奇怪的总是,对应于汇编语言的jJMP指令,为无条件跳转,而continue语句语义为跳过本次循环未执行到的语句,继续执行下一次循环

,continue语句一般应用于for循环中,用例子来感受continue语句如下:

#include <stdio.h>

int main(int argc, const char * argv[]) {
    int i = 0;//定义变量i
    for (i = 0;i < 10; i++) {
        if (i == 5) {
            continue;
        }
        printf("%d ",i);
    }
    printf("\n%d\n",i);
    return 0;
}


输出结果如下:

0 1 2 3 4 6 7 8 9 
10


总结:

在实际应用中,控制语句是经常使用的语句,要注意的是各类控制语句的执行条件,只有这些执行边界条件定义得当,才能真正发挥其作用,如果边界条件处理不得当,常常会发生一些意想不到的错误。





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eric__Cui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值