zoukankan      html  css  js  c++  java
  • C语言I博客作业10

    一、表格

    问题 答案
    这个作业属于那个课程 C语言程序设计II
    这个作业要求在哪里 点击此处查看本次作业要求
    我在这个课程的目标是 深入了解C语言,争取掌握更多的数据类型及结构,熟练地编译有效代码
    这个作业在那个具体方面帮助我实现目标 学习到了循环的嵌套,深入学习了循环,更加提升使用循环的能力
    参考文献 C语言程序设计、百度

    二、本周作业

    1. PTA实验作业

    1.1 题目名1

    7-8 输出三角形字符阵列 (15 分)

    本题要求编写程序,输出n行由大写字母A开始构成的三角形字符阵列。
    输入格式:
    输入在一行中给出一个正整数n(1≤n<7)。
    输出格式:
    输出n行由大写字母A开始构成的三角形字符阵列。格式见输出样例,其中每个字母后面都有一个空格。
    输入样例:
    4
    输出样例:
    A B C D
    E F G
    H I
    J

    1.1.1 数据处理

    定义整型变量(int)n,i,j,count=0。其中n是输入的数,i、j是控制循环变量,count用来计数。
    输入变量
    for(i=n;i>=1;i--){
    表示行的循环
    for(j=1;j<=i;j++){
    表示列的循环
    printf("%c ",'A'+count);
    打印输出字符串,从A开始输出,往后每次加count的值
    count++;
    每输出一次就加一
     printf("
    ")
    一行输出完后就打印换行
    

    1.1.2 实验代码截图

    1.1.3 造测试数据

    输入 输出 说明
    4 A B C D E F GH IJ 验证题目数据
    1 A 最小情况
    6 A B C D E FG H I J K L M N OP Q R S T U 最大情况

    1.1.4 PTA提交列表及说明

    答案正确:这道题在DEV上做了很多遍,行与列的问题和上次作业乘法表的问题一样,是可以解决的。对我来说难的是依次从A输出,后来就利用'A'+count、count++来解决这个问题,第一次输出A,以后就一直加即可。


    1.2 题目名2

    7-3 梅森数 (20 分)

    形如2
    ​n
    ​​−1的素数称为梅森数(Mersenne Number)。例如2
    ​2
    ​​−1=3、2
    ​3
    ​​−1=7都是梅森数。1722年,双目失明的瑞士数学大师欧拉证明了2
    ​31
    ​​−1=2147483647是一个素数,堪称当时世界上“已知最大素数”的一个记录。
    本题要求编写程序,对任一正整数n(n<20),输出所有不超过2
    ​n
    ​​−1的梅森数。
    输入格式:
    输入在一行中给出正整数n(n<20)。
    输出格式:
    按从小到大的顺序输出所有不超过2
    ​n
    ​​−1的梅森数,每行一个。如果完全没有,则输出“None”。
    输入样例:
    6
    输出样例:
    3
    7
    31

    1.2.1 数据处理

    定义整型变量(int)n,i,num,a,count=0.其中n是输入的值、i,a控制循环变量、num是存放关于n的表达式,count用于计数
    输入变量
    for(i=2;i<=n;i++){
    从2开始循环到n
    num=pow(2,i)-1;
    表示2的n次方-1
    for(a=2;a<=num/2;a++){ 
    次循环用于判断num是否是素数
    if(num%a==0)	break;
    满足条件,则跳过
    if(num%a!=0){
    满足素数的条件
    printf("%d
    ",num);
    输出素数,记得换行
    count++;
    计素数的个数
    if(count==0)
    printf("None");
    满足条件输出
    

    1.2.2 实验代码截图

    1.2.3 造测试数据

    输入 输出 说明
    6 3731 验证题目数据
    1 None 没有素数的情况
    19 37311278191131071524287 最大的情况

    1.2.4 PTA提交列表及说明

    答案正确:第一次正确是在判断素数是用了if(a>sqrt(num))printf("%d ",num)但是这个感觉理解的不是很透。

    答案正确:这次答案正确用的是if(num%a!=0)printf("%d ",num);感觉这个简单好理解。


    1.3 题目名3

    7-4 同构数 (10 分)

    一个数恰好出现在它的平方数的右端,这个数就称为同构数。找出1~1000之间的全部同构数。
    输出格式:
    在一行中输出所有满足条件的同构数,每个数输出占6列。没有其它任何附加格式和字符。
    输出样例:
    1 5 6 25 76 376 625

    1.3.1 数据处理

    定义变量i,用于控制循环
    for(i=1;i<=1000;i++){
    从1开始循环到1000
    int a=i*i;
    定义a=i*i
    if(i%10==i){
    if(i==a%10)
    printf("%6d",i);
    第一种情况i是个位数,满足条件则输出
    else
      if(i%100==i){
       if(i==a%100)
        printf("%6d",i);
    第二种情况i是两位数,满足条件则输出
    else
       if(i%1000==i){
          if(i==a%1000)
             printf("%6d",i);
    第三种情况i是三位数,满足条件则输出
    

    1.3.2 实验代码截图

    1.3.3 造测试数据

    输入 输出 说明
    1 5 6 25 76 376 625 满足题目的输出样例

    1.3.4 PTA提交列表及说明

    格式错误:在DEV上测试答案也一样,不清楚是哪的问题

    格式错误:没注意题目的要求每个数输出占6列看到之后就改正了

    答案正确:这里是三种情况分别在输出前空了5格、4格、3格。

    答案正确:想起来可以用%6d来自行空格


    2. 代码互评

    自己代码①

    同学代码①

    评论:

    • 这位同学用的方法和我第一次答案一样,用的是sqrt这个数学函数做的。
    • 这个数学函数表示开平方,这里用于判断素数,感觉不是很好理解。
    • 我感觉我现在的代码更好,更简单,更容易理解。

    自己代码②

    同学代码②

    评论:

    • 这道题我和这位同学的完全不一样,同学的很简单,可能是我把我问题复杂化了。
    • 我的是一步一步按照惯性思路去计算判断输出什么,还具体分了三种情况(这里利用题目输出数据不多)来判断输出。
    • 同学的是直接利用题目中只有输出样例还是唯一的输出样例像输出Hello World那样直接输出
    • 同学的更简单直接,我的比较形式化.这应该具体情况具体分析吧

    3. 学习总结

    3.1 学习进度条

    周/日期 这周所花的时间 代码行 学到的知识点简介 目前比较困惑的问题
    1/9-21 2天 30 初步接触编程,学习编译Hello,World!
    2/9-30 2天 20 学习了浮点型变量,及温度转换
    3/9-15 3天 76 使用分段函数了解到if-else语句以及数据类型 对于定义数值还是不太清楚
    4/10-16 3天 100 for语句 for循环进行中不清楚循环的细节
    5/10-24 3 天 155 学习到了自定义函数 自定义函数的具体定义过程,实参形参有些迷惑
    6/11-1 3天 250 学习使用if-else与for语句的嵌套,初步了解了字符型变量 对于字符型变量不是很懂,不明白其作用
    7/11-7 2天 200 这周学习了新的分支结构switch结构,这也适用于选择的情况,其作用类似于if-else。 switch后面的变量表达式和case后的常量表达式弄不清。
    8/11-15 3天 150 学习了新的循环结构while语句和do-while语句,和for语句有不一样的地方,但其作用是一样的,他们循环的条件不一样。 不能熟练运用while语句去解决实际问题
    9/11-22 3天 151 这周学习了循环的嵌套,可以多次循环。可以解决行与列这种类型的题、以及需要多次循环一个数一个数来的题型等等 感觉知识掌握的还行,但是运用的时候弄不清循环的次数和条件
    10/11-27 2天 203 这周没有学习新知识,在练习上周学的。更加熟练的运用循环嵌套了 知识上的疑惑没有了,但是在刷题还是会遇到困难

    3.2 累计代码行和博客字数

    3.3 学习内容总结

    3.4 学习体会

    1. 上周主要学习了两个知识点:① continue语句和break语句的使用和区别,continue只能用于循环结构中,其作用是跳出后面语句继续循环;break可用于循环语句以及switch语句中,其作用是终止循环或终止语句。② 循环的嵌套,可用于多次循环,解决行与列的问题、以及依次输入数等等较复杂的问题。
    2. 这周在复习上周学的内容,没有加入新知识。在做题时会感觉到一些轻松,但还是有不能自己解决的题,就比如说这次作业的第一题,我是在室友的帮助下完成的,而且完成后还是不能完全理解。这让我很苦恼。
    3. 随着学习的知识越来越复杂,题目也越来越复杂,感觉到自己能力的确是不够。有些题目不知道该怎末用学到的知识去表达、用程序的方式来表达计算的过程。感觉自己的思维太固化,不能以计算机所理解的方式去思考。通过这周和上周的两次练习发现,刷题真的很有用,这周作业速度真的提升了,反应能力也提升了,除了个别题不会其他的可以自主理解并完成。快考试了,感觉知识运用的不是很熟练,所以我还要多加练习,争取努力提高 有效代码行。加油!
  • 相关阅读:
    多线程(一)高并发和多线程的关系
    spring源码浅析——IOC
    网络爬虫(java)
    数据结构—平衡二叉树
    设计模式—抽象工厂模式
    设计模式—工厂方法模式
    scala(二) Future执行逻辑解读
    java异常处理机制
    为什么覆写equals必须要覆写hashCode?
    Scala对MongoDB的增删改查操作
  • 原文地址:https://www.cnblogs.com/wangxiana/p/11943628.html
Copyright © 2011-2022 走看看