第二次作业。。。

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其实可以并成一行输出,这方面我需要改进,在较少计算量的基础上追求代码的简洁。

posted @ 2018-10-28 22:58  明微  阅读(351)  评论(1编辑  收藏  举报