C语言I博客作业10

这个作业属于哪个课程 C语言程序设计I
这个作业要求在哪里 作业链接
我在这个课程的目标是 熟练掌握C语言,能独立完成简单项目,毕业前想做出一个简单的游戏
这个作业在那个具体方面帮助我实现目标 熟练掌握for语句的嵌套使用
参考文献 作业评价标准

1、PTA实验作业

1.1编程打印空心字符菱形

问题描述:本题目要求读入菱形起始字母和菱形的高度,然后输出空心字符菱形。所谓“空心菱形”是指:每行由两端为字母、中间为空格的字符串构成,每行的字符串中心对齐;上半部分相邻两行字符串长度差2,且字母从给定的起始字母逐一递增;下半部分与上半部分对称。

1.1.1 数据处理

  • 数据表达:定义了4个整型变量和一个字符型变量,h表示输入的菱形的高,i,j,k都是for语句中用来计算的变量,无特殊含义;op表示输入的字母。
  • 数据处理:

    伪代码如下
    定义整型变量h,i,j,k;
    定义字符型变量op;
    输入h,op;
    for(i=1;i<=(h/2)+1;i++)//(h/2)+1表示菱形上半部分行数,要一行一行输出,且知道具体有多少行,所以用for循环
    {
    for(j=1;j<=(h/2)+1-i;j++)//确定每一行开头要输出几个空格
    输出空格;
    printf("%c",op); //输出每行第一个字母
    for(k=1;k<2(i-1);k++)//输出一个字母后,计算要打多少个空格
    输出空格;
    if(i!=1)//如果不是开头字母,就在结尾补一个相同字母,构成菱形
    输出字母;
    换行;
    op++;//换下一个字母继续循环
    }
    op--;//抵消上个循环的op++
    for(i=1;i<=(h/2);i++)//开始下半部分的计算
    {
    op--;//把op换成上一个字母
    for(j=1;j<=i;j++)//接下来的流程与上半部分差不多,只是循环终止条件稍有改动
    输出空格;
    printf("%c",op);
    for(k=1;k<=h-2
    (i+1);k++)
    输出空格;
    if(i!=h/2)
    输出字母;
    换行;
    }
    }

    1.1.2 实验代码截图

    C语言I博客作业10_第1张图片
    C语言I博客作业10_第2张图片

    1.1.3 造测试数据

    输入数据 输出数据 说明
    B 5 运行图 样例,正确
    A 7 运行图 随机数,正确

    1.1.4 PTA提交列表及说明

  • 1、答案错误:开始没思路,走一步提交一次,都是逻辑错误或者代码不完整。
  • 2、编译错误:编译错误出现了十来次,各种英文大小写和拼音英文字符错误。
  • 3、部分正确:菱形的下半部分计算所用的for语句的表达式有问题,不适用于所有情况,改进后正确。

    1.2梅森数

    问题描述:本题要求编写程序,对任一正整数n(n<20),输出所有不超过2的n次方−1的梅森数。

    1.2.1 数据处理

  • 数据表达:定义了7个整型变量,n表示输入的正整数,i表示能表示为2的n次方-1的数,j和k是for语句中用来计算的中间变量,无特殊含义,Q用来判断i是否为素数,flag作为是素数的标志,g为计数器。
  • 数据处理:

    伪代码如下
    定义整型变量n,i,j,k,Q,flag,g;
    输入数据n;
    for(k=1;k<=n;k++)
    {
    i=pow(2,k)-1;//找出范围内所有能表示为2的n次方-1的数
    for(j=2;j<=i-1;j++)
    {
    Q=i%j;//判断i是否为素数
    flag = 0;
    break;
    }
    else
    flag = 1;//素数标记
    }
    if(flag==1 )
    {
    输出i;计数器++;
    }
    }
    if(g==0)
    输出None;

    1.2.2 实验代码截图

    C语言I博客作业10_第3张图片
    C语言I博客作业10_第4张图片

    1.2.3 造测试数据

    输入数据 输出数据 说明
    6 3 7 31 样例,正确
    8 3 7 31 127 随机数,正确

    1.2.4 PTA提交列表及说明

  • 1、部分正确:这个题纠结了蛮长时间,一直提示测试点0运行超时,在VS2019上调试了半个小时也没发现哪里不对,然后觉得可能是算法有问题,开始我是用for从一开始往下算,一直算到2的n次方-1,猜可能是数据过大而导致的运行超时,仔细审查题目发现所求的数满足“能表示为2的n次方-1形式”这个要求,改进后减少了很大的计算量,再次提交就无运行超时现象了。
  • 2、编译错误:出现编译错误纯属手残,printf里忘了加双引号。。。。。。

    2、代码互评

    同学代码
    C语言I博客作业10_第5张图片

