一、本周教学内容&目标
第4章 循环结构 4.1-4.2 熟悉使用while和do-while结构解决问题。
二、本周作业头
问题 | 答案 |
---|---|
这个作业属于那个课程 | C语言程序设计II |
这个作业要求在哪里 | http://edu.cnblogs.com/campus/zswxy/2019TA/homework/9984 |
我在这个课程的目标是 | 熟练掌握while与do-while的使用方法 |
这个作业在那个具体方面帮助我实现目标 | 练习markdown语法以及自主寻找资料的能力 |
参考文献 | 百度 |
三、本周作业##
1. PTA作业###
**1.1 7-3 jmu-c-二进制转10进制 **.
1.1.1 数据处理
- 数据表达:提出了数组a用于存储字符型,i,j用于for循环,count用于计数(strlen同样可以做到,但是我还是使用count做计数器),sum来存储结果,整数型数组number用于存储相应的字符型数组a的ASCLL值,用于后续计算;
- 数据处理:
/*
IF a[j]!='0'或'1' THEN
do flag=0;
ELSE
number[j]=a[j]-'0';
count++;
END IF
*/
1.1.2 实验代码截图
输入一组二进制字符,输出其对应的十进制数。当输入回车键时,输入结束。若输入非二进制字符,输出error input!
输入样例1:####
11111111
输出样例1:####
255
输入样例2:####
34
输出样例2:####
error input!
1.1.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
11111 | 31 | 输入数值进行验证 |
0000000 | 0 | 全部为零 |
10101010 | 170 | 1与0交叉进行验证 |
15142411 | eroor input! | 输入含有非0 1 数字 |
1.1.4 PTA提交列表及说明
1.部分正确:开始使用的为整形数组进行编写,但是存在一个答案错误(体重也说了遇到回车就停止,强调是字符型,后改就正确了)
2.答案正确:...
1.2 7-5 爬动的蠕虫.
1.2.1数据处理
- 数据表达:提出了题目所需的整形变量N,U,D;提出时间T,爬的路程sum;
- 数据处理:
/*
for T <- 1 to N
do sum <- sum - D;
T++;
sum = sum + U;
end
*/
1.2.2 实验代码截图
一条蠕虫长1寸,在一口深为N寸的井的底部。已知蠕虫每1分钟可以向上爬U寸,但必须休息1分钟才能接着往上爬。在休息的过程中,蠕虫又下滑了D寸。就这样,上爬和下滑重复进行。请问,蠕虫需要多长时间才能爬出井?
这里要求不足1分钟按1分钟计,并且假定只要在某次上爬过程中蠕虫的头部到达了井的顶部,那么蠕虫就完成任务了。初始时,蠕虫是趴在井底的(即高度为0)。
输入格式:####
输入在一行中顺序给出3个正整数N、U、D,其中D<U,N不超过100。
输出格式:####
在一行中输出蠕虫爬出井的时间,以分钟为单位。
输入样例:####
12 3 1
输出样例:####
11
1.2.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
26 8 6 | 19 | 输入数据进行验证 |
86 8 12 | 1073741831 | 不符合要求的输入造成错误 |
74 9 3 | 23 | 符合要求的计算 |
12 3 1 | 11 | 验证题目所给输入与输出 |
1.2.4 PTA提交列表及说明
答案正确:小学题目,唯一的问题就是最后如果出去后就不会下降了,围绕这个问题编写就可以了
**1.3 整除光棍 **.
1.3.1 数据处理
- 数据表达:提出输入整形n,用于for循环的i,用于后面进行判断的flag;
- 数据处理:
/*
for 要求无限循环但是i=1开始且进行i++
do x=x * 10 + 1;
if x>=n then
flag=1;
输出x/n;
else flag=1 then
输出0;
else
;
end if
if x为0 then
break;
end if
end
*/
1.3.2 实验代码截图
这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由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.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
31 | 3584229390681 15 | 验证题目所给输入与输出 |
51 | 2178649237472766884531590413943355119825708061 | 随机给入数据验证 |
15 | 数据太多且不能停止(无解) | 个位为5无法整除 |
8 | 同上无解 | 偶数不行 |
1.3.4 PTA提交列表及说明
1.部分正确:开始时时想直接当存在某个光棍数可以整除n时,直接输出,但是存在输出的数字过大,超出存储数据的范围(应用除法来解决)
2.答案正确:...
2. 代码互评###
同学代码 | 自己代码 | 同学代码 |
---|---|---|
注释:上述代码全部从网站上找的
第一份代码位置
第二份代码位置
与第一份的对比:
同:都是利用除法来解决问题(都是多次输出来构成一个正确的答案),都要用无限的循环结构来解决这道题目(break打破);
不同:他使用while,而我使用for;我对m<n进行判断,在这输出一个0,他仍是直接输出m/n,这比我更加简便;我直接用i计数,他则仍需一个计数器,这一点我更好;最后,感觉他的比我的更好一点;
与第二份代码的对比:
同:应用除法来每次算出一个数字,最后做总结;
不同:他使用字符型进行存储着他用除法每次计算出的数字,最后将数组输出(他数组加上'0'是因为数组在不需要存储会存在' '来终止,),而我时直接进行输出;
针对第二份代码的总结:想法很好,但是存在一个问题,就是如果,输出数字可能不可能出现超过1000位的数字,如果可能那就只是PTA的验证中不包含超过1000位的,使得此代码可以正确,所以我感觉还是直接输出就好了,但是这个人很有想法,值得学习;
3. 学习总结###
3.1 学习进度条.
周/日期 | 这周所花时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
第七周 | 9小时 | 513 | 定义函数 | return的返回位置 |
第八周 | 12小时 | 467 | 局部变量与全局变量 | 暂无 |
第九周 | 12小时 | 483 | 数组 | 暂无 |
第十周 | 14小时 | 723 | 指针 | 暂无 |
第十一周 | 15小时 | 832 | 结构 | 暂无 |
第十二周 | 17小时 | 728 | 指针(内容更多) | 暂无 |
3.2 累积代码行和博客字数.
3.3思维导图
3.3.1 学习内容总结与体会
C的学习进入到了尾声,但是出现了一系列强劲的一些命令用法,内容极多,仍需要一些题目来深入了解并熟悉使用;现在吧,感觉那些提升题其实不是特别难,但是它存在着一些我们需要想到的盲点,就像本周的提升题,一般提出一个变量进行存储这种思路行不通,因为不管什么类型,总是存在着取值范围的上限,而这道题给予我们换一种思路的方法来解决一些问题,但是这和算法有关,需要我们去学习;