0.展示PTA总分
1.本章学习总结
1.1.1 while语句
- 格式:
while()
{
}
- 表达式可以是任意合法的表达式。
- 循环体语句只能是一条语句,但必须包含能改变循环条件真假的操作。
- 常用于循环次数不明时。
1.1.2 do-while语句
- 格式:
do
{
}while();
- 先执行循环体再判断循环条件,即至少有一次循环。
1.1.3. break语句
- 可中止循环,还用于stitch语句。
- 在中止循环时,常与if语句搭配使用。
1.1.4 continue语句
- 只用于循环。
- 只是跳过后面语句继续循环。
1.1.5 嵌套循环
- 若某变量对外层循环初始化,则将该变量放在外层for循环之前;若某变量对内层循环初始化,则将该变量放在外层for循环之内(但仍属于外层循环的循环体),内层for循环之前。
1.2 本章学习体会
1.2.1学习心得
本章给我的印象就是循环环环环环环,尤其是嵌套循环,环中环,套中套,整个人快傻掉,刚开始刷pta的时候几乎没有思路,直到看了超新星平台跟翁恺慕课视频,情况才有所好转。希望老师能在课堂上多一些例题,还有就是希望课堂派的预习作业能有答案详解。
1.2.2代码量
2.PTA实验作业
2.1求幂级数展开的部分和
2.1.1 伪代码
定义x用于储存输入的值,定义一个i用于循环,定义一个factorial用于表示分母的变化并储存变化后的分母的数据,定义一个sum储存各个加数之和。
令sum=factorial=1,输入x值
for (i = 1;; i++) //因为题目要求当最后一项的绝对值小于0.00001才结束循环,不好写i的极限条件,所以将该条件移至循环体内
{
factorial = factorial * i; //分母变化
sum = sum + pow(x, i) / factorial; //将各个加数相加
if (fabs(pow(x, i) / factorial) < 0.00001)
break; //依题意,当最后一项的绝对值小于0.00001时结束循环
}
输出sum值
2.1.2 代码截图
2.1.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
0 | 1.0000 | 题目极限数据 |
5 | 148.4132 | 题目极限数据 |
-5 | 0.0067 | 负数 |
2.1.4 PTA提交列表及说明
- Q1:部分正确:i的极限条件判断错误。
- A2:百度了一下,解决了。
- Q2:运行超时:factorial与其他数据类型不一,导致运算超时。
- A2:将factorial定义成double型。
2.2 求n以内最大的k个素数以及它们的和
2.1.2 伪代码
定义n与k用于储存输入的数据,定义count用于计算素数是否到k个,定义sum用于储存总和,定义I与j用于循环,定义isPrime用于判断是否是素数(1不是,0是)
输入n与k。
赋count与sum初值为0。
for (i = n; i >= 2; i--) //依题意,从后面一个个数的循环
{
isPrime = 0;
for (j = 2; j < i - 1; j++) //判断是否为素数的循环
{
if (i % j == 0)
{
isPrime = 1; //不是素数时, isPrime = 1,便于后期处理
break;
}
}
if (isPrime == 0)
{
sum = sum + i; //求和
if (count == 0)
{
printf("%d", i); //第一个素数直接输出数值
}
else
{
printf("+%d", i); //剩下的素数以+数值的形式输出
}
count++;
}
if (count >= k || i == 2) //依题意,当count>k或不够k时输出
{
输出sum
break;
}
}
2.2.2 代码截图
2.2.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
666 6 | 661+659+653+647+643+641=3904 | 正常数据 |
555 5 | 547+541+523+521+509=2641 | 正常数据 |
10000 10 | 9973+9967+9949+9941+9931+9929+9923+9907+9901+9887=99308 | 题目极限数据 |
2.2.4 PTA提交列表及说明
- Q1:编译错误:一开始死脑筋,想着如何将从小到大的数值重新倒叙排列
- A1:将循环从最大开始
- Q2:部分正确:忽略了题意的“若n以内不够k个素数,则按实际个数输出”条件
- A2:补充if (count >= k || i == 2)语句
2.3.1猜数字游戏
2.1.2 伪代码
定义number作为被猜数,定义yourNumber作为猜数,定义N为次数极限,定义count为计算次数。
输入被猜数与极限次数
count赋初值为0
do //直接进入循环,输入负数时停止
{
输入猜数
次数加一
if (yourNumber != number) //猜错时分三种情况
{
if (count < N && yourNumber < 0)
{
printf("Game Over\n");
return 0;
}
if (yourNumber > number)
{
printf("Too big\n");
}
if (yourNumber < number)
{
printf("Too small\n");
}
}
if (count > N&&yourNumber==number) //猜对但超出次数的情况对
{
printf("Game Over\n");
return 0;
}
if (yourNumber == number) //猜对且在次数内的情况,依题意分三种情况
{
if (count == 1)
{
printf("Bingo!\n");
return 0;
}
if (count > 1 && count <= 3)
{
printf("Lucky You!\n");
return 0;
}
if (count > 3 && count <= N)
{
printf("Good Guess!\n");
return 0;
}
}
} while (yourNumber >= 0);
2.3.2 代码截图
2.3.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
66 6 -6 66 | Game Over | 负数时直接退出 |
66 3 8 69 68 66 | Too small Too big Too big Game Over | 猜对但超出次数 |
66 3 8 69 66 | Too small Too big Lucky You! | 刚好第三次猜对时 |
2.3.4 PTA提交列表及说明
- Q:部分正确:将猜对但超出极限次数列入猜对情况中
- A:将猜对但超出极限次数这一情况单独列出
3.代码互评
3.1 查询水果价格
- 同学代码
3.2 查询水果价格
- 同学代码