C语言 04.循环语句

1.if分支语句:匹配一个范围.属于模糊匹配.

if (判别表达式1)
{
判别表达式为真,执行代码。
}
else if(判别表达式2)
{
判别表达式1为假,并且判别表达式2,执行代码。
}
else if(判别表达式3)
{
判别表达式1为假,判别表达式2为假,判别表达式3, 执行代码。
}
。。。
else
{
以上所有判断表达式都为假, 执行代码。
}

    int a ;
    scanf_s("%d", &a);     // 11:a>0
    if (a > 0)
    {
        printf("a>0\n");
    }
    else
    {
        printf("a<=0\n");
    }


    int score; //100-90 优;90-70 良;70-60 及格 ; <60 不及格
    scanf_s("%d", &score);
    if (score >= 90 && score <= 100)
    {
        printf("优秀");
    }
    else if(score<90 && score>=70)
    {
        printf("良好");
    }
    else if (score < 70 && score >= 60)
    {
        printf("及格");
    }
    else if(score<60 && score>=0)
    {
        printf("不及格");
    }
    else
    {
        printf("输入的数字不符合要求");
    }

练习:三只小猪称体重:

屏幕输入三只小猪的重量。借助if分支语句,找出最重的小猪重量。

float a, b, c;
    printf("请输出第一只小猪的重量:a=");
    scanf_s("%f", &a);
    printf("请输出第二只小猪的重量:b=");
    scanf_s("%f", &b);
    printf("请输入第三只小猪的重量:c=");
    scanf_s("%f", &c);
    if (a > b)
    {
        if (c > a)
        {
            printf("c>a>b");
        }
        else if(c>b) // c<a,c>b
        {
            printf("a>c>b");
        }
        else
        {
            printf("a>b>c");
        }
    }
    else  // a<b
    {
        if (c < a)
        {
            printf("c<a<b");
        }
        else if (c < b)    // a<c,c<b
        {
            printf("a<c<b");
        }
        else
        {
            printf("a<b<c");
        }
    }

2.switch 分支:精确匹配.

switch(判别表达式)
{
case 1:
执行语句1;
break; // 防止case穿透
case 2:
执行语句2;
break;
case 3:
执行语句3;
break;

case N:
执行语句N;
break;
default:
其他情况的统一处理;
break;
}

    case 穿透: 在一个case分支中如果,没有break;那么它会向下继续执行下一个case分支.

练习: 输入学生成绩判断优良

 int a;
 printf("请输入学生的成绩:");
 scanf_s("%d", &a);
 switch (a/10)
 {
 case 10: // case 后面的值一定要是一个具体的值
     printf("优秀\n");
     break;
 case 9:
     printf("优秀\n");
     break;
 case 8:
     printf("良好\n");
     break;
 case 7:
     printf("中\n");
     break;
 case 6:
     printf("及格\n");   // case穿透,执行完这一步会继续执行下一部
 default:
     printf("不及格");
 }

3.while循环:

while(条件判别表达式)
{
循环体.
}

练习:敲7:1–100数数, 逢7和7的倍数,敲桌子。

7的倍数: num % 7 == 0
个位含7: num % 10 == 7
十位含7: num / 10 == 7

int a=1;
    while (a <=100)
    {
        if (a % 7 == 0||a%10==7||a/10==7)  // 7的倍数,个位含7,实为含7
        {
            printf("敲桌子");
        }
        else
        {
            printf("%d", a);
        }
        a++;    
        printf("  ");
    }

4.do while 循环:

无论如何先执行循环体一次。然后在判断是否继续循环。
do {
循环体
} while (条件判别表达式);

练习:求水仙花数。 一个三位数。各个位上的数字的立方和等于本数字。 153, 370, 371, 407

100 -- 999
int num  = 100;
个位数: int a = num % 10;           a*a*a;
十位数: int b = num / 10 % 10; 
百位数: int c = num / 100;
    int a = 100;
    int ge, shi, bai;
    do
    {    
        ge = a % 10;
        shi = a / 10 % 10;
        bai = a / 100;
        if (ge * ge * ge + shi * shi * shi + bai * bai * bai == a)
        {
            printf("%d\n", a);
        }
        a++;
    } while (a < 1000);

5.for循环:

for (表达式1; 表达式2 ; 表达式3)
{
循环体。
}
表达式1 --》 表达式2 (判别表达式) --》 为真 --》 循环体。–》 表达式3 --》 表达式2 (判别表达式) --》 为真 --》 循环体 --》 表达式3 --》 表达式2 (判别表达式)。。。。
默认跳出循环的位置只有表达式2

练习:1–100的和: 5050

    int i;             // 循环因子
    int sum = 0;
    for (i = 1; i <= 100; i++)
    {
        sum += i;
    }
    printf("%d\n", sum);

循环因子:定义在for之外,for循环结束,也能使用。定义在for之内,for循环结束,不能使用。
for的3个表达式,均可变换、省略。但,2个分号不能省!
for( ; ; ) == while(1) 无限循环

