C语言控制流

控制流

在这里插入图片描述

二路分支

逻辑:程序中某段代码需要在满足某个条件时才能运行
形式:
1. if语句:表达一种 如果-则的条件执行关系
2. if-else语句:表达一种 如果-否则 的互斥分支关系

练习

#include <stdio.h>

int main()
{
    /*int number ;
    scanf("%d",&number);
    printf("%d\n",number%2 == 0);
    if(number % 2 == 0)
    {
        printf("偶数\n");
    }
    else
    {
        printf("奇数\n");
    }
    return 0;*/
    
    //打分系统
    /*printf("请输入一个成绩 :");
    unsigned int a;
    scanf("%u",&a);
    if(0 <= a && a < 60)
    {
        printf("D");
    }
    else if(60 <= a && a < 80)
    {
        printf("C");
    }
    else if(80 <= a && a < 90)
    {
        printf("B");
    }
    else if(90 <= a && a < 100)
    {
        printf("A");
    }
    else
    printf("错误");*/
    //多路分支版
    int score;
    printf("请输入成绩: ");
    scanf("%d",&score);

    switch(score)
    {
        case 0 ... 60:
            printf("D\n");
        case 61 ... 80:
            printf("C\n");   
        case 81 ... 90:
            printf("B\n");
        case 91 ... 100:
            printf("A\n");
        default:
        printf("输出有误");  
    }
    
}
注意:
1. 只要表达式的值为真(非0),则执行{}复合语句
2. if语句可以单独使用,else语句不可以,else语句必须根if语句配套使用
3. 不管是if语句还是else语句,代码块都必须使用大括号{}括起来,否则只有首句有效
4. 如果只有一条执行语句,可以这样写:
	if(表达式)
		执行语句....;如果表达式为真,那么执行该语句
编程规范,写完if或else后,不管后面又没有语句,先写{}圈定为它的范围,然后再到{}里面补充语句,请用4个格缩进

多路分支

根据不同的条件执行不同的代码片段
#include<stdio.h>

int main ()
{
    switch(1)
    {
        case 1:
            printf("one\n");
            break;
        case 2:
            printf("two\n");
            break;
        case 3:
            printf("three\n");
            break;
    }
    
    return 0;

}

要点解析
1. switch(n)语句中的n必须是一个整型表达式,即switch判断的数据必须是整型或者字符
2. case语句只能带整型常量,包括普通整型或字符,不包括const型数据
3. break语句的作用是跳出整一个switch结构,没有break程序会略过case往下执行
4. default语句不是必须的,一般放在最后面(因此不需要break)

练习

小张加盟一家餐饮企业,在每个季度结束后,小张必须向总部缴纳加盟费,加盟费与营业额的提成关系如下:
营业额 提成系数
0<=n<10w 0.1
10<=n<20w 0.075
20<=n<40w 0.05
40<=n<60w 0.03
60<=n<100w 0.015
n >= 100w 0.01
请输入小张的营业额,然后求出它需要的提交的加盟费

    #include <stdio.h>
    int main(int argc, char const *argv[])
    {
    float money; // 营业额
    float val; // 提成
    int flage; // 记录营业额范围
    printf("请输入营业额(万元): ");
    scanf("%f",&money);
    // 营业额
    if(money < 0)
    {
    printf("找个班上吧,别开了\n");
    }
    else if(0 <= money && money <= 10)
    {
    flage = 1;
    }
    else if(10 < money && money <= 20)
    {
    flage = 2;
    }
    else if(20 < money && money <= 40)
    {
    flage = 3;
    }
    else if(40 < money && money <= 60)
    {
    flage = 4;
    }
    else if(60 < money && money <= 100)
    const
    逻辑:使一个变量不可修饰
    作用:
    修饰普通变量,使之不可修改
    修饰指针变量,使之不可修改或者使其指向的目标不可修改
    示例:
    whiledo...while循环
    {
    flage = 5;
    }
    else if(money > 100)
    {
    flage = 6;
    }


    // 提成
    switch (flage)
    {
    case 1:
    val = 0.1;
    break;
    case 2:
    val = 0.075;
    break;
    case 3:
    val = 0.05;
    break;
    case 4:
    val = 0.03;
    break;
    case 5:
    val = 0.015;
    break;
    case 6:
    val = 0.01;
    break;
    default:
    break;
    }
    // 输出加盟费
    printf("加盟费: %.2f万元\n",money * val);
    return 0;
}

const

逻辑:使一个变量不可修饰
作用:
修饰普通变量,使之不可修改
修饰指针变量,使之不可修改或者使其指向的目标不可修改
//这两个表达式为强制定义,所赋的值无法被改变。
int const a = 100;
const int b = 200;
//下面表达式为错误示范
a = 101;
b = 202;

while与do…while循环

逻辑:使得程序中每一段代码可以重复循环的运行
形式:
while循环:先判断,再循环

在这里插入图片描述

//循环输出一系列整数,直到100为止
#include <stdio>

int main()
{
	int a = 1,s = 0;
    do
    {
        s=s+a;
        a++;
    } while (a<=100);

    printf("%d\n",s);
}
// 使用while循环计算1...100的偶数
#include <stdio.h>
	
