循环结构:while循环

IOS学习第6天

循环结构

同1件事,反复不停的去做,这样的情况我们就叫做循环

  • 分类

    while循环结构

    do-while循环结构

    for循环结构

  • 特点

1.同一件事

2.反复不停的去做,中间不能停

3.循环也有结束的时刻

  • 优点

1.代码少,看起来简洁

2.后期的维护和修改非常方便

  • 注意点

    while循环

    1.while后面的条件表达式可以是任意的表达式,0为假,非0为真

    2.永真与永假

    while(1)

    while(0)

    3.循环体可以有任意行的代码

    4.要找出循环体,并指导循环继续或结束的条件

  • 穷举:一个一个的测试,指导找到正确答案,这种解决问题的方式叫做穷举
    循环结构01

例子:

1.循环体确定 而且循环次数也确定

例如:
    打印"凤姐我爱你" 10#include <stdio.h>

int main(int argc, const char * argv[]) {
    // insert code here...
    //1.循环体 : printf("凤姐我爱你\n"); 次数还要+1
    //2.循环条件: 打印的次数 不超过10次

    int count = 0;//变量用来记录打印次数

    /*
     count  和 打印的次数
     0             1
     1              2
     9              10
     */
//    "规律: 如果 记录次数的变量 从0开始 那么 小于几 就是几次"
    while(count < 15){
        printf("凤姐我爱你\n");

        count++;
    }

    return 0;
}
1.获取101-99之间的随机数,每获取一个判断并且打印这个数是奇数还是偶数
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char * argv[]) {
    // insert code here...

    //1.循环条件: 10次
    int count = 0;
    //2.循环体: 按照没学过while循环写代码 赋值粘贴的那些代码就是循环体
    while(count < 10){
        //1-99的随机数 [0-98]+1
        int num = arc4random_uniform(99)+1;

        //判断这个数是奇数还是偶数
        if (num % 2 == 0) {
            printf("这个数%d是偶数\n",num);
        }else{
            printf("这个数%d是奇数\n",num);
        }
        count++;
    }

    return 0;
}

“应用场景”:循环体确定 但是循环次数不确定

例子: 让用户输入密码 直到输对为止 假设密码是:88888
/*
 分析 :
 循环条件: 密码不对
 循环体: 复制粘贴的哪一些代码 就是循环体

 */
#include <stdio.h>

int main(int argc, const char * argv[]) {
    // insert code here...

    //记录密码的变量
    int pwd = 0;

    while (pwd != 88888) {//当密码不对的时候循环

        printf("请输入密码:\n");
        scanf("%d",&pwd);
        if (pwd == 88888) {
            printf("密码正确");
        }else{
            printf("密码错误\n");
        }
    }

    //    int pwd = 0;
    //    printf("请输入密码:\n");
    //    scanf("%d",&pwd);//我们只输入数字
    //    if (pwd == 88888) {
    //        printf("密码正确\n");
    //    }else{
    //        printf("密码错误\n");
    //      }


    return 0;
}
例题:
    反复地询问用户 "你爱我吗? y(爱)/n(不爱)"
    直到用户输入y为止才停止询问

/*
 分析:
 循环体:
 循环条件: user != 'y'
 */
#include <stdio.h>

int main(int argc, const char * argv[]) {
    // insert code here...

    char user = 'a';//定义一个变量 用来存储用户的输入

    while(user != 'y'){

        printf("你爱我吗? y(爱)/n(不爱)\n");
        rewind(stdin);
        scanf("%c",&user);//n 回车
        //n给了user  但是回车还在缓存中,下一次执行的时候会直接取走'\n'这个符号 而不用你自己输入
    }



    return 0;
}
"提示":只要  scanf("%c",&user); 就在这句代码前 加上一个
rewind(stdin);
例题:
    用户输入 登陆账号和密码 ,只有账号和密码都正确才能登陆,否则要求用户重新输入 账号和密码
#include <stdio.h>

int main(int argc, const char * argv[]) {
    // insert code here...

    //循环体:

    //循环条件: 账号不正确(123456) 或者 密码不正确(888888)
    int account = 0;//记录账号的变量
    int pwd = 0;//记录密码的变量

    while(account != 123456 || pwd !=888888){

        printf("请输入账号:\n");
        scanf("%d",&account);


        printf("请输入密码:\n");
        scanf("%d",&pwd);
        //循环体是输入账号 和 密码

    }

    //    printf("恭喜登陆成功\n");
    return 0;
}
"应用场景":遍历一个范围内所有的数
例题:
    打印0-10的每一个整数
#include <stdio.h>

int main(int argc, const char * argv[]) {
    // insert code here...


    //循环体:
    //循环条件:11次
    /*
     分析:
     count  和 我们要打印的值
     0         0
     1         1
     2         2


     */
    //    int count = 0;
    //    while(count < 11){
    //
    //        printf("%d\n",count);
    //        count++;
    //    }
    /*
     分析:

     count  要打印的值
     0      1
     1      2
     2      3

     要打印的值 = count + 1





     */
    //改一下题目 打印 1-10所有的整数
    //    int count = 0;
    //    while (count < 10) {
    //        //打印
    //        printf("%d",count+1);
    //        count++;
    //    }
    int count = 1;
    while (count < 11) {
        //打印
        printf("%d",count);
        count++;
    }

    return 0;
}
"应用场景":找出一个范围内指定范围的数

