swtich与循环语句

  • Switch语句
    • 也是一种分支语句,适用于多分支的情况

    • 语句结构

    • 语句项

    • 入口问题
      case
    • 出口问题
      break
    • 细节表达式必须包含整形

    • 细节表达式要包括常量


      1+0
      字符也行,因为字符也是整形,字符用的是字符的ASCII码值
    • 关于break


      break不是必须加
      好习惯最后一个break1加上去!!!!!
    • Switch怎么表示或?
      Switch(ch){
      case' ':case'\n':blank ++;break;
      ​}
      空格或者回车都要进去调整语句
    • default语句


      default可写在前面或者后面

      经典题
  • 循环语句

 

  • while dowhile for

    • while
      • 语法结构

      • break的用法

      • continu的用法


        光标还在闪,还在进行跑,是因为在死循环
        continue的作用是跳过本次循环continue后面的代码
        ​直接去判断部分,看是否进行下次循环
      • 再分析几个代码
        • 第一个


          getchar() 意思就是获取一个字符从标准输入中
          怎么工作
          标准输入-键盘
          返回类型是int类型
          返回值的描述:,返回的是整形,返回的是她的ASCII码值,如果错误读取,返回的是
          eof end of file 文件介绍标志
          ​注意getchar是获取一个字符,putchar是输出一个字符

          两者可以互相替代
          • 回归原题


            作用意义就是不断输入输出一个字符
            回车或ctrl+z 就是getcahr读取结束
            回车也是输入字符
            ​原理是这样的
            getchar与键盘之间不是直接联系的

            这个换行有两部
            \n对于getchar也要去读取
            因为他认为缓冲区里的都是字符

            .c为后缀他就是一个C语言的代码了
            • 继续专研
              • getchar与scanf


                你要写密码锁功能
                密码是个字符串
                字符串要存起来,所以char 在开头
                char password[20] = {0};passwor这个数组可以放20个字符,默认全0;
                password不用取地址,因为password是个数组,数组的数组名本来就是地址
                我们现在需要这个人输入一个Y或N
                我们现在就要把这个Y获取出来
                输一个字符,我获取
                就用getchar()
                ​错了
                解释:getchar还是scanf 就叫输入函数
                他们从键盘直接拿到数据?不是
                要从之间的缓冲区去拿数据
                如果缓冲区没有数据,就会等待,等键盘输入,他就会拿走
                回车会触发scanf去读内容,
                敲回车会让123456放到缓冲区里去,然后scanf才回去读取信息,他只读123456
                然后getchar再去看缓存区,发现还有一个\n,没有等待,直接拿走\n,直接放到ch里
                刚刚并没有让我们等待,怎么解决呢?
                清理缓冲区 getchar(); 清理\n
                有时候不行嘞,
                ​为什么失败了
                scanf只会拿空格前面123456
                缓冲区里可多了 getcahr();只能消灭一个字符
                换个while循环
                int tmp = 0;
                while((读的不是\0,扔了
                清理缓冲区多个字符
                ​注意了和刚才while很相似
                ​字符 本质是以 ASCII 形式储存
                ASCII本质是整形
                getchar返回的eof eof本质上是个-1;
                -1不是ASCII,是整形
                所以用int储存
                所以我们经常讲函数不要研究太透
                如果一个字符串有空格,gets这样的函数也能做,她能读一行
                再强调一遍:b站的视频不代表你学会了
                空杯心态,吊儿郎当,可能有些知识点没有消化
              • 代码二


                ASCII表就是非数字字符,只会打印数字字符
        • for循环
          for循环把三部分结合在一起,比while优越
          • 语法结构


            for循环用的最多
          • 实际问题出现break和continue
            • break


              只要break执行了,循环终止
            • continue


              12346789不会有死循环
              for和while的continue不一样
              for的它跳到调整部分,while完全可能跳过调整部分,导致死循环
              第二条建议:for循环控制变量的取值采用"前闭后开"写法
              int arr[10] = {0};
              ​for(i= 0;i<10;i++);
              i=0是前闭
              i<10是后开
              这个前闭后开是有意义的:打印十个0,循环10次,效果可读性更好
            • for循环的变种


              判断部分的省略 - 这个循环的判断部分恒为真,死循环
              答案是三个呵呵
              省略带来的锅,是自己考虑不周全,此时j已经变成3了,以后的结果不成立
              第二个变种:两个循环变量
              作业:循环了几次
              ​真坑啊,k=0 把零赋给k,0就是假,就是假,循环一次都不进,这个循环进行了零次


    • do while
      • 语法结构


        和while的区别
        do while是先执行后打印
      • break


        一个break只能跳出一层循环,
        多层嵌套要每个都加break
      • continue


        跳过continue后面的代码
        i++被跳过去了

        i++的位置很重要,可能被continue的语句跳过去
      • do的特点
        至少循环一次
      • 练习1.计算a的阶乘
        明知次数是多少,用for循环好
      • 练习2.计算1到10的阶乘之和


        初始化的重要性
        ​讲究效率的话,改进代码0-
      • 练习3.>>在一个有序数组中查找具体的某个数,编写int binsearch(int x, int v[],int n);功能:在v[0]<=v[1]<=v[2]的数组中查找x


        有序数组:数组已经排好序了
        在1 2 3 4 5 6 7中找7
        在有序数组中找号码,用二分法怎么做呢?
        找这组数组的中间数,
        如果简单从元素个数除以二来求中间元素是没用的
        方法:找头和尾
        最左边元素的下标是0,最右边的下标是9
        9/2=4,来作为中间元素的下标
        4作为下标所对元素是5
        5和9的平均值是7
        七作为下标所对元素是8
        最坏情况我们找了四次
        二分查找法:效率非常高
        ​最坏情况查找log2 n次
        比如要找2的三十二次方
      • 第三题的几个思路(算法思想)


        一次查找
        但我们要多次查找

        (6+6)/2=6才是答案
        5要淘汰掉
        ​5到9
        ​mid-1左下标右下标相等
        确定新的范围进行二分查找
      • 练习四:编写代码,向中间汇聚

        • 先必须有两个数组


          char arr [] = "welcome to bit";
          char arr [] = " ***************"
          strlen(arr1)-1就是最后一个感叹号的下标;
          注意互相替换:
          arr 2 [left] = arr 1 [left];

          arr2[right] = arr 1 [right];
          while的条件就是left小于等于right;
          strlen还要头文件
          sleep单位是毫秒
          sleep(10000);头文件window.h
          system("cls");
          太美了
          头文件有string.h和windows.h
          char arr[] = "abc";
          a b c \0
          你不减一怎么求它的下标
      • 第五题:

        • 登入三次


          注意strlen 和strcmp都属于字符串函数都要引用string.h
          两个字符串比较.不能使用= =,应该使用strcmp
          注意char password[20] = { 0 };
          strcmp abcdef abccqqq比较的是对应字符的ASCII码值
          不是比长度,d大于c,所以第一个字符串大于第二个字符串
          数组名本来就是一个地址;
          不能用==,这种比较是在比较两个首字符的地址,地址比较没有任何意义的;

      • 猜数字游戏
        会自动产生一个一到一百的随机数
        猜数字
        猜对了,恭喜你,游戏结束
        猜错了,会告诉你猜大了还是猜小了
        游戏一个一个玩,除非直接退出游戏
        • 先用do while循环进行猜数字游戏的开始


          menu要自己写,不要引用头文件
        • 正式进入猜数字游戏


          1.先生产随机数
          ​介绍rand函数,就是生产一个随机数
          int ret = rand();
          ​没0挑战了,rand返回的值在0到32767之内
          还要调用scrand函数,设置一个随机的起点
          scrand(100);
          这需要一个变的量
          ​电脑时间一直在发生变化,时间戳,一个时间戳就是一个数字
          获取时间戳time,把时间戳传进去
          有个库函数time会返回一个时间戳
          ​注意给它传一个null值过去,我们不想用这个参数,time函数本来有参数的,
          注意了,time函数的返回类型是time_t 也是一种整形类型,time函数的参数是空值
          同时srand需要的是一个unsigned类型的函数,所以我们把time函数的返回值强制类型转换成unsigned类型就可以了即srand((unsigned int)time(NULL));
          这个时候time函数引头文件time.h
          这里出现一个随机值,但是数不够随机,随机数起点的设置要放对位置,放在主函数之前
          但现在生产的随机数不在一到一百范围,我们可以让它模上一百,然后加一即
          %100 ,然后+1,范围就是1到100了
          %100+1
          这时候生成的随机数就是1-100
          小技巧

           
        • 猜数字


          scanf("");
          真好玩
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值