欢迎来到solokillの博客
solokill
佛曰:
一花一世界,一叶一菩提

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 实验代码截图


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(flag1 )
{
输出i;计数器++;
}
}
if(g
0)
输出None;

1.2.2 实验代码截图


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、代码互评

同学代码

我的代码

  • 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 累积代码行和博客字数

3.3 学习内容总结和感悟

3.3.1 学习内容总结

思维导图

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%10i或Q%100i或Q%1000==i)
输出i;//注意此处输出要占六位所以应该写"%6d"

实验代码截图

造测试数据

代码运行结果

PTA提交列表及说明

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