每周学一点c语言—控制流

1.二路分支

1)if语句:表达一种 如果-则的条件执行关系

2)if-else语句:表达一种 如果-否则 的互斥分支关系

demo:

// 二路分支
    // 如果if条件满足的情况下,只有一条语句,可以不用加{}
    // 多余一条语句需要加{};
    if(number % 2 == 0)
    {
        printf("我是");
        printf("偶数\n");
    }  
    else
        printf("奇数\n")

eg:

练习1:制作一个简单的打分系统(满分制:100),使用if...else方法,分数需整数

60分以下:评级为D

60-80分 : 评级为C

80-90分 : 评级为B

90-100分: 评级为A

不在0-100范围内:错误

#include <stdio.h>

int main(int argc, char const *argv[])
{
    float score;
    printf("请输入成绩: ");
    scanf("%f",&score);
    if(score == -1)
    {
        printf("不好意思,你的卷子丢了,请查监控\n");
    }
    else if(score >= 0 && score < 60)
    {
        printf("等级D,不及格,抓紧时间学习,别玩了\n");
    }
    else if(score >= 60 && score < 80)
    {
        printf("等级C\n");
    }
    else if(score >= 80 && score < 90)
    {
        printf("等级B\n");
    }
    else if(score >= 90 && score < 100)
    {
        printf("等级A\n");
    }
    else
    {
        printf("成绩输入错误\n");
    } 
    return 0;
}

demo:

  // 多路分支,互斥关系,如果条件1和条件2成立,则只执行条件1
    if(number > 0 && number <= 10)
    {
        printf("蛋炒饭\n");
    } 
    else if(number >= 10 && number <= 20)
    {
        printf("黄焖鸡\n");
    }
    else if(number > 20 && number <= 30)
    {
        printf("KFC\n");
    }
    else
    {
        printf("饭堂随便吃\n");
    }


    // 嵌套分支
    if(number > 400)
    {
        int score;
        printf("面试成绩:");
        scanf("%d",&score);
        if(score > 80)
        {
            printf("欢迎来到合工大研究院\n");
        }
        else 
        {
            printf("再接再厉\n");
        }
    }

    return 0;
}

2.多路分支

switch(n)//n只能是整数以及字符
{
    case 1:
       printf("one\n");
          break;
    case 2:
           printf("two\n");
           break;
  
    case 3:
           printf("three\n");
           break;
  
    default:
        printf("其他数字\n"); 
}

1)switch(n)语句中的n必须是一个整型表达式,即switch判断的数据必须是整型或者字符

2)case语句只能带整型常量,包括普通整型或字符,不包括const型数据

3)break语句的作用是跳出整一个switch结构,没有break程序会略过case往下执行

4)default语句不是必须的,一般放在最后面(因此不需要break)

eg:

小张加盟一家餐饮企业,在每个季度结束后,小张必须向总部缴纳加盟费,加盟费与营业额的提成关系如下:

营业额 提成系数

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

请输入小张的营业额,然后求出它需要的提交的加盟费

/*
*解题思路:
    1.使用二路分支来标记营业额
    2.使用二路分支的标记作为多路分支的条件
*/

#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)
    {
        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;
}

3.const

作用:修饰普通变量,使之不可修改,修饰指针变量,使之不可修改或者使其指向的目标不可修改

int const a = 100; // 定义了一个不可修改的变量a
const int b = 200; // 定义了一个不可修改的变量b

a = 101; // 错误
b = 202; // 错误

4.while与do...while循环

1)while   先判断,再循环

demo:

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

eg: 使用while循环计算1...100的偶数

#include <stdio.h>

int main(int argc, char const *argv[])
{
    // int n = 101;
    // while(n--)
    // {
    //     if(n % 2 == 0)
    //     {
    //         printf("偶数%d\n",n);
    //     }
    // }
    int n = 1;
    int max = 0;
    while(1)
    {
        if(n > 100)
            break;

        if(n % 2 == 0)
        {
            max += n;
        }  
        n++;
    }
    printf("%d\n",max);
    return 0;
}
2)do...while    先循环,再判断

demo:

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

注意:while 循环先进行判断,条件为真后才执行循环体,因此循环体可能一遍也不执行。

do-while 循环先执行循环体,再进行判断,因此循环体至少会执行一遍。

do-while 循环中的 while 语句后面有分号;

eg:     使用do...while实现1+2+...+100的和

#include <stdio.h>

int main(int argc, char const *argv[])
{
    int num = 1;
    int max = 0;

    do
    {
        max += num;
    } while (num++ != 100);
    printf("max = %d\n",max);

    return 0;
}

5.for循环

for(初始表达式1;判断表达式2;循环操作表达式3)
{
    循环体;
}
// 第一条表达式只执行一遍i = 0只执行一遍
// 然后执行表达式2,判断i 是否小于等于5,如果为真则执行{}里面的内容
// 最后执行表达式3,i++
// 然后一次循环完成再重新执行表达式2,判断i是否小于5,如果为真会执行
// {}里面的内容,最后执行表达式3,i++,依次类推,直到表达式2为假
// 则退出循环体
for(int i = 0; i <= 5; i++)
{
    printf("i:%d\n",i);
}
// 死循环
for(;;)
{
    
}
或者
for(;;);
//多变量
for(int i = 0,j = 0; i < 5; i++,j++)
{
    printf("i:%d j:%d\n",i,j);
}

demo:

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

1)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;
}

eg:  使用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;

6.break与continue

1)  break关键字只能用于循环(while for do...while)和switch语句中,表示结束循环或者跳出switch语句

2)  break关键字只能跳出最近一层的循环,也就是说,如果有多重循环,只能跳出最靠近break语句那层循环

3)  break关键字 不能 单独用于 if语句中,除非if语句外面包含了循环

4)  continue关键字只能用于循环体中(while do...while for),用于提前结束当前循环体后,又从最近一层循环体开始执行

5)  continue关键字不能 单独用于 if语句或者switch 语句中,除非外面包含了循环

6)  break:① 跳出 switch 语句; ② 跳出当层循环体while(1){while(1){break;}}

demo:

switch(n)
{
case 1:
    printf("one\n");
    break;  // 跳出 switch 语句
case 2:
    printf("two\n");
    break;        
}

while(1)
{
    int n = scanf("%d", &a);
    if(n == 0)
        break; // 跳出当层 while 循环体
}

for(int i=1; i<=100; i++)
{
    if(i%7 == 0)
        continue; // 跳过所有能被7整除的数
     
    printf("%d\n", i);       
}

6.goto语句

逻辑: 无条件跳转

eg:

int main()
{
    printf("%d\n", __LINE__); // 打印第3行 
    
    // 无条件跳转到label处 
    goto label;
    printf("%d\n", __LINE__); // 打印第7行,此处被略过
label:  
    printf("%d\n", __LINE__); // 打印第9行
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值