#pragma mark  -  12_2 课堂练习 [掌握] 
 
"例题":打印 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++; 
    } 
} 
 
 
 
 
#pragma mark - 0_13 循环的第五种应用 [掌握] 
 
"应用场景":求累加和,求积,平均值 
例题: 
    求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; 
} 
 
 
 
 
#pragma mark - 0_13_2 最容易范错 [掌握]  
 
"例题: 
    请用户输入班级的人数 
    然后依次 输入每一个学生的成绩 
    求 成绩的总分和平均分 
#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; 
} 
 
 
 
 
#pragma mark - 0_14 循环的第六种应用 [掌握] 
 
"应用场景":求若干个数的最大值和最小值 
例题: 
     让用户输入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; 
} 
 
#pragma mark -  0_15 break与continue [掌握] 
 
1.break在哪可以使用? 
    "强调": 第一个在switch-case结构中使用 
        第二个在循环结构中使用break; 
    在if-else中 使用了break 也不起作用 
 
2.break在循环结构中的作用: 
    立即终止循环,就算后面还有代码 不会执行 
3.continue在哪可以使用? 
    只有在循环结构中可以使用 
 
4.continue在循环结构中的作用 
    立即终止本次循环 而进行下次一个判断 
    用于加速循环 
 
#pragma mark - 01 循环应用之计数和穷举 [掌握] 
 
#mark 计数 
1.是什么 
记录循环体执行了多少次/计算循环体中某一块代码执行了多少次 
 
2.使用例子 
 
1>例子 
输入用户名/密码,只要不正确就重新输入,知道输入正确为止 
当登录成功之后,显示输入了多少次 
//拓展:开发中经常能用到,就算你最后输对了,由于次数太多,还是要对你进行验证如:看头像选好友 
 
 
思路: 
//定义变量接受用户输入的账号和密码 
//当账户或密码有一个不正确的时候要进入循环体让用户从新输入 
//定义一个变量,来计算总共输入了多少次 
代码实现: 
int main() 
{ 
    int zhangHao = 0,miMa = 0; 
    int i = 0; 
    while (zhangHao != 12345 || miMa != 112233) 
    { 
        printf("输入账号密码用逗号隔开!\n"), 
        scanf("%d,%d",&zhangHao,&miMa); 
        i++; 
    } 
    printf("登录成功 一共尝试了%d次\n",i); 
} 
2>例子 
计算0-100之间3的倍数的数字的个数 
#include <stdio.h> 
 
int main(int argc, const char * argv[]) { 
    // insert code here... 
     
    //简化:打印0-100 
     
    int count = 0; 
    int nums = 0; 
    while (count < 101) { 
        //        printf("%d ",count); 
        if (count % 3 == 0) { 
            //             printf("%d ",count); 
            nums++; 
        } 
        count++; 
    } 
     
    printf("个数 = %d\n",nums); 
    return 0; 
} 
 
#mark 穷举 
 
1.是什么 
一个一个一次测试,直到找到正确的答案,这种解决问题的思路叫做穷举 
 
2.怎么用 
1>实际需求 
    爆破wifi密码 
2>例子 
 
产生1-100的随机数,判断产生的数字是多少 
 
 
//思路:遍历1-100这100个数,找到和产生的随机数相等的数就结束循环 
#include<stlib.h> 
int main() 
{ 
    int num = arc4random_uniform(100) + 1; 
    printf("%d\n",num); 
    int i = 1; 
    while (1) { 
        if(num == i) 
        { 
            printf("%d\n",i) 
            break; 
        } 
        i++; 
    } 
    return 0; 
} 
3>面试题 
有一篮鸡蛋,至少有两个,两个两个数,多一个,三个三个的数,多一个,四个四个的数,还是多一个,至少有多少个鸡蛋? 
//思路 
//这个数至少比2大,对2取余数为1,对3取余数为1,对4取余数为1, 
//从2开始找,依次增加1,直到找到满足 (数%2==1)&&(数%3==1)&&(数%4==1) 
int main() 
{ 
    int i = 2; 
    while (1) { 
        if(i%2==1&&i%3==1&&i%4==1) 
        { 
            printf("至少是%d\n",i); 
            break; 
        } 
        i++ 
    } 
    return 0; 
} 
4>经典面试题:(for循环讲完之后做) 穷举 
  /* 
    给你一千块 买鸡 要求必须全部花完 
        小鸡:32 
        母鸡:95 
        公鸡:123 
        一共:1000; 
        */ 
 |   
        
 
    
    
    
     
 
 |