一、表格

问题 答案
这个作业属于那个课程 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 学习体会

  1. 上周主要学习了两个知识点:① continue语句和break语句的使用和区别,continue只能用于循环结构中,其作用是跳出后面语句继续循环;break可用于循环语句以及switch语句中,其作用是终止循环或终止语句。② 循环的嵌套,可用于多次循环,解决行与列的问题、以及依次输入数等等较复杂的问题。
  2. 这周在复习上周学的内容,没有加入新知识。在做题时会感觉到一些轻松,但还是有不能自己解决的题,就比如说这次作业的第一题,我是在室友的帮助下完成的,而且完成后还是不能完全理解。这让我很苦恼。
  3. 随着学习的知识越来越复杂,题目也越来越复杂,感觉到自己能力的确是不够。有些题目不知道该怎末用学到的知识去表达、用程序的方式来表达计算的过程。感觉自己的思维太固化,不能以计算机所理解的方式去思考。通过这周和上周的两次练习发现,刷题真的很有用,这周作业速度真的提升了,反应能力也提升了,除了个别题不会其他的可以自主理解并完成。快考试了,感觉知识运用的不是很熟练,所以我还要多加练习,争取努力提高 有效代码行。加油!