C语言学习笔记2——选择与循环

目录

一、选择结构

1、c语言的选择语句(两种)

(1)if 语句

(2) switch语句

二、关系运算符     

1、关系运算符及其优先次序

三、逻辑运算符

1、逻辑运算符

2、优先级次序

3、逻辑型变量

四、条件运算符

五、循环结构

1、循环语句(3种)

(1)while语句

(2)do……while语句

(3)for语句

2、for语句与while语句的转换:(两者是等价的)

3、改变循环执行的状态

(1)break语句

(2)continue语句


一、选择结构

1、c语言的选择语句(两种)

(1)if 语句:两个分支的选择结构(2)switch语句:多分支语句的选择结构。

(1)if 语句

(1) if 语句的一般格式:

if (判断表达式) 
{
    语句1;
}
else
{
    语句2;
}

(2) 最简格式(没有else子语句):

if(判断表达式)

    语句1

(3) 嵌套格式:

if(判断表达式1)
{
    语句1
}
else if(判断表达式2)
{
    语句2
}
    .
    .
    .
else if(判断表达式n)
{
    语句n
}
else
{
    语句n+1
}

注意:

1、else必须伴随if来使用,而if不一定要伴随else 。

2、“语句1”、“语句2”……“语句n+1”中,这些语句可以是一行简单的语句,也可以是一个多行的复合语句,但要注意的是,若使用复合语句,则必须用大括号(“{ }”)括起来,若是单一条语句,则可以省略大括号。

3、当 if 的判断条件满足了,才会执行离 if 语句最近的语句,不满足则执行else或跳出if选择结构(最简格式的效果)。

4、if 嵌套时注意合理使用大括号,避免二义性的混淆。(else 总是与离它上面最近的 if 搭配)

例:if()
        if()语句1      
    else
        if()语句3
    else 语句4

对上面的嵌套格式很容易让人产生误解,容易让人觉得第三行的else是与第一个if语句搭配,
但实际上第三行的else是与离它最近的"if()语句1 "【第二行的】这语句搭配的,
所以这些时候就容易产生二义性,从而产生bug。
所以若要实现,则需要合理借助大括号:
if()
{
    if()语句1   
}   
else if()
{
语句3
}
else 
{
语句4
}

(2) switch语句

(1)switch语句的格式:

switch(表达式)
{
case    常量1:语句1
case    常量2:语句2
          .
          .
          .
case    常量n:语句n
default:      语句n+1
}

举例说明:

实现输入成绩等级,输出对应的分数段

#include<stdio.h>
int main()
{
    char grade;
    scanf("%c",&grade);
    printf("你的成绩所在百分制段为:");
    switch(grade)
    {
        case'A':printf("85~100\n");break;
        case'B':printf("70~84\n");break;
        case'C':printf("60~69\n");break;
        case'D':printf("<60\n");break;
        default:printf("请确认输入是否有误\n");
    }

    return 0;
}

