黑马程序员技术交流社区

标题: 笔记分享下 [打印本页]

作者: 徐荘    时间: 2016-7-29 22:29
标题: 笔记分享下
#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;
        */

作者: sunshine429    时间: 2016-7-29 22:38
谢分享,加油
作者: 行路难    时间: 2016-7-30 12:18
加油,多谢分享!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2