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好像越来越容易了,这次的四个题目是我唯一一次没有借助百度就完成的,或许也有可能是我对题目的分析能力越来越强了,我已经没有了最初的每次看到题目就一脸懵逼的感觉。虽然我在不断的进步了,但是别人进步的更快,有的大佬已经将指针给自学完了,而我每次想着将数组自学一下却总是没有时间,临近期末考试了其他的科目要复习现在根本没有时间去搞其他事情。希望这周星期天能够腾出时间去了解一下数组吧。

posted @ 2019-11-27 19:42  sun-梦  阅读(531)  评论(10编辑  收藏  举报