我的代码
C语言I博客作业10_第6张图片

  • 1、该同学没有采用定义字符型变量的方法进行计算,而是用代数计算的方法算出字母的ASCII码值,方法很新颖,答案也正确,有自己的风格。
  • 2、我的代码较为平凡,就是中规中矩的思维,定义字符型变量来计算,把逻辑过程程序化,过程较清晰,比较好理解,虽然不如该同学的新颖,但答案正确且代码规范。

3、学习总结

3.1 学习进度条

日期 这周所花的时间 代码行 学到的知识简介 目前比较迷惑的问题
10/7--10/13 9+个小时 100+ 编写if-else语句,算术运算与赋值运算规则等 while语句的使用以及适用范围
10/14--10/20 8+个小时 190+ for的使用,if-else与for的组合使用 while与for的区别
10/21--10/27 6+个小时 340+ 定义函数与调用 对函数的定义与调用不熟悉
10/28--11/3 6+个小时 260+ if-else的镶嵌结构 用太多if-else会比较混乱
11/4--11/10 6+个小时 170+ switch语句的基本运用 switch与if-else的区别
11/11--11/17 6+个小时 120+ while语句的使用 什么是指针
11/18--11/24 6+个小时 90+ continue的使用以及其与break的区别 什么是指针,长度可变数组与长度固定数组的区别和适用情况
11/25--12/01 7+个小时 160+ for语句的嵌套 函数的分类

3.2 累积代码行和博客字数

C语言I博客作业10_第7张图片

3.3 学习内容总结和感悟

3.3.1 学习内容总结

C语言I博客作业10_第8张图片

思维导图

3.3.2 学习体会

  • 答:1、本周学习的内容不多,因为for语句已经学过了,for的嵌套只能当作进一步提高for语句的掌握程度,以及锻炼逻辑思维。
  • 2、这周的PTA作业题目难度中等,个人感觉挑战题比基本题简单,第一题更应该作为挑战题,虽然不容易,花了很多时间,但做出来了还是很有成就感,题目永远做不完,题型却可以总结,老师上课也说了要善于总结相同题型,我十分认同这点,未来的路还很长,还需努力前进。

4、PTA挑战题————同构数

问题描述:一个数恰好出现在它的平方数的右端,这个数就称为同构数。找出1~1000之间的全部同构数。

数据处理

  • 数据表达:定义了i和Q两个整型变量,分别表示1-1000中任意数及其平方。
  • 数据处理:

    伪代码如下:
    定义Q,i;
    for(i=1;i<=1000;i++)//依次计算1001个数
    Q=i*i;
    if(Q%10==i或Q%100==i或Q%1000==i)
    输出i;//注意此处输出要占六位所以应该写"%6d"

    实验代码截图

    C语言I博客作业10_第9张图片

    造测试数据

    代码运行结果

    PTA提交列表及说明

  • 1、输出时未注意到每个答案要占六列,所以出现了格式错误。
  • 感想:相比其他题目,其实这次的挑战题真的算很简单了,但我却没能一次答对,还是出现了错误,这让我明白了一个道理,每个题目都有他的价值,不能因为它简单而不做,这只是你逃避的借口,是不负责的表现,作为学生应该积极进取,认真对待每次作业。

你可能感兴趣的:(C语言I博客作业10)