while 循环
- 
格式: while(条件表达式){
 代码块}
 - 
应用场景:需要反复执行某一段代码的时候.
 - 
while结构的执行顺序:条件表达式成立,执行代码块的代码,然后再回到条件表达式成立再次执行代码块(循环体),直到条件表达式不满足就不执行了
 - 
方法:
- 1,找到需要重复执行的代码,将此代码放到循环体中
 - 2,确定结束条件
 
 - 
死循环:
// 死循环,因为条件表达式是为真的,非 0 既真,所以会一直执行发射子弹的语句 // while (1) { // printf("发射子弹"); // } - 
确定好条件
// 那我现在只发射 100 发子弹 int num = 100; while (num > 0) { printf("发射第%i 发子弹\n",num); --num; } // while (num > 0) { // printf("发射第%i 发子弹\n",num); // --num; // } - 
练习题
- 累加思想
 
// 练习 // 提示用户输入一个正整数数,计算1+2+3+n 的和 // 1,先分析需求,分析完再开始写代码 // 2,一般情况下企业开发,不会直接实现复杂的代码,而是x实现一个简单的功能 // 用户输入的是 5, // 1 +2 +3 +4 +5 // 0+1 // 1+1 // 2+1 // /* printf("请您输入一个正整数,以回车结束\n"); int inputNum = 0; scanf("%i",&inputNum); int sum = 0; while (inputNum > 0 ) { sum = sum + inputNum; inputNum--; } printf("计算后的结果:%i",sum); */ printf("请您输入一个正整数,以回车结束\n"); // 顶一个变量接收用户输入的值 int number; scanf("%i",&number); // 定义一个变量保存累加的值 int sum = 0; // 定义一个变量保存每次相加的值,每次相加值不是固定的 int count = 1; // 计算第一次相加的值 // sum = sum + count; // count++; // // 计算第二次相加的值 // sum = sum + count; // count++; // 所以确定重复的代码就是这两行 while (count <= number) { printf("sum = %i + %i\n",sum,count); sum = sum + count; count++; // 每次相加的值都会加 1 的 } printf("sum 的值是%i",sum); // 注意不能把定义变量写在 while 循环中,写在了 while 循环中变量的作用域遇到大括号就结束了,然后每次执行循环体的内容又会重新定义变量- 练习 1-1 增加安全验证
 
// 增加安全校验(错误示范) /* printf("请您输入一个正整数,以回车结束\n"); // 顶一个变量接收用户输入的值 int number; scanf("%i",&number); if (number < 0){ // return 0; // 这个时候写了 return,那么如果条件成立,后面的代码就不会执行了 // break; // break 语句是在 switch 语句和循环语句中使用,离开这两个都没有任何效果 } // 定义一个变量保存累加的值 int sum = 0; // 定义一个变量保存每次相加的值,每次相加值不是固定的 int count = 1; while (count <= number) { printf("sum = %i + %i\n",sum,count); sum = sum + count; count++; // 每次相加的值都会加 1 的 } printf("sum 的值是%i",sum); */ // 将 whiley 循环放进 if 语句中 /* printf("请您输入一个正整数,以回车结束\n"); // 顶一个变量接收用户输入的值 int number; scanf("%i",&number); if (number > 0){ // 如果用户输入的是一个大于 0 的数,将 while 循环放进 if 语句中 // 定义一个变量保存累加的值 int sum = 0; // 定义一个变量保存每次相加的值,每次相加值不是固定的 int count = 1; while (count <= number) { printf("sum = %i + %i\n",sum,count); sum = sum + count; count++; // 每次相加的值都会加 1 的 } printf("sum 的值是%i",sum); } */ int sum = 0; int count = 1; int number = -1; while (number < 0) { // 此时 number 小于0,执行此循环体, printf("请输入一个正整数,以回车结束"); scanf("%i",&number); // 输入的 number 值再次判断是否小于 0,如果小于零那就行执行u循环体 } while (count<= number) { sum = sum + count; count++; } printf("sum = %i\n",sum);- 计数器思想
 
