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

0.展示PTA总分

0.1.1单循环题目集

C语言博客作业02--循环结构_第1张图片

0.1.2单循环排名分数展示

0.2.1嵌套循环题目集

C语言博客作业02--循环结构_第2张图片

0.2.2嵌套循环排名分数展示


1.本章学习内容总结

1.1学习内容总结

  • for循环
    • 一般形式为:
      for(表达式1;表达式2;表达式3)
      循环体语句
    • 注意,循环体语句只能是一条语句,若有多条语句要执行,则需用大括号括起来使其形成符合语句。
  • while循环
    • 一般形式为:
      while(表达式)
      循环体语句;
    • 循环体语句同for循环
  • for循环与while循环的对比:
    • 从两种循环语句的形式和执行流程可以看出,while语句的构成简单,只有一个表达式和一条循环体语句,分别对应循环的两个核心要素:循环条件和循环体,可以直接把循环问题的分析设计转换为语句实现。
    • for语句和while语句都能实现循环。一般情况下,如果题目中指定了循环次数,使用for语句更清晰,循环的4个组成部分(初始化、条件控制、重复的操作、通过改变循环变量的值最终改变条件的真假性使循环能正常结束)一目了然;其他情况下多使用while语句。
      • 如书上例4-1:使用格雷戈里公式求Π的近似值,要求精确到最后一项的绝对值小于0.0001. 没有直接给出循环次数,而是由某一项的值来控制循环,因此就选用了while语句。
    • 另外,while循环进入循环之前需对循环变量赋初值,目的是保证初始的循环条件为真,使循环能正常开始。
      • 如:
      item=1.0;
      whlie(fabs(item)>=0.0001){....}
    • while的循环体语句中必须包含能最终改变循环条件真假性的操作。
      • for语句改写成while语句:
      表达式1;
      while(表达式2)
      {
      for的循环体语句;
      表达式3;
      }
  • while循环的使用技巧
    • 使其恒真,配合break避免循环条件的考虑。
      while(1)
      {
      if(...)
       break;
      }
    • 自己造循环条件,比如使用特殊、不正常的值来结束循环。
      while(grade>=0)
      {
      ...
      scanf("%lf",&grade)
      }
      程序中用负数作为输入的结束标志。
  • do-while循环
    • 一般形式为:
    do
    {
      循环体语句
    }while(表达式);
    • for语句和while语句都是在循环前先判断条件,只有条件满足才会进入循环,如果一开始条件就不满足,则循环一次都不执行。do-while语句与上述两种循环语句略有不同,它先执行循环体,后判断循环条件。所以无论循环条件如何,只好会执行一次循环体。
    • do-while语句适合于先循环、后判断循环条件的情况,一般在循环体的执行过程中明确循环控制条件。它每执行一次循环体后,再判断条件,以决定是否进行下一次循环。
      *如书上例4-3中:
    do
    {
     number=number/10;
     count++
    }while(number != 0);
    如果输入0,进入循环,0整除10还是0,count为1,经判断number != 0为“假”,循环结束。
  • break语句
    • 当循环结构中出现多个循环条件时,可以由循环语句中的表达式和break语句共同控制。
      • 如:
      for(i=2;i<=m/2;i++)
      {
      if(m%i)==0
       break;
      }
      若m能被某个i整除,则m不是素数,提前结束循环。
    • 在多条件循环的循环语句后,一般需要由条件语句来区分不同的情况。
      • 如:
      if(i>m/2&&m!=1)
       ....
      else
       ...
  • continue语句
    • continue的作用是跳过循环体中continue后面的语句,继续下一次循环,continue语句一般也需要与if语句配合使用。
  • continue语句和break语句的区别
    • break结束循环,而continue只是跳过后面语句继续循环。
    • break除了可以中止循环外,还用于switch语句,而continue只能用于循环。
  • 嵌套循环
    for(i=1;i<=100;i++)
    {
       item=1;
       for(j=1;j<=i;j++)
           item=item*j;
       sum=sum+item;
    }
    上述形式的循环称之为嵌套循环(或多重循环),大循环中嵌套了小循环。其中大循环(外层循环)重复100次,每次累加1项item(即i!),而每次的累加对象i!由小循环(内层循环)计算得到,内层循环重复i次,每次连乘一项。
    • 注意:不能混淆外层循环和内层循环的初始化。对嵌套循环初始化时,一定要分清内外层循环。如:
      *把上面的item=1放到内循环内,就错误了。
    • 注意:多重循环的运算量是相当大的,我们对循环次数很大的程序需要考虑执行效率问题。

