C语言I博客作业11
问题 | 答案 |
---|---|
这个作业属于哪个课程 | 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;
令flag2=1;
将s遍历数组;
判断数组中的每一个数在迭代至1的过程中有没有与s相等;
如果没有;
输出s;
并计算幸福值;
调用prime函数;
如果返回值为1;
幸福值*2;
输出s与幸福值happysat。
1.2.2实验代码截图
1.2.3数据测试
输入数据 | 输出数据 | 说明 |
---|---|---|
10 40 | 题目要求 | |
110 120 | 无幸福数 | |
1 1000 | 较大数 |
1.2.4 提交列表及说明
- 部分正确:经过测试,99或999或9999或9998等会形成的死循环但不会包含自己;且最大值也不在死循环中,但是这些数最后的循环却出奇的一致,于是设置了一个判断来排除这种情况。
2.代码互评
-
同学代码
-
我的代码
-
同学代码使用表达式i(int)sqrt9=(n)来判断是否为一个数的平方,我用的是遍历的方法,同学的比较节约运算时间。
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 | 多维数组的定义,使用,计算,搜索 |
| 11月30日-12月6日 | 20个小时 | 260 | 浮点数比较大小的方法 |
3.2累计代码行的博客字数
3.3学习内容总结和感悟
3.3.1学习内容总结
*思维导图
3.3.2 学习体会
- 解方程那道题好像有点问题,明显错误的程序却可以拿到满分,希望老师以后选题更加严谨。