(2)switch 的使用分析注意事项(通过 上述代码 与 格式 进行分析

  1. switch的执行方式:先执行switch语句后面的“表达式”,计算出表达式的值,然后与下面的case标号进行比较,比较得出结果执行对应的语句,若比较没有匹配成功的case,则执行default标号后的语句。
  2. switch后面接的“表达式”,其值的类型应为整型(包括字符型);
  3. switch语句体中可以有多个case,但最多只能有一个或没有default ,它们的作用都是起标志位置的作用;
  4. 若没有default,没有能与switch表达式相匹配的case常量,则不执行任何语句,直接跳出switch继续执行下一条语句;
  5. case后面跟一个常量或常量表达式,每个常量都必须互不相同,是要来与switch进行匹配,避免出现互相矛盾、二义性的现象。
  6. 标号出现的次序不影响执行的结果,如:可以先出现default标号,再出现case'D',然后再出现case'B',执行的结果都是一样的;
  7. case的常量与default这些标志位置之后要加冒号“ :”;
  8. 多个case标号可以共用一组执行语句,例如:
    case'A':
    case'B':
    case'C':printf(">60\n");break;
    

    标号A、B、C共用“ printf(">60\n");break; ”这一组执行语句(即:无论是A还是B还是C,都是使用该组语句)。

  9. 在case语句中,通常都会在最后加break进行跳出结束switch结构,但最后的一个case语句或default语句在最后时【注意:default跟case一样,若不是在最后,也是要加的】可以不加。若没有加,则会运行完对应的case标志的语句,然后接着继续运行它后面接着的所有case语句。

 

二、关系运算符     

1、关系运算符及其优先次序

c语言提供有6种关系运算符(关系运算又叫比较运算)

(1)<、<=、>、>= 这四种优先级相同

(2)==(等于)、!=(不等于)这两种优先级相同

第(1)种的优先级高于第(2)种 。

与算术运算符、赋值运算符比较:算术运算符 > 关系运算符 > 赋值运算符

关系表达式:用关系运算符连接而形成的式子。值为一个逻辑值,即“真”或“假”。

 

三、逻辑运算符

1、逻辑运算符

逻辑运算符有3种:与、或、非

运算符含义举例使用说明
&&逻辑与a && b如果a和b都为真,则结果为真,否则为假。(一假则假,全真才真)
||逻辑或a || b如果a和b有一个以上为真,则结果为真,二者都为假时,结果才为假。(一真则真,全假才假)
逻辑非!a如果a为假,则 !a 为真,如果a为真,则 !a为假。(取反)

 

 

 

 

2、优先级次序

优先级:!(非)> &&(与)> ||(或)

与算术运算符、关系运算符、赋值运算符比较:

!(非) > 算术运算符 > 关系运算符 > &&(与) > ||(或) > 赋值运算符

注意:

在逻辑表达式中,并不是所有的逻辑运算符都会被执行(逻辑的“短路”现象)

例如:(1)a && b && c    若当a为假,则不需要再判断 b 跟 c,因为此时已经可以确定结果必定为假,该现象称为“短路”现象。

3、逻辑型变量

定义逻辑变量用类型符_Bool(或bool),如:_Bool  a,b;(或 bool a,b;)

在头文件 中,将 bool 定义为 _Bool 的同义词,同时定义了两个符号常量true和false,true代表1(真),false代表0(假),所有若程序里面有写 #include stdbool.h  ,则可以直接使用bool(上面括号里面的样子)。

四、条件运算符

条件运算符:由两个符号组成的(:和?),要求有三个操作对象,称为三目运算符(或三元运算符)

条件表达式:表达式1 ?表达式2 :表达式3

执行的顺序:先求解表达式1,若表达式1为真,则执行表达式2,若表达式1为假,则执行表达式3

(相当于一组if……else……。  冒号【:】相当于if,问号【?】相当于else,表达式1是判断条件)

优先级:算术运算符 > 关系运算符 >条件运算符 > 赋值运算符,

如:max=(a>b)? a : b   等同于max = a>b ? a : b    先执行a>b,然后执行三目运算,最后赋值给max。

 

五、循环结构

循环结构:用于一些有规律、不断地多次执行处理的情况。

1、循环语句(3种)

(1)while语句(2)do……while语句 (3)for语句

(1)while语句

while语句的一般结构:

while(判断条件表达式)
{
    循环体;
}

注意:

(1)当判断条件表达式符合条件为真时才执行循环体,否则跳出循环。

(2)while循环的特点:先判断条件表达式,后执行循环语句。


(2)do……while语句

do……while语句的一般结构:

do
{
    循环体;
}
while(判断条件表达式)

注意:

(1)执行过程:先执行循环体,然后再判断条件是否满足成立,若成立再执行,不成立则跳出。

(2)do……while的特点:先执行后判断,无条件至少运行一次循环体。(这点就是与while的区别)


(3)for语句

for语句的一般结构:

for(循环变量赋初值;循环条件表达式;循环变量增值)
{
    循环体;
}

// 循环变量赋初值:设置的初值可以没有,也可以是多个变量设置初值。

// 循环条件表达式:用来判断是否继续循环,在每次执行循环体前先判断再决定是否继续执行循环。

//  循环变量增值: 作用于改变循环变量的值,就如:i++、i--等,它是在执行完循环体后才执行的。

for语句的执行过程顺序:

1. 先给循环变量赋初值;

2. 判断循环条件表达式是否满足,若满足则执行循环体,然后执行下一步,若不满足则跳出for循环;

3. 执行循环变量增值改变循环变量的值;

4. 返回第2步继续运行。

 

注意:

for后括号里的三个表达式都可以省略,并且三者之间是用分号(;)隔开,无论有没有表达式在,那两个分号都必须在。

情况1:省略循环变量赋初值

例1:for( ; i<100 ; i++)   这个的i就是控制循环的变量,没有赋初值时,系统默认给它赋值为0。

*注意与上例1区分*
若代码为:
i=1;
for(;i<100;i++)
则此时 i 的初值就为1,i可以在for循环前进行赋值。

情况2:省略循环条件表达式

例2:for(i=0 ; ; i++)不设置循环的条件,此时循环会无休止的执行下去,判断条件默认为真。

情况3:省略循环变量增值

例1:for(i=0 ; i<100 ; )不设置循环变量增值,此时循环也是会无休止的执行下去,若是这样,要想使循环停止下来,则需要在循环体中设置增值或其他条件,这样才能使循环停止。


2、for语句与while语句的转换:(两者是等价的)

for语句:while语句:
for(循环变量赋初值循环条件表达式循环变量增值
{
    循环体;
}
循环变量赋初值;
while(循环条件表达式)
{
    循环体;
    循环变量增值
}

 

 

 

 

3、改变循环执行的状态

循环状态改变有两种:(1)正常的判断条件不满足跳出;(2)提前终止跳出。

提前终止跳出有两种:break语句 和 contiune语句。

(1)break语句

使用:break;

作用:提前结束循环,跳到循环体之外,执行循环外的下一行语句。(单层循环而言,终止整个循环)

注意:1、break语句只能用于 循环语句switch语句 之中,而不能单独使用 

           2、若是双重循环,break只是跳出内循环,而不是整个循环。(即:每个break只能跳出一层循环)

 

(2)continue语句

使用:continue;

作用:提前结束本次循环,执行下一次循环。(终止一次循环)

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值