C语言博客作业-函数
一、PTA实验作业
题目1:使用函数输出指定范围内的完数
- 本题PTA提交列表
- 设计思路
定义函数 reverse( int number),类型为int
定义整型变量n,inverse=1;inverse表示逆序数
判断number的正负,如果number小于0,则n=-number;否则n=number
.inverse=inverse*10+n%10.n=n/10;
重复步骤4.5,直到 n=0
再判断一次number的正负,如果number小于0的话,则返回-inverse;否则返回inverse
结束算法
3.本题调试过程碰到问题及PTA提交列表情况说明
在刚开始的时候我实现了函数的所有功能,提交PTA的但是显示在最大范围内一直超时,完全不知都从何处优化
我就在思考,最大范围应该指的是从1到10000内所有的完数,我觉得应该把所有的完数都试着输出一下
我发现除了1之外,所有的完数都是偶数,这就代表着奇数可以不用判断,可以让我的代码的时间复杂度减少一半
题目2:求组合数
1.本题PTA提交列表
2.设计思路
声明fact函数 double fact(int n);
定义变量 int m,n; double result;
输入m,n
调用fcat函数 result=fact(n)/(fact(m)fact(n-m)),进入第六步
printf("result = %.0f",result)
定义函数double fact(int n)
定义变量int i;double result=1;
进入循环for(i=1;i<=n;i++) 循环第九步
result=resulti
返回result的值
3.本题调试过程碰到问题及PTA提交列表情况说明
一开始错误,输入 2 7时答案等于0.000000,通过调试,监控result,发现result参数定义错误,定义成了int,因为在fact函数中同名变量result它只是整数,而在主函数中它是double型的导致错误。
阶乘忘记给result初始化为1,导致输出结果为0
题目3:使用函数验证哥德巴赫猜想
1.本题PTA提交列表
2.设计思路
定义prime函数及形参即int prime(int p)
定义变量并初始化 int i,n;n=sqrt(p);
如果p为1,则返回0;
否则进入循环for(i=2;i<=n;i++)循环第四步
如果p能整除i,则返回0
return 1
定义Goldbach函数即void Goldbach(int n)
定义变量int q,p
进入循环for(p=2;p<=n;p++)循环第十步和第十一步
if(prime(p)1),则q=n-p;
if(prime(q)1) 则printf("%d=%d+%d",n,p,q)并退出循环
3.本题调试过程碰到问题及PTA提交列表情况说明
输出许多形式为n=q+p的结果,通过调试监控n,p,q发现循环没有在输出一次数据后结束,在if里输出后添了一句break就正确了
忘记判断p是否为1,如果为1直接就不为素数
一开始Goldbach函数中for(q=1;q<=n;q++),q一开始初始化为1,但1显然不为素数导致错误
三、截图本周题目集的PTA最后排名