C语言I博客作业10

这个作业属于那个课程
这个作业要求在哪里
我在这个课程的目标是
这个作业在那个具体方面帮助我实现目标
参考文献

1.PTA实验作业

1.1编程打印空心字符菱形

本题目要求读入菱形起始字母和菱形的高度,然后输出空心字符菱形。所谓“空心菱形”是指:每行由两端为字母、中间为空格的字符串构成,每行的字符串中心对齐;上半部分相邻两行字符串长度差2,且字母从给定的起始字母逐一递增;下半部分与上半部分对称。
输入格式:
输入在一行中给出起始字母(范围为英文大写字母A-G)和菱形的高度(为不超过10的奇数)。
输出格式:
输出空心字符菱形。
输入样例:

B 5

输出样例:

  B
 C C
D   D
 C C
  B

1.1.1数据处理

数据表达:

定义了整形变量n,i,j;字符变量ch;i,j用于控制循环,n为输入的字符行数,ch为输入的字符

数据处理:

定义 n为输入的字符行数,i,j控制循环,ch为输入的字符

for(i=-n/2;i<=n/2;i++)
{
    for(j=1;j<=|i|;j++)
    {
        输出一个空格
    }
    输出字符
    if |i|!=n/2 
    {
        for(j=(n/2-|i|)*2-1;j>0;j++)
        {
             输出一个空格
        }
        输出字符
        if i>=0 then ch-=2
    }
    换行
    ch++
}

1.1.2实验代码截图

1.1.3 造测试数据

输入数据 输出数据 说明
G 9 从G开始输出9行的空心字符
C 5 从C开始输出5行的空心字符

(由于打出来的字符没有空格,为了好看,所以截图了)

1.1.4 PTA提交列表及说明

提交列表说明

部分正确:for循环中的条件j=n/2-abs(i))*2-1;j>0;j--写成了j=1;j<n/2;j++;寻找了许久后还没找到最后问了李清溪学长才得以解决。

1.2梅森数

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

6

输出样例:

3
7
31

1.2.1 数据处理

数据表达:

定义了整形变量n, i,sum,count;n为输入的正整数,i用于控制循环,sum来放2^n-1的值,count用于记梅森数的个数,自定义函数中定义了整形变量i,s;i用于控制循环,s为返回的值

数据处理:

定义变量n为输入的正整数,i用于控制循环,sum来放2^n-1的值,count用于记梅森数的个数

输入n
for(i=2;i<=n;i++)
{
    sum=(2^i)-1
    if fact(sum)=1 then 输出sum then coun++
}
if count=0 then 输出None
end

自定义函数fact(传过来的数为x)
定义i用于控制循环,s为返回的值

if x<0 then s=0
else 
{
    for(i=2;i<根号x;i++)
    {
        if x%i=0 then s=0 then 跳出循环
    }
返回s的值
}

1.2.2 实验代码截图

1.2.3 造测试数据

输入数据 输出数据 说明
9 3 7 31 127 不超过(2^9)-1的梅森数有4个
3 7 不超过(2^3)-1的梅森数有2个

1.2.4 PTA提交列表及说明

提交列表说明

这个题目容易错在判断一个数是不是素数的时候出错,导致不是素数也返回去1。

1.3同构数

一个数恰好出现在它的平方数的右端,这个数就称为同构数。找出1~1000之间的全部同构数。
输出格式:
在一行中输出所有满足条件的同构数,每个数输出占6列。没有其它任何附加格式和字符。
输出样例

     1     5     6    25    76   376   625

1.3.1 数据处理

数据表达:

定义了整形变量i,用于控制循环,自定义函数中定义了restul,s;restul用于保存x*x的值,s用于返回同构数或0

数据处理:

定义i用于控制循环变量

for(i=1;i<=1000;i++)
{
    if fact(i)!=0 then 输出fact(i);
}
end

自定义函数fact  传过来的值为x
定义restul来放x*x的值,s用于返回同构数的值或者0

