C_控制语句(精讲)

目录

知识点1【if语句】(重要)

1、if语句:某一种结果成立 请选择if

案例:键盘输入一个int数据 能被3整除 输出ok

2、if....else.....

案例:键盘输入一个int数据 能被3整除 输出ok 否则输出no

3、if....else if....else if....else.....

案例1:键盘输入一个int数据 求对3的余数

4、if if if ..... 每个if是独立

知识点2【switch语句】(重要)

案例:可以省略掉部分break

知识点3【for循环语句】(重要)

案例1:统计0~100的和

知识点4【while循环语句】(重要)

知识点5【do...while循环语句】(重要)

知识点6【goto跳转语句】(了解)


知识点1【if语句】(重要)

1、if语句:某一种结果成立 请选择if

if(表达式1)
{
    语句1;
}

如果表达式1为真 就执行语句1;

案例:键盘输入一个int数据 能被3整除 输出ok

void test00(){
    int num = 0;
    printf("请输入一个int型数据:\n");
    scanf("%d", &num);

    if(num%3 == 0){     //能被3整除
        printf("ok\n");
    }
}

int main(int argc, char const *argv[])
{
    
    return 0;
}

注意在if语句后不要加分号‘;’,否则不论判断正确与否都会执行到后面‘{}’内的内容

if(num%3 == 0);{     //能被3整除
    printf("ok\n");
}

2、if....else.....

        如果项目有两个结果 且这两个结果不会同时出现 请选择if.......else......

if(表达式1)
{
    语句1;
}
else//不能跟条件
{
    语句2;
}

表达式1为真 执行语句1 否则执行语句2

案例:键盘输入一个int数据 能被3整除 输出ok 否则输出no

void test00(){
    int num = 0;
    printf("请输入一个int型数据:\n");
    scanf("%d", &num);

    if(num%3 == 0){     //能被3整除
        printf("ok\n");
    }
    else{
        printf("no\n");
    }
}

3、if....else if....else if....else.....

如果项目有多个结果 但是同一时间只会出现一个。

注意:最后的else可以不写

if(表达式1)
{
    语句1;
}
else if(表达式2)
{
    语句2;
}
else if(表达式3)
{
    语句3;
}
else可以省略
{
    语句4;
}

只有在表达式1不成立的情况下 才会判断表达式2 只有表达式2不成立的情况下 才判断表达式3,以上表达式都不成立 才会执行else里面的语句

如果表达式1成立 执行语句1,后面的表达式都不会判断 跳出if语句

案例1:键盘输入一个int数据 求对3的余数

void test02()
{
    int num = 0;
    printf("请输入一个int数据:");
    scanf("%d", &num);

    if(num%3 == 0)
    {
        printf("%d对3的余数为:0\n", num);
    }
    else if(num%3 == 1)
    {
        printf("%d对3的余数为:1\n", num);
    }
    else if(num%3 == 2)
    {
        printf("%d对3的余数为:2\n", num);
    }
}

4、if if if ..... 每个if是独立

当项目有多种结果 但是结果会不会同时出现不确定

if(表达式1)
{
    语句1;
}

if(表达式2)
{
    语句2;
}

以上两个if是完全独立的 互不影响

知识点2【switch语句】(重要)

switch(表达式)//表达式只能是字符型或整型的(short int long) 
{ 
case 常量表达式1://常量表达式 不能有变量 
    语句1; 
    break; //每个case尽量有一个break
case 常量表达式2: 
    语句2; 
    break; 
default:
    语句3;
    break; 
}

将表达式的值 与 case对应的值 一一对比,哪个case相等 程序就从这个case语句进入,知道遇到break跳出switch语句。

void test01(){
    int num = 0;
    printf("请输入一个int型数据:\n");
    scanf("%d", &num);

    switch (num %3){
        case 0:
            printf("%d对3的余数为:0\n", num);
            break;
        case 1:
            printf("%d对3的余数为:1\n", num);
            break;
        case 2:
            printf("%d对3的余数为:2\n", num);
            break;
        default:
            break;
    }
}

如果程序从常量表达式1进入 ,就会执行语句1,如果没有遇到break将会继续执行语句2 不会判断常量表达式2.

void test01(){
    int num = 0;
    printf("请输入一个int型数据:\n");
    scanf("%d", &num);

    switch (num %3){
        case 0:
            printf("%d对3的余数为:0\n", num);    //没有break,程序会继续执行下一条
        case 1:
            printf("%d对3的余数为:1\n", num);
            break;
        case 2:
            printf("%d对3的余数为:2\n", num);
            break;
        default:
            break;
    }
}

switch能实现 那么if绝对能实现。

如果你的项目结果是单一的值而不是范围,不是字符串和实型 建议选择switch

如果你的项目结果是范围,字符串,实型 建议选择if

案例:可以省略掉部分break

键盘输入qwer技能:

