• 第四次作业


    1.本章学习总结

    1.1 思维导图

    1.2 本章学习体会及代码量学习体会

    1.2.1 学习体会

         1.本章学习了数组,学习了如何定义数组,数组的输入与输出,一维数组和二维数组的运用等。
         2.运用数组可以使一些数字或者字符在存放时可以有序号,以便于解决一些复杂问题。
         3.但是运用数组要注意数组下标不能越界,定义数组时数组长度不能用变量表示以及字符型数用%s输出时要注意该字符型数组中需要含有‘’。
    
    

    1.2.2 代码量累计


    2.PTA总分

    2.1 截图PTA三次题目集:一维数组、二维数组和字符数组共3次题目集的排名得分



    2.2 我的总分:455

    3.PTA实验作业

    3.1 PTA题目1

    除法运算 
    给定两个整数a,b,计算a/b
    要求:
    若能除尽,则直接输出,若为循环小数,将循环节用括号括起来
    
    如输入1 3,则输出0.(3)
    
    如输入12 5,则输出2.4
    

    3.1.1 算法分析

    定义两个变量供输入的变量a,b
    输入a,b
    定义一个数组c[100]用于存放小数部分100位
    WholeNumber=a/b  //求出a/b的整数部分
    Remainder=a%b //求出a/b的余数
    for i=1 to i=99
    if i=1&&Remainder=0 then 跳出循环 then 输出 //说明a/b是整数
    if i!=1&&Remainder=0 then 跳出循环 then 输出 //说明a/b是有限小数
    c[i]=(Remainder*10)/b //将小数的每一位依次存放到c[i]中
    end for
    if i==100 //说明小数部分存取了100位
    for y=0 to y=20 //检测小数从第几位开始循环,这里先定个20,不够可以再加
       for j=1 to j=50 //这里检测循环的跨度,即几个数字一个循环,这里先定个50,不够再加 
          for o=y to o<100-j //从第y+1位开始判断,因为前面的y位已经不在循环节里面
              if c[o]=c[o+j]  count++
     //表示第o+1位小数和第o+j+1位小数相等 并用count累计满足条件的次数,若count最后和循环次数相等,则说明j个数一个循环
    最后输出无限循环小数
    printf (WholeNumber) //先输出整数部分
    printf(.) 
    for p=0 to p=y-1 //因为小数点后面的y位不再循环节内,先输出
       printf(c[p]) 
    end for
    printf("(") //这里开始按格式要求输出循环节
    for q=0 to q=j-1 //输出循环节中的j个数字
        printf(c[y+q]) 
    end for
    printf(")")
    然后就非常的perfect!!
    

    3.1.2 代码截图


    3.1.3 PTA提交列表及说明

    忘记考虑无限循环小数从第几位开始循环
    

    3.2 PTA题目2

    螺旋方阵
    所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。
    输入格式:
    输入在一行中给出一个正整数N(<10)。
    输出格式:
    输出N×N的螺旋方阵。每行N个数字,每个数字占3位。
    

    3.2.1 算法分析

    定义供题目输入的变量n,循环层数Pile,输入的递增的数字Num
    确定循环的层数(n奇数就为(n+1)/2层(后面再输入最中间一层的单独数字),偶数就为n/2层)
    for i=0 to i=Pile-1 \设置循环层数
    for j=0 to j=n-1 and j++//输入每层循环第一行的n-1个数字(从左到右)
      do a[i][j]=Num and Num++
      end for
    for j=0 to j=n-1 and j++//输入每层循环最后一列的n-1个数字(从上到下)
      do a[j][n-1]=Num and Num++
      end for
    for j=n-i-1 to i+1 and j-- //输入每层循最后一行的n-1个数字(从右到左)
      do a[n-i-1][j]=Num and Num++
      end for
    for j=n-i-1  to  i+1 and j-- //输入每层循第一列的n-1个数字(从下到上)
      do a[j][i]=Num and Num++
      end for
    end for
    if n%2!=0 then a[Plie-1][Plie-1]=Num //若n是奇数,最后一层循(也是最中间一层)环必定只有1个数字
    输出数组a[n][n]
    完美结束
    

    3.2.2 代码截图


    3.1.3 PTA提交列表及说明

    1.忽略了n为奇数时,最中间的数字只有一个,忘记将其存进数组
    2.就是对输入的顺序不时很明确
    

    3.3 PTA题目3

    jmu-c-大数加法
    输入2个大数,每个数的最高位数可达1000位,求2数的和。
    

    3.2.1 算法分析

    定义两个字符型数组a,b 再定义一个整型数组c
    利用循环输入a,b并计算出输入后a,b数组的元素个数i,j
    计算a,b元素差t
    if i>=j do
    for p=i-1 to p>=0 and p-- //将b数组的元素向后移动直到个位和a数组对齐(这里要注意从最后一位开始处理)
      do b[p+t]=b[p]
      end for
    for q=0 to q=t-1  //将b数组前面的数组都赋予0
      do b[q]=0
      end for
    for o=0 to o=i-1 //计算每位之和,并且结果存入c数组中
      c[o]=(a[o]-'0')+(b[o]-'0')
      end for
    for y=i-1 to y=0 //实现满十进一
      do if c[y]>=10
           then c[y]=c[y]-10 and c[y-1]++
    end for
    最后输出数组c判断c[0]是否为0,是的话不输出,不是的话输出
    

    3.3.2 代码截图



    3.3.3 PTA提交列表及说明

      不小心让数组下标越界,经过调试后改正
    

    4.代码互评

    4.1 代码截图

    我的代码



    同学代码

    4.2 二者的不同

    1.首先我的代码就比较长,而这位同学代码更显得简洁
    2.对最高位进位的处理方式不同
    
  • 相关阅读:
    C++内存检测函数_CrtSetBreakAlloc()
    Detours 的配置
    浅析杀毒软件开发原理
    Sqlite3初学
    java拦截器、过滤器的区别
    sudo 设置无需密码
    Visual Studio 2012/2010/2008 远程调试
    jquery 随笔
    网页中显示xml,直接显示xml格式的文件
    centos7.2_x64安装mysql.tar.gz
  • 原文地址:https://www.cnblogs.com/syt666/p/10017994.html
Copyright © 2020-2023  润新知