restul=x*x
if restul%10=x或restul%100=x或restul%1000=x then s=x
返回s

1.3.2 实验代码截图

1.3.3 造测试数据

输入数据 输出数据 说明
1 5 6 25 76 376 625 输出1000以内的同构数

1.3.4 PTA提交列表及说明

提交列表说明

这个题目主要在判断平方数的右端的数是否和原来的数是否相等容易出错

2.代码互评

(吴佳柳)同学的代码

我的代码

1.他利用i1来放i的值,然后算出i1的位数a,再算出10的a次方,然后判断i的平方取10的a次方的余数是否等于i,如果等于则输出i
2.我的是用自定义函数来判断i的值是不是同构数,如果是则返回同构数的值,反之则返回0。主函数判断值不为零则输出i的值
3.相比之下,我的代码较好,因为我的代码看起来比他的思路要清晰,更容易看

(孙梦姣)同学的代码

我的代码

1.她的代码是先判断输入的n是否小于2,如果小于2则输出None,然后进行循环,将2的m次方减一赋值给i然后循环判断是不是素数,如果是素数则x加一,后面判断x是否等于0如果为零这=则输出i的值
2.我的代码是利用自定义函数来判断传过去的数是不是素数是则返回1,不是则返回0;主函数是先从2开始到n,先将2的m次方减一赋值给sum然后用自定义函数判断是不是素数,如果是则输出sum且计数器加一,最后判断计数器count是否等于0,是则输出None
3.相比之下我的代码更好,因为她的代码再判断是不是素数的时候消耗的时间过长,当有一个能除断的时候就能跳出循环,不用再判断后面的了,并且她的循环有i-1次,而我的只有根号i-1次比她要节省更多的时间

3.学习总结

3.1学习进度条

周/日期 这周所花的时间 代码行 学到的知识点简介 目前比较迷惑的问题
第六周 25小时 434行 常用的数学函数,if-else语句,for语句,自定义函数 自定义函数不会用一个算法来运算多个式子
第七周 8小时 142行 二分支结构和用char输入字符 对于字符型的代码有点看不懂,getchar与putchar还不明白怎么运用
第八周 12小时 343行 多分支结构,switch语句 switch语句用得有点混乱,搞不清什么时候该结束
第九周 14个半小时 503行 自定义函数的用法,怎样用一个算法来运算多个式子 if语句的嵌套不明白是怎样分支的
第十周 8个半小时 181 do-while,while循环语句和continue语句 continue不知道怎么去运
第十一周 28个小时 1246 一维数组和二维数组的基本运用 数组用的不够熟练,老是犯错
第十二周 10个小时 391 学会了整形数组字,浮点型数组和符型数组,学会了结构体struct的运用 struct的嵌套容易搞混变量
第十三周 8小时 436 学会了混合结构体和结构体数组 指针理解不了
第十四周 7小时 308 学会的指针如何取地址 但是不会如何使用

3.2 累积代码行和博客字数

时间 博客字数 代码行数
第四周 645 0
第五周 645 0
第六周 1275 434
第七周 2523 576
第八周 3371 938
第九周 5414 1441
第十周 6930 1622
第十一周 9584 2868
第十二周 13222 3259
第十三周 15483 3695
第十四周 18021 4003

3.3 学习内容总结和感悟

3.3.1 学习内容总结

3.3.2 学习体会

1.这周大家的学习氛围更好了,再星期三交博客园的人越来越多,而且写的也比以前更加详细和规范,有一种积极向上的感觉了。
2.在编写代码的时候脚步越来越慢了,因为题目越来越难,有的时候要想好久才能写出来,而且在调试的时候代码长了就混乱了。
3.在敲代码过程中中我深刻意识到完成程序的编写,并不意味着万事大吉。认为没有错误的程序,在寻找测试点的时候会出现很多的问题,而且有的测试点pta上都检测不出来

原文地址:https://www.cnblogs.com/b1356436060/p/11944430.html