作业头
这个作业属于哪个课程 | C语言程序设计II |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2020-4/homework/11637 |
我在这个课程的目标是 | 学会自定义函数,本次作业拿到满分 |
这个作业在那个具体方面帮助我实现目标 | 作业的严格要求和PTA的精选题集 |
参考文献 | CSDN,博客园,《算法入门》 |
学号 | 20209078 |
1.PTA实验作业(20分/题)
1.1 6-1 统计某类完全平方数 (20分) (15分)
本题要求实现一个函数,判断任一给定整数N是否满足条件:它是完全平方数,又至少有两位数字相同,如144、676等。
函数接口定义:
int IsTheNumber ( const int N );
裁判测试程序样例:
#include <stdio.h>
#include <math.h>
int IsTheNumber ( const int N );
int main()
{
int n1, n2, i, cnt;
scanf("%d %d", &n1, &n2);
cnt = 0;
for ( i=n1; i<=n2; i++ ) {
if ( IsTheNumber(i) )
cnt++;
}
printf("cnt = %d
", cnt);
return 0;
}
/* 你的代码将被嵌在这里 */
1.1.1 数据处理
①数据表达:定义了整形变量a,b,c,d,e,f。
②数据处理:
因为题目要求的是四位数,所以定义四个整形变量来储存各个位数:a,b,c,d
定义一个整形变量储存N的平方根,因为要求是完全平方数所以定义整形来判断。
if(e*e==N){...}
加之题目要求要有位数相等,利用取余的方式拆数:a=N%10;b=(N/10)%10;c=(N/100)%10;d=(N/1000)%10;
再利用if判断并用局部变量累加计数。
然后考虑到三位数以下的数会导致c为0的可能,所以在前面加个判断。
1.1.2实验代码截图
1.1.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
105 500 | cnt = 6 | 题目样例 |
-9999 100 | cnt = 1 | 负数到一百 |
1.1.4 PTA提交列表及说明
提交列表
提交列表说明:
1.答案错误:对于自定义函数里的return还不怎么理解,好多都错在这。
2.部分正确:数组的方法来的直观,但是我想写一个不用数组的,先没啥思路,后面发现PTA只测到4位数就好办了。然后有个少于三位数出现的bug所以出现了这样的提交列表。
1.2 7-1 解一元二次方程 (10分)
1.2.1 数据处理
①数据表达:定义了浮点形变量a,b,c,s,x,x1,x2,m,n。
②数据处理:
利用解一元二次方程求根公式。先判断无解和无穷解:
if(a==0&&b==0&&c==0){
printf("无穷多解");
}
else if(a==0&&b==0){
printf("无解");
}
再判断一个解:else if(a==0){...}
再判断判别式。因为double运算有误差,所以得加个比较小的数(原理我也不懂)
这个数不能超过0.016,也不能等于。实质上是0.015。也不能小于0.000000000000000007。
这里为了方便,可以使用宏定义#define WuCha 0.0005//组成就是#define 变量名字,比如这个WuCha就是误差的拼音 数值
然后就可以少打那么多0.000几什么了。
1.2.2 实验代码截图
1.2.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
0 4.5 -3.6 | x = 0.8 | 题目样例 |
0 0 0 | 无穷多解 | 题目样例 |
-2 0.8 -0.06 | x1 = 0.1, x2 = 0.3 | 题目样例 |
1 -0.4 0.04 | x1 = x2 = 0.2 | 题目样例 |
-0.2 0.04 -0.01 | x1 = 0.1-0.2i, x2 = 0.1+0.2i | 题目样例 |
1.2.4 PTA提交列表及说明
提交列表
提交列表说明:
1.部分正确:没看清题,两个相等要连等。还有double误差,之前我用的0,就是不对。
2.内部错误:据说是PTA自己的问题。
2.代码互评(5分)
- 同学代码截图
同学一的作业
同学二的作业
- 自己代码截图
- 比较:
1.同学1的用的数组这个知识点,if用得挺巧的,毕竟能让电脑累的事为什么让编程的人累。
2.同学2的代码最开始启用for的循环语句,其实可以引入一个标志flag参与后面的if条件语句,然后再return flag,这样可以省一些...?可能是我强迫症。
3.我这是钻空子写法,主要想尝试不用老师海绵讲的知识写。
3.学习总结(15分)
3.1 学习进度条(5分)
周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
10/12—10/18 | 40h | 581 | printf(),scanf()的用法,if-else的用法 | 无 |
10/19—10/23 | 33h | 617 | for循环 | 无 |
10/24—10/25 | 13h | 262 | do...while循环 | 无 |
10/26—11/1 | 15h | 458 | 自定义函数 | 无 |
11/2—11/8 | 19h | 144 | pow(),sqrt()函数 | 无 |
11/9—11/15 | 14h | 597 | 函数 | 如何改错,会调试了还是很慢,不熟练 |
11/16—11/22 | 21h | 241 | 分支结构 | 函数递归?还有如何替换字符串。 |
11/23—11/29 | 29h | 868 | switch语句 | 我也不知道我从哪开始就懵了 |
11/30—12-6 | 10h | 179 | while和do...while循环 | 无 |
12/7—12/13 | 31h | 312 | 循环嵌套 | 如何巧妙运用continue |
12/14—12/20 | 12h | 245 | 函数 | 一堆 |
3.2 累积代码行和博客字数(5分)
时间 | 博客字数 | 代码行数 |
---|---|---|
第一周 | 1951 | 879 |
第二周 | 1994 | 458 |
第三周 | 6917 | 144 |
第四周 | 1924 | 597 |
第五周 | 4553 | 641 |
第六周 | 3792 | 868 |
第七周 | 4849 | 179 |
第八周 | 4060 | 312 |
第九周 | 4990 | 245 |
3.3 学习内容总结和感悟(5分)
3.3.1 学习内容总结
3.3.2 学习体会
学习内容总结:
- 本周我们学习了函数,会利用函数简化需要重复使用的代码。
感悟:
- 这周PTA难过头了吧。。。
- 时刻做好笔记,做好盲点,不懂的名词积极百度,实时记录下来。
- 对待任何事情不能急于求成,代码不能囫囵吞枣,自己的思维最重要,照搬现套,不可取,形成自己独有的思维最为重要。
- 改别人代码挺好的,一题多解,修改他人的代码的基础上自己再创建新的题解。主要是要理解思路和原理,但是太折磨人了。