C语言I博客作业05

这个作业是属于哪个课程 C语言程序设计II
这个作业要求在哪里 作业要求
我在这个课程的目标是 编写函数,看懂函数
这个作业在那个具体方面帮助我实现目标 多个题目运用函数解决
参考文献 文章链接

1.PTA实验作业

1.1:判断一个整数的各位数字平方之和能否被5整除

1.1.1数据处理
数据表达:定义了整数y。

数据处理:运用了do-while语句 y=y+(n%10)*(n%10) n=n/10,将整数各个位上的数均进行平方并且累加
再使用if-else语句处理y的结果最后是否能被5整除后分别返回数值。

函数参数:主调函数为int main(),被调函数int fun(int n ) 实参是%d 形参 int n 类型:整型 名称:输入的整数
1.1.2实验代码截图

1.1.3 造测试数据

输入数据 输出数据 说明
12 The result is 1 样品参数
123 The result is 0 样品参数
12 The result is 1 与样品参数一致
123 The result is 0 与样品参数一致
567 The result is 1 无错误

1.1.4 PTA提交列表及说明

1.编译错误:漏写分号,查询得知“!”为非的意思,并且运用了do-while语句解决了问题。
2.运行超时:将n=n/10;这一行错写成了y=y/10,导致运行超时。(粗心)
3.全部正确:全部纠正后正确


1.2 本题要求实现一个函数,判断任一整数是否为水仙花数(必须是三位数,且数的每一位上数字的立方和与数本身相等)。例如153=13+53+3^3=1+125+27=153,而1或155则不是水仙花数。如果是水仙花数,则函数返回1,否则返回0.

1.2.1数据处理
数据表达:int a ,b,c,d;四个整型并且分别将abc赋值为个位十位百位上的数。
数据处理:d=aaa+bbb+ccc; d赋为各个位上的数立方和,之后运用if-else语句进行判断d是否等于输入的数。
函数参数:主调函数为int main(),被调函数int func(int N) 实参是%d 形参 int N 类型:整型 名称:输入的整数

1.2.2 实验代码截图

1.2.3 造测试数据

输入数据 输出数据 说明
153 1 样品参数
123 0 与样品参数相反
568 0 与样品参数相反

1.2.4 PTA提交列表及说明

1.部分正确:第一次很顺利的写出了程序大概,但是对于各个位置的处理错误,百位并不是N%1000,而是c=N/100,十位是b=N/10%10;不是N%100。
2.编译错误:中途尝试简化程序,去除多余的if-else语句并且修改了bc赋值。
3.答案正确:顺利更改错误。

2.代码互评

同学代码:

自己代码

1.排版都十分简洁,精炼。
2.同学1的代码中,for循环语句里将(1.0/)flag的运算与我的1.0/可以划等号。
3.吸取了上次作业中同学的分区域写代码优点。

3.学习总结

3.1 学习进度条

日期 这周所花的时间 代码行 学到的知识简介 目前比较迷惑的问题
10/7--10/13 5个小时 80 学到了if语句 暂无
10/13--10/20 5个小时 100 学习for循环语句 暂无
10/20--10/27 5个小时 98 学习了函数定义 暂无

3.2 累积代码行和博客字数

3.3 学习内容总结和感悟

3.3.1 学习内容总结

3.3.2 学习体会
这次作业pta作业难度我觉得有所提高,更加增长了自身编程的各项技能,能运用所学的知识解决更多问题。
但是6-6 使用函数验证哥德巴赫猜想的函数表达,我想了很久,我准备在接下来的几天里搞懂最后一题的编程思路。
10/24 20:51分
用了晚自习的时间读懂了这到pta的题目。我发现并不太难,只是害怕代码数多,而没有耐心去读。
分解讲解:

主函数1段:
int prime( int p );
void Goldbach( int n ); /:定义了两个函数,由题干可知prime用于判断素数,Goldbach用于输出 Goldbach Goldbach素数分解,由函数的形式我们也可以看到 Goldbach函数输出的结果是式子。

int m, n, i, cnt;
scanf("%d %d", &m, &n); /:定义变量 并输入

if ( prime(m) != 0 ) printf("%d is a prime number\n", m); /:判断是否为素数,并且输出数据。 “!”为非的意思。

prime函数:
int prime( int p )
{int i ;
if(p<=1) /:根据题干 对p进行约束
{return 0;}
else if (p2) /:根据题干 2是素数
{return 1;}
else
{
for(i=2;i<=p/2;i++) /: 判断p是否为素数,根据素数本身的性质,只能被1和本身整除
{ if(p%i
0) 利用p的一半来进行循环。p如果%i取余为零,说明p能被整除,
{return 0;} 所以return 0 表示不为素数。例如p=15时,当i累加到3后则p%i=0,说明15不为素数
else if(i>p/2) 如果i能够累加大于p的一半,说明p不能被2整除,有余数,则这个数是素数。 i>p/2是为了排除10以下的不是素数的数。
{return 1;} }
}
return 1;}

主函数2段:
if ( m < 6 ) m = 6; /: 这两条根据题干要求是为了限制 不小于6并且是偶数的条件
if ( m%2 ) m++;

cnt = 0; /:下面这一个for循环是为了表示最后输出的结果。由题目演示的输出样例我们可以知道在输出的式子中
for( i=m; i<=n; i+=2 ) { 需要添加“,”分开排列。所以之前定义的cnt来输出输出。
Goldbach(i);
cnt++;
if ( cnt%5 ) printf(", ");
else printf("\n");
}

Goldbach函数:
void Goldbach( int n )
{ int a;
int count=0;

for(a=2; a<=n;a++) /: 运用for循换 找寻 n= p+ q式子中的qp数据。a=2累加后可以约束题干所说的奇数条件
{ if(prime(a)1&&prime(n-a)1) 并且用了刚才定义的prime函数来约束qp数据为素数的条件,之后输出n n-a 以%d=%d+%d的形式。
{ count++; if(count==1)
{printf("%d=%d+%d",n,a,n-a);} } }
}

posted @ 2019-10-23 17:00  邓博文  阅读(476)  评论(1编辑  收藏  举报