C语言I博客作业05

这个作业属于那个课程
这个作业要求在哪里
我在这个课程的目标是
这个作业在那个具体方面帮助我实现目标
参考文献

1.PTA实验作业

1.1 水仙花数判断

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

函数接口定义:

int func(const int N);

其中N是用户传入的参数。N的值不超过int类型的范围。如果参数N是水仙花数,则返回1,否则返回0。
裁判测试程序样例:

#include <stdio.h>
int func(const int N);
int main()
{
 int N;
 scanf("%d", &N);
 printf("%d
", func(N));
return 0;
}

输入样例:

153

输出样例:

1

1.1.1数据处理

数据表达:我用了整形变量a,b,c,result,a,b,c分别用来保存三位数的百位,十位和个位的值,result用来保存数的每一位上数字的立方和。
数据处理:用到了if-else语句来判断result是否与输入的数相等
函数参数:主函数的名称为main,被调函数的名称为func,类型为整形,实参为N,为整形,形参为number,为整形。

1.1.2实验代码截图

1.1.3 造测试数据

输入数据 输出数据 说明
578 0 输入的非水仙花数
407 1 输入水仙花数

1.1.4 PTA提交列表及说明

部分正确:写完之后忘记将return 0;加上去了,导致数据返回少了一部分

1.2使用函数验证哥德巴赫猜想

本题要求实现一个判断素数的简单函数,并利用该函数验证哥德巴赫猜想:任何一个不小于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 数据处理

数据表达:我用了整形变量s,i,s用于贮存返回的值,i用于控制for循环的结束状态。
数据处理:用到了if判断语句,和for循环语句
函数参数:主调函数的名称为main,被调函数的名称为prime,Goldbach,prime为整形,实参为m,为整形,形参为p,为整形,Goldbach为无类型,实参为i,为整形,形参为n,为整形。

1.2.2实验代码截图

1.2.3 造测试数据

输入数据 输出数据 说明
40 50 40=3+37, 42=5+37, 44=3+41, 46=3+43, 48=5+43,50=3+47 40~50偶数表示为两个奇素数之和
23 33 23 is a prime number 24=5+19, 26=3+23, 28=5+23, 30=7+23, 32=3+29 23~33偶数表示为两个奇素数之和,其中23也为素数

1.2.4 PTA提交列表及说明

部分正确:`prime`函数for循环内忘记输入break,导致答案循环没有结束

2.代码互评

(王海靓)同学的代码

自己的代码

1.他的代码只用了2个变量,并且运用了while语句,去了将各位数立方的步骤。
2.我的代码使用了四个变量,其中三个用于收集各位的数,再一次性将各位数的立方相加。
3.我的代码与他的相比,各有优点,我的代码利用空间换时间,运行的时候可以更快的运算出来,他的代码节省了空间,但是运算起来会比我的代码慢一些。

(吴佳柳)同学的代码

我的代码

1.他的代码和我相比有些缺点,首先,他的`if(p==1||p<0)`是可以合起来写成`p<2`的这样更加直观,其次他的for循环语句已经包含了`if(p==2||p==3)`语句,我在自己电脑上将他的代码改变成我想象中的代码,结果证明我的想法是正确的。
2.他的代码和我的相比他比我也有一些优点,我在判断p,q是不是素数用了俩个if语句,而他只用了一个if语句就将这俩个数判断了出来,这个值得我学习。
3.总的来说,他的代码还是有缺陷,先比较起来我的代码更好,让人来看代码的话我的更容易被理解一些。

3.学习总结

3.1 学习进度条

周/日期 这周所花的时间 代码行 学到的知识点简介 目前比较迷惑的问题
第六周 25小时 434行 常用的数学函数,if-else语句,for语句,自定义函数 自定义函数不会用一个算法来运算多个式子
第七周 8小时 142行 二分支结构和用char输入字符 对于字符型的代码有点看不懂,getchar与putchar还不明白怎么运用
第八周 12小时 343行 多分支结构,switch语句 switch语句用得有点混乱,搞不清什么时候该结束
第九周 14个半小时 503行 自定义函数的用法,怎样用一个算法来运算多个式子 if语句的嵌套不明白是怎样分支的

3.2 累积代码行和博客字数

时间 博客字数 代码行数
第四周 645 0
第五周 645 0
第六周 1275 434
第七周 2523 576
第八周 3371 938
第九周 5414 1441

3.3 学习内容总结和感悟

3.3.1 学习内容总结

3.3.2 学习体会

本周的学习有点忙碌,也没有时间去预习,我认为学习编程是“理论→实践→再理论→再实践”的过程。虽然这周我基本上都是在实践,很少去学习理论知识。但是我在实践中将以前学过的理论知识全都从懵懂的状态脱离了出来,这让我感觉到书本上是永远不会出现你自己的思想成果的,正是应了那句话“实践是检验真理的唯一标准。”同时在实践的过程中遇到实在不明白的地方的时候我就会去百度搜索一些相关的资料,看过之后,之前遇到的问题大都会迎刃而解,使我有豁然开朗的感觉。而且会记得非常的牢固。

原文地址:https://www.cnblogs.com/b1356436060/p/11732898.html