// 获取 1-100之间,7 的倍数个数,并统计有多少个 // 定义一个变量,保存出现了多少个 7 的倍数 int count = 0; // 定义一个变量保存 1-100 之间数,用这个变量每次除以 7,取余数 int number = 1; // 条件表达式是,1-100 之间的小于总值 100 while (number <= 100 ) { // 如果 number 的值模以 7 是 0 的话代表是可以整除的,此时将 count 加 1 if (number % 7 == 0){ count++; printf("第%i个 7 的倍数是:%i\n",count,number); } number++; // 每次循环都要将 number 的值加一,再次y循环 } - 
修改相同变量的变量名
- command+control+e,此时相同的变量就会被选中,然后直接修改值就可以了
 
 
    // 帅哥下向美女要陌陌号,
    // 美女要求男生t猜她的年龄,给这个男生三次机会
    // 分析:男生猜的年龄,女生的年龄(随机数),三次机会  --->三个变量
    int girlAge;
    int age;
    int count = 0;
    girlAge = arc4random_uniform(20); // 随机一个 0-20 的数,不包含 20
    printf("这是随机的女孩的年龄:%i\n",girlAge); // 打印一下随机的女孩年龄
    while (count < 3) {
        printf("请输入你猜的年龄,以回车结束\n");
        scanf("%i",&age); // 接收用户输入猜的女孩年龄
        if (age == girlAge){ // 如果两个值相等
            printf("恭喜你猜对了\n");
            break; // 猜对了就跳出循环
        }else
        {
            printf("猜错了,你还剩下%i个机会\n",2-count);
        }
        
        count++;
    }
    
- while 循环注意点
- 1,任何数值都有真假性
 - 2,while 和 if 语句一样,也可以省略大括号,只管后面的第一条语句
 - 3,分号也是一条语句,是一个空语句
 - 4,while 循环语句中不要定义变量
 - 5,注意条件表达式,避免死循环
 
 
break 语句
- break 语句用于跳出循环
 
    // break 语句
    // 我有一百发子弹,打十发子弹我就开始休息了
    int num = 100;
    while (num >0 ) {
        if(num  == 90){
            printf("不打了\n");
            break; // 跳出循环
        }
        printf("num = %i\n",num);
        num--;
    }
countinue关键字
- 死循环例子
 
    int num = 100;
    while (num > 0) {
        if (num % 10 == 0){   // 此时如果if 写在前面的话会造成死循环,第一次 100,进来满足 if 条件,然后执行休息一下,然后 continue 跳过本次循环进入了下次循环,但是后面的 num--是不是没执行啊,还是 100,所以每次的 num 值都是 100 每次都满足条件就会是死循环
            printf("休息一下\n");
            continue;
        }
        printf("num = %i\n",num);
        num--;
    }
    
- 调换位置后
 
    int num = 100;
    while (num>0) {
        num--;
        if (num % 10 == 0){
            printf("休息一下\n");
            continue;// 如果没有加 continue 还会打印出 90,80,这些数字,
        }
        printf("num = %i\n",num);
    }
- 不使用 continue
 
    /*
    int num = 100;
    
    while (num>0) {
        if (num % 10 == 0){
            printf("休息一下\n");
        }else{
            printf("num = %i\n",num);
        }
        num--;
    }
    */
- continue 练习
 
    // 把 100-200之间,不能被 3 整除的数字打印出来
    int num = 100; // 100-200之间的数字不能确定,定义一个变量
    int chushu = 3;
    while (num <= 200) {
        num++; // 自增要写到开头,不然 continue 会跳过自增语句导致死循环
        if(num % chushu == 0){
            printf("这是能被 3 整除的\n");
            continue;
        }
        printf("不能被三整除的数:%i\n",num);
        
    }
do while循环结构
- 条件成立时
 
    // do while 循环
    /*
     while (条件表达式){
        代码块
     }
     
     do {
        代码块
     }while(条件表达式);
    从格式上看,先执行了代码块的代码 ,然后再去判断是否满足条件,条件满足再次执行代码块的代码,条件不满足跳出循环,同样可以使用 break 和 continue 关键字
     
     1,如果条件表达式不满足,也会x执行一次代码块的代码
     */
    
    int num = 0;
    while (num < 3) {
        printf("num = %i\n",num);
        num++;
    }
    printf("----------\n");
    
    int value = 0;
    do{
        printf("value = %i\n",value);
        value++;
    }while (value < 3);
- 条件不满足时
 
    // while 和 do while循环结构条件不满足的时候
    int num = 0;
    while (num < 0) {
        printf("num = %i\n",num);
        num++;
    }
    // 此时 while 循环是不执行代码块中的代码的
    printf("----------\n");
    
    int value = 0;
    do{
        printf("value = %i\n",value);
        value++;
    }while (value < 0);
    // 此时 do whilex 循环是回执行一次代码块中的代码的
- 
什么时候用 while 和 do while 呢?
- 一般情况下能用 while 的就用 while
 - 需要先执行一次代码块中的代码的时候就用 do while 好一些
 
// 输入一个正整数n,计算 1+2+3+n的值是多少 // 用户输入的正整数变量 1,累加的和变量 2 int num = 0;//定义一个用户输入的正整数变量 int sum = 0;//定义一个累加和的变量 do { printf("请您输入一个正整数,以回车结束\n"); scanf("%i",&num); } while (num < 0); // 用户输入的值小于零时,让用户继续输入 while (num > 0) { sum = sum + num; num--; } printf("sum = %i",sum); 
                    
                
                
            
        
浙公网安备 33010602011771号