1.2本章学习体会

  • 课业较重(一度以为老师认为我们只学C语言)
  • 对于嵌套循环的具体设计不能有效快速的产出和修改。不过,学习函数后,解决问题就简单多了。
  • 另外采用静态变量来降低循环次数,提高程序效率,不失为一个好办法。
  • 这两周的代码量:1410行

2.PTA实验作业

2.1龟兔赛跑

2.1.1数据处理

乌龟走的路程turtle=0;
兔子走的路程rabbit=0;
比赛总时间T;
比赛进行时间t=0;
读入T;
for(t=1;t<=T;t++)
{
每隔十分钟判断一次,如果兔子超过乌龟,兔子休息三十分钟,反之继续跑。
}

2.1.2代码截图

C语言博客作业02--循环结构_第3张图片
C语言博客作业02--循环结构_第4张图片
C语言博客作业02--循环结构_第5张图片

2.1.3造测试数据

输入数据 输出数据 说明
242 @_@ 726 sample乌龟赢
9 ^_^ 81 兔子奔跑中赢不足10分钟
20 ^_^ 90 兔子睡觉中赢
45 -_- 135 奔跑中平局
135 -_- 405 睡觉中平局

2.1.4提交列表及说明

1.答案错误:当t+30>T的这一情况没有考虑
2.答案错误:之后VS测试还是错,是表达式弄错

2.2梅森数

2.2.1数据处理

输入的正整数int n;
计算的结果int item;
外循环变量int i;
内循环变量int j;
读入n;
如果n<=1,输出None并结束程序。否则什么都不做。
for(i=2;i<=n;i++)
{
用pow函数计算item;
内循环判断item是否是素数,不是则用break结束内循环;
是则输出item;
}
结束程序

2.2.2代码截图

C语言博客作业02--循环结构_第6张图片

2.2.3造测试数据

输入数据 输出数据 说明
6 3\n 7\n 31 sample
19 3\n 7\n 31\n 127\n 8191\n 131071\n 524287 sample等价最大n
0 None 最小n,输出为空集
2 3 n=2,只有一个梅森数

2.2.4PTA提交列表及说明

1.部分正确:”None“语句忘打。

2.3换硬币

2.3.1数据处理

5分币的数量int num5;
2分币的数量int num2;
1分币的数量int num1;
需换的钱数int x;
换的硬币总数int total;
计算换法int count=0;
读入x;
三层循环求答案:
for (num5 = 19; num5 >=1; num5--)
    {
        for (num2 = 49; num2 >= 1; num2--)
        {
            for (num1 = 99; num1 >=1; num1--)
            {
                if (num5 * 5 + num2 * 2 + num1 == x)
                {   
                    count = count + 1;
                    total = num5 + num2 + num1;
                    printf("fen5:%d, fen2:%d, fen1:%d, total:%d\n", num5, num2, num1, total);
                }
            }
        }
    }
    printf("count = %d", count);
结束程序;

2.3.2代码截图

C语言博客作业02--循环结构_第7张图片

2.3.3造测试数据

输入数据 输出数据 说明
13 fen5:2, fen2:1, fen1:1, total:4\nfen5:1, fen2:3, fen1:2, total:6\nfen5:1, fen2:2, fen1:4, total:7\nfen5:1, fen2:1, fen1:6, total:8\ncount = 4 sample一般小x
9 fen5:1, f()en2:1, fen1:2, total:4\ncount = 1 最小x
99 (前方数据冗长,不进行罗列)count=451 最大x

2.3.4提交列表及说明

1.部分正确:没看清题目要求从大到小,循环写成了从小到大。

3.代码互评(单词长度)

自己的代码

C语言博客作业02--循环结构_第8张图片

同学的代码

1.

C语言博客作业02--循环结构_第9张图片

  • 区别:
    • 1.在while语句中顺便把输入给做了,这老师在课堂上讲过。
    • 2.if(count>0&&count_0>0)中把无字母的顺带做了。

2.

C语言博客作业02--循环结构_第10张图片

  • 区别:采用while恒真的语句,这老师在课堂上也有讲过。

你可能感兴趣的:(C语言博客作业02--循环结构)