C语言I博客作业10
这个作业属于那个课程 | C语言程序设计 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2019-3/homework/10097 |
我在这个课程的目标是 | 熟悉并掌握好C语言及其它的专业性知识 |
这个作业在那个具体方面帮助我实现目标 | 完成PTA作业 |
参考文献 | 集美大学林丽老师,《C Primer Plus》,伪代码规范 |
一,PTA实验作业
**1,输出三角形字符阵列 **
本题要求编写程序,输出n行由大写字母A开始构成的三角形字符阵列。
伪代码
Read n,i,j //int整型定义变量
m←0 //赋值m为0
c←A //赋值c为A
for j←1; j>0; j-- //for语句循环,赋值i为1,循环条件j>0,循环i--
do for i←1;i<=j;i++ //for语句循环,赋值i←1,循环条件i<=j,循环条件i++
do print c+m //输出字符,不断由A开始递增的字母
m=m+1 //循环m++
print \n //转行
1,数据处理
变量 | 变量来源 | 变量类型 |
---|---|---|
n,j,i,m | 自定义 | int整型 |
c | 自定义 | char字符型 |
2,造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
1 | 随取 | |
4 | 取自题目 |
3,PTA提交列表及说明
- 答案正确:定义c为A,j先复制为n行数,在for语局下循环j--。先赋值每行存在的字母个数i为1,i在小于等于j的条件下,在for语句中循环i++,然后输出其中的字母c+m,+m表示在c代表的字母上不断的递增,m++代表不断的在上次m的基础上增加。结束第二个for语句(求每行应该输出的各个字母)后进行转行,继续下一行的输出。
**2 , 梅森数 **
形如2^n−1的素数称为梅森数(Mersenne Number)。例如22−1=3、23−1=7都是梅森数。1722年,双目失明的瑞士数学大师欧拉证明了231−1=2147483647是一个素数,堪称当时世界上“已知最大素数”的一个记录。
本题要求编写程序,对任一正整数n(n<20),输出所有不超过2n−1的梅森数。
伪代码
read n,num,i,j,b //定义n,num,i,j,b为int整型
for i←2;i<=n;j++ //赋值i为2,在i<=n的条件下,循环j++
do num←pow(2,i)-1
for j←2;j<=num-1;j++ //赋值j为2,在j<=num-1,j++
do if num%j←0 //在if语句内进入下一句
then b←1,break //赋值b为1,break跳出循环再进行语句
if b!←1 //如果b不等于1
print num //输出num转行
b←0 //结束if语句进入b=0
if n←1 //如果n=1
then print None //输出None
1,数据处理
变量 | 变量来源 | 变量类型 |
---|---|---|
n,num,i,j,b | 自定义 | int整型 |
2,造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
7 | 随取 | |
9 | 随取 | |
12 | 随取 |
3,PTA提交列表及说明
- 部分正确:b=0要写在if语句结束后
- 答案正确:输入n,当n=1时 2^1-1=0是绝对不属于梅素数的,所以就可以直接输出None(这个语句我写在了代码的结尾处)。数字从i=2开始做在i小于等于n条件下的i++循环(i代表从2开始一直一个个的往上递增的数,求其中的哪个数可以满足num=pow(2,i)-1梅素数的条件之一,num代表所求梅素数的大概所在范围)。又在第二个for语句下,从j=2(j代表除开1和num本身时所指的逐渐递增的数字,即为了求num之下的可能造成num为素数的数字)开始,在j<num-1条件下循环j++。如果num%j==0,意味着num存在有除开1和其本身的数字的因子,进入语句,b=1,break跳出循环进入下一次j的运算,求此时所得的j是否能满足if语句的出真正的梅素数。如果b不等于1,则输出num,转行。结束了if语句进入b=0语句,进入下一次i的循环。
二,代码互评
我的
同学的
- 在求取素数的范围之内,同学使用了在j<=sqrt(num)条件下,从j=2开始进行j++循环,如果num%j==0,说明num拥有其它的因子,跳出循环。如果J>sqrt(num),输出num。
- 我的思路见上文梅素数处
- 牌面很整洁,两者都是不错的思路。
我的
同学
- 同学使用for语句i代表行数从0开始进行i++循环,直到i<n。第二个for语句内,j代表字母个数,从0开始循环至n-i,n-i指代每行的字母个数。
- 我的思路见上文求输出三角形字符阵列
- 我们的思路是大致相同的,但是运算方法是从相反的两个角度开始。
三,学习总结
1,学习进度条
周/日期 | 这周所花的学习时间 | 代码行 | 学到的知识点 | 目前比较迷惑的问题 |
---|---|---|---|---|
第一周 | 8小时 | 28 | visual studio 2019安装 | 没有 |
第二周 | 8小时 | 18 | 温度转换,计算摄氏温度 | 没有 |
第三周 | 三天 | 110 | if-else语句 格式化输入函数scanf() | 使用scanf()的返回值 格式空格 |
第四周 | 三天 | 147 | 循环结构,流程图,数学函数 | 为什么在main()里加入void |
第五周 | 两天 | 75 | 对函数的定义和调用有初步的认识,能模仿编程 | 为什么同样的答案在Dev-C++里是对的而在PTA里的就是错的 |
第六周 | 8小时 | 180 | 熟悉多分支结构、字符型数据类型和逻辑运算符 | 同样的答案在Dev-C++里是对的而在PTA里的就是错的,Visual Studio不会用 |
第七周 | 8小时 | 104 | 熟悉多分支结构switch语句的使用 | 不能流畅的完成PTA |
第八周 | 8小时 | 90 | 熟悉使用while和do-while结构解决问题 | while(1)里面数字代表什么 |
第九周 | 8小时 | 112 | 熟悉break、continue的使用,熟悉使用循环的嵌套解决问题 | 做题的思路 |
第十周 | 两天 | 119 | 循环结构的程序设计,典型算法 | 无 |
2,累计代码行数和博客字数
三,学习内容总结和体会
1,学习内容总结
2,学习体会
每次写作业我都要花好多的时间,有的时候连一个下午可能都没得办法写完。现在每一周都会和同学固定于周四下午一起去奶茶店学习,这个习惯要好好地保持下去。还有现在自己完成一个完整的代码不能很快,要提高自己的速度,要做到高效率。