C语言 04.循环语句

C语言 04.循环语句,第1张

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) // cb
        {
            printf("a>c>b");
        }
        else
        {
            printf("a>b>c");
        }
    }
    else  // a
    {
        if (c < a)
        {
            printf("c);
        }
        else if (c < b)    // a
        {
            printf("a);
        }
        else
        {
            printf("a);
        }
    }
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) 添加头文件 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 
                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 标签名” 跳转到标签的位置。


    (只在函数内部生效)

相当于一个循环,但是太灵活,不推荐使用

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/563233.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-02
下一篇 2022-04-02

发表评论

登录后才能评论

评论列表(0条)

保存