C语言博客作业02--循环结构

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代码量

第一周 第二周 总计
636 535 1171

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 查询水果价格

- 同学代码


- 我的代码

- 对方用put()输出价格表。

3.2 查询水果价格

- 同学代码


- 我的代码

- 对方用while语句进行循环

posted @ 2019-10-20 22:52  甘津津  阅读(310)  评论(2编辑  收藏  举报