C语言知识点小结Part1---分支与循环

C语言是一门结构化的程序设计语言

1.顺序结构

2.选择结构

3.循环结构

自用学习笔记----一直会补充,不是最终版,有错误欢迎各位大佬指正O(∩_∩)O

 

Part1.分支和循环语句

什么是语句?

有一个分号隔开的就是一个语句,单独一个分号也算一个语句,只是一个空语句。

 

一、分支语句:

1.if语句

2.switch语句

(1)if语句

使用方式①——单分支

if(表达式)

  语句;

该情况下,表达式的结果为真,执行语句,否则,什么都不执行。

 

使用方式②——双分支

if(表达式)

  语句1;

else

  语句2;

该情况下,表达式的结果为真,执行语句1,表达式结果为假,执行语句2。

 

使用方式③——多分支:

 

if(表达式1)

 

  语句1;

 

else if(表达式2)//还需要条件限制

 

  语句2;

 

else

  语句3;

 

该使用方法表示含义:表达式1成立,执行语句1;另外如果表达式1不成立,表达式2成立,执行语句2;如果表达式1,2都不成立,执行语句3。

此情况下如果最后一个else不存在,如果表达式1,2都不成立,不走任何一个分支。

 

另外如果写法为:

 

if(age<18)

  语句1;

else if(18<=age<20)

  语句2;

else

  语句3;

 

 

代码是顺序执行的,假如输入age =10,应该执行语句1,但时候顺序执行到else if表达式中执行的语句顺序是:先判断18<=age,如果为假返回0,然后判断0<20,为真,则又执行语句2,只要age<18一定会执行语句2

 

温馨提示1:C语言中表示真假的方式

 0表示假,一切非0为真

  -1不是0,表示真

 

温馨提示2:if语句要控制多条语句,都得用{}括起来,否则就只能执行一个语句

温馨提示3:悬空else(特别容易出错)

注意else的匹配原则,就近if匹配,防止else挂起bug,这种情况下还不容易查找出错

 

 

//
if(表达式)

  return x;

return y;

该部分的意思是:如果满足表达式,返回x;如果不满足返回y。

但是这样写代码的可读性是不好的,一般不这样写

一般会写的表达式:

 

if(表达式)

{

  return x;

}

else

{

  return y;

}

 

温习提示4:容易会出现的bug方式:

 

int main()
{
    int a = 1;
    if(a = 5)
    {
        printf("哈哈\n");
    }
    retuen 0;
}

 

这种情况下的输出结果是:哈哈

(→_→)请原谅这里的输出结果忘记贴图~~

明明1不等于5,但是打印结果为哈哈,出现这种情况的原因是:一个等号是赋值,双等号是判断相等

该情况下的出错,编译器不会直接暴露出错误

避免出现这种错误的办法:将常量写在前边,定义的变量写在后边

if(5 == a),这样即使手抖也不会出现bug,O(∩_∩)O哈哈~~~~

 

(2)switch语句

switch语句也是一种分支。相对于 if 语句而言,switch 语句可以更方便地应用于多个分支的控制流程。

switch 语句与 if 语句不同的是,switch 语句只能够测试是否相等,因此,case 语句后面只能是整型或字符型的常量或常量表达式;而在 if 语句中还能够测试关系与逻辑表达式。

 

使用方法

switch(整型表达式)

{

  语句项;

}

PS:什么又是语句项?什么是整形表达式?整形表达式和整型常量表达式有什么不同?


语句项是一些case语句

表示如下:

case 整型常量表达式

  语句;

 

整型表达式是整个表达式的最后的值是一个整型,但是不能是float等。

整型常量表达式是包含运算符的整型表达式。------(整型常量+运算符号也就是只能用1+1、1+2)

如果使用

int a = 0;

int n = 1;

switch(a)

{

 

  case n:

 

    语句;break;

 

}

这种也是不可以的,因为case后边的表达式不是常量

举个例子~~

 

int main()
{
    int day;
    scanf("%d",day);
    switch(day)
    {
        case 1+0:
            printf("星期%d\n", day);break;
        case 2:
            printf("星期%d\n", day);break;
        case 3:
            printf("星期%d\n", day);break;
        case 4:
            printf("星期%d\n", day);break;
        case 5:
            printf("星期%d\n", day);break;
        case 6:
            printf("星期%d\n", day);break;
        case 7:
            printf("星期%d\n", day);break;

    }

}

 

插入的break是终止跳出分支的,如果不break,那么从哪里进入case一直到最后一条case才会跳出

 

但是不是每个分支都需要加语句

举个例子~~:

 

int main()
{
    int day;
    scanf("%d",day);
    switch(day)
    {
        case 1:
        //if(day == 1)
        //  printf("哈哈哈\n");
        //break;
        //输入1打印结果为:哈哈哈
case 2: case 3: case 4: case 5: printf("工作日\n", day);break; case 6: case 7: printf("休息日\n", day);break;
     //defult:
     //  printf("输入错误\n");
     //  break; } }

 

这里case选项为1-7,如果超出这个范围,将不作处理,但是这种情况下

后边的default给一个友好提示处理非法case

case和default没有顺序严格的控制,但是一般会放在后边

case语句里是可以出现if语句的

 

二、循环语句:

1.while循环

2.for循环

3.do while循环

(1)while 循环

语法结构:

while(表达式)

{

  循环语句;

}

 

表达式的结果为真,就循环语句,直到表达式的值为假,语句才不再执行,循环停止

while(1)为死循环

循环里如果遇到break和continue:

break---不会有执行,跳出while循环;continue---continue后边的代码不再继续执行,回到while循环的判断部分,继续while做判断

continue不明白的话,举个例子:

int main()
{    
    int i = 1;
    while(i<10)    
    {
        if(i == 5)
              continue;
        printf("%d ",i);
        i++;
    }
}    
//此时打印的结果为
//1 2 3 4
//因为i++执行不了,卡在i = 5,一直在循环

如果调整一下代码,将i++的位置往前放一放

int main()
{    
    int i = 1;
    while(i<10)    
    {
        i++;
        if(i == 5)
              continue;
        printf("%d ",i);
        //i++;
    }
}    
//此时打印的结果为
//1 2 3 4 6 7 8 9 10
//i = 5的后边代码跳过

总结:

break在while循环中的作用:

只要遇到break,就停止后期的所有循环,直接终止循环,用于永久终止循环

continue用于终止本次循环,后边的代码不会再执行,而是直接跳转到while语句的判断部分,进行下一次循环的入口判断。

 

循环部分未完待续,明天继续完善......

还会用到C语言的输入输出操作,到时候再做一个总结,补链接在这里

posted @ 2022-03-06 22:43  山鬼Ghost  阅读(227)  评论(0编辑  收藏  举报