03_控制语句

1 C语言中控制语句概述

在c语言中,控制逻辑主要包含三种:

1.顺序执行:

        所谓的顺序执行,指的程序按照特定先后顺序依次执行;也是C语言的特征(面向过程语言);

2.选择分支:

        在执行过程中,某些特殊的语句,需要满足特定条件才能执行。C语言中的选择分支可以使用if……else语句实现,也可以使用switch控制语句实现。

3.循环控制:

        在执行过程中,某些功能语句块,需要多次重复执行。C语言中可以使用for循环、while循环以及使用goto实现循环控制。

在程序设计的时候,所有的逻辑都是通过前面三种逻辑语句来综合实现。

2 选择分支语句

        在程序设计的时候,会因为不同条件会有不同的处理方式,通过调节控制语句实现逻辑。

2.1 if……else选择分支

1.if控制语句

        条件满足会执行,条件不满足不执行。也称为开关语句。

        语法形式:

if (条件表达式) {
    执行语句部分;        /* 当条件表达式结果为true,运行执行语句部分;当条件为false,执行语句部分不会执行 */
}

实例代码:

#include <stdio.h>

int main()
{
        int score;

        scanf("%d", &score);

        if (score >= 0 && score <= 100) {        
                printf("score = %d\n", score);
    /* 只有当输入成绩 [0,100] 才执行 */
        }   

        return 0;
}

2.if …… else 语句

if (条件表达式) {        /* 条件表达式结果为true运行执行语句1的部分;结果为false运行执行语句2的部分 */
    执行语句1部分
}
else 
{
    执行语句2部分
}

if……else实例

#include <stdio.h>

int main()
{
        int score;

        scanf("%d", &score);

        if (score >= 0 && score <= 100) {
                printf("score = %d\n", score);        /* 条件表达式为true的执行语句部分 */
        } else {
                printf("score error!\n");            /* 条件表达式为false的执行部分 */
        }   

        return 0;
}

3.if……else if…… 嵌套实现

#include <stdio.h>
int main()
{
        int score;

        scanf("%d", &score);

        if (score < 0 || score > 100) {
                printf("score error!\n");
                return -1;
        }   

        if (score >= 90 && score <= 100) {
                printf("A\n");
        } else if (score >= 80 && score < 90) {
                printf("B\n");
        } else if (score >= 70 && score < 80) {
                printf("C\n");
        } else if (score >= 60 && score < 70) {
                printf("D\n");
        } else {
                printf("E\n");
        }        
         return 0;
}

2.2 switch条件控制语句

switch(条件表达式) {        /* 条件表达式输出结果可以有多个结果,条件表达式的数据类型不能是浮点型数据 */
    case 条件表达式结果值1:
        执行语句部分1;
        break;                /*遇到break,语句一定结束 */
    case 条件表达式结果值2:    /* case不一定是本次执行的入口 */
        执行语句部分2;
        break;
    default:
        执行语句部分;
        break;
}

执行注意:

  • 在执行过程中会根据条件表达式的值进入到对应的case语句处开始向后顺序执行;
  • 如果找不到对应的case语句,进入到default语句处开始执行。
  • 不管是从那条case语句开始执行,只要遇到break,switch语句执行结束;
  • 进入到case语句后,只要没有遇到break,不管遇到多少次case语句,程序都会继续向后执行到break或者switch本身结束。
#include <stdio.h>

int main()
{
        int score;
        scanf("%d", &score);

        if(score < 0 || score > 100) {
                printf("score error\n");
                return -1; 
        }

        score /= 10;    /* 0,1,2,3,4,5,6,7,8,9,10 */ 

        switch(score) {
#if 0
                case 10:
                case 9:
#else
                case 9 ... 10:      /* 表示的是范围:9到10 的区间;需要注意符号(...) 左右两边有空格 */
#endif
                        printf("A\n");
                        break;
                case 8: 
                        printf("B\n");
                        break;
                case 7:
                        printf("C\n");
                        break;
                case 6:
                        printf("D\n");
                        break;
                default:        /* case 0 ... 5: */
                        printf("E\n");
                        break;
        }
        return 0;
}

3. 循环控制语句

        在某些情况下,执行语句需要连续多次执行,使用循环控制语句实现,可以减少代码量。

3.1 for循环控制语句

1.表达式1,用于初始化条件参数,可以省略表示用已有的初始参数值。

2.表达式2,实质式条件表达式,结果为true进入到循环体中执行,结果为false结束整个循环;可以省略默认为条件成立表示死循环。

3.表达式3,用于条件参数调节,可以省略表示参数不做调节(可以在循环体中调节)。

#include <stdio.h>
#include <unistd.h>

