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