问题 | 回答 |
---|---|
这个作业属于哪个课程 | C语言程序设计II |
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2019-2/homework/9977 |
我在这个课程的目标是 | 掌握并熟悉C语言的运用 |
这个作业在哪个具体方面帮助我实现目标 | 对代码编译更加熟悉,学习到了while语句,还有进制数的理解 |
参考文献 | 《C primer Plus》《C语言程序设计》《CSDN》《百度》《伪代码的写法》 |
1. PTA实验作业
1.1 jmu-c-二进制转10进制
题目内容
输入一组二进制字符,输出其对应的十进制数。当输入回车键时,输入结束。若输入非二进制字符,输出error input!
1.1.1 数据处理
数据表达:定义两个整型变量n,s,其中n代表一个判断条件,初始赋值为0,s表示转化出的十进制,定义了字符型变量ch,表示输入的二进制数的每个位数
数据处理:while循环当ch不等于回车时执行,回车时跳出while语句,while中输入字符,用switch语句,当ch为0和1时,都执行同一条语句s=s2+ch-'0';由于是一个字符一个字符的输入,所以得出s后跳出switch但不跳出while,当二进制所有位数输完,按回车跳出while执行下一条,其他情况下,就比如有除0,1外的数字时,赋值n=1,就跳出switch,然后再回车跳出while,再根据if-else语句判断是error input!不属于二进制数。其中二进制转十进制的公式举例:二进制111转十进制是((12)+1)*2+1=7。
伪代码:
1.1.2 实验代码截图
1.1.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
11111111 | 255 | 示例 |
34 | error input! | 示例 |
567 | error input! | 非二进制 |
111 | 7 | 二进制 |
1.1.4 PTA提交列表及说明
- 运行超时:开始把while条件写成while(1),后来询问同学时发现,这样就一直无法跳出while语句,然后把条件改为不等于回车,所以当回车时便可跳出while语句执行下一条
1.2 爬动的蠕虫
题目内容
- 一条蠕虫长1寸,在一口深为N寸的井的底部。已知蠕虫每1分钟可以向上爬U寸,但必须休息1分钟才能接着往上爬。在休息的过程中,蠕虫又下滑了D寸。就这样,上爬和下滑重复进行。请问,蠕虫需要多长时间才能爬出井?
这里要求不足1分钟按1分钟计,并且假定只要在某次上爬过程中蠕虫的头部到达了井的顶部,那么蠕虫就完成任务了。初始时,蠕虫是趴在井底的(即高度为0)。
输入格式:
输入在一行中顺序给出3个正整数N、U、D,其中D<U,N不超过100。
输出格式:
在一行中输出蠕虫爬出井的时间,以分钟为单位。
数据表达:定义整型变量N,U,D,high=0,i,time=0;N表示井深,U表示每分钟上爬高度,D表示每次休息下滑高度,high表示爬的高度,i表示每两分钟所爬长度,时间表示所用时间
数据处理:因为题目是头碰到顶部任务完成,所以不计最后一次下滑的一分钟,当爬的高度加最后一分钟要爬的高度U小于井深时执行while语句,高度循环累加,时间没次循环加两分钟,while循环里代表的是除最后一分钟前所爬的高度,所以输出结果答案要把时间加上最后一分钟要爬的U的时间。
伪代码:
1.2.2 实验代码截图
1.2.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
12 3 1 | 11 | 示例 |
32 3 1 | 31 | 较短距离 |
86 4 1 | 57 | 较长距离 |
1.2.4 PTA提交列表及说明
- 多种错误:while循环条件我开始就写了当高度小于井深,忽略了最后一分钟不下滑到顶就算成功,所以把while条件改成了最后一分钟上爬的高度U加前面时间所爬高度小于井深时循环执行。
- 答案错误:想到了条件,但是没注意答案也要加一分钟。
2. 代码互评
7-5题爬动的蠕虫
计科二班王璇代码
计科三班郭玲丽代码
自己代码
不同:
王璇:1.她用了for循环每分钟累加,我用的while语句每两分钟累加
2.她输出是时间减去下滑一分钟,我是加上上爬一分钟
3.她用取余为零来表示每分钟是上爬还是下滑,我直接用每两分钟上爬减下滑为爬行距离
郭玲丽:1.她的while条件是上爬距离小于井深,我是上爬距离加最后一分钟的U的距离小于井深
2.她用了if语句,把每分钟的运动距离分开来算,而我是两分钟一起
3.输出答案不同
3. 学习总结
3.1 学习进度条
周/日期 | 这周所花的时间 | 代码行 | 学到的知识简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
第一周 | 7天 | 39 | 学会用markdown语法写博客园,用PTA打代码 | 代码格式一无所知 |
第二周 | 6天 | 60 | 下载编译器,学到了提问的智慧 | 对编译器还是不了解 |
第三周 | 3天 | 121 | 分段函数的表达,if-else语句的用法 | 对各语法还是不了解,数学库函数有太多不知 |
第四周 | 3天 | 77 | for循环语句,累加计算 | 对各语句还是不熟练 |
第五周 | 4天 | 82 | 函数题,自定义函数,while循环语句 | 不明白函数题的写法,有些数学题是真的难 |
第六周 | 4小时 | 120 | 学会了数组,对for循环有了进一步了解 | 思维容易混乱,不知道该怎么去顺解题思路和答案想不全面 |
第七周 | 2小时 | 112 | 学会了switch语法,对数组运用更进一步 | switch语法还是不熟练,有些看得懂但是自己想不到怎么写 |
第八周 | 2小时 | 83 | 运用while语法,了解了二进制,学到%c表示字符型 | 对while语法并不是很熟练,伪代码不会写 |
3.2 累积代码行和博客字数
3.3 学习内容总结和感悟
3.3.1 学习内容总结
3.3.2 学习体会
这次作业二进制那个题用了挺长时间的,因为一开始都不知道二进制的意思是什么,问了同学自己也百度搜索了一下,差不多搞懂了什么是二进制后大概对公式有了一点概念,但是还是没有思绪,于是便参考了同学代码,就是一行一行看,然后不懂的再一行一行问,同学也很耐心的和我说,讲解也很清晰,让我能够看懂每一步的执行意思,还学到%c表示字符型,文字写完数据处理才发现要伪代码表示,因为觉得删了可惜,就加上了伪代码,虽然也许我那个伪代码并不正宗,但是以我的理解我尽力了,第五题呢,没时间就没有写了。每次做这个作业都觉得难搞,但是又总能做完后学到东西,还是希望自己以后作业可以早点做吧。
资料:二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。计算机中的二进制则是一个非常微小的开关,用“开”来表示1,“关”来表示0。
20世纪被称作第三次科技革命的重要标志之一的计算机的发明与应用,因为数字计算机只能识别和处理由‘0’.‘1’符号串组成的代码。其运算模式正是二进制。19世纪爱尔兰逻辑学家乔治布尔对逻辑命题的思考过程转化为对符号“0”,“1”的某种代数演算,二进制是逢2进位的进位制。0、1是基本算符。因为它只使用0、1两个数字符号,非常简单方便,易于用电子方式实现。
二进制与十进制的换算
二进制转十进制
方法:“按权展开求和”
【例】:(1011)2 = 12^3 + 02^2 + 12^1 + 12^0 = (11)10
规律:个位上的数字的次数是0,十位上的数字的次数是1,……,依次递增,而十分位的数字的次数是-1,百分位上数字的次数是-2,……,依次递减。
注意:不是任何一个十进制小数都能转换成有限位的二进制数。
——百度
来源:https://www.cnblogs.com/1076022899-lj/p/11870022.html