C语言I博客作业10

问题 答案
这个作业属于那个课程 C语言程序设计IIII
这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-2/homework/10096
我在这个课程的目标是 熟练掌握各大语句,运算符,函数,尝试用简单的代码解决复杂的问题
这个作业在那个具体方面帮助我实现目标 根据实际情况,选择合适的算法、合理的循环结构,熟练的编写程序
参考文献 《C语言程序设计》

一、PTA实验作业

1.1输出三角形字符阵列

题目内容
本题要求编写程序,输出n行由大写字母A开始构成的三角形字符阵列
输入格式
输入在一行中给出一个正整数n(1≤n<7)
输出格式
输出n行由大写字母A开始构成的三角形字符阵列。格式见输出样例,其中每个字母后面都有一个空格

1.1.1 数据处理

数据表达:定义了三个整型变量n,i,j。n指阵列的行数,i,j是循环变量。定义了字符op.
数据处理:给字符op赋值64,相当于"A"-1。调用scanf()函数输入n。使用嵌套循环。如果i小于n,执行外层循环,累加i的值。(外层循环会执行n次,每执行一次需要换行。)如果j小于n-i,执行内层循环,每次op的值加1,输出字母,然后累加j的值。

伪代码

1.1.2实验代码截图

1.1.3 造测试数据

输入数据 输出数据 说明
1 A 最小行数
4 A B C D
E F G
H I
J
题目示例
6 A B C D E F
G H I J K
L M N O
P Q R
S T
U
最大行数

1.1.4 PTA提交列表及说明

  • Q1:反复检查后循环的过程并没有错,但还是显示答案错误,问题出在给字符初始赋值上。
  • A1:A的ASCLL是65,进j循环时会+1,所以用char定义字符op时赋值错误,应该赋64给op.

1.2梅森数

题目内容
形如2n−1的素数称为梅森数(Mersenne Number)。例如22−1=3、23−1=7都是梅森数。1722年,双目失明的瑞士数学大师欧拉证明了231-1=2147483647是一个素数,堪称当时世界上“已知最大素数”的一个记录。
本题要求编写程序,对任一正整数n(n<20),输出所有不超过2n−1的梅森数。
输入格式
输入在一行中给出正整数n(n<20)。
输出格式
按从小到大的顺序输出所有不超过2n−1的梅森数,每行一个。如果完全没有,则输出“None”。

1.2.1数据处理

数据表达:先定义五个整型变量n,i,m,count,number。n指输入的正整数(n<20),i,m为循环变量,count是用来累计不超过2^n−1的梅森数的数量,number是用来表示2^n−1的值。
数据处理:调用scanf()函数输入n。使用嵌套循环。如果i的值小于或等于n,执行外层循环,则计算出对应的number的值并累加i的值。外层循环使用了一个if语句,如果m大于number/2(即number为素数),则输出number;如果m小于number/2,执行内存循环,并累加m的值。内层循环中使用了一个if语句,如果number/m的值为0(即number不是素数),执行break语句跳出循环。最后运用if语句判断,如果count=0(即没有输出一个梅森数),输出"None".

伪代码

1.2.2 实验代码截图

1.2.3 造测试数据

输入数据 输出数据 说明
1 None 不存在梅森数
2 3 只有一个且最小的梅森数
6 3
7
31
题目示例
19 3
7
31
127
819
1131071
524287
输出最多的梅森数

1.2.4 PTA提交列表及说明

  • Q1:输入和输出都没有错误,问题出在判断条件上。
  • A1:判断素数,即判断数number能否被2number/2之间的数整除。我忘记了规定2number/2这个范围,加上这种条件答案就正确了。

二、代码互评

2.1.1题目截图

2.1.2代码截图(左边是我的代码,右边是同学代码)

  • 1.我给字符op赋值64,相当于"A"-1。她定义了一个字符ch,没有进行赋值,她还比我多定义了一个变量count,用于累计内层循环的执行次数。
  • 2.我找出字母字符的ASCII码值各相差1的规律,如果判断j小于n-i,执行内层循环,每次op的值加1,输出由大写字母A开始构成的三角形字符阵列。她找出字符A与与其他字母字符的ASCII码值的关系,利用变量count,累计内层循环的执行次数,输出“A"+count。

2.2.1题目截图

2.2.2代码截图(左边是我的代码,右边是同学代码)

  • 1.我使用嵌套循环,分别在内外层循环嵌套了一个if语句.number表示2n−1的值.通过判断数number能否被2~number/2之间的数整除来判断该数是否为素数,如果number为素数,输出梅森数。
  • 2.因为不超过2n−1(0<n<20)的梅森数总共只有7个,他查出了符合条件的n值及其对应的2n−1的值,在for语句中嵌套了一个switch语句,直接输出。

三、学习总结

3.1 学习进度条

这周所花的时间 代码行 学到的知识点简介 目前比较迷惑的问题
第一周 6小时 29行 对C语言、markdown语法,编程有了初步的认识 对编程一窍不通,只会照着书上打
第二周 8小时 19行 学会如何提问,安装MinGW-w64并用它编译C程序 markdown语法掌握不熟练
第三周 10小时 96行 关系运算、if-else语句、格式化输入语句scanf(),以及常用的数学库函数 对编程中各大语句的运用不熟悉
第四周 13小时 93行 for循环语句实现指定次数的循环程序设计 运用for语句时经常犯很多错误
第五周 10小时 161行 用C语言编写程序 对编写函数和调用函数还有很多不熟悉
第六周 12小时 168行 多分支结构、字符型数据类型和逻辑运算符 对各运算符的优先级和结合性,多分支结构不熟悉
第七周 10小时 185行 熟悉多分支结构switch语句的使用 面对比较复杂的题时难以解决
第八周 8小时 159行 使用while和do-while结构解决问题 不知道如何写伪代码
第九周 8小时 158行 熟悉break、continue的使用,熟悉使用循环的嵌套解决问题 对复杂的嵌套循环还是有些难理解
第十周 11小时 140行 根据实际情况,选择合适的算法、合理的循环结构,熟练的编写程序 逻辑思维能力不够,做题太吃力

3.2 累积代码行和博客字数

3.3 学习内容总结和感悟

3.3.1 学习内容总结

3.3.2 学习体会

  • 运用嵌套循环一定要注意{}扩住的范围,因为多个循环,大括号{}也很多,不理清楚就容易乱,有时候把语句放错位置等,牵一发动全身,整个循环都会乱套。
  • 嵌套循环对逻辑能力要求比较高,对我来说难度较大,我做起题目来比较吃力。在做代码互评的时候能够看到其他同学的思路,代码风格都有些大大小小的差异,对我来说帮助很大。
  • 虽然经过了多次实验课,但是当调试程序时我有时还是会不知道如何下手。实际上对程序进行调试可能比自己捧着小脑瓜子一直想要有用的多,所以调试程序的能力有待锻炼和提升。
posted @ 2019-11-29 21:17  沈星楼  阅读(370)  评论(3编辑  收藏  举报