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

0.展示PTA总分(0----2)


1.本章学习总结

1.1 学习内容总结

  • 1.while语句:
    while语句用于循环,而且它的适用范围比for更广,一般形式为:
while(判断表达式)
{
    循环体语句;
}

while语句的执行流程如图所示:

  • 2.do-while语句:
    for语句和while语句都是在循环前先判断条件,只有条件满足才会进入循环,如果一开始条件就不满足,则循环一次都不执行。
    而do-while语句与上述两种语句略有不同,它会先执行循环体,后判断循环条件。所以无论循环条件的值如何,至上会执行一次循环体。
    其执行流程如图所示:
  • 3.break语句:
    break语句强制循环结束,一旦执行了break语句,循环将提前结束,不在执行循环体中位于其后的其他语句。break语句应该与if语句配合使用,即条件满足时,才执行break语句跳出循环,否则,若break语句无条件执行,意味着永远不会执行break后面的其他语句。
  • 4.continue语句:
    continue语句的作用是跳出循环体中continue后面的语句,继续下一次循环。
    continue语句和break语句的区别:break语句结束循环,而continue只能跳过后面语句继续循环。break除了可以中止循环外,还用于switch语句,而continue只能用于循环。

1.2.本章学习体会

  • 学习感受:又过去来2周,又收获了许多知识。知识,总是令人向往的。现在pta难度上升了,要破解一道题,就需要比以前多花费很多的时间了。所以就需要更丰富的知识,更需要绞尽脑汁了=.=。想想就刺激。
  • 代码量:758行(仅计算pta正确的代码量)。

2.PTA实验作业

2.1任务06-02-02 于龙又又遇见日期,叕哭了!

  • 2.1.1伪代码:
        int num1,num2,num3,temp;//num1、2、3用于输入3跟数字的储存,temp用于中间变量给3个数排序 ,从小到大 
	char ch1,ch2;
	int leapyear=0;//判断是否闰年
	int count=0;//数数,累加合法日期的数量。
        从小到大排序3个数字,if最大的数小于12,则count=6;
       if第二个数小于等于12,第三个数大于12,则继续判断2种情况:
       if第一个数是年,第二个数是月,判断是否闰年,如果第三个数在第2个数的日期内,则count++;
       if第二个数的年,第一个数是月,判断是否闰年,如果第三个数在第1个数的日期内,则count++;
       因为年,日互换后(日小于等于12)日永远符合,所以count=count+2;
       if第一个数小于等于12,第二个数大于12,(第1个数一定是月份)则继续判断2种情况:
       if第二个数是年,第三个数是日,判断是否闰年,如果第三个数在第1个数的日期内,则count++;
       if第三个数是年,第二个数是日,判断是否闰年,如果第二个数在第一个数日期内,则count++;
       if第一个数大于12,这样就没有一个合法的月份了,则count=0。
      if(count==0)就printf(“Invalid Date!”);
  • 2.1.2代码截图:




  • 2.1.3造数据测试

输入数据 输出数据 说明
2016-2-29 1 闰年2月极限
5-560-25 1 普通的唯一数据
7-6-8 6 3个数据都可以当年月日的数据
2015-29-2 Invalid Date! 非闰年二月非法数据
31-7-8 4 多种可能性的普通数据

2.1.4 PTA提交列表及说明:

咳咳,怎么肥事?这道题第一次见是在第一次上机考试上,所以:



1.部分正确:闰年二月错误。于是补充二月判断条件。
2.部分正确:忽略第二种大情况中第一次小情况年日互换后合法的情况。补充count=count+1。
3.部分正确:忽略第二种大情况中第二次小情况年日互换后合法的情况。故将count=count+1变成count=count+2.并写在第二种大情况的最下面。