int main()
{
        int i;

        for (i = 0; i < 10; i++) {
                printf("i = %d\n", i); 
                sleep(1);
        }
     return 0;
}

3.2 while循环控制

3.2.1 while……do语句

        其实质就是通常所说的while语句;

while(条件表达式) {        /* 条件表达式结果为true进入到循环体中执行,结果为false结束整个循环 */
    循环体;        
}

while……do语句实例:

#include <stdio.h>
#include <unistd.h>

int main()
{
        int i = 0;        /* 循环条件参数的初始值需要循环执行之前设置 */

        while(i < 10) {        /* 循环条件判断,为true进入循环体执行,为false结束循环 */
                printf("i = %d\n", i++);    /* 循环参数调节,一般在循环体中实现。 */
                sleep(1);
        }

        return 0;
}

 3.2.2 do……while语句

do {
    循环执行语句;
} while(调节表达式);    /* 循环体每执行一次进行条件判断,为true进入到下一次循环体的执行,为false结束整个循环 */

do……while语句实例

#include <stdio.h>
#include <unistd.h>

int main()
{
        int i = 0;


        
        do {
                printf("i = %d\n", i++);
                sleep(1);
        } while(i < 10);
        return 0;
}

3.2.3 while……do和do……while区别

相同点:

        都是使用while实现循环控制;当判断条件为false的时候结束循环。

不同点:

        1. 前者先判断,再执行;后者先执行再做判断;

        2. 前者可能一次都不执行,后者至少会执行一次。

3.3 goto语句

        所谓的goto语句,其实质是跳转语句,跳转到goto后面所跟的标签位置处。在goto跳转的时候可以向前跳转和向后跳转

#include <stdio.h>
#include <unistd.h>

int main()
{
        printf("%d\n", __LINE__);
        sleep(1);
        goto next;                      /* 向后跳转next标签位置处开始执行 */
        printf("%d\n", __LINE__);
        printf("%d\n", __LINE__);
loop:
        printf("%d\n", __LINE__);
        printf("%d\n", __LINE__);
next:
        printf("%d\n", __LINE__);
        printf("%d\n", __LINE__);
        goto loop;                    /* 向前跳转loop标签位置处开始执行,又能会构成循环过程 */
        printf("%d\n", __LINE__);
        printf("%d\n", __LINE__);

}

4 特殊语句

4.1 break语句

        所谓的break语句,也表示结束语句;

4.1.1 switch语句中break语句

        此时的break表示条件模块执行语句的结束。

4.1.2 循环控制语句中的break语句

        此时的break表示整个循环结束。

4.2 continue语句

        continue只有在循环控制语句中使用,表示结束本次循环(循环体中continue后面的所有语句都不在执行),直接进入下一次循环

4.3 return语句

        在模块中使用,表示整个函数模块的结束(在函数体中遇到return,函数调用结束)。具体的使用:

                1.只表示函数模块的结束,直接使用return ;

                2.返回状态:一般情况下使用整型数据表示,0 = 成功;-1表示失败;

                3.返回数据处理结果:可以是任意数据类型的数据和指针。

#include <stdio.h>
#include <unistd.h>

int main()
{
        int i = 0;

        while(i < 20) 
        {
               

                printf("i = %d\n", i++);
                if (i == 6) {
                        i += 2;
                        continue;        /* 在循环体中continue表示结束本次循环,进入下一次循环 */
                }
                if (i == 10) 
                        break;        /* 在循环体中,表示结束整个循环 */
                sleep(1);    
        }

        return 0;        /* 在函数模块中使用,表示返回函数的状态 */
}

5. 控制语句关键字

        在C语言中控制语句关键字一共有12个

1.选择分支语句关键字

        if、else、switch、case、default

2.循环控制语句关键字

        for、while、do、goto、

3.特殊语句关键字

        break、continue、return

使用随机数生成函数:

#include <stdlib.h>
int rand(void);            /* 随机数生成函数,根据随机因子生成随机数 */

void srand(unsigned int seed);    /* 随机因子生成函数,相同的seed会生成相同的随机因子,在默认情况下将程序的编译时间生成随机因子 */
#include <time.h>
time_t time(time_t *tloc);

随机数生成实例

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
        int num;

        srand(time(NULL));        /* time(NULL)获取当前时间,srand(time(NULL)) 获取当前时间并用于生成随机因子 */
        num = rand();
             /* 利用随机因子生成随机数 */
        printf("num = %d\n", num);
}

6 复习C语言中的关键字

在C语言中关键字有32个:

1.数据类型关键字:12个

        a.基本数据类型

                i.整型数据数据(6个)

                        char 1字节 值域: unsigned char :0 ~ 255; signed char -128 ~ 127;

                        short 2字节

                        int 2字节(16位系统)                    4字节(32位系统)

                        long 4字节(32位系统)                 8字节(64位系统)

                ii.浮点型数据 (2个)

                        float 4字节 精度范围:小数点后保留6位小数;

                        double 8字节

        b.构造数据类型 (3个)

                struct 结构体类型

                union 共用体类型

                enum 枚举类型

        c.特殊数据类型 (1个)

                void 不能定义变量。

2.存储类型关键字:(4个)

        auto 自动存储类型 所修饰的变量存储栈区;

        register 寄存器变量 存储在寄存器中,只能修饰局部变量。并且定义失败默认为auto变量。

        extern 外部声明引用 其实质不是用来定义变量,而是做变量的声明。

        static 静态

                修饰全局变量,改变变量的作用域(或者链接属性);

                修饰局部变量,改变变量的生命周期和存储位置。

3.控制语句关键字(12个)

        a.选择分支:

                if……else……、switch、case、default

        b.循环控制

                for、while、do、

        c.跳转语句

                goto

        d.特殊功能语句

                break、continue、return

4.特殊关键字(4个)

        sizeof 运算符关键字,计算数据(常量、数据类型、变量、指针)所占空间的大小。

        typedef 数据类型定义关键字,用于新的数据类型定义,或者给已有的数据类型取别名。

#include <stdio.h>

typedef int Int;        /* 使用typedef关键字实现数据类型的定义,原型为int */

int main()
{
        Int a = 34;     /* 定义Int类型的变量a,数据类型是int */

        printf("a = %d\n", a); 
}

volatile         异变,可变的意思,用来修饰变量。所修饰的变量防止编译器的优化处理

程序运行过程:

        程序中所定义的变量在运行的时候存储在虚拟内存中;

        程序的运行在CPU的寄存器中运行;

        数据会从内存搬移到寄存器中在运行;

编译器优化:

        程序在编译的时候,为了提高运行效率,编译器会优化程序(如果需要对同一个数据多次运算,只搬移1次,每次访问寄存器运行)。

防止优化:保证数据可靠,数据的每次运行都从内存中取数据,不要直接从寄存器中取数据。

volatile使用场景:

        1.对于寄存器数据访问的时候,主要就对于硬件设备编程。

        2.多任务编程的时候,多个任务需要对同一资源数据访问的时候。

const 用来修饰的变量,表示只读变量;

        所谓的只读变量,表示为不可以被修改的数据量。在C语言中不能被直接修改,可以间接修改。

#include <stdio.h>

int main()
{
        const int a = 34;     /* const修饰的变量为只读变量,不能直接修改 */
        int *p = &a;          /* 定义一个int类型指针变量存储变量a的地址 */
        printf("%d : a = %d\n", __LINE__, a); 
        //a = 123;        /* error,const修饰的变量为只读变量,不能直接修改 */
        *p = 321;
        printf("%d : a = %d\n", __LINE__, a); 


}

7 输入输出的实现

        在计算机中需要实现数据的输入和输出,使用输入输出函数实现。

7.1 输出函数

#include <stdio.h>
int printf(const char *format, ...);
功能:实现数据的标准输出功能,按照format格式实现输出功能
格式信息:按照%格式字符标记,跟上一个输出数据内容。

利用printf函数可以实现数据的输出,在输出过程中,可以调节输出格式,和输出字体颜色和背景颜色。

7.2 字符输出

int putchar(int c);
功能:将传递的参数c通过标准输出。

7.3 数据的输入

#include <stdio.h>
int scanf(const char *format, ...);
功能:按照format字符串格式进行数据的输入,在输入过程中,严格按照格式输入,接收使用的变量空间地址。

7.4 字符读取

int getchar(void);    /* 从表中输入流读取一个字符 */
#include <stdio.h>

int main()
{
        int a;
        int b;
        int c;
        int i;

        char ch; 

        scanf("%d %d %d", &a, &b, &c);    /* 按照格式输入数据:1 2 3 */
        getchar();
                        /* 字符输入,接收在scanf输入语句结束时回车换行符 */
        printf("a = %d, b = %d, c = %d\n", a, b, c); 

        char buf[4];
        for (i = 0; i < 4; i++) {
                scanf("%c", &buf[i]);     /* 每次输入一个字符 */ 
                getchar();                /* 字符输入,接收在scanf输入语句结束时回车换行符 */
        }

        for (i = 0; i < 4; i++) {
                printf("%c\n", buf[i]);    /* 实现字符的输出 */
        }

        return 0;
}

PS:scanf函数的使用,有严格格式要求,很容易出现bug。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值