// 基础for循环
int main0101(void)
{
    int i = 0;        // 循环因子
    int sum = 0;
    for (i = 1; i <= 100; i++)
    {
        sum = sum + i;  //sum += i;
    }
    printf("sum = %d\n", sum);
    system("pause");
    return EXIT_SUCCESS;
}
// 省略表达式1
int main0102(void)
{
    int i = 1;        // 循环因子
    int sum = 0;
    for (; i <= 100; i++)
    {
        sum = sum + i;  //sum += i;
    }
    printf("sum = %d\n", sum);
    system("pause");
    return EXIT_SUCCESS;
}
// 省略表达式3
int main0103(void)
{
    int i = 1;        // 循环因子
    int sum = 0;
    for (; i <= 100; )
    {
        sum = sum + i;  //sum += i;
        i++;
    }
    printf("sum = %d\n", sum);
    system("pause");
    return EXIT_SUCCESS;
}
// 省略表达式123
int main0104(void)
{
    int i = 0;        // 循环因子
    //for (;1;)        // 死循环。while(k=1)
    for (;;)
    {
        printf("i = %d\n", i);
        i++;
    }
    system("pause");
    return EXIT_SUCCESS;
}
// 表达式有多个
int main0105(void)
{
    int i = 0;
    int a = 0;
    for (i = 1, a = 3;a < 20; i++)
    {
        printf("i = %d\n", i);
        printf("a = %d\n", a);
        a += 5;
    }
    system("pause");
    return EXIT_SUCCESS;
}

【练习:猜数字游戏】:系统随机生成一个随机整数,自己不断输入整数,猜测系统生成的随机数字的值

1. 生成一个随机数。 
    1)添加一个随机数种子。srand(time(NULL));  // 每次生成的随机数不一样
    2) 添加头文件 <stdlib.h> <time.h>
    3) 生成随机数 int n = rand() % 100;        // 范围:0-99
2. 循环输入数据猜。
    int num;
    while(1)        // 死循环  for(;;)
    {
        接收用户输入 scanf("%d", &num);
        比较用户的数 和 随机生成数 大小。
        if (n > num)
        else
            break;
    }
3. 跳出循环
    break;
    srand(time(NULL)); //种随机数种子
    int n = 0;
    int num = rand() % 23; // 生成0-22之间的随机数
    for (;;)          // while(1)
    {
        scanf_s("%d", &n);
        if (n < num)
        {
            printf("猜小了");
        }
        else if (n > num)
        {
            printf("猜大了");
        }
        else                    // for,while,if如果执行语句只有一条,{}可以省略,但是不推荐使用
        {
            printf("猜中了!!");
            break;
        }    
    }

break:
作用1: 跳出一重循环。 for、while、do while
作用2: 防止case穿透。 switch

scanf("%d",a) 不要加任何其他的东西,因为加了其他东西,用户必须按照加的东西那样写,不然无法正确接收数据

5.1嵌套循环:

外层循环执行一次,内层循环执行一周。
for(i = 0; i < 24; i++)
{
    for(j = 0; j< 60; j++)
    {
        for(k = 0; k< 60; i++)
        {            
        }
    }
}

【练习: 模拟电子表打印:】

10:23:45
10:23:46
。。。
10:24:00
    int h, m, s;
    for (h = 0; h < 24; h++)
        for (m = 0; m < 60; m++)
            for (s = 0; s < 60; s++)
            {
                printf("%02d:%02d:%02d\n", h, m, s);
                Sleep(1000);                         // 1000ms =1s,#include <Windows.h>
                system("cls");                       // 清屏,让数字不是一直顺下来,而是像电子表那样打印出来
                
            }

练习: 打印9x9乘法表:

1x1 = 1
1x2 = 2 2x2 = 4
1x3 = 3 2x3 = 6 3x3 = 9
1x4 = 4
。。。
1x9 = 9 。。。。。。。。。。。。。。。。。。。。9x9 = 81

    int i, j, m;    // i*j = m
    for (i = 1; i <= 9; i++)
    {
        for (j = 1;j <=i; j++)
        {
            m = i * j;
            printf("%2d * %2d = %2d ,", j, i, m);
        }
        printf("\n");
    }

思考题:如何打印如下99乘法表呢?

1x9= 9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
1x8= 8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x7= 7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x6= 6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x5= 5 2x5=10 3x5=15 4x5=20 5x5=25
1x4= 4 2x4= 8 3x4=12 4x4=16
1x3= 3 2x3= 6 3x3= 9
1x2= 2 2x2= 4
1x1= 1

    int i, j, m;    // i*j = m
    for (i = 9; i >=1; i--)      // 行数
    {
        for (j = 1;j <=i; j++)
        {
            m = i * j;
            printf("%2d * %2d = %2d \t", j, i, m);    // \t 打印一个制表符,就相当于一个空格
        }
        printf("\n");
    }    

6.跳转语句:

6.1 break:【重点】

作用1: 跳出一重循环。 for、while、do while
作用2: 防止case 穿透。 switch

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

6.2 continue:【重点】

作用:结束【本次】循环, continue关键字,之后的循环体,这本次循环中,不执行。

    int i, j;
    for (i = 1; i < 5; i++)
    {
        for (j = 1; j < 6; j++)
        {
            if (j == 3)
            {
                continue;       // 结束本次循环,只是不打印j=3那一部分
            }
            printf("i=%d,j = %d\n",i,j);
            
        }
        
        printf("i = %d\n", i);
        printf("=================\n");
        if (i == 3)
            break;         // 跳出外层循环
    }

6.3 goto: 【了解】

  1. 设定一个标签
  2. 使用“goto 标签名” 跳转到标签的位置。(只在函数内部生效)

相当于一个循环,但是太灵活,不推荐使用
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值