A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 徐荘 中级黑马   /  2016-7-31 23:44  /  1755 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

反馈:
    1.进展好像慢了点
    2.希望能抽时间把前面知识弄一遍
    3.后面的知识别讲太快了,越来越难了
    4.听懂了,不练就忘掉了
    5.最后几个while的应用场景比较懵逼

知识回顾 做个练习:20
    用while循环求100-999之间的水仙花数
    提示:水仙花数:各个位上的数子的立方和==这个数本身
比如:123 ,1*1*1 + 2*2*2 + 3*3*3 = 1+8+27 !=123 所以123不是水仙花数
123:
  123%10 -->3
  123/10%10-->2
  123/100%10-->1



int num = 100;
while(num < 1000){
   
    int ge = num / 1 % 10;
    int shi = num / 10 % 10;
    int bai = num / 100 % 10;
   
    if((ge*ge*ge + shi * shi * shi + bai * bai * bai ) == num){
        printf("num = %d\n",num);
    }
    num++;
}

2.break:终止当前循环
continue:终止本次循环 进行下一次循环,用于加速循环



#pragma mark - 02 do-while循环结构的简单使用 [掌握]

1.do...while循环的语法:
    do{
        循环体;
    }while();//此处有一个分号
注意:do-while循环最后面必须有一个分号

2.do-while循环结构和while结构的最大区别是什么?
    while:当型循环
    do-while:直到型循环,傻瓜式循环
    无论如何,do-while 至少会执行一次
并不是说 无论如何 do-while 一定比while循环多执行一次



3.练习一下 打印 5次 "吃饭啦\n"
    int num = 5;
    while(num >0){
        printf("吃饭啦\n");
        num--;
    }

    int num = 5;
    do
    {
        printf("吃饭啦\n");
        num--;
    }while(num > 0);

4.一个特殊的例子
    //while
    int main()
    {
        int i = 5;
        while (i < 5) {
            printf("hello world\n");
            i--;
        }
        return 0;
    }

    //do - while
    int main()
    {
        int i = 5;
        do{
            printf("hello world\n");
            i--;
        }while (i < 5);
        return 0;
    }

5.一般来说 do-while 什么时候使用:当循环体必须执行至少一次的时候

#pragma mark - 03 课堂练习 [掌握]
此知识点的复习时见第6天视频笔记/03 课堂练习.pdf



"可能考到"
######pragma mark - 04 do-while循环和while循环的区别 [掌握]

1.笔试考的很少,但是点招面试经常会问

    问题:xxx和yyy的区别?
    while和do-while的区别


1>相同点: 都是循环结构,目的是将一段代码 重复的执行指定次数
2>不同点:
    1)do-while循环结构是先执行后判断
      while循环结构是 先判断 再执行
    2)在第一次判断条件都不成立的情况下
     do-while循环会执行一次
     而while循环1次也不会执行

    do-while 循环结构至少执行1次,而while循环结构可能一次都不执行

    3)什么时候使用?
       1.当循环体无论如何至少要执行一次的时候,那么可以使用do-while循环
       2.当循环体有可能一次都不执行的时候,那么就使用while循环
     在实际开发中,do-while用的比较少

#pragma mark - 05 for循环的简单介绍 [掌握]

1.格式
    for(一般来说是定义性语句,简称初始化表达式;判断条件;曾量语句)
    {
        循环体;//循环体 后面 不再需要i++,j++这些语句
    }
2.while循环和for循环之间的转换
    1>用for循环打印10次hello world
    int main()
    {
        for (int i = 0; i<10; i++) {
            printf("hello world\n");
        }
        return 0;]]
    }


    2>while循环打印10次hello world
    int main()
    {
        int i = 0;
        while (i < 10) {
            printf("hello world!\n");
            i++;
        }
        
        
        return 0;
    }

    3>for循环转换成while循环
    int main()
    {
        int i = 0
        for (;i<10;) {
            printf("hello world\n");
            i++
        }
        return 0;
    }
#pragma mark - 0_06 for循环和while循环对比 [掌握]

此知识点的复习时见第6天视频笔记/10 for循环和while循环对比.pdf







#pragma mark - 0_07-08 课堂练习 [掌握]

练习1:
    1.利用for循环求1-100之间的偶数的累加和

        int sum = 0;//求和的变量
        for (int i = 1; i < 101; i++) {
            
            if (i % 2 == 0) {//判断这个数 是不是偶数
               
                //            printf("%d ",i);
                //把打印去掉 直接加到某一个容器
                sum+=i;
            }
        }

        printf("sum = %d\n",sum);



    2.利用for循环求100-999之间的水仙花数
    for (int i = 100; i < 1000; i++) {
        //水仙花数: 各个位上的立方和 等于本身的数
        
        /*
         456:
         个位:456%10 -->6
         十位:456/10%10--->5
         百位:456/100 --->4
         
         */
        int ge = i % 10;
        int shi = i / 10 % 10;
        int bai = i / 100;
        
        if ( (ge*ge*ge + shi*shi*shi + bai*bai*bai) == i) {
            printf("%d ",i);
        }
    }

    3.求一个数的n次方[了解]
        引入一个头文件: #include <math.h>
        使用这个函数:pow(第一个数,第二个数);
        比如 要求5的三次方, 那么应该是 pow(5,3);







