第五章 流程控制 Pro

五、流程控制

        1、条件语句

一、if语句(三种形式)

1、单分支语句:

        if (表达式)语句;      //表达式可以是任何表达式 0和非0     多条语句加{ }构成复合语句

2、双分支语句

        if(表达式)

                语句1;

         else

                语句2;

3、多分支语句

    (1)一般形式:if_else_if   形式

        if(表达式1)语句1;

        else if (表达式2) 语句2;

        else if(表达式3) 语句3;

        [else                        语句n;]

注意区别:if(a==5)  判断       

                if(a=5)赋值

                if(a)   if(a!=0)

(2) if嵌套形式

                if ()

                        if() 语句1;

                        else 语句2;

                else

                        if ()语句1;

                        else 语句2;

#include <stdio.h>

void main(){
int m,x=3,y=4,z=5;
if(x>y) m=x;   //判断3大于4 不成立向下执行
    if(y<z) m=y; //判断4小于五成立 将y的4赋值给m
    else m=z;
    printf("%d",m); //m=4
}

2、空语句与复合语句

空语句即只有一个分号,它通常用于占位,为以后补充代码预留,是合法的语句。

if (x); //合法      if (x) {}//合法     if (x) {}//合法

    复合语句用于将一组语句视为  一条(一个整体) ,通常用于分支和循环中。

 3、 switch+break

#include <stdio.h>

void main(){
    switch (表达式) {    //表达式只能是整型和字符型
        case 常量表达式1:语句1;break;
        case 常量表达式2:语句2;break;
        case 常量表达式3:语句n;break;
        default:语句;break;
    }
}

       二、功能:

        1、计算表达式的值;

        2、值与某常量表达式的值相等,转常量表达式后面语句执行;直到遇break或switch结束时退出,期间不再进行同级别case判断。

        3、若均不相等,执行default部分,若无default,则switch语句什么也不做。

                三、知识点

                1、表达式的值必须是确定的,且应与case后面的常量为同类型变量,可以是字符型、整型;

                                        不可是实型,实型没有精确值

                2、case后面加空格,每个常量表达式后面有冒号;

                3、每个case后面的常量值不能相同;

                4、各个case后的语句可以是多个语句,可不用花括号括起来;

                5、不能漏掉break(如果需要);

                6、多case可共用同一组语句;

                7、 case后的值决定了入口, break决定了出口

                8、switch允许嵌套,break只能跳出紧包裹着switch结构;

                9、如果所有语句都有break ,则很容易用if-else语句表示

#include <stdio.h>

