C语言笔记-2:循环和分支语句

2021-01-28
1750字
4分钟
C

C语言笔记-2:循环和分支语句

循环与分支语句

;结尾 - 一个语句

分支语句(选择结构)

if - else语句

语法形式

语法结构
if (表达式)
    语句;


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


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


#include<stdio.h>

int main()
{
    int age = 10;
    if (age<18)
        printf("未成年\n");
    else if (age>=18 && age<23)//不能写18<=age<23
        //18<=10  -  假 = 0 <23  -  真 = 1
        printf("青年\n");
    return 0;
}

悬空else(if else 匹配)

else 和离它最近的在同一个代码块中的未匹配的if匹配

#include<stdio.h>

int main()
{
    int a = 0,b = 2;
    if (a == 1)
        if (b == 2)
            printf("hehe\n");
    else    //这个else语句是与上一个if匹配的,不要被缩进迷惑
        printf("haha\n");
    return 0;
}

if书写形式的对比

//代码1
if (condition){
    return x;
}
return y;

//代码2
if (condition)
{
    return x;
}
else
{
    return y;
}

//代码3
int num = 4;
if (num = 5)//= - 赋值
    printf("hehe\n");//可以打印
if (5 = num)//先把值写在前面   可以知道错误
    printf("hehe\n");//error

switch语句

语法形式

实现多分支结构

case进入

break 退出

switch(整型表达式)
{
    语句项;
}
//语句项
case 整型常量表达式:
	语句;
#include<stdio.h>

int main()
{
    int day = 0;
    scanf("%d",&day);
    switch(day)
    {
    case 1:
        printf("星期一");
        break;
    case 2:
        printf("星期二");
        break;
    case 3:
        printf("星期三");
        break;
    case 4:
        printf("星期四");
        break;
    case 5:
        printf("星期五");
        break;
    case 6:
        printf("星期六");
        break;
    case 7:
        printf("星期日");
        break;
    }
    return 0;
}

量的选择 - 整型

switch 后的量必须是整型变量

case后的量必须是整型常量

break的使用

#include<stdio.h>

int main()
{
    int day = 0;
    scanf("%d",&day);
    switch(day)
    {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        printf("工作日");
        break;
    case 6:
    case 7:
        printf("休息日");
        break;
    }
    return 0;
}

break的实际效果就是将代码块分割成几块

default子句(默认选项)

不满足case的情况

建议放在case的后面

#include<stdio.h>

int main()
{
    int day = 0;
    scanf("%d",&day);
    switch(day)
    {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        printf("工作日");
        break;
    case 6:
    case 7:
        printf("休息日");
        break;
    }
    default:
    	printf("输入错误!");
    	break;
    return 0;
}

最好加上break

循环语句

  • while
  • for
  • do while

while语句

语法结构

while(表达式)
    循环结构;

一个执行很多次的if语句

while

break:跳出总循环(终止循环)

continue:跳出当前循环(直接下一次判断)

一些应用

#include<stdio.h>

int main()
{
    int ch = 0;
    while ((ch = getchar()) != EOF)
        putchar(ch);
    return 0;
}

getchar:接收输入字符

putchar:输出字符

EOF - end of file 文件结束标志

这个只有按Ctrl+Z 结束

for循环语句

语法结构

for (表达式1;表达式2;表达式3)
    循环语句;

表达式1:初始化部分

表达式2:条件判断

表达式3:调整部分

for

for 与 while中的continue

while语句可能陷入“死循环”

int i=1;
while  (i<=10)
{
    if (i==5)
        continue;
    printf("%d ",i);
    i++;
}

for则可以避免

for (int i=1;i<=10;i++)
{
    if (i==5)
        continue;
    printf("%d ",i);
}

一些建议

  1. 不可在for循环体内改变循环变量,防止for循环失去控制。
#include<stdio.h>

int main()
{
    int i=0;
    for (i=0;i<10;i++)
    {
        if (i==5)//容易写错,,别改变
            printf("haha\n");
        printf("hehe\n");
    }
    return 0;
}
  1. 建议for语句的循环控制变量的取值采用”前闭后开区间“写法。
#include<stdio.h>

int main()
{
    int arr[10] = {1,2,3,4,5,6,7,8,9,10};
    int i=0;
    for (i=0;i<10;i++)//前闭后开区间
    //for (i=0;i<=9;i++)//前后闭区间
    {
        printf("%d ",arr[i]);
    }
    
    return 0;
}

一些for循环的变种

  1. for (;;)
    {
        //死循环
    }
    

for循环的三个部分都可以省略

判断部分省略时,恒为真

不要乱省略

#include<stdio.h>

int main()
{
    int i=0;
    int j=0;//与下面重复
    
    for (i=0;i<10;i++)
    {
        for (j=0;j<10;j++)
        {
            printf("hehe\n");//输出100个hehe
        }
    }
    return 0;
}
#include<stdio.h>

int main()
{
    int i=0;
    int j=0;
    
    for (;i<10;i++)
    {
        for (;j<10;j++)//j不会销毁重置
        {
            printf("hehe\n");//输出10个hehe
        }
    }
    return 0;
}
  1. int x, y;
    for (x=0, y=0;x<2 && y<5;++x, y++)
    {
        //循环2次
    }
    

例题

//请问循环多少次
#include<stdio.h>

int main()
{
    int i=0;
    int k=0;
    for (i=0.k=0;k=0;i++,k++)
        k++;
    return 0;
}

for的判断中,k=0,它的 值为0,是false,于是循环不进去。

do…while()循环

语法结构

do
    循环语句;
while (表达式);

dowhile

比如打印1~10

#include<stdio.h>

int main()
{
    int i=1;
    do
    {
        printf("%d ",i);
        i++;
    }
    while (i<=10);
    return 0;
}
Avatar
Zhang.Mathias 巧者劳而智者忧,无能者无所求,饱食而遨游,泛若不系之舟