第二次作业。。。
1.本章学习总结(2分)
1.1 思维导图
1.2 本章学习体会及代码量学习体会
1.2.1 学习体会
本周学习了循环结构,除了for循环以外还有while循环和do-while循环,比起分支结构,本周学习的难度明显加大了,需要理出一个明确的思路才好下笔写代码。程序中很多问题都不能通过直接看出来了,需要借助调试工具或者是在程序中添加输出语句来进行程序的查错。有时候还会遇到一些一时半会难以调试出的问题,这时就需要借助书本或者网络知识,结合阅读代码理清逻辑,才能写出正确的代码。
1.2.2 代码累计
2.PTA总分(2分)
2.1截图PTA中循环结构2次题目集的排名得分
2.2 我的总分:
290
3.PTA实验作业(6分)
3.1 PTA题目1
模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。
3.1.1 算法分析
- 定义整型变量num存放输入的数字,定义字符型变量ch存放输入的字符。
- 输入一行四则运算算式,以=号结尾。
- if i=0 do sum=num
- else do switch(oldch)
case'+':sum=sum+num;break;
case'-':sum=sum-num;break;
case'':sum=sumnum;break;
case'/': if num!=0 do sum=sum/num
else do flag=1并输出"ERROR"
break; //条件都不满足则退出循环// - if ch'+'或ch'-'或ch'*'或ch'/' do oldch=ch //延长变量ch的存时间//
else if ch!='=' do flag=1并输出"ERROR" ;break; //满足else if中的条件则退出整个循环// - 循环一次i自增1,当ch='=' do 退出循环
- if flag==0 do 输出sum的值
3.1.2 代码截图
3.1.3 测试数据
3.1.4 PTA提交列表及说明
- 开始时将一整串算式都当做字符型数据来处理,结果不但需要添加字符型数据与整型数据之间转换步骤,而且还容易弄混变量,调试改错也变得很复杂,最后尝试将数字和符号分开用不同的数据类型进行定义,发现这样较好。
- 还有输出ERROR时没有考虑后续步骤,导致ERROR输出后还输出了num,后来引入了flag变量,解决了这一问题。
3.2 PTA题目2
以顾客对餐饮服务打分为例,输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入一个正整数n(1≤n≤20),表示有n个学生被邀请来给自助餐厅的食品和服务质量打分,分数划分为1~5这5个等级(1表示最低分,5表示最高分),试统计调查结果,并用*打印出如下形式的统计结果直方图。
3.2.1 算法分析
- 定义三个整型变量repeat,n,num
- 输入repeat
- for i=1 to repeat do
- 定义五个变量num1,num2,num3,num4,num5用于统计各个等级的人数,并将它们初始化为0
- 输入n
- for j=1 to n do
switch(num) //借助循环统计各个等级的人数//
case 1:num1++;break;
case 2:num2++;break;
case 3:num3++;break;
case 4:num4++;break;
case 5:num5++;break; - 输出"1:"
for k=0 to num1 do
输出"*"
该循环结束后输出\n - 按照1-5顺序重复以上操作5次,输出统计直方图
3.2.2 代码
3.2.3 测试数据
3.2.4 PTA提交列表及说明
1.开始时打算先输出1:2:3:4:5:五行,然后在输出,但后来发现程序不能向上输入,于是明白需要先统计每个等级的人数,然后再进行循环输出。
3.3 PTA题目3
你的程序要读入一行文本,其中以空格分隔为若干个单词,以.结束。你要输出每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如it's算一个单词,长度为4。注意,行中可能出现连续的空格;最后的.不计算在内。
3.3.1 算法分析
- 定义一个整型变量num,一个字符型变量ch
- do 输入ch
- if ch' ' do
while to ch' ' do 输入下一个ch
if i>=1 do
if ch=='.' do 输出num
else 输出num后带一个空格 - num=0;
- if ch!=' ' do num++ i++
- while ch!='.'
- if num!=1 do 输出num-1
3.3.2 代码
3.3.3 测试数据
3.3.4 PTA提交列表及说明
这道题是失败最多的题目,尝试了很多次,一直在开头结尾多空格的那一个测试点卡住,找不到错误的点在哪里,因为空格无法显示,所以调试也没有调试出什么毛病,于是后来想到老师上课讲的方法,把空格替换成*,终于发现了问题,运用了一个小分支解决了它。
4.代码互评
从同学中找一篇优秀代码,和自己写的代码比较下,说明下自己和同学代码区别,各自优势是什么?
4.1 代码截图
同学代码截图。
自己的代码截图
4.2 二者的不同
1.她的代码比我的代码行数少得多,看上去较为简便和清晰,可读性更高。
2.我觉得必要的注释(如不常见变量名的解释和一些较为复杂的运算步骤)应该要有,这一点我也并不是做的很好,希望我们可以一起努力。
3.她并没有运用到嵌套循环的句式,而是采用了将所有可能性一一列举,然后再进行筛选的方式,无疑这样的方式运算量较大,我觉得单从运算量多少的角度来说我的代码更胜一筹。
4.我的代码还是较为累赘,比如循环中两个printf其实可以并成一行输出,这方面我需要改进,在较少计算量的基础上追求代码的简洁。