循环结构
1.本章学习总结
1.1 思维导图
1.2 本章学习体会及代码量学习体会
1.2.1 学习体会
- 这周学习了循环结构,对循环结构使用的选择有的一定理解,知道循环次数一般用for,反之一般用while(能用for都能用while),而do-while用于至少要执行一次。
- 加深对语法的理解,学语句时感觉学会,但是考察方式变换时思路又会谜之走偏,总是把握不住关键点。
- 因为PTA2840分的题没有刷很多,所以做题的思路比较贫乏,掌握知识点却不知从何入手,所以听取老师建议争取多看代码,多积累经验,还能学习规范的代码格式。
- 随着学C的深入,解题的代码量越来越多,保证质量的同时还要高效率,所以决定逐步提高自己打字等方面的操作速度。
1.2.2 代码累计
2.PTA总分
2.1截图PTA中循环结构2次题目集的排名得分
2.2 我的总分
循环的嵌套:115分
循环结构(单层) :175分
总分:290分
3.PTA实验作业
3.1 PTA题目1
模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。
3.1.1 算法分析
定义number放输入的数 ,ch放输入的运算符,result放结果
while ch != ‘=’时
输入number
ch是 '+':result = result + number; break; //进行计算
ch是 '-':result = result - number; break;
ch是 '*':result = result * number; break;
ch是 '/':
if number!=0 then //分母不可为零
result = result / number;break;
else
输出 ERROR //结束运行
end if
default do
输出ERROR //结束运行
end switch
输入ch
end while
输出result 结束运行
3.1.2 代码截图
3.1.3 测试数据
3.1.4 PTA提交列表及说明
Q1:一开始没办法实现所有输入的运算(读入数据问题)
A1:然后调整了输入number和ch的位置
Q2:没有判断非法运算符和分母为0
A2:引入if语句判断分母,用default判断非法运算符
3.2 PTA题目2
形如2n−1的素数称为梅森数(Mersenne Number),本题要求编写程序,对任一正整数n(n<20),输出所有不超过2n−1的梅森数。
输入在一行中给出正整数n
按从小到大的顺序输出所有不超过2n−1的梅森数,每行一个。如果完全没有,则输出“None”
3.2.1 算法分析
定义i 定义flag 定义result用于放2的n次方-1的数
for i=2 to n do
result=pow(2,i)-1; //是梅森数条件之一
if result是素数(调用素数函数) then
输出result
flag=1 //flag==1就是有素数
end if
end for
if flag=0 then //没有梅森数
输出 None
end if
结束运行
定义判断素数的函数
3.2.2 代码
3.2.3 测试数据
3.2.4 PTA提交列表及说明
Q1:当没有梅森数时没有输出None,并且输出是从大到小(题意是从小到大)
Q2:调用pow次数太多,最大n时运行超时
A1:通过定义函数等简化代码,用for语句实现从小到大输出,同时减少了调用pow语句的次数
3.3 PTA题目3
你的程序要读入一行文本,其中以空格分隔为若干个单词,以.结束。你要输出每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如it's算一个单词,长度为4。注意,行中可能出现连续的空格;最后的.不计算在内。
3.3.1 算法分析
定义count放单词长度 定义flag=1;定义 ch放输入字符
do
{
count=0
do
{
输入ch
if ch != ' '且 != '.' then //满足一个单词或一个句子
count++
end if
} while ch!=' '且!='.' 继续循环
end while
if count !=0 then //count==0不用输出
if flag=1 then //此处为调整输出格式,最后没有空格
输出count
flag=0
else
输出 空格count
end if
end if
}while ch != ' . ' 继续循环 //一个句子结束
end while
结束运行
3.3.2 代码
3.3.3 测试数据
3.3.4 PTA提交列表及说明
Q1: 开头多了一个空格
Q2:空句子和连续多个空格时输出0导致错误
A1:用 IF语句判断count是否为0,当count不为0时才输出
4. 代码互评
同学代码:
我的代码:
4.2 两者的不同
1.同学:是先通过while循环计算出目标数的位数,然后得 first=pow(10,cnt-1),number%=first; first/=10;就可以顺序输出读音。(要念的数在此称目标数)
我:使用for循环把目标数放在数组中,然后再使用for循环把放数组的数按顺序输出读音。
2.同学:通过if语句(把空格独立出来输出)处理结尾空格
我:我是第一个不带空格,之后每个输出前带空格