这个作业属于那个课程 | C语言程序设计II |
---|---|
这个作业要求在哪里 | C语言I作业05 |
我在这个课程的目标是 | 学会自己通过定义简化代码中那些重复出现的代码,减小内存占用空间 |
这个作业在那个具体方面帮助我实现目标 | 练习对函数的声明,定义,调用 |
参考文献 |
1.PTA实验作业
**1.1 (6-1) 判断一个整数的各位数字平方之和能否被5整除 **
编写函数fun,其功能是:判断一个整数的各位数字平方之和能否被5整除,可以被5整除则返回1,否则返回0。
函数接口定义:
int fun(int n );
其中 n
是用户传入的参数。 函数判断n的各位数字平方之和能否被5整除,能被5整除则返回1,否则返回0。
裁判测试程序样例:
#include <stdio.h>
int fun( int n );
int main()
{
int m;
scanf("%d", &m);
printf("The result is %d
", fun(m));
return 0;
}
/* 你的程序将被嵌入在这里 */
输入样例:
12
输出样例:
The result is 1
输入样例:
123
输出样例:
The result is 0
1.1.1数据处理
- 数据表达:在主函数中定义了一个整型变量m,用与代表输入值,在被调用函数中定义了整形变量s,i,n并将s的初始化值设置为0,n代表被调用函数中的输入值,i表示各位数字,s表示各位数字的平方和
- 数据处理:用while()函数对符合条件的进行循环
- 函数参数:主调函数int main(),为整型变量;被调函数int fun( int n ),为整型变量;实参为m,为整形变量;n,s,i为形参,同样也是整型变量
1.1.2实验代码截图
1.1.3 造测试数据
输入 | 输出 | 说明 |
---|---|---|
12 | The result is 1 | 同题目所给例子 |
123The result is 0 | The result is 0 | 同题目所给例子 |
1234 | The result is 0 | 按照题目所示的两个例子随机再例子 |
12345 | The result is 1 | 按照题目所示的两个例子随机再例子 |
1.1.4 PTA提交列表及说明
提交列表说明:
- 部分正确:在被调用函数中没有返回值;解决方法:输入返回值
- 部分正确:返回值我用成了return 0;导致被调用函数返回主函数的值都为0;解决方法:return (s % 5 == 0);意思是如果s除以5没有余数则为真,返回1;否则为假,返回0;
1.2(6-6) 使用函数验证哥德巴赫猜想 (20 分)
本题要求实现一个判断素数的简单函数,并利用该函数验证哥德巴赫猜想:任何一个不小于6的偶数均可表示为两个奇素数之和。素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。
函数接口定义:
int prime( int p );
void Goldbach( int n );
其中函数prime
当用户传入参数p
为素数时返回1,否则返回0;函数Goldbach
按照格式“n
=p+q”输出n
的素数分解,其中p≤q均为素数。又因为这样的分解不唯一(例如24可以分解为5+19,还可以分解为7+17),要求必须输出所有解中p最小的解。
裁判测试程序样例:
#include <stdio.h>
#include <math.h>
int prime( int p );
void Goldbach( int n );
int main()
{
int m, n, i, cnt;
scanf("%d %d", &m, &n);
if ( prime(m) != 0 ) printf("%d is a prime number
", m);
if ( m < 6 ) m = 6;
if ( m%2 ) m++;
cnt = 0;
for( i=m; i<=n; i+=2 ) {
Goldbach(i);
cnt++;
if ( cnt%5 ) printf(", ");
else printf("
");
}
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
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,
1.2.1数据处理
- 数据表达:在主函数中定义了m, n, i, cnt四个整型变量,m用于表示输入的最小值;n用于表示输入的最大值;i是其中的中间参量;cnt用作与满五个式子后换行;在被调用函数1中,定义了p,i,flag三个整形变量,p代表输入值;i为中间变量;flag作为返回值,返回到主函数中,进行素数的判断;在被调用函数2中,定义了n,p,q三个整形变量,n代表输入值;p和q代表式子中
n
=p+q的p和q。 - 数据处理:在第一个被调用函数中运用了for进行循环并且在其中还运用了if-else进行选择,在第二个被调用函数中运用了两个if-else结构进行符合条件的数值的选择,还有一个for循环结构进行不断的累计和选择。
- 函数参数:主调函数****int main(),为整形变量;被调用函数为int prime( int p )和void Goldbach( int n )也都为整型变量;实参为m, n, i, cnt,为整形变量;p,i,flag为被调用函数1形参,为整型变量;n,p,q为被调用函数2形参,也是整型变量。
1.2.2实验代码截图
1.2.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, | 同题目示例 |
1.2.4 PTA提交列表及说明
提交列表说明
- 答案错误:在两个被调用函数中忘记用break跳出循环了,导致循环没有停止。
2.代码互评
同学1
同学2
自己
互评:
-
第一个被调用函数:
(1)首先同学用的'if(p==1||p<0)'和'if(p<2)',而我用的是'if (p <= 1)'这是同一种关系运算的不同表示;
(2)与同学1相比在对于条件"p <= 1"和“p == 2 || p == 3”符合的情况下他是直接输出返回值0或1,我是先定义了一个flag变量作为返回值,我觉得他的方法要更好一些,值得我学习
(3)同学2没有把p=3的情况放在之前处理,而是放在后面的循环一起处理
(4)在循环的条件2我用的是i<=sprt(p)两位同学用的是i<=p,我觉得我这样用好一点,这样缩短了运行的时间,而且用上了之前题目写好的math.h函数库。
-
第二个被调用函数:
(1)我与同学2的区别在于我在之前限定了n属于大于6的奇数,他是直接全部带进去运算
(2)同学1和我的思路有点不同,他是先定义一个数为3则另一个数为n-3,然后将其带入循环中并用while()函数判断是否是题目要求的结果
3.学习总结
3.1 学习进度条
周 | 这周所花时间 | 代码行 | 学到的知识点简介 |
---|---|---|---|
第八周 | 16小时 | 200 | 函数的声明,定义和调用 |
3.2 累积代码行和博客字数
3.3 学习内容总结和感悟
3.3.1 学习内容总结
3.3.2 学习体会
这一周的时间有点紧,白天上课,下午还去了ATD学习一些别的知识,所以也进行没有预习。我觉得虽然说现在的时间比较紧但是这样是好的,因为这样每天才充实一些,不然每天就跟条咸鱼样的整天瘫着,在作业过程当中也还是有许多不会的地方,又不会的我先会自己思考,实在没有思路了再去百度,其实很多东西都能在网上查得到,而且有时候看那么一小段你就知道自己的思路为什么错了,然后就能结合自己的知识完成题目,而且自己找来的知识也比别人直接告诉你的记得要牢靠些。