例题:
打印1-100之内 能被8整除的数
    int count = 1;//count 从1 开始 因为打印的数值也是从1开始,这样不用再计算
    while (count < 101) {

        if(count % 8 == 0){
            //并不是所有的数都要打印
            printf("%d ",count);
        }
        count++;
    }
"例题":打印 100-200 之间的偶数
#include <stdio.h>

int main(int argc, const char * argv[]) {
    // insert code here...
    //     打印 100-200 之间的数
    int count = 100;
    /*
     count 和要打印的值
     0      100
     1      101
     2      102
     要打印的值 = count + 100

     */
    while(count < 201){
        //不是所有的数都要打印
        if (count % 2 == 0) {
            printf("%d ",count);//要打印的值
        }

        count++;
    }

}
"例题":打印 1000- 5000 之内 各个位数的和为5 的数
int main(int argc, const char * argv[]) {
    // insert code here...

    //怎么求各个位数
    /*
     分析: 1234
     把你要的那个数 移到个位
     1234 % 10 = 4
     1234/10%10 = 3
     1234/100%10 = 2
     1234/1000 = 1


     */
    //打印 1000- 5000 之内 各个位数的和为5 的数
    int count = 1000;
    while (count < 5001) {
        //这个打印语句 不是所有的书都需要打印
        int ge = count / 1  % 10;
        int shi = count / 10 % 10;
        int bai = count / 100 % 10;
        int qian = count / 1000 % 10;

        if (ge + shi + bai + qian == 5) {
            printf("%d ",count);
        }
        count++;
    }
}
"应用场景":求累加和平均值
例题:
    求1+2+3+4+5...+100的和
#include <stdio.h>

int main(int argc, const char * argv[]) {
    // insert code here...

    //先把题目简单化:打印1-100所有的数
    int count = 1;
    int sum = 0;//求和的容器
    while (count < 101) {
        //        这一句是打印 所有的数
        //但是 题目不是打这个数 而是求和
        //既然都打印出来了 那么只要不打印, 把这个数加到某一个容器中
        //        sum = sum+count;
        /*
         sum = 0 + 1;
         sum = 0 + 1 + 2
         sum = 0 + 1 + 2 + 3
         ....


         */
        sum+=count;//sum + count  ;sum = count
        //        printf("%d ",count);
        count++;
    }

    printf("sum = %d\n",sum);
    return 0;
}
"例题:
    请用户输入班级的人数
    然后依次 输入每一个学生的成绩
    求 成绩的总分和平均分
#include <stdio.h>

int main(int argc, const char * argv[]) {
    // insert code here...


    //1.确定一下人数
    printf("请输入您的班级人数:\n");
    int nums = 0;
    scanf("%d",&nums);
    //循环
    int count = 0;
    //count cong 0 开始 那么count 小于 xxx 就是循环xxx次

    int sum = 0;//求和的容器
    while (count < nums) {

        /*
         循环体里面都要干啥?
         1.提醒:请输入第2个人的成绩
         2.scanf
         3.求和 */
        //提示输入第几个学生
        printf("请输入第%d个学生的成绩\n",count + 1);
        int score = 0;
        scanf("%d",&score);

        //求和
        sum+=score;//不能写成 sum+score; sum = score
        count++;
    }
    //打印总成绩和平均分
    printf("sum = %d\n",sum);
    printf("avg = %d\n",sum / nums);
    return 0;
}
"应用场景":求若干个数的最大值和最小值
例题:
     让用户输入5个数,求这5个数的最大值
int main()
{
    //1.定义一个变量A,就是存放最大值的 ---> 相当于上面例子 拳王
    int max = INT32_MIN;
    //2.定义一个变量B,接受用户输入的数 ---> 相当于上面例子的 班里面的挑战者
    int shuRu = 0;
    //3.写循环-->接受用户输入,并找出最大值  --> 依次上台挑战拳王
    //3.1-->次数: 循环5次
    int i = 1;
    while (i<6) {
        //3.2-->循环体: 在循环体中,让用户向变量B中输入数据,输入完毕之后,和变量A进行比较,如果B比A,把B的值赋值给A,总之,A中存储的一定是用户已经输入的数中最大的一个
        printf("请输入第%d个数",i);
        scanf("%d",&shuRu);
        max = max > shuRu?max:shuRu;
        i++;
    }
    printf("你输入的最大的数是%d",max);
    return 0;
}

break与continue

1.break在哪可以使用?

“强调”: 第一个在switch-case结构中使用

第二个在循环结构中使用break;

在if-else中 使用了break 也不起作用

2.break在循环结构中的作用:

立即终止循环,就算后面还有代码 不会执行

3.continue在哪可以使用?
只有在循环结构中可以使用

4.continue在循环结构中的作用:

立即终止本次循环 而进行下次一个判断

用于加速循环

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值