C语言博客作业03--函数
1.本章学习总结
1.1 思维导图
1.2 本章学习体会及代码量学习体会
1.2.1 学习体会
- 在这两周我们学了函数这一部分的知识,虽然这一部分的内容我在此之前已经学习过了,不过这两周的学习也帮我填补了一些知识的空缺,比如函数中的变量还分为静态变量和动态变量这一个我之前没有注意到的问题,不过老师似乎没有讲到函数的递归调用
1.2.2 代码累计
2.PTA总分
2.1截图PTA中函数题目集的排名得分
2.2 我的总分:145
3.PTA实验作业
3.1 PTA题目1
- 本题要求实现一个判断素数的简单函数,并利用该函数验证哥德巴赫猜想:任何一个不小于6的偶数均可表示为两个奇素数之和。素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。
3.1.1 算法分析
int prime( int p )
{
定义整型变量i,j
if p==1 then return 0;//当p为1时直接返回0
end if
j=sqrt(p);
for i=2 to j do
if p%j==0 then return 0;
end if
end for
return 1;
}
void Goldbach( int n )
{
定义整型变量i,j
j=n/2;//j为n的值的一半,用来减少循环次数
for i=2 to j do
if i为素数 then
if p-i为素数 then
以p=i+p-i的形式输出素数分解的式子
返回主函数
end if
end if
end for
}
3.1.2 代码截图
3.1.3 测试数据
输入 | 输出 |
---|---|
89 100 | 89 is a prime number |
90=7+83, 92=3+89, 94=5+89, 96=7+89, 98=19+79 | |
100=3+97, |
3.1.4 PTA提交列表及说明
- 这道题是我一开始犯错误比较多的一道题,最开始我忘了i要从2开始,改正后却仍有错误,在检查后发现是p=1的时候的问题,1不是素数但我的做法会把1当成素数,改正后就全部正确了
4.大作业
4.1.函数关系图
4.2.函数功能介绍
-
1.界面函数
生成用户刚进入程序时的界面
-
2.选择函数1
让用户选择难度和做题数量
-
3.数字与符号函数
用于生成数字与符号
-
4.随机数函数
每次调用这个函数时返回一个0到1000以内的随机数
-
5.题目函数
将之前生成的数字与符号组合生成题目
-
6.答案函数
计算答案
-
7,判断函数
判断用户输入的答案是否正确
-
8.选择函数2
让用户选择是否要继续做题
-
9.时间函数
计算用户的答题时间
-
10.正确率函数
计算用户答题的正确率
4.3 运行结果截图
4.4 调试碰到问题及解决办法
- 1.在编写随机数函数时一开始我是直接用time(NULL)作为种子的,但运行时却发现每次生成的随机数都一样,经过检查发现是程序运行太快导致每次都用同样的种子生成随机数,于是我就定义了一个静态局部变量i,用time(NULL)+I作为种子,且每次调用这个函数时i的值都回变化一次
- 2.在判断答案对错时,我一开始是直接判断正确答案与输入的答案是否相等,但运行时却发现当出现除法且答案为小数时会出现问题,又因为我规定答案不为整数和一位小数时就保留一位小数,于是我就把答案判断条件改为正确答案与输入的答案之差的绝对值小于0.1
- 3.在调试时我还发现在一部分选择时,如果输入的是字符型数据,那么程序就会出现错误,后来我知道了scanf函数的返回值,输入正确时返回1,不正确时返回0,根据这一点修改了我的代码成功解决了这一问题
4.5 大作业总结
- 写这个大作业差不多花了我一个晚上和一个早上的时间,一开始我并没有定义这么多的函数,代码也比现在的长,只不过在之后的调试与修改中我发现有一部分的代码有重复,就多定义了几个函数,拆分了原本的几个比较长的函数,于是就有了现在的代码。也因为写这个大作业,我对函数的熟练程度也提升了不少,并且掌握了一部分的时间函数。
ps:原本我还想加入一个倒计时的功能的,只不过我在编写这个函数时发现我无法做到在运行倒计时时输入答案,于是这个想法也只能不了了之了