一、表格
问题 | 答案 |
---|---|
这个作业属于那个课程 | C语言程序设计II |
这个作业要求在哪里 | 点击此处查看本次作业要求 |
我在这个课程的目标是 | 深入了解C语言,争取掌握更多的数据类型及结构,熟练地编译有效代码 |
这个作业在那个具体方面帮助我实现目标 | 学习到了循环的嵌套,深入学习了循环,更加提升使用循环的能力 |
参考文献 | C语言程序设计、百度 |
二、本周作业 | |
============= | |
1. PTA实验作业 |
1.1 题目名1
7-8 输出三角形字符阵列 (15 分)
本题要求编写程序,输出n行由大写字母A开始构成的三角形字符阵列。
输入格式:
输入在一行中给出一个正整数n(1≤n<7)。
输出格式:
输出n行由大写字母A开始构成的三角形字符阵列。格式见输出样例,其中每个字母后面都有一个空格。
输入样例:
4
输出样例:
A B C D
E F G
H I
J
1.1.1 数据处理
定义整型变量(int)n,i,j,count=0。其中n是输入的数,i、j是控制循环变量,count用来计数。
输入变量
for(i=n;i>=1;i--){
表示行的循环
for(j=1;j<=i;j++){
表示列的循环
printf("%c ",'A'+count);
打印输出字符串,从A开始输出,往后每次加count的值
count++;
每输出一次就加一
printf("\n")
一行输出完后就打印换行
1.1.2 实验代码截图
1.1.3 造测试数据
输入 | 输出 | 说明 |
---|---|---|
4 | A B C D\ E F G\H I\J | 验证题目数据 |
1 | A | 最小情况 |
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提交列表及说明
答案正确:这道题在DEV上做了很多遍,行与列的问题和上次作业乘法表的问题一样,是可以解决的。对我来说难的是依次从A输出,后来就利用'A'+count、count++来解决这个问题,第一次输出A,以后就一直加即可。
1.2 题目名2
7-3 梅森数 (20 分)
形如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.2.1 数据处理
定义整型变量(int)n,i,num,a,count=0.其中n是输入的值、i,a控制循环变量、num是存放关于n的表达式,count用于计数
输入变量
for(i=2;i<=n;i++){
从2开始循环到n
num=pow(2,i)-1;
表示2的n次方-1
for(a=2;a<=num/2;a++){
次循环用于判断num是否是素数
if(num%a==0) break;
满足条件,则跳过
if(num%a!=0){
满足素数的条件
printf("%d\n",num);
输出素数,记得换行
count++;
计素数的个数
if(count==0)
printf("None");
满足条件输出
1.2.2 实验代码截图
1.2.3 造测试数据
输入 | 输出 | 说明 |
---|---|---|
6 | 3\7\31 | 验证题目数据 |
1 | None | 没有素数的情况 |
19 | 3\7\31\127\8191\131071\524287 | 最大的情况 |
1.2.4 PTA提交列表及说明
答案正确:第一次正确是在判断素数是用了if(a>sqrt(num))printf("%d\n",num),但是这个感觉理解的不是很透。
答案正确:这次答案正确用的是if(num%a!=0)printf("%d\n",num);感觉这个简单好理解。
1.3 题目名3
7-4 同构数 (10 分)
一个数恰好出现在它的平方数的右端,这个数就称为同构数。找出1~1000之间的全部同构数。
输出格式:
在一行中输出所有满足条件的同构数,每个数输出占6列。没有其它任何附加格式和字符。
输出样例:
1 5 6 25 76 376 625
1.3.1 数据处理
定义变量i,用于控制循环
for(i=1;i<=1000;i++){
从1开始循环到1000
int a=i*i;
定义a=i*i
if(i%10==i){
if(i==a%10)
printf("%6d",i);
第一种情况i是个位数,满足条件则输出
else
if(i%100==i){
if(i==a%100)
printf("%6d",i);
第二种情况i是两位数,满足条件则输出
else
if(i%1000==i){
if(i==a%1000)
printf("%6d",i);
第三种情况i是三位数,满足条件则输出
1.3.2 实验代码截图
1.3.3 造测试数据
输入 | 输出 | 说明 |
---|---|---|
无 | 1 5 6 25 76 376 625 | 满足题目的输出样例 |
1.3.4 PTA提交列表及说明
格式错误:在DEV上测试答案也一样,不清楚是哪的问题
格式错误:没注意题目的要求每个数输出占6列,看到之后就改正了
答案正确:这里是三种情况分别在输出前空了5格、4格、3格。
答案正确:想起来可以用%6d来自行空格
2. 代码互评
自己代码①
同学代码①
评论:
- 这位同学用的方法和我第一次答案一样,用的是sqrt这个数学函数做的。
- 这个数学函数表示开平方,这里用于判断素数,感觉不是很好理解。
- 我感觉我现在的代码更好,更简单,更容易理解。
自己代码②
同学代码②
评论:
- 这道题我和这位同学的完全不一样,同学的很简单,可能是我把我问题复杂化了。
- 我的是一步一步按照惯性思路去计算判断输出什么,还具体分了三种情况(这里利用题目输出数据不多)来判断输出。
- 同学的是直接利用题目中只有输出样例还是唯一的输出样例,像输出Hello World那样直接输出
- 同学的更简单直接,我的比较形式化.这应该具体情况具体分析吧
3. 学习总结
3.1 学习进度条
周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较困惑的问题 |
---|---|---|---|---|
1/9-21 | 2天 | 30 | 初步接触编程,学习编译Hello,World! | 无 |
2/9-30 | 2天 | 20 | 学习了浮点型变量,及温度转换 | 无 |
3/9-15 | 3天 | 76 | 使用分段函数了解到if-else语句以及数据类型 | 对于定义数值还是不太清楚 |
4/10-16 | 3天 | 100 | for语句 | for循环进行中不清楚循环的细节 |
5/10-24 | 3 天 | 155 | 学习到了自定义函数 | 自定义函数的具体定义过程,实参形参有些迷惑 |
6/11-1 | 3天 | 250 | 学习使用if-else与for语句的嵌套,初步了解了字符型变量 | 对于字符型变量不是很懂,不明白其作用 |
7/11-7 | 2天 | 200 | 这周学习了新的分支结构switch结构,这也适用于选择的情况,其作用类似于if-else。 | switch后面的变量表达式和case后的常量表达式弄不清。 |
8/11-15 | 3天 | 150 | 学习了新的循环结构while语句和do-while语句,和for语句有不一样的地方,但其作用是一样的,他们循环的条件不一样。 | 不能熟练运用while语句去解决实际问题 |
9/11-22 | 3天 | 151 | 这周学习了循环的嵌套,可以多次循环。可以解决行与列这种类型的题、以及需要多次循环一个数一个数来的题型等等 | 感觉知识掌握的还行,但是运用的时候弄不清循环的次数和条件 |
10/11-27 | 2天 | 203 | 这周没有学习新知识,在练习上周学的。更加熟练的运用循环嵌套了 | 知识上的疑惑没有了,但是在刷题还是会遇到困难 |
3.2 累计代码行和博客字数
3.3 学习内容总结
3.4 学习体会
- 上周主要学习了两个知识点:① continue语句和break语句的使用和区别,continue只能用于循环结构中,其作用是跳出后面语句继续循环;break可用于循环语句以及switch语句中,其作用是终止循环或终止语句。② 循环的嵌套,可用于多次循环,解决行与列的问题、以及依次输入数等等较复杂的问题。
- 这周在复习上周学的内容,没有加入新知识。在做题时会感觉到一些轻松,但还是有不能自己解决的题,就比如说这次作业的第一题,我是在室友的帮助下完成的,而且完成后还是不能完全理解。这让我很苦恼。
- 随着学习的知识越来越复杂,题目也越来越复杂,感觉到自己能力的确是不够。有些题目不知道该怎末用学到的知识去表达、用程序的方式来表达计算的过程。感觉自己的思维太固化,不能以计算机所理解的方式去思考。通过这周和上周的两次练习发现,刷题真的很有用,这周作业速度真的提升了,反应能力也提升了,除了个别题不会其他的可以自主理解并完成。快考试了,感觉知识运用的不是很熟练,所以我还要多加练习,争取努力提高 有效代码行。加油!