1.本章学习总结
1.1思维导图
1.2 本章学习体会及代码量学习体会
1.2.1学习体会
·经过这两周的学习,我学到了循环结构的一些知识,for语句,while语句,do-while语句,和上周相比,程序执行的步骤大幅度增加,一般的断点调试有着明显的局限性,利用printf输出是一个可以处理大规模循环的调试方法。
·flag是个好东西,这个可爱的小朋友可以用来表示一个状态,配合if可以简化很多东西,膜拜发flag的大神。
·PTA方面体会,循环结构的题目和顺序分支结构相比,题目难度略大,PTA在提交时很难一次看到一片红,要不断地去修改,这也许是一个计算机专业学生必由之路吧,任何程序不可能十全十美,只有不断调试修改,才能臻于完美,当把PTA中一个个绿色的答案错误全部变成红红的答案正确,成就感十足。
1.2.2代码累计
PTA总分
2.1排名截图
2.2我的总分:
290
PTA作业
3.1简单计算器
模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。
3.1.1算法分析
定义num,result分别用来表示被用来运算的数和结果,定义flag表示输入是否合法,定义ch来表示运算符。
输入num
while ch!=0
do 输入ch,输入num
if ch==/&&num==0
then 输出error
switch(ch)
case + result=result+num
case - result=result-num
case * result=result*num
case / result=result/num
default 输出error
end while
输出result
3.1.2代码截图
3.1.3数据测试
3.1.4提交列表
Q:这种做法与老师上课讲的用oldCh保存原有运算符的做法相比有什么好处。
A1:老师的做法有一个缺点,就是第一个输入的数的正负是受限制的,比如上课展示的代码只可以来做第一个数是正数的情况。
A2:在循环外先输入一个数,在用一个循环条件恒成立的do-while循环配合break使用,可以在循环中随时退出,更加灵活。
3.2给食堂打分
在商业和科学研究中,人们经常需要对数据进行分析并将结果以直方图的形式显示出来,这会大大增加这些数据的直观性,也便于数据的分析与对比。下面以顾客对餐饮服务打分为例,输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入一个正整数n(1≤n≤20),表示有n个学生被邀请来给自助餐厅的食品和服务质量打分,分数划分为1~5这5个等级(1表示最低分,5表示最高分),试统计调查结果,并用*打印出如下形式的统计结果直方图。
3.2.1算法分析
定义repeat表示要评分的次数,n表示每次评分要有多少人,num1,num2,num3,num4,num5表示每种评分的个数
输入repeat
for i=1 To repeat
输入n
num1=num2=num3=num4=num5=0//归零,防止累加
for j=1 To n
输入mark
switch(mark)
case 1 num1++
case 2 num2++
case 3 num3++
case 4 num4++
case 5 num5++
end for
输出1:for j=1 To j=num1
输出2:for j=1 To j=num2
输出3:for j=1 To j=num3
输出4:for j=1 To j=num4
输出5:for j=1 To j=num5
end for
3.2.2代码截图
3.2.3测试数据
3.2.4提交列表
本题最最需要注意的地方是在输入n后要对5个num进行归零操作,不然最后一张打印的表会是所有数据的总和。
此外,本题要用多个for语句,一定要分清每个for之间的关系,是嵌套还是并列。
3.3单词长度
你的程序要读入一行文本,其中以空格分隔为若干个单词,以.结束。你要输出每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如it's算一个单词,长度为4。注意,行中可能出现连续的空格;最后的.不计算在内。
3.3.1算法分析
定义ch表示输入的字符,定义count用来计数,flag用来处理空格带来的格式错误问题
while(1) do输入ch
if ch!=' '&&ch!='.' count++//合法字符,count计数
Then else if ch==' '&&count!=0//如果中间有多个空格,只输出一个count
输出count
Then else if ch=='.' &&count!=0//出现'.'先完成最后的输出,再跳出循环
输出count break
3.3.2代码截图
3.3.3测试数据
3.3.4提交列表
count!=0和格式是这道题的重点,也是易错点,如果在输出数据的时候不注意要加上count!=0的判断条件,很容易多输出好几个0,因为熊孩子们不一定在词与词之间只输入一个空格。
另外,我自认为在按字符输入的时候用while(1)和break配合的“迷之死循环”更加灵活,因为字符只能每次输入一个,break在跳出循环方面更加灵活。
4.代码互评
小伙子,你要知道,你自己渣渣得很!!!
康友煌同学的念数字代码
我的念数字代码
ROUND 1:代码简洁性
30行 VS 60+行,
康友煌WIN。
ROUND 2:程序运行情况
将数按字符输入,并挨个念出 VS 按常量输入,调用pow函数算出几位,在从左到右依次提出每位数字念出,
康友煌WIN。
格式错误处理方面
都用了flag,但是我的flag处理明显不如他,毕竟我是用了连个switch的男人,让flag直接成了摆设。
康友煌WIN。
被完虐。
总结
在做题的时候不要冲动,不要因为老师上课讲过或者见过就马上去写,先构思好,怎么可以让代码简单。
(说实话,我的代码在一开始写了100+行,后来把可以删掉的大括号删了,把case printf break写在了一行才变成了现在的60行,刚写完的时候我甚至有成就感,希望以后不会有这样的成就感.).
向前学习,后面学习的很多知识可以简化以前的问题,比如数组。