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

0.展示PTA总分



1.本章学习总结

1.1 学习内容总结

  • while循环

    • while循环与for循环一样,都要先判断循环条件才能进入循环体。
    • while循环一定要注意循环体内变量的变化,否则易死循环。
    • 比起for循环,while循环更适用于无法事先判断循环次数的循环。
  • do-while循环

    • 与其他循环相比较,do-while循环的特点是会先进入循环体再判断循环条件,即无论循环条件是否为真,循环体都会被执行一次。
  • break和continue语句

    • break语句:直接跳出整个循环,提前结束循环,进入循环后面的语句。
    • continue语句:跳过continue后面的语句不执行,结束本次循环,继续下一次循环。
  • 嵌套循环

    • 外循环执行一次,内循环要执行一轮,所以一定要注意内循环中是否有变量要重置
    • 在内循环中如果有break,是跳出内循环,而外循环继续。

1.2 本章学习体会

  • 作业难度上升,作业量也开始变大。
  • 做题的速度没有之前快,但相对来说花在写代码上的时间也更多了,代码量变大。
  • 代码量大概在1100左右。

2.PTA实验作业

2.1简单计算器

2.1.1 伪代码

定义字符型变量ch、oldch用了存储用户输入的字符;定义一个整型变量num,当用户输入的字符为数字时,将数值存储到num中;定义一个整型变量result,用于存储并输出计算的结果;定义一个flag=0,用于判断用户是否输入非法字符。
if ch为数字
then num = ch - '0'+ num*10
else switch(oldch)
if oldch为非法字符 then flag=1
else 做相应计算
end if
end if
if flag=0 then 输出result
end if

2.1.2 代码截图

2.1.3 造测试数据

输入数据 输出数据 说明
10/0= ERROR 除法分母为0的数据
1【2= ERROR 有非法字符的数据
1+2= 3 正常数据

2.1.4 PTA提交列表及说明


提交列表说明:
1.部分正确:没有定义一个flag判断之前的数据中是否出现了不合法的情况,导致特殊情况时输出的结果错误。
2.答案正确:定义一个变量flag,通过判断flag的值来判断之前的数据中是否出现了不合法的情况。

2.2龟兔赛跑

2.2.1 伪代码

定义time、rabbit、turtle分别表示时间、兔子跑的路程、乌龟跑的路程。
for i = 1 to i = time do
rabbit += 9;turtle += 3;
if i % 10 == 0 then
if rabbit > turtle then
if time - i >= 30 then
turtle += 90;i += 30;
else turtle += 3 * (time - i);break;
end if
end if
end if
end for
判断rabbit和turtle的大小,按要求输出结果。

2.2.2 代码截图

2.2.3 造测试数据

输入数据 输出数据 说明
7 _ 63 不足10分钟的数据
20 _ 90 正常数据
242 @_@ 726 正常数据

2.2.4 PTA提交列表及说明


1.部分正确:在VS上测试时只用了PTA上给的数据,答案正确后就直接提交了,后发现没有判断兔子休息时时间已不足半小时的情况。
2.答案正确:在兔子休息的if语句里再嵌套一个if语句,用来判断剩余时间是否大于等于30分钟,后进行相应计算。

2.3水仙花数

2.3.1 伪代码

定义一个函数int fact(int m,int n),用来计算幂次方。
for i = fact(10, n - 1) to i = (fact(10, n) - 1) do
item = i;sum = 0;
for j = 1 to j = n do
num = item % 10;sum += fact(num, n);item = item / 10;
end for
if i == sum then printf("%d\n", i);
end if
end for

2.3.2 代码截图

2.3.3 造测试数据

输入数据 输出数据 说明
3 153、370、371、407 正常数据
7 1741725、4210818、9800817、9926315 正常数据

2.3.4 PTA提交列表及说明



1.部分正确:第一次提交时使用了pow函数,答案都是正确的,但运行超时。
2.答案正确:这次提交计算幂次方使用了自己写的函数,而不是直接用pow函数。


3.代码互评

同学代码:

#include <stdio.h>
int main()
{
	int t = 0;
	int tortoise = 0;
	int rabbit = 0;
	int trabbit = 0;
	int T;
	int ret = 0;

	scanf("%d", &T);

	while (t != T)
	{
		tortoise += 3;
		if (!ret)
		{
			trabbit++;
			rabbit += 9;
		}
		t++;
		if (trabbit % 10 == 0 )
		{
			if (rabbit > tortoise)
			{
				ret = 1;
				trabbit += 30;
			}
		}
		if (t == trabbit)
		{
			ret = 0;
		}
	}
	if (rabbit > tortoise)
	{
		printf("^_^ %d", rabbit);
	}
	else if (rabbit < tortoise)
	{
		printf("@_@ %d", 3*T);
	}
	else
	{
		printf("-_- %d", 3*T);
	}
	return 0;
}

我的代码:

#include <stdio.h>

int main()
{
	int time;
	int rabbit;
	int turtle;
	int i;

	scanf("%d", &time);

	rabbit = 0;
	turtle = 0;

	for (i = 1; i <= time; i++)
	{
		rabbit += 9;
		turtle += 3;

		if (i % 10 == 0)
		{
			if (rabbit > turtle) 
			{
				if (time - i >= 30)
				{
					turtle += 90;
					i += 30;
				}
				else
				{
					turtle += 3 * (time - i);
					break;
				}
			}
		}
	}
	if (rabbit > turtle)
	{
		printf("^_^ %d",rabbit);
	}
	else if (rabbit < turtle)
	{
		printf("@_@ %d",turtle);
	}
	else
	{
		printf("-_- %d", rabbit);
	}

	return 0;
}

1.同学的代码是在兔子休息时,乌龟的路程依旧一分钟一分钟的往上加,而我直接将乌龟的路程加上90,时间也加上30分钟。
2.相比起同学的代码,我这种方法效率会更高一些。

posted @ 2019-10-20 22:03  1911王奕  阅读(217)  评论(0编辑  收藏  举报