#pragma mark - 0_09 使用for循环注意 [掌握]

1.注意事项
    1)如果在第三个表达式中 已经修改了循环增量的值
        那么就不在循环体中修改循环增量的值了
    2)第三个表达式后是没有分号的
    3)三个表达式的位置是固定的,第1个是初始化表达式 第2个是循环条件
        第3个是循环后改变增量的表达式
    4)三个表达式都可以省略,但是分号不能省略
        如果第2个表达式省略,那么循环条件默认就是成立的
    5)这个表达式,可以写任意的c语句
    "注意": 只能有三个表达式,中间只能有两个分号
          在绝大多数的情况下,for循环都是像下面方式使用的
            for(int i = 0;i < xxx;i++){
               
            }

2.关于省略大括号
    1)if(判断语句){
        语句块1;
    }
    "注意":如果语句块1,就一句代码 那么这个大括号可以省略
    比如:
    if(5 > 3)
        printf("哈哈哈\n");
    else
        printf("呵呵\n");
    建议:都不省略
    2)for循环的循环体只有一句的时候 也可以省略 但是也不建议省略
    3)单独的一个分号 ";" 也是一个语句 空语句



#pragma mark - 0_10 while循环可以做的事情for循环一定也可以做 [掌握]
此知识点的复习时见第6天视频笔记/0_10 while循环可以做的事情for循环一定也可以做.pdf
"强调
使用while循环实现的 一定可以使用for循环来实现,反之亦然

#pragma mark - 0_11 while循环和for循环的使用建议 [掌握]
1.感觉while好实现就用while 感觉for好实现就用for
    但是一般来说 如果是明确循环次数的 一般用for
    如果次数不明确的 一般用while
2.死循环[了解]
    while(1){}
    for(;;){}

#pragma mark - 0_12 嵌套循环 [掌握]

最低要求:必须能看懂别人写的嵌套循环代码,并分析出结果

1.什么是嵌套循环
    一个循环的循环体中 含有另外一个循环
2.嵌套循环的特点
    外层循环执行一次,内存循环执行所有次
3.嵌套循环的使用场景
    一件事要完成一次 必须完成另外一件事n次
    要打印
    /*
     ++++++
     ++++++
     ++++++
     ++++++
     */
    for(int i = 0;i < 4;i++){//打印一行
        for(int j = 0;j < 6;j++){
            printf("+");
        }
        printf("\n");
    }
"==========================以下内容听懂即可==============================="
#pragma mark - 0_13-0_15 打印三角形状[听懂]

1.
    *
    **
    ***
    ****
    *****
    ******
    *******
    ********
    *********
    **********
//推理过程
//先打印 10行10列的*