int main()
{	
    int a = 1,s = 0;
    while (1)
    {
        if (a > 100)
        break;
        
        if(a % 2 == 0)
        {
            s=s+a;
            printf("输出偶数:%d\n",a);
        }
        a++;
    }
    printf("和为%d\n",s);
}



#include <stdio.h>

int main()
{
    //比较两个整数的大小,输出最大的那个数。
    int num1,num2;
    while(1)
    {
        printf("输入两个整数: ");
        int ret = scanf("%d%d",&num1,&num2);
        if(ret != 2)
        {
            while(getchar() !='\n');
            printf("输入错误,请重新输入\n");
            //重新跑回while(1)
            continue;
        }
        if(num1 == num2)
            break;
        printf("max = %d\n",num1 > num2 ? num1 : num2);
    } 
}

for 循环

逻辑:与 while 循环类似,但更加紧凑,for 循环将控制循环的变量集中在一行
简单例子
#include <stdio.h>

int main()
{
    /*    int i = 1;
    while(1)
    {
        if(i>5)
            break;
        printf("%d\t",i++);
    }
    
    //
     int i;
    for(i = 1;i<5;i++)
    {
        printf("%d\t",i);
    }

    */

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

// 循环输出一系列整数,直到100为止
int a;
for(a=30; a<=100; a++)
{
printf("%d\n", a);
}

for嵌套

int main(int argc, char const *argv[])
{
for(int i = 0; i < 5; i++)// 外循环
{
for(int j = 0; j < 4; j++)// 内循环
{
printf("i:%d j:%d\n",i,j); n^2
}
}
return 0;
}

练习:使用for循环实现1+2+…+100的和

int max = 0;
for(int i = 1; i <= 100; max+=i,i++);
// {
// //max += i;
// }
printf("max = %d\n",max);
或者
for(int i = 1; i <= 100; i++)
max+=i;

语法点:

    循环的标准语法是: for(表达式1 ; 表达式2 ; 表达式3)
    表达式1一般用来初始化循环控制变量
    表达式2一般用来作为循环判定条件,为真则进入循环,为假则跳出循环
    表达式3一般用来更新循环控制变量
    三个表达式均可以省略,但分号不能省略
    while注重循环条件,for注重循环次数

break(退出)与continue(继续)

运用场景与特点

break关键字只能用于循环(while for do...while)和switch语句中,表示结束循环或者跳出switch语句
break关键字只能跳出最近一层的循环,也就是说,如果有多重循环,只能跳出最靠近break语句那层循环
break关键字 不能 单独用于 if语句中,除非if语句外面包含了循环

逻辑:

continue关键字只能用于循环体中(while do...while for),用于提前结束当前循环体后,又从最近一层
循环体开始执行
continue关键字不能 单独用于 if语句或者switch 语句中,除非外面包含了循环
break:① 跳出 switch 语句; ② 跳出当层循环体while(1){while(1){break;}}
continue:结束当次循环,进入下次循环
//编写一个程序,输出26个小写字母。
#include <stdio.h>

int main()
{
    //用for循环写
    char ch;
    printf("请输入一个大写字母: ");
    scanf("%c",&ch);
    if(ch < 'A' || ch >'Z')
    {
        printf("不好\n");
        return -1;
    }
    //计算总行
    int line = ch - 'A' + 1;

    int i,j;
    for(i = 1;i <= line;i++)
    {
        //输出空格
        for(j = 0;j < line - i; j++)
        {
            printf(" ");
        }
        //升序
        for(j = 0; j < i; j++)
        {
            printf("%c",'A'+j);
        }
        //降序
        for(j-=2;j >= 0;j--)
        {
        printf("%c",'A'+j);
        }
    printf("\n");
}
    return 0;
}

goto语句

逻辑:无条件跳转
格式:
goto 语句标号://程序会直接跳转到语句标号的地方执行
例子
int main()
{
printf("%d\n", __LINE__); // 打印第3行
// 无条件跳转到label处
goto label;
printf("%d\n", __LINE__); // 打印第7行,此处被略过
label:
printf("%d\n", __LINE__); // 打印第9行
}

语法:
goto语句直接跳转到本代码块中的标签处
标签指的是以冒号结尾的标识符
作用:
goto语句的无条件跳转不利于程序的可读性,一般不建议使用
goto语句常被用在程序的错误处理中
#include <stdio.h>

int main()
{
    printf("请输入分子与分母:");
    int a,b;
    scanf("%d/%d",&a,&b);
    if(b == 0)
    {
        goto error;
    }
    printf("ret = %d\n",a/b);
error:
    printf("process exit\n");
    return 0;
}

无条件跳转到label处
goto label;
printf(“%d\n”, LINE); // 打印第7行,此处被略过
label:
printf(“%d\n”, LINE); // 打印第9行
}


#### 语法:

goto语句直接跳转到本代码块中的标签处
标签指的是以冒号结尾的标识符


#### 作用:

goto语句的无条件跳转不利于程序的可读性,一般不建议使用
goto语句常被用在程序的错误处理中


```c
#include <stdio.h>

int main()
{
    printf("请输入分子与分母:");
    int a,b;
    scanf("%d/%d",&a,&b);
    if(b == 0)
    {
        goto error;
    }
    printf("ret = %d\n",a/b);
error:
    printf("process exit\n");
    return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值