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

 
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号