#include <stdio.h>
int main()
{
    for(int i = 0; i< 10;i++)
    {
        for(int j = 0; j< 10;j++)
        {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}

规律:遇到几行几列的图形  两层for循环
    外层for循环控制的是行
    里层的for循环控制的是列
#include <stdio.h>

int main(int argc, const char * argv[]) {
    // insert code here...
   
    /*
     分析:
     i的值   和  星星这个数
     0          1
     1          2
     2          3
     i          i+1
     */
    for (int i = 0; i < 10; i++) {
        //不管i是几 经过分析 要打印的*的个数 是i+1个
        //那么j从0开始循环i+1次 所以条件是j<i+1
        for (int j  = 0 ; j < i+1; j++) {
            printf("*");
        }
        
        printf("\n");
    }
   
   
   
    return 0;
}

#pragma mark - 0_13-0_16 打印倒三角形状[听懂]

2
    **********
    *********
    ********
    *******
    ******
    *****
    ****
    ***
    **
    *
#include <stdio.h>

int main(int argc, const char * argv[]) {
    // insert code here...
   
    /*
     分析:
     i的值  星星的个数
     0    8
     1    7
     2    6
     3    5
     i    8-i
     */
    for (int i = 0; i < 10; i++) {//8行
        //不管i是几 我们分析出来 打印8-i个星星
        //j是从0 开始 循环8-i 所以 j<8-i
        for (int j = 0; j < 10 - i; j++) {//8列
            printf("*");
        }
        printf("\n");
    }
   
   
    return 0;
}

#pragma mark - 0_13-0_16 打印三角形状3[听懂]
打印
        *
       **
      ***
     ****
    *****
   ******
演变成下面图形,只要把"+"号 换成空格就行了
    +++++*
    ++++**
    +++***
    ++****
    +*****
    ******
    for (int i = 0; i < 6; i++) {//8行
        //++++ **
        /*
         i    +的个数  *的个数
         0      5         1
         1      4         2
         2      3         3
         
         i     5-i        i+1
         
         
         */
        //不管i是几 只要打印+号 5-i个  星号 i+1个就可以了
        for (int j = 0; j < 5-i ; j++) {
            printf("+");
//            printf(" ");
        }
        for (int k = 0; k < i+1 ;k++ ) {
            printf("*");
        }
        printf("\n");
    }

#pragma mark 0_16 九九乘法表[听懂]

打印一下图形:
图形1:
1
2 2
3 3 3
4 4 4 4
5 5 5 5 5
    for (int i = 1; i < 6; i++) {//5行
        //不管i是几 只要打印i个就可以了
        //这里的j是从1开始 循环i次 所以需要j<i+1
        for (int j = 1; j < i+1; j++) {//5列
            //为什么打印i呢?
            //经过分析 第i行 打印的值就是i
            printf("%d ",i);
        }
        printf("\n");
    }






图形2:
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4 5 6

    for (int i = 1; i < 7; i++) {//6行
        //不管i等于多少,只要打印i个就可以了
        //因为j是从1开始的 要循环i次 那么j<i+1
        for (int j = 1; j < i+1; j++) {//6列
            printf("%d ",j);
        }
        printf("\n");
    }



九九乘法表

1*1= 1
1*2= 2        2*2= 4
1*3= 3        2*3= 6        3*3= 9
1*4= 4        2*4= 8        3*4=12        4*4=16
1*5= 5        2*5=10        3*5=15        4*5=20        5*5=25
1*6= 6        2*6=12        3*6=18        4*6=24        5*6=30        6*6=36
1*7= 7        2*7=14        3*7=21        4*7=28        5*7=35        6*7=42        7*7=49
1*8= 8        2*8=16        3*8=24        4*8=32        5*8=40        6*8=48        7*8=56        8*8=64
1*9= 9        2*9=18        3*9=27        4*9=36        5*9=45        6*9=54        7*9=63        8*9=72        9*9=81

/*
i   个数
1      1
2      2
i      i
分析:
j的值     *号左边的值
1          1
2          2
3          3
j          j
i的值     *号右边的值
1          1
2          2
3          3
i          i
总结:不管i和j等于多少
*号左边都是 j
*号右边都是 i
j*i

*/

    for (int i = 1; i < 10; i++) {
        //不管i是多少,经过分析 要打印的式子是i个
        //因为j是从1开始的 要循环i次 那么j<i+1
        for (int j = 1; j < i+1; j++) {
            printf("%d*%d=%d\t",j,i,i*j);
        }
        printf("\n");
    }
"==========================以上内容听懂即可==============================="

#pragma mark - 01 goto跳转语句 [听懂]

"强调
goto 跳转语句,了解一下就行,开发中不推荐使用,稍有不慎容易出现死循环


#pragma mark - 02 break与continue补充 [掌握]

1.break:代表"立即"结束当前循环,无论在哪些循环结构中都是立即马上结束,后面的循环体中代码都不会执行

2.continue:代表结束本次循环,而执行下一次循环,用于加速循环
    在while循环中 结束本次循环体,立即回去判断循环条件 如果成立再执行循环体
比如:
    int i = 0;
    while(i < 5){
        
        if(i==2){
            continue;
            //遇到continue 会结束本次循环 回去判断循环条件
            //所以 i++不会执行
        }
        i++;
    }
    在for循环中 也是结束本次循环体,但是
    for(int i = 0;i < 5;i++){
        if(i == 2){
            continue;
            //遇到continue 会结束本次循环,但是会执行i++,然后在判断条件
            
        }
    }

面试题:
    int main()
    {
        
        for (int i = 0; i < 10; i++) {
            
            for (int j = 0; j < 10; j++) {
                //这里写一段代码,结束外层循环
                i = 10;
                break;//注意,不会再执行j++
            }
        }
        
        return 0;
    }
#pragma mark - 03 函数的基本使用 [掌握]

1.函数是什么?
    把一段特殊功能的代码封装到一个函数块中

2.函数定义的语法
    1>位置:
        必须一定要在main函数之外,直接写在源文件下
    2>语法:
        返回值类型 函数名字([参数列表])
        {
            //函数体:可以有一句 可以多句 甚至可以没有
        }
    void showLogo()
    {
        //函数体:要打印的logo
    }


3.函数的调用:
    1>CPU只会执行main函数中的代码
    2>语法:
        函数名字();

1 个回复

正序浏览
感谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马