void main(){
  int x=1,y=0,a=1,b=0;
    switch (x)       //x为1
    {case 1:  //执行
            switch (y)  //y=0执行
            {
                case 0:b++;  //b=1
                case 1:a++;break;//b=1,a=2   跳出
                case 2:b++;break;
            }
        case 2:a++;b++;break;  //b=2.a=3
        case 3:a++;b++;

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

        

#include <stdio.h>

int main(void){
  int a=2,b=1;
    switch (a+1)   //3
        { case 2:b=b+2;break;
        case 3:b=b*3; //1*3=3
            case 4:b=b*4;break; //3*4=12
            case 5:b=b+5;
    }
    printf("b=%d",b);
}

#include <stdio.h>

int main(void){
int n='c';
    switch (n) {
    case 'c':case 'C':printf("pass");
    case 'd':case 'D':printf("fail");break;
        default:printf("error");break;
    }
}

      

 4、 if(x)与if(!x)的正确理解

        两个等价条件的四种形式

if(x) 等价于if(x!=0) 同理,while(x)等价于while(x!=0)

if(!x)等价于if(x==0)同理, while(!x)等价于while(x==0)

要区分!(逻辑,取反)和!=(关系符,不等于)

5、循环结构的三个语句

while    当型

do... while  直到型

 for 循环

 while循环语句

一、一般形式:

        while (表达式)    //可以是任何表达式,主要用于判断0和非0

                        循环体语句;

二、执行过程

        (1)计算表达式的值

        (2)如果表达式为真,执行循环体语句

        (3)如果表达式值为假,则退出循环

三、说明:

        1、表达式任意,表达式省略时,会有语法错误;

        2、先判断表达式,再执行循环体;

        3、循环部分为多个语句时,必须用大括号构成复合语句;

四、while关键点

        循环条件的初态

                while(循环条件){

                        循环体语句;

                                (一定要有改变循环条件的语句)

                }

        do while循环语句

一、一般形式

        do

                循环体语句;

             while(表达式);

二、执行过程

                1、执行循环体的语句

                2、计算循环控制表达式的值,如果表达式为真,则返回

                3、如果表达式值为假,则退出循环,执行循环后面的语句

三、注意:

1、先执行循环体,再判断表达式,循环体至少执行一次;

2、while后面要有分号;

for循环

一、一般形式

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

                                循环体语句;

二、执行过程

        (1)求解表达式1;

    (2)判断表达式2;

    (3)表达式2为真,执行循环体语句,求解表达式3;转(2),若为假,结束循环,执行下面语句;

1、结构体类型及变量定义与赋值

用途:把不同类型的数据组合成一个整体

1.定义结构体类型:

struct <结构体名>{

        成员表列

};

 由程序设计者指定了一个结构体类型struct Student可以用它定义变量它包括num,name,sex,age,score,addr等不同类型的成员

结构体的成员可以是另一个结构体

2.结构体变量的定义

定义结构体变量后,系统分配内存单元,单元个数为所有成员所占单元个数之和。

        三种定义方法:

1、先定义结构体类型再定义变量名

2、在定义结构体类型的同时定义变量

3、直接定义结构体类型变量(不出现结构体名)

struct student stu,a[3],*p;

3.结构体变量的引用(访问)

1、结构体变量名.成员名

        (*指针变量).成员                                   3种形式等价

        指针变量→成员

 a.age=21;strcpy(a.name, "zs"); //变量名.成员名:
("p).age=21; stropy(("p).name,"zs");//(*指针名).成员名: 
p->age=21; strepy(p->name,"zs"); " //指针名->成员名: 

2、结构体变量的成员还是结构体,则层层访问;

        stu.birthday.year

3、对结构体变量的成员可以像普通变量一样进行各种运算(根据成员的类型决定可以进行的运算) ;

4·结构体变量的赋值,输出和输入

        1、相同类型的结构体变量可以互相赋值

        2、不能将一个结构体变量作为一个整体进行输入输出。必须一个一个成员按其类型输入输出;

5,可在定义结构体类型同时自定义给类型别名:方便定义该类型变量

2019.设有定义:struct sk(int a; float b; }data,*p=&data;

则对data中成员b的引用不正确的是( )A. data.bB.p-> data.b C.(*p).b D.p->b

二、共用体

使几个不同的变量共占同一段内存的结构,称为“共用体”类型的结构。

1.共同用体类型的定义

union 共用体类型标识符{

类型标识符1 成员名1;

类型标识符2 成员名2;

类型标识符n 成员名n;

};

       2. 共用体变量的定义

                共用体变量的定义

                        union data a, b, c;

                        (三种定义形式同结构体)

        占内存数是成员最大字节数;

        3,共用变量成员的引用:同结构体

重点

1、同一内存在每一瞬时只能存放其中一种类型的成员;

2、起作用的是最后一次存放的成员,不能作为函数参数;

3、只能对第一个成员初始化;

4、共用体变量的地址和它的各成员的地址都是同一地址;

5、不能对共用体变量名赋值,也不能企图引用变量名来得到一个值;

6、共用体类型可以出现在结构体类型定义中,作为共用体的成员。反之,结构体也可以出现在共用体类型定义中,作为共用体的成员;

共用体与结构体定义形式相似,但含义不同

1、结构体变量所占的内存长度等于各成员所占的内存长度之和。(每个成员分别占有自己的内存)

2、共用体变量所占的内存长度等于最长的成员的长度。

2018,当说明一个共用体变量时,系统分配给它的内存分配的是

A.第一个成员所需内存空间

B.各成员所需内存空间之和

C.各成员所需内存空间的最大值

D.最后一个成员所需内存空间

2017,当说明一个结构体变量时,系统分配给它的内存

A.各成员所需内存空间的最大值

B.各成员所需内存空间之和

C.结构中第一个成员所需内存空间

D.结构中最后一个成员所需内存空间

 1、宏(无参、带参)

程序在正式编译前,要进行预处理,对程序中所有出现的宏名使用宏定义中的字符串去替换,称宏替换或宏展开。

全屏宏替换时,特别注意的一点就是将宏定义中的"字符串"视为真正的字符串,进行原样替换,切忌不要人为计算!

调用带参宏时,首先进行宏展开,再实参代换形参。

宏不分配内存,不占用程序运行时间,只占用编译时间。

形参不分配内存,不必做类型说明

2、文件包含include

要想使用系统提供的库函数,必须将库函数对应的头文件通过include引入到当前文件中。

头文件引入的两种写法


-include <stdio.h>:标准格式,系统到存放C库函数头文件所在目录寻找要包含的文件(配置)。- include "my.c" :系统首先在当前目录寻找包含文件,找不到再按标准方式查找。

—一般使用系统库函数使用<>,包含自定义文件用双引号。

     

 2019.若程序中调用库函数strlen() ,则必须包含头文件

A.  stdio.h  (输出输出)

B. stdlib.h   (时间函数随机函数)

C. string.h  (四个函数)

D.  math.h   (数学函数)

posted @ 2023-10-16 09:46  YJlio  阅读(13)  评论(0编辑  收藏  举报  来源