2.2 7-9 单词长度

  • 2.2.1伪代码:
        char ch;//储存字符
	int count = 0;//计数
	int word = 0;//判断是否有字母长度,0是没有,1是有。有字母长度遇空格输出count
	int flag = 0;判断是不是第一个”单词“,0是第一次单词,输出count,不是第一个单词的话,则输出 count(这里前面有一个空格)
        while ((ch = getchar()) != '.') 设置循环条件,遇‘.’退出循环,
        if  ch不是空格,则count++;有单词长度了,word=1;
        if ch是空格并且word=1(有单词长度,排除多空格情况),则令word=0,if(flag==0)(第一个单词)输出count;else 输出(空格)count;
        count=0;(清空单词计数)
        flag=1;(下面的单词都不是首单词)
  • 2.2.2代码截图:

  • 2.2.3造数据测试
    |输入数据 | 输出数据 | 说明 |
    |-----|---------|-----------|
    | It's great to see you here.|4|一个完整的普通标准句子|
    | qwer qww .|4 3|多空格情况|
    | qwer qw .|2|句首多空格情况|
  • 2.2.4PTA提交列表及说明:

    1.部分正确:第一次没有word=0清除上一次单词长度的缓存,于是补上;
    2.部分正确:printf(“%d ”count);输出的是数字+空格,但是题目要求最后没有空格,于是改为输出空格+count。尝试了一下,错了=.=。
    3.部分正确:于是引入flag;判断单词是否是第一个,如果是第一个单词则输出count不加空格,后面的输出空格+count;解决。

2.3换硬币

  • 2.3.1伪代码:
        int fen5, fen2, fen1;//定义5分钱,2分钱,1分钱的数目
	int money;//定义钱数
	int count = 0;//定义count储存所以的可能性
        for(fen5 = money的5分之1; fen5>0; fen5--)(初始fen5的时候用最大值,使硬币数从小到大排列)
        {
           for(fen2 = (money - fen5*5) / 2; fen2>0 ; fen2--)(循环嵌套,考虑fen2的数目)
             {
                   于是fen1=money - fen5 * 5 - fen2 * 2;
                      如果fen1不等于0,则输出fen5,fen2,fen1,fen5+fen2+fen1,同时count++
             }
        } 

  • 2.3.2代码截图:
  • 2.3.3造数据测试
    |输入数据 | 输出数据 | 说明 |
    |-----|---------|-----------|
    | 13|fen5:2, fen2:1, fen1:1, total:4
    fen5:1, fen2:3, fen1:2, total:6
    fen5:1, fen2:2, fen1:4, total:7
    fen5:1, fen2:1, fen1:6, total:8
    count = 4 |题给数据,普通数据|
    | 8|fen5:1, fen2:1, fen1:1, total:3
    count = 1|最小值|
  • 2.3.4 PTA提交列表及说明

    1.在VS上答案错误:一开始是for(fen5=1;...)给fen5和fen2的初始值是1(即最小值),与题意不符,修改成fen5=money/5;fen2=(money-fen5*5)/2;
    2.在VS上答案错误:用3个for枚举fen5,fen2,fen1,这个程序太过复杂,于是将fen1直接赋值money与硬币相减后的结果,并讨论是否是0的情况;验证,答案似乎成功了。
    3.格式错误:原来fen5与fen2之间有一个空格啊,补上。

3.代码互评

龟兔赛跑:

同学代码截图:

自己代码截图:


这位同学在龟兔赛跑问题中,聪明的找到了随着时间变化中乌龟和兔子赛跑路程变化的规律,类似解一个数学问题。没有应用到for循环。
而我则是利用for循环分析每分钟每分钟,分析乌龟和兔子赛跑的路程,最后判断谁大谁小。
这令我想到,在分析一个问题的时候,是不是应该先考虑一下它的规律,好构思更精妙的程序。

于龙遇见日期,又哭了!

同学代码截图:

自己代码截图:

  • 这位同学厉害,利用了数组解决了这道题,并且思路清晰简单;有一个输入语句,两个for循环结构,三个if-else嵌套判断结构,三个输出出口。
    而我是铁憨憨的把全部情况都枚举出来,并且没有把那些相同情况判断的合并在一起,导致程序篇幅过长,使程序过于复杂。
    这令我学到,要使代码尽量简化,使更易阅读。并使我懂得:
    我的不同的选择,将决定我的程序的优劣,我的程序运行的速度,我程序占用内存的大小,等等。这都是我们衡量程序的标志。
posted @ 2019-10-20 22:55  陈毅隆  阅读(299)  评论(2编辑  收藏  举报