问题 | 回答 |
---|---|
这个作业属于哪个课程 | C语言程序设计II |
这个作业要求在哪里 | 作业要求 |
我在这个课程的目标是 | 能够自主开发出一个软件,拥有用户并能够维护程序运行 |
这个作业在那个具体方面帮助我实现目标 | 掌握了break语句,continue语句,do-while语句,以及循环结构的嵌套 |
参考文献 | 百度 |
PTA实验作业
1.1jmu-c-二进制转10进制
输入一组二进制字符,输出其对应的十进制数。当输入回车键时,输入结束。若输入非二进制字符,输出error input!
输入样例1:
11111111
输出样例1:
255
输入样例2:
34
输出样例2:
error input!
1.1.1数据处理
数据表达:使用了sum,i,都定义为整型,变量er定义为字符型
数据处理:
sum用来表示二进制转换为十进制的数,i用于辅助判断,er为二进制符
while(判断输入是否为回车)
{
if(判断是否输入为二进制符'1'或'0')
{
如果不是,则给i赋值为0
并跳出循环
}
else
{
将二进制数转换为十进制数,并由变量sum接收结果
赋值i为1
}
}
if(判断i是否为0)
{
yes,则输出“error input!”
}
if(判断i是否为1)
{
yes,则输出sum
}
1.1.2实验代码截图
1.1.3造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
111111 | 63 | 输入为二进制数 |
66 | error input! | 输入不为二进制数 |
1.1.4PTA提交列表及说明
说明:前期解这道题的思路是打算用除以2取余的方法去判断二进制数,结果发现这个想法有点错的离谱,后根据其他几位助教的提示用判断字符的方法去判断二进制数解决了这道题
1.2爬动的蠕虫
一条蠕虫长1寸,在一口深为N寸的井的底部。已知蠕虫每1分钟可以向上爬U寸,但必须休息1分钟才能接着往上爬。在休息的过程中,蠕虫又下滑了D寸。就这样,上爬和下滑重复进行。请问,蠕虫需要多长时间才能爬出井?
这里要求不足1分钟按1分钟计,并且假定只要在某次上爬过程中蠕虫的头部到达了井的顶部,那么蠕虫就完成任务了。初始时,蠕虫是趴在井底的(即高度为0)。
输入格式:
输入在一行中顺序给出3个正整数N、U、D,其中D<U,N不超过100。
输出格式:
在一行中输出蠕虫爬出井的时间,以分钟为单位。
输入样例:
12 3 1
输出样例:
11
1.2.1数据处理
数据表达:使用了变量n,u,d,move,rest,distance,都定义为整型
数据处理:
n,u,d为输入的三个数据,move用于储存蠕虫移动的时间,rest用于储存蠕虫休息的时间,distance为距离地面的距离
while(ditance不为0)
{
move移动的时间加一分钟
距离减少u
if(判断distance是否小于等于0)
{
yes,则跳出循环
}
休息时间rest再增加一分钟
否则下滑d,distance+d
}
输出总时间,move+rest
1.2.2实验代码贴图
1.2.3造测试数据
数据输入 | 数据输出 | 说明 |
---|---|---|
2 2 1 | 1 | 蠕虫刚好在一分钟爬到顶部 |
12 8 2 | 3 | 蠕虫最后一次休息后距离小于移动速度 |
1.2.4PTA提交列表及说明
说明:前期将if语句内条件写成了distance==0,让自己将变量改了一些莫名其妙的赋值,也运行正确了。然后在测试数据过程中,发现计算结果存在问题,然后将if条件改了一下(代码截图所示),将变量赋值回归正常,结果测试结果符合预期
1.3 整除光棍
这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1组成的数字,比如1、11、111、1111等。传说任何一个光棍都能被一个不以5结尾的奇数整除。比如,111111就可以被13整除。 现在,你的程序要读入一个整数x
,这个整数一定是奇数并且不以5结尾。然后,经过计算,输出两个数字:第一个数字s
,表示x
乘以s
是一个光棍,第二个数字n
是这个光棍的位数。这样的解当然不是唯一的,题目要求你输出最小的解。
提示:一个显然的办法是逐渐增加光棍的位数,直到可以整除x
为止。但难点在于,s
可能是个非常大的数 —— 比如,程序输入31,那么就输出3584229390681和15,因为31乘以3584229390681的结果是111111111111111,一共15个1。
输入格式:
输入在一行中给出一个不以5结尾的正奇数x
(<1000)。
输出格式:
在一行中输出相应的最小的s
和n
,其间以1个空格分隔。
输入样例:
31
输出样例:
3584229390681 15
1.3.1数据处理
数据表达:使用变量x,i,n,a,都定义为整型
数据处理:
x为输入的整数,i用于循环并用于储存光棍位数,n为光棍数,a用于辅助判断
for(用变量i进行循环)
{
增加光棍位数
if(光棍数是否大于输入x)
{
yes,则a赋值1
输出光棍数n除以整数x的值
}
else if(a是否等于1)
{
yes,则输出0
}
n=n%x用于判断是否整除
if(n被整除)
{
跳出此循环
}
}
输出光棍数位数
1.3.2实验代码截图
1.3.3造测试数据
数据输入 | 数据输出 | 说明 |
---|---|---|
33 | 3367 6 | 光棍位数为6 |
99 | 1122334455667789 18 | 光棍位数为18 |
1.3.4PTA提交列表及说明
说明:参考过代码,内容已理解
2.代码互评
c1
c2
myself
- 我的代码与c1不同点在于他的循环判断的是距离井口的距离是否大于行动速度来进行计算的,如果单位时间内不能到达顶部,则时间加上行动时间和休息时间,并减去下滑距离,而我的是判断蠕虫是否已到达顶部来进行循环,并计算时间,他的代码更为简便
- 与c2不同的是除开变量n,u,d外,他只再定义了两个变量来进行结果的储存,与自己的比较,可能自己的略微啰嗦
3.学习总结
3.1学习进度条
周 | 这周所花时间 | 代码行 | 学到的知识简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
第五周 | 8 | 56行 | 常量,变量和数据类型 | 无 |
第六周 | 12 | 89行 | 格式化输入函数scanf(),for循环 | 无 |
第七周 | 19 | 286行 | 分支结构 | 无 |
第八周 | 15 | 238行 | 函数的定义和调用 | 函数的定义和调用的基本用法 |
第九周 | 10 | 173行 | while语句,函数的定义和调用强化 | 被调函数返回值 |
第十周 | 20 | 312行 | 逻辑运算符优先级,定义和访问数组 | 逻辑表达式的运算 |
第十一周 | 11 | 189行 | switch语句,ASCⅡ码的了解 | 进制转换 |
第十二周 | 9 | 279行 | continue语句,循环结构的嵌套,do-while语句,条件运算符 | break语句与continue语句的区别 |
3.2累积代码行和博客字数
3.3学习内容总结和感悟
3.3.1学习内容总结
3.3.2学习体会
1.本周在一次晚自习上看书偶然看到了条件运算符的写法,这与我在之前看作业时有同学写的代码中使用的一样,这也解决了我的疑惑,并让我掌握了一种新的操作数的运算符,这会简化自己代码,让自己的代码更清晰
2.学习编程也有一段时间了,从开始的无知,到现在的了解到深入,让自己感受到了代码中的乐趣,当自己写出来的代码能够成功运行的时候,那种感觉是很奇妙的
3.不断在暗示自己要合理规划时间,自己也一定要坚持下去