void test04()
{
    while(1)
    {
        printf("请输入你的技能qwer:");
        char ch = '\0';

        //ch = getchar(); //getchar获取键盘输入需要回车确认
        //getchar();//清除回车

        ch = getch();//获取键盘输入 不需要回车确认的
        switch(ch)
        {
        case 'q':
        case 'Q':
            printf("沉默\n");
            break;
        case 'w':
        case 'W':
            printf("防御\n");
            break;
        case 'e':
        case 'E':
            printf("旋转\n");
            break;
        case 'r':
        case 'R':
            printf("大宝剑\n");
            break;
        default:
            printf("无效技能\n");
            break;
        }
    }
}

知识点3【for循环语句】(重要)

for(条件初始化语句 ; 循环条件 ;  步进语句)
{
    循环体;  
}

初始化语句:在第一次循环前执行 只会执行一次

循环条件:只有当循环条件为真的时候 才会进入循环体

步进语句:每次循环体执行完 需要执行的语句

循环体:需要循环做的事情

案例1:统计0~100的和

void test02(){
    int i;
    int sum;
    for(i=0, sum=0; i<=100; i++){
        sum = sum + i;
    }
    printf("sum = %d\n", sum);
}

int main(int argc, char const *argv[])
{
    test02();
    return 0;
}
void test02(){
    int i = 0;
    int sum = 0;
    for(; i<=100; i++){
        sum = sum + i;
    }
    printf("sum = %d\n", sum);
}

for循环中的break是跳出循环。

void test02(){
    int i = 0;
    int sum = 0;
    for(;; i++){
        sum = sum + i;
        if(i == 100){
            break;
        }   
    }
    printf("sum = %d\n", sum);
}

for中的continue结束本次循环 直接进入下一次循环

void test02(){
    int i = 0;
    int sum = 0;
    for(i=0; i<=100; i++){
        if(i == 50){    //当i=50时跳过本次循环,进入下一次循环
            continue;
        }   
        sum = sum + i;
    }
    printf("sum = %d\n", sum);
}

知识点4【while循环语句】(重要)

事先把变量初始化好;
while(循环条件)
{
    循环体;
    记得写步进语句;
}

循环条件为真 进入循环 否则退出循环

void test03(){
    int i = 0;
    int sum = 0;

    while(i <= 100){
        sum += i;
        i++;
    }
    printf("sum = %d\n", sum);
}

int main(int argc, char const *argv[])
{
    test03();
    return 0;
}

break跳出while

void test03(){
    int i = 0;
    int sum = 0;

    while(1){   //死循环
        sum += i;
        if(i == 100){
            break;
        }
        i++;
    }
    printf("sum = %d\n", sum);
}

continue结束当前循环 进入下一次循环

void test03(){
    int i = 0;
    int sum = 0;

    while(i <= 100){  
        sum += i;
        if(i == 50){
            i++;
            continue;
        }
        i++;
    }
    printf("sum = %d\n", sum);
}

循环嵌套循环:

while嵌套

void test03(){
    int i = 0;
    int j = 0;

    while(i <= 5){  //外层循环 执行5次
        printf("i = %d\n", i);          //总共执行5次
        j = 1;
        while(j <= 3){    //内层循环 执行3次 
            printf("\tj = %d\n", j);    //总共执行15次
            j++;
        }
        i++;
    }
}

int main(int argc, char const *argv[])
{
    test03();
    return 0;
}

for嵌套

void test03(){
    int i = 0;
    int j = 0;

    for(i=1; i<=5; i++){  
        printf("i = %d\n", i);
        for(j=1; j<=3; j++){
            printf("\tj = %d\n", j);
        }
    }
}
//一次外层循环 内层循环执行3次
//五次外层循环 内层循环执行15次

int main(int argc, char const *argv[])
{
    test03();
    return 0;
}

break只能跳出离它最近的循环;

void test03(){
    int i = 0;
    int j = 0;

    for(i=1; i<=5; i++){  
        printf("i = %d\n", i);
        for(j=1; j<=3; j++){
            if(j == 2)      
                break;    //每次j==2时跳出内层循环
            printf("\tj = %d\n", j);
        }
    }
}

/**
i = 1
        j = 1
i = 2
        j = 1
i = 3
        j = 1
i = 4
        j = 1
i = 5
        j = 1
 */

知识点5【do...while循环语句】(重要)

do
{
    循环体;
}while(循环条件);

执行一次循环体 然后再判断循环条件 如果为真继续循环 如果为假退出循环

void test04(){
    int i = 0;
    while (i>0){
        printf("A循环\n");
    }
    
    do{
        printf("B循环\n");
    }while(i>0);
}

int main(int argc, char const *argv[])
{
    test04();
    return 0;
}

知识点6【goto跳转语句】(了解)

尽量少用 容易破坏函数的封装性

void test05(){
    printf("-----001------\n");
    printf("-----002------\n");
    goto here;
    printf("-----003------\n");
    printf("-----004------\n");
    printf("-----005------\n");
    here:
    printf("-----006------\n");
}

int main(int argc, char const *argv[])
{
    test05();
    return 0;
}
void test05(){
    printf("-----001------\n");
    printf("-----002------\n");
    here:                       //死循环
    printf("-----003------\n");
    printf("-----004------\n");
    printf("-----005------\n");
     goto here;
    printf("-----006------\n");
}

int main(int argc, char const *argv[])
{
    test05();
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值