C语言I博客作业10
问题 | 答案 |
---|---|
这个作业属于那个课程 | C语言程序设计II |
这个作业要求在哪里 | C语言I博客作业10 |
我在这个课程的目标是 | 熟练掌握C语言 |
这个作业在哪个具体方面帮助我实现目标 | 已经可以熟练掌握字符型的输入和输出 |
参考文献 | Markdown基本语法 |
一.PTA实验作业
1. 編程打印空心字符菱形
题目内容描述:本题目要求读入菱形起始字母和菱形的高度,然后输出空心字符菱形。所谓“空心菱形”是指:每行由两端为字母、中间为空格的字符串构成,每行的字符串中心对齐;上半部分相邻两行字符串长度差2,且字母从给定的起始字母逐一递增;下半部分与上半部分对称。
输入格式:
输入在一行中给出起始字母(范围为英文大写字母A-G)和菱形的高度(为不超过10的奇数)。
输出格式:
输出空心字符菱形。
输入样例:
B 5
输出样例:
B
C C
D D
C C
B
(1)数据处理
数据表达:
用了整形变量h,k,k1,v,v1=1,i,和字符型变量op
op和h是用户传入的字符和高度
k,k1用来控制每行首字母左边的空格数
v,v1用来控制两个字母间的空格数
i用来控制循环次数
数据处理:伪代码
定义整型变量h,k,k1,v,v1=1,i; h是用户传入的高度,k,k1用来控制每行首字母左边的空格数,v,v1用来控制两个字母间的空格数,i用来控制循环次数
定义字符型变量op ,op是用户传入的字符
输入字符op和高度h
对k1初始化为h/2
for i=0 to h/2+1
将k1赋值给k
while(k>0)
输出一个空格
k累减
end while
k1累减
输出字符op
if i>0 then
将v1赋值给v
while(v>0)
输出一个空格
v累减
end while
对v1加2并赋值给v1
输出字符op
op累加
换行
end for
对k1初始化为1
对v1减去4并赋值给v1
op累减;
for i=0 to h/2
op累减
将k1赋值给k
while(k>0)
输出一个空格
k累减
end while
k1累加
输出字符op
if i<h/2-1 then
将v1赋值给v
while(v>0)
输出一个空格
v累减
end while
将v1减2赋值给v1
输出字符op
换行
end for
(2)实验代码截图
(3)造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
A7 | 随机试验 | |
G9 | 临界点 | |
F9 | 随机试验 | |
A1 | A | 临界点 |
(4)PTA提交列表及说明
提交列表说明
1.一次性正确:开始在Dev-CA++上总是输出不了正确答案,后来用调试发现k和v的值没有更新,后来又定义了k1,v1两个变量来接引,然后在第一个for中的两个while前加k=k1,v=v1来更新每一行的空格数。我将这个题目分为两截做的,先用一个for输出上半截,然后在用一个for输出下半截,然后定义了变量k,k1用来控制每行首字母左边的空格数,定义了v,v1用来控制两个字母间的空格数。
2. 梅森数
题目内容描述:形如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)数据处理
数据表达:
用了整形变量n,m,i,j,x=0
n是用户输入的数
i用来保存用户要求输出梅森数
j和m用来控制循环
数据处理:伪代码
定义整形变量n,m,i,j,x=0 ,n用来保存用户输入的数 ,i用来保存用户要求输出梅森数,j和m用来控制循环
输入n
if n<2 then
输出None
for m=2 to n
将2的m次方减1赋值给i
for j=2 to i-1
if i%j==0 then
x累加
end for
if x==0 then
输出i并换行
将x初始化为零
end for
(2)实验代码截图
(3)造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
19 | 输入最大n | |
1 | None | 输入最小n |
10 | 3 7 31 127 | 随机试验 |
(4)PTA提交列表及说明
提交列表说明
1.一次性正确:开始看错题目了,以为只要满足素数这个要求,后来运行发现i范围内每一个素数都输出来了与题目要求输出的不同,才发现还有一个要求是满足2的n次方-1这个条件。我将这个题目分为两部分,当n<2时输出None,当n>2时进入for循环内进行处理来寻找梅森数。
3.同构数
题目内容描述:一个数恰好出现在它的平方数的右端,这个数就称为同构数。找出1~1000之间的全部同构数。
输出格式:
在一行中输出所有满足条件的同构数,每个数输出占6列。没有其它任何附加格式和字符。
输出样例:
1 5 6 25 76 376 625
(1)数据处理
数据表达:
用了整形变量i,y,digit,sum,n;
i用来控制循环次数,即用户给出的找同构数的范围
y和n,digit用来判断数i的位数
sum用来保存i的平方
数据处理:伪代码
定义变量 i,y,digit,sum,n;i用来控制循环次数,即用户给出的找同构数的范围;y和n,digit用来判断数i的位数 ;sum用来保存i的平方
for i=1 to 1000
对digit初始化为0
将i的平方赋值给sum
将i赋值给n
do{
将整形变量n/10赋值给y
将整形变量n/10赋值给n
digit累加
}while(!(y==0));
switch(digit)
case 1~4:分别判断位数不同的数是否符合同构数的条件,如果符合则输出该数,然后跳出循环。
end for
(2)实验代码截图
(3)造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
无 | 1 5 6 25 76 376 625 | 输出1~1000内的同构数 |
(4)PTA提交列表及说明
提交列表说明
1.一次性正确:用了do-while语句用来判断i的位数,然后用switch语句来区分位数不同的数所要取平方后几位数,然后判断是否符合同构数,如果符合就输出该数
二.代码互评
同学(柏朝晖)代码 | 同学(杨宇)代码 | 自己代码 |
---|---|---|
比较
(1)第一份代码利用了绝对值abs()来做这个题目,因此只用了一个并列的for来做这个题目,而我用了两个for并列来做这个题目。这个代码输入字符和高度后,首先进入第一层for循环内i=-n/2 to n/2,而我将输出分为了两截分别是for i=0 to h/2+1和for i=0 to h/2。
(2)第一份代码只定义了3个变量,第二份定义了5个变量,而我定义了6个变量,第一份开辟的空间更少
(3)总的来说第一份的代码最好,第一份开辟了更少的空间,占用了更少的内存
三.学习总结
1.学习进度条
周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
第四周 | 7小时 | 100行 | 在屏幕上显示Hello World! | 暂无 |
第五周 | 8小时 | 100行 | 求华氏温度对应的摄氏温度 | 暂无 |
第六周 | 30小时 | 200行 | 如何用 MinGW-w64 来编译C程序 | 暂无 |
第七周 | 24小时 | 300行 | 运用if语句完成各种数学程序 | 对于&&的用法不了解 |
第八周 | 24小时 | 300行 | 学会了for循环语句 | 暂无 |
第九周 | 24小时 | 300行 | 学会了如何去自定义一个函数 | 暂无 |
第十周 | 30小时 | 400行 | 学会了if-else语句的嵌入 | 对“(Y%100)这个表达式意味着当Y不能整除4时(Y%100的余数不等于0时)表达式为真”这句话不是很懂 |
第十一周 | 24小时 | 450行 | 学会了如何去使用switch语句来做编程题 | 暂无 |
第十二周 | 24小时 | 450行 | 学会了如何去使用while循环来做编程题 | 对字符型的输入不太了解 |
第十三周 | 26小时 | 372行 | 学会了如何去使用for嵌套来做编程题,学会了continue的使用方法 | 对字符型的输入和输出不太了解,对数组完全不了解 |
第十四周 | 28小时 | 634行 | 学会了字符型的输入和输出 | 对数组完全不了解,对指针完全不了解 |
2. 累积代码行和博客字数
时间 | 博客字数 | 代码行数 |
---|---|---|
第四周 | 510 | 100 |
第五周 | 510 | 200 |
第六周 | 1149 | 400 |
第七周 | 2027 | 700 |
第八周 | 3791 | 1000 |
第九周 | 5294 | 1300 |
第十周 | 6900 | 1700 |
第十一周 | 8614 | 2150 |
第十二周 | 10495 | 2600 |
第十三周 | 13019 | 2972 |
第十四周 | 15893 | 3606 |
3 .学习内容总结和感悟
(1)学习内容总结
(2) 学习体会
感觉PTA好像越来越容易了,这次的四个题目是我唯一一次没有借助百度就完成的,或许也有可能是我对题目的分析能力越来越强了,我已经没有了最初的每次看到题目就一脸懵逼的感觉。虽然我在不断的进步了,但是别人进步的更快,有的大佬已经将指针给自学完了,而我每次想着将数组自学一下却总是没有时间,临近期末考试了其他的科目要复习现在根本没有时间去搞其他事情。希望这周星期天能够腾出时间去了解一下数组吧。