zoukankan      html  css  js  c++  java
  • 循环 Y

    | 这个作业属于哪个班级 |


    | ---- | ---- | ---- |
    | 这个作业的地址 |
    目录

      | 这个作业的目标 | 学习循环结构内容,包括for循环、while循环、循环嵌套 |
      | 姓名 | 喻文康 |
      目录

        0 我的Pta总分


        1. 本章学习总结

        1.1 for循环语法

        语法: for(表达式1;表达式2;表达式3) { } ,其中表达式1是循环初始状态,表达式2是循环控制条件,
        表达3是循环一次后执行的语句。
        样例: for(int i = 1 ; i < 9 ; i++) { printf("%d",i); }
        注意: for(;;)的结尾不能放分号,如果有分号,则代表这个for循环的循环体是一个空语句
        用法:适用于已知循环次数的程序,而对于条件控制的未知循环次数的循环,用while循环和do
        while循环则更适合。

        1.2 while循环和do while循环

        语法: while(循环控制条件) { 循环体 },do { 循环体 }while(循环控制条件);
        样例: while(i<9) { printf("%d",i); i++; }
        do{ printf("%d",i); i++; }while(i<9);
        相同点: 都适用于条件控制的循环
        不同点: while(){}循环的循环体执行次数可以为0,即不进入循环体,而do{}while();循环是先执行
        循环体,再判断循环条件满不满足,所以do{}while();循环的循环体执行的次数至少为1。
        另外,两种循环的while()语句也不同,while(){}循环的后面是不加分号的,而do{} while();循环的后面是有分号的,所以经常会搞混淆。

        1.3 break语句和continue语句

        语法:break语句用于跳出循环或者switch结构,continue语句用于跳过下面的语句并继续执行循环
        样例:while(i<9) { if(i>5) break;//跳出循环 printf("%d",i); i++; }
        while(i<9) { if(i>5) continue;//跳过后面的语句 printf("%d",i); i++; }
        注意:break可用于跳出switch语句和循环语句,而continue只能用于循环。
        breakcontinue只能用于所在的单层循环,所以在嵌套循环的时候要特别注意

        1.4 循环嵌套

        语法: 即在一个循环(外循环)的循环体中放入另外有一个循环(内循环)
        样例:while(i<9) { for(int j = 1 ; j < 9 ; j++) { printf("%d",j); } i++; }
        注意:这样就可以实现循环嵌套,不过,在使用循环嵌套时,也要注意嵌套的数量,一旦嵌套的循环变多
        那么对于代码的解读也会增加难度,使代码变得更加复杂,另外,在嵌套循环中,就格外要求代码缩进,代码
        缩进不仅可以使代码更美观,还可以有利于对代码的解读和分析。

        2 编程技巧总结

        2.1 嵌套循环跳出多层循环

        在嵌套循环中,因为break只能跳出当前循环,而如果想要在跳出循环后继续跳出外层循环的话,就会较为
        麻烦,当然也可以使用go to语句,不过go to语句容易破坏程序流程结果,所以不建议使用,不过可以
        定义一个flag变量来构造一个是否跳出循环的开关,这样就有利于解决跳出多层循环的困扰。

        2.2 清除缓冲区的非法字符

        目前所学的清空非法字符一般是getchar()scanf("%c",&ch)两个语句,但两个都只能清除一个非法字符
        而当非法字符较多时,就只能引入循环,且在未知循环次数的情况下,只能用while()循环和do{}while();
        循环,就显得较为复杂,而在看学长学姐的博客时,学到了一种清除非法字符的函数fflush(stdin),这样,
        在清空非法字符的时候就可以缩短代码长度做到代码简化处理。

        2.3 全局变量和局域变量

        作为初学者,我常常会定义很多全局变量来解决一个问题,但这样就会使得代码可读性降低,尤其是在变量一
        多的情况下,就很难去区分每个变量的作用,其实有些变量是不需要在整个程序中用到的,这时候我们就可以
        定义局域变量,就能更好地区分每个代码的作用和意义了。如上述的例子中for(int i = 1 ; i < 9 ; i++)
        这里面的变量i就是for循环里的局域变量了。另外,各个局域变量之间是不影响的,但并不建议定义的局域
        变量重名。且尽量使用有意义的命名

        2.4 图形打印

        在打印图形时,对于有规则的图形,常常需要用到循环嵌套,既要控制各行的内容,还要控制单行里的空格数
        尤其是当图形的行数很多的时候,对于一行行去打印是非常痛苦的,所以我们可以定义一个函数来进行这项操
        作,这样不仅可以分割代码,还有利于后面程序的续写与改进。另外,在看学长学姐的博客时,还发现一些知
        识点,具体如下:

        2.5 四则运算

        特别注意:=是赋值操作,而==是等于;在进行赋值操作时,左边只能是单个变量,且要注意变量赋值时数
        据是否会丢失(如乘除时是否需要类型转换),变量类型与数据类型是否一致。

        3 Pta实验作业

        3.1 数列求和问题

        流程图如下:

        3.1.2 代码截图

        3.1.3 Pta提交列表说明


        在编写代码的过程中,第一次没有看到这个题目要求

        其中素数按递减顺序输出。若n以内不够k个素数,则按实际个数输出。

        所以导致答案错误,但在自己调试的时候及时发现了,并对最后一个判断的数进行了控制

        3.2 图形打印问题

        2020-4-循环嵌套 7-4 打印九九口诀表 (15分)

        3.2.1 数据处理

        我的想法是,首先需要一个控制行数的变量N,和当前需要打印的所在行数line,然后通过观察图形的规律
        发现单个表达式都是该单元所在列数乘以行数,而打印图形时单行打印的,所以可以在外面先放好行的循环,
        然后再在里面放列的递增循环,相乘就能得到想要的值,然后打印出来,在下一行循环开始前换行就完成了。

        3.2.2 代码截图

        3.2.3 PTA提交列表及说明


        在代码编写的过程中,为了保证打印的表格美观,所以要控制每个表达式所占的格数,一开始因为忘记
        了右补空格的方法,所以在第一次调试的时候发生了格式错误,后来经过复习,知道在%后加一个-号改
        %-xd就可以改正这个错误。

        3.3 自选一题,介绍printf调试如何检查错误

        2020-4-循环嵌套 7-8 换硬币 (20分)

        3.3.1 单步调试截图

        printf调试不仅可以看到流程是否进入某个分支,还可以监控变量的值,具体如下:

        运行后结果如下:

        3.3.2 代码截图

        Pta提交列表说明


        前两个答案错误是因为没有注意到输出格式,如打印结果时应先输出五分硬币最多的情况,再输出两分
        最多的情况,最后输出一分最多的情况

      • 相关阅读:
        首发Zend Studio 9.0.2正式版注册破解
        PHP 中Cookie和Session的使用
        PHP设计模式职责和单例模式
        软件工程工具学习(1)Visio
        java复习(4)数字处理类
        java复习(1)java与C++区别
        微信开发(1)微信防撤回功能实现
        java复习(3)字符串、数组
        java复习(2)java基础杂记
        java复习(5)接口、继承、多态
      • 原文地址:https://www.cnblogs.com/ywk2002/p/14012411.html
      Copyright © 2011-2022 走看看