C语言I博客作业10
问题 | 答案 |
---|---|
这个作业属于哪个课程 | c语言程序设计II |
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2019-1/homework/10132 |
我在这个课程的目标是 | 熟练使用C语言 |
这个作业在那个具体方面帮助我实现目标 | pta习题 |
参考文献 | https://blog.csdn.net/liujian20150808/article/details/50630546 |
1.PTA实验作业
1.1
6-2 统计各位数字之和是5的数 (20分)
本题要求实现两个函数:一个函数判断给定正整数的各位数字之和是否等于5;另一个函数统计给定区间内有多少个满足上述要求的整数,并计算这些整数的和。
1.1.1数据处理
- 数据表达:| 变量 | 类型 | 作用 |
| - | - | - |
| e | 整型 | 函数返回值 |
| x | 整型 | 各位数之和 |
| number | 整型 | 要求判断的数字 |
| a | 整型 | 范围左区间 |
| b | 整型 | 范围右区间 |
| i | 整型 | 范围统计数字 |
| sum | 整型 | 数字和 |
| is() | 函数 | 判断是为否符合题意的数 |
| count_sum | 函数 | 计算和输出个数和总和 | - 数据处理:
接收变量number;
将number对10取余且平方加给x;
当number为0时判断x是否为5;
接收范围;
最小值开始递增,并且判断is(a);
如果真;计数器i加一;
加到sum上;
a递增到b;
输出i与sum。
.2实验代码截图
1.1.3数据测试
输入数据 | 输出数据 | 说明 |
---|---|---|
104 999 |
| 题目要求 |
| 105 105 |
| 没有 |
| 1 999 |
| 随机数 |
1.1.4提交列表及说明
*无
1.2
对一个十进制数的各位数字做一次平方和,称作一次迭代。如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数。1 是一个幸福数。此外,例如 19 经过 1 次迭代得到 82,2 次迭代后得到 68,3 次迭代后得到 100,最后得到 1。则 19 就是幸福数。显然,在一个幸福数迭代到 1 的过程中经过的数字都是幸福数,它们的幸福是依附于初始数字的。例如 82、68、100 的幸福是依附于 19 的。而一个特立独行的幸福数,是在一个有限的区间内不依附于任何其它数字的;其独立性就是依附于它的的幸福数的个数。如果这个数还是个素数,则其独立性加倍。例如 19 在区间[1, 100] 内就是一个特立独行的幸福数,其独立性为 2×4=8。
另一方面,如果一个大于1的数字经过数次迭代后进入了死循环,那这个数就不幸福。例如 29 迭代得到 85、89、145、42、20、4、16、37、58、89、…… 可见 89 到 58 形成了死循环,所以 29 就不幸福。
本题就要求你编写程序,列出给定区间内的所有特立独行的幸福数和它的独立性。
1.2.1数据处理
- 数据表达:| 变量 | 类型 | 作用 |
| - | - | - |
| s | 整型 | 范围下限 |
| e | 整型 | 范围上限 |
| x | 整型 | 被判断的数 |
| S | 整型 | 代替s进行依次计算 |
| flag| 函数 | 判断有无特立独行幸福数 |
| flag2| 整型 | 判断是否为特立独行幸福数 |
| a[] | 数组 | 记录范围内所有特立独行的数字 |
| y | 整型 |代替数组内每一个元素进行计算 |
| add |每一位数平方的和 |
| happy(int x)| 函数 | 判断是否为幸福数字 |
| prime(int x)| 函数 | 判断是否为素数 |
| happysat(int x)| 函数 | 计算幸福值 |
| 函数中的e| 整型 | 返回值 |
| 函数中的max | 整型 | 记录迭代中的最大值 | - 数据处理:
输入范围s e;
从i=-1开始,调用happy函数;
将所有返回值为1的s填入数组;
从s递增,如果调用happy函数判断s;
如果返回值为1;
1.2.2实验代码截图
1.2.3数据测试
输入数据 | 输出数据 | 说明 |
---|---|---|
6 | ||
题目要求 | ||
100 | ||
较大范围 | ||
1 | ||
没有梅森数 |
1.2.4 提交列表及说明
- 部分正确:没有看清题目;未设置flag来判断是否没有梅森。
2.代码互评
-
同学代码
-
我的代码
-
我定义了一个函数来判断是否为负数,同学的没有,在未来的工作中需要面临更加复杂的代码,我认为对于功能明确的一段代码完全有必要将其重新定义为函数以便更改和阅读。
3.学习阶段
| 周/日期 | 这周所花的时间 | 代码行 | 学到的知识简介 | 目前比较迷惑的问题 |
| - | - | - |
| 10/7-10/14 | 7个小时 | 130 | 选择结构的使用,变量类型的区别及使用 | 为啥老师要让我们看看不懂的代码 |
| 10/15-10月17 | 6小时 | 75 | dev c++的调试,各种运算符的起源及优先级,for循环语句的使用 | <=符号的类别及优先级;前++和后++的区别 |
| 10/18-10月26日 | 12小时 | 90 | 自定义函数的声明和调用 | for循环和while循环各自的利弊 |
| 10月27-11月1日 | 8小时 | 150 | ascll码的作用,switch case简单用法, 数组元素的简单使用,字符的输出与输入 |
| 11月2-11月8日 | 9小时 | 117 | 数组元素的进一步了解 |
| 11月9日-11月15日 | 10小时 | 110 | 伪代码是什么 |
| 11月16日-11月22日 | 7个小时 | 85 | 如何输出对齐 |
| 11月23日-11月29日 | 10小时 | 500 | 多维数组的定义,使用,计算,搜索 |
3.2累计代码行的博客字数
3.3学习内容总结和感悟
3.3.1学习内容总结
*思维导图
3.3.2 学习体会
- 第一题打印菱形的题目思考了很久,
- 第一次完成:
将图形分为5个部分,即两头,上部分,下部分,中间,五个部分为线性关系,并且还要单独开一个高度为1时只输出一个字母的代码,过了PTA之后思来想去觉得这不是我想要的。 - 于是有了第二次完成:忘记保存了没有代码,大致是将图形分为上下两部分打印,两部分为依旧为线性关系,我认为既然是计算机,那就应该将大部分工作交给计算机来做,而不是自己想好各种情况然后依次执行,提交完之后依旧不太满意。
- 于是有了第三次:
我通过负数和绝对值来实现一个对称的输出关系,所有情况都是计算机自行判断的并列关系,通过PTA后又觉得代码还是不够精简。 - 于是有了第四种:
我想到打印这个菱形主要涉及三个变量,如果不用负数与绝对值可以用多个数组用下标将其关联来实现一一对应关系,在打印之前将每一行的三个变量用数组储存下来,在打印时直接用对应下标的数组内元素进行就可以,因为制定数组的代码是一段有明显作用的代码,我觉得可以定义一个函数来使主程序精简到20行之内,可惜后来发现函数返回数组涉及到指针相关知识,这一部分我还只是进行了简单学习,没有成功精简,我相信再过一阵我能做到我想做的。
至此我有一个疑问,代码到底有没有绝对更好的,如果有,那标准是什么呢?随机数