0.展示PTA总分
1.本章学习内容
1.1学习内容总结
while循环
while
{
语句;
}
语句;
说明:
1.首先判断while后面括号内的语句是否为真,若为真则进入循环,执行大括号内的语句,若为假,则跳过while循环执行循环体外的语句。
2.若在while的大括号内执行了break语句,则循环立刻终止,跳出循环去执行循环体外的语句。
3.一直循环到while后面小括号的表达式为假,循环才结束。
do while循环
do
{
循环语句;
}while(循环条件);
说明:
1.先无条件执行一次循环体内的语句然后再判断循环条件的真假,除此之外与while循环结构一致。
2.特别注意在循环条件后面加上一个分号,表示循环的结束。
嵌套循环
int i,j,n;
for(i=0;i<n;i++)
{
for(j=0;j<i;j++)
{
}
}
说明:
1.外层循环一次,内层循环一轮。
2.如果在内层循环遇到break语句,则跳出内层循环,外层循环继续。
while,do while和for循环的使用场合
1.如果已经知道循环次数,则选择使用for循环更适合。
2.在不知道循环次数的情况下,更适合使用while循环或者do while循环,如果有可能一次循环都不执行,应该考虑使用while循环,如果至少循环一次,应该考虑使用do while循环。
break语句和continue语句
1.在没有循环结构的情况下,break不能用在单独的if-else语句中。
2.在多层循环中,一个break语句只能跳出当前循环。
3.continue语句的作用是跳过循环体后面的语句,继续下一次循环。
4.continue语句和break语句的区别在于,break语句结束循环,而continue语句只是跳过后面的语句继续循环。break语句除了可以中止循环,还用于switch语句,而continue语句只能用于循环。
1.2本章学习体会
- 本章我们学习了while循环,do while循环,for循环还有嵌套循环,感觉比之前的顺序、分支结构难。特别是嵌套循环,不容易看懂,因为用到的变量比较多,结构也是比较复杂,需要用的大括号多,一不小心漏掉一个就会编译错误,检查起来比较麻烦。所以,代码规范很重要,一个大括号占一行才不容易出错。另外,打代码特别需要耐心,可能要改很多次才提交正确,平时写代码的时侯细心一点,就能避免一些不必要的错误。
- 代码量为800行左右,离目标还差一大截。
2.PTA实验作业
2.1 7-9 龟兔赛跑
2.1.1伪代码
输入比赛时间T
do
{
if(十分钟后兔子还是比乌龟快)
{
if(30分钟后比赛没有结束)
{
tortoise = tortoise + 3 * 30;
time = time + 30;
}
else没有到30分钟比赛结束
{tortoise = tortoise + (T - time) * 3;
break;
}
}
tortoise = tortoise + 3;
rabbit = rabbit + 9;
time++;
}while(比赛时间不等于比赛结束用时)
输出比赛结果及胜利者所跑距离
2.1.2代码截图
2.1.3造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
242 | @_@ 726 | 正常数据 |
9 | _ 81 | 小于十分钟 |
30 | -_- 90 | 临界数据 |
2.1.4PTA提交列表及说明
- 提交之后显示答案错误,一时真看不出来哪里错,后来重新看一遍题目,是把兔子和乌龟每分钟前进的距离搞反了。
- 把rabbit=rabbit+3改成rabbit=rabbit+9后提交还是不对,再检查发现输出有问题,当rabbit>tortoise 时,输出的是乌龟跑的距离。
- 改完后提交发现输出还是有问题,再重新审题,发现输出表情后面多了一个空格。
2.2 7-8 查询水果价格
2.2.1伪代码
输出菜单
for(循环五次)
{
输入选择的编号
if(输入的编号为零)
退出,程序结束;
switch(编号)
{
case 1:price = 3.00;
break;
case 2:price = 2.50;
break;
case 3:price = 4.10;
break;
case 4:price = 10.20;
break;
case 0:break;
default:输入其他编号,价格为零;退出;
}
输出价格
}
2.2.2代码截图
2.2.3造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
3 | price=4.10 | 正常数据 |
0 | 无 | 0数据 |
6 | price=0.00 | 非正常数据 |
2.2.4PTA提交列表及说明
- 提交多次一直都是答案错误,一开始给choice定义的是字符型,所以就把case 1改成case '[1]',然后还是错。
- 后来把choice的类型改为整型,case '[1]'改成case 1,结果提交还是有错。
- 检查题目之后在for循环内,switch语句外加一个判断编号是否为零的if语句,提交还是有错啊。
- 重新检查每一次输出都有菜单出来,于是把输出菜单放到for循环外面。
2.3 7-2 梅森数
2.3.1伪代码
输入一个正整数n
if(n<20)
{
for(从2^2-1开始循环)
{
num = pow(2, i) - 1;
for(判断素数)
{
if(不是素数)退出;
if(是素数)
{
输出素数的值
count++;
}
}
}
}
if(count==0)
输出“None”
2.3.2代码截图
2.3.3造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
6 | 3 7 31 | 正常数据 |
2 | 3 | 特殊数据 |
0 | None | 0数据 |
2.3.4PTA提交列表及说明
- 提交后找错发现把num= pow(2, i) - 1 写成i = pow(2, i) - 1,改完后仍然有错。
- 再把i<n改为i<=n,感觉没什么变化,还是不对。
- 再检查发现给j的初值是1,然后把j=1改成j=2。
代码互评
同学代码截图
代码1
代码2
自己代码截图
- 第一个同学所用的变量比较少,使程序变得更简化,整个思路也比较清晰,for循环里面用了三个if语句,比较容易理解。她的代码写得规范,没有什么安全问题。
- 第二个同学的代码相对于我的就更简洁,引入了变量flag,使整个程序更简洁明了,值得学习。另外,代码的排版整洁有序,可读性强。