zoukankan      html  css  js  c++  java
  • C博客作业02--循环结构

    1.展示PTA总分

    单循环结构:

    嵌套循环:


    2.本章学习总结

    2.1. 学习内容总结

    1.while循环

    在上一周我们已经学习了for循环,这一周还有学习了一种循环——while循环。相比较于for循环while的应用更为广泛,for循环一般用于已知次数的循环,而while循环的次数不定,通常需要最先判断条件为真进入循环,最后判断条件 为假方可跳出循环。
    一般形式:

    
         while ( 表达式 )
        {
             循环体语句;
        }
    
    

    其特点:1.while的循环体语句中必须包含能最终改变循环条件真假性的操作,
    2.结构简单只有一个判断表达式和循环体语句(块),便于直接将程序设计思路转化为语句。

    2.do-while循环

    while语句和for语句都是先进行条件表达式的判断,为真才进入循环,否则一次循环也不执行。do-while语句则无论如何都会执行一次循环,因为这种语句都是先进循环体一次后再判断条件的。
    一般形式:
    ···
    do
    {
    循环体语句;
    }while ( 表达式 );

    ···

    其特点:1.循环体中或之前要有初始化,还要有可以改变真假性的语句
    2.先进循环体再判断,注意while后要加‘;’。

    3.循环控制:break语句及continue语句

    • 如果循环有多条件时,可由表达式和break共同控制,break语句强制提前结束循环,不执行其后的循环体语句,通常与if语句连用,判断为真时才执行,若break执行无需条件则永远不会执行循环体中break后面的语句。
    • continue语句是跳出循环体后面的循环体语句,继续下一次循环,通常与if语句连用
      区别:break用于结束循环,continue语句仅跳过后面语句执行下一轮循环。break还有用于switch语句,而continue只用于循环结构。

    4.扩展goto语句

    在嵌套循环的PTA题集中有用到的,其实是同学教我的,goto语句也是一个循环控制语句也叫无条件转移语句,其格式如下:goto 语句标号;其中语句标号是按照标识符写的符号,放在一行语句的前面,标号后面加‘:’。语句标号起标识语句的作用,与goto 语句配合使用。C语言不限制程序中使用标号的次数,但各标号不得重名。但是,在结构化程序设计中一般不主张使用goto语句, 以免造成程序流程的混乱,使理解和调试程序都产生困难。
    例子如下:

    5.嵌套循环结构

    看一段代码,是PTA上的打印九九乘法表

    在这道例题中我们把里面的循环叫嵌套循环(或者多重循环),大循环中嵌套了小循环。需要注意的是内外层变量的初始化,以及内层语句对变量的更改是否会影响下一次循环。

    2.2本章学习体会

    学习感受

    一到循环结构整体的难度就加大了,如果没有真正掌握VS的调试技巧真的很难彻底理解嵌套循环的执行,也很难弄懂循环的思路,总之还是要多刷题多实践,感觉这一块还要再加强,还有就是要充分地提前预习,不然上课还是会理解不够深入,还有就是应该更加独立思考,不要一有难题就百度或者问同学。

    代码量统计

    第7周:416 第八周:485


    3.PTA实验作业

    7-6水仙花数

    3.1.1伪代码

    定义变量:N表示整数位数,m表示最大值,n表示最小值; i,j,k是循环变量; M表示当前循环时的数,number储存幂次积,num储存每一位数,sum储存累加和。
    伪代码:
    读入一个数N为整数位数
    求出m和n的值
    设置最外层循环:for (i = n; i < m; i++)
    将每次i的值赋给M,并初始化sum;
    设置第二层循环:for (j = 1; j <= N; j++)
    求各位数并统计N次幂累加和
    判断sum是否等于i(即那次循环判断的数)
    输出。

    3.1.2代码截图

    3.1.3造测数据

    输入数据 输出数据 说明
    3 153 370 371 407 sample
    4 1634 8208 9474 simple

    3.1.4PTA提交列表及说明


    第一次:提交没有处理好i和m的关系还在循环中用了pow函数导致运行超时(死循环)
    第二次:通过调试解决,引用了M来储存每次判断的数,用nunber来储存每位数的N次幂,忘记循环后初始化,用了pow函数所以最后一个测试点(数据稍微大一点)又超时了。
    第三次:把pow函数用for循环代替终于对了。

    7.2梅森数

    3.2.1伪代码

    定义变量:N表示指数,i,j表示循环变量;num表示待判断的数,leap是辅助变量
    伪代码:
    读入一个数作为最大指数N
    设置最外层循环:for (i = 1; i <= N; i++)
    求出每个num
    用常规的素数循环判断,输出,改变leap的值
    判断leap是否为0,输出。

    3.2.2代码截图

    3.2.3造测数据

    输入数据 输出数据 说明
    6 3 7 31 sample
    2 3 仅有一个
    1 空集 没有

    3.2.4PTA提交列表及说明


    注:只截最后一次
    第一次:(在VS上自己调试)没有办法正确得出None的情况
    第二次:将判断移到循环外面,引入leap,正确了。

    7-1 求n以内最大的k个素数以及它们的和

    3.3.1伪代码

    定义变量:n表示最大值,k表示个数,sum用于储存累加和,num用于确认输出格式;i,j是循环变量,flog是辅助变量,用于判断是否累加(即是否为素数)
    伪代码:
    读入最大值和要求的素数个数
    设置最外层循环:for (i = 1; i<=m; i++)
    判断素数一般循环,中改变flog,num
    在循环中判断flog和num的值,确定输出格式
    循环中用到goto end和goto out语句
    n自减
    判断n goto final;
    输出

    3.3.2代码截图

    3.3.3造测数据

    输入数据 输出数据 说明
    1000 10 997+991+983+977+971+967+953+947+941+937=9664 sample
    12 6 11+7+5+3+2=28 sample
    10 1 7=7 最小值
    10000 10 9973+9967+9949+9941+9931+9929+9923+9907+9901+9887=99308 最大值

    3.3.4提交列表及说明

    第一次:我想从大到小执行循环,结果一直是0=0,后来发现sum从一开始第一次被初始化后就无法改变
    第二次:低级错误,内层for循环第二个表达式多了等号,素数等于白判断了,答案错误
    第三次:通过小数据逐步调试找到上述错误,改后提交通过。

    4.代码互评

    查询水果价格

    我的代码:

    同学代码1:


    同学代码2:

    和同学1的不同:这位同学用的是if-else语句,循环体用的是while语句,而我用的是for循环和switch-case语句。
    和同学2的不同:这位同学的菜单打印用的是整句输出,而我用了多个printf,并且我们循环变量的初值和条件不同。

  • 相关阅读:
    C++矢量图形库系列(转)
    ArcGIS Server 地图发布请求分析
    Git在提交代码时出现的fatal: Authentication failed的问题
    创建WPF项目
    Linux查看日志常用命令(转载)
    CentOS6 + MapServer7.4编译
    升级GCC
    QT+OpenGL(03)--libpng库的编译
    QT+OpenGL(02)-- zlib库的编译
    QT+OpenGL(01)--实现三角形渲染
  • 原文地址:https://www.cnblogs.com/19wangluo-Lishaoqiang/p/11707330.html
Copyright © 2011-2022 走看看