zoukankan      html  css  js  c++  java
  • C博客作业02--循环结构

    0.展示PTA总分



    1.本章学习总结

    1.1 学习内容总结

    • 循环结构的使用:

      • for循环结构:第一个是初始化,第二个是条件语句,第三个是自处理语句。 循环时第一个语句只使用一次,然后判断是否满足第二个语句,满足则进入循环体。直到不满足循环体再跳出。
      • while循环结构:先对while()括号内的条件进行判断,若为真则进入循环,否则跳出循环。

      • do-while循环结构:先执行循环体中的表达式的内容,之后再进行循环条件的判断,决定是否进行下一次的循环。

      • 总结

      1. while循环结构do-while循环结构的区别:while和do-while的区别在于判断条件的先后,即while是先判断,程序有可能不进入循环;do-while是后判断,就是说do-while无论是否满足条件都只是会进行一次循环。因此,同样的条件,两种循环的输出结过可能不同。

    例如:不相同的情况:两种的输入值与循环条件相同,但是输入的值不满足循环条件,此时while不进入循环而do while会循环一次

    如:


    此时两种循环是不同的。

    相同的情况:两种输入值与循环条件相同,同时进入循环的值与】满足循环条件,两者就是相同的。

    如:


    此时两种循环是相同的。

    2. **for循环结构**与**while循环结构**的区别:再使用for语句时,for语句中的成分直接完成了对变量的初始化,条件的控制以及自处理语句,使程序可以直接进行;而while语句因为只有一个条件,因此需要在循环之前做好对变量的初始化等工作。但在执行起来,两者并没有很多区别。
    
    • 循环语句的控制

      • break:在执行循环语句时,break也起到控制循环的作用。当满足执行break的条件时,break强制循环结束,不再执行循环体中break之后的内容,并直接跳出循环。一般来说,在循环语句中,我们会用if与break搭配,当条件满足时,起到跳出循环的作用。(注意!!!在嵌套循环中,break之后只能跳出它所在的那一次循环,而不是全部)
      • continue:与break不同,当执行到comtinue语句时,continue会跳过循环体中continue下面的语句,并结束本次循环,并进入下一次循环(注意!!!是只结束本次循环,而不是跳出循环!!!),在循环语句中,一般也是与 if搭配。
    • 嵌套循环

      • 顾名思义,嵌套循环就是在一个循环中包含着其他循环(也可以叫做外循环与内循环)。在使用嵌套循环时,我们需要保持自己的逻辑性,明确内外循环分别代表这什么,并控制好变量的初始化循环的条件结束,否则很容易出错甚至会死循环。
        例如这道分硬币的题目:

        只有首先明确了三个变量的初值(循环的开始),再一层层嵌套,最后利用if的判断输出结果。

    1.2 本章学习体会

    • 两周下来,我们又学习了嵌套循环,函数以及一点数据类型。现在学习起来已经开始有点难度以及吃力了,学习C语言的时间也在加长,希望可以通过大量有效的练习来巩固已经学习完的知识。
      • 嵌套循环:嵌套循环涉及了多次循环,需要在代码时有完整的逻辑。对于PTA中于龙的那道对日期合法性的判断还是不是很明白,不知道要怎么利用利用循环取判断日期的合法性。
      • 函数的定义与使用:个人感觉函数的使用大幅减少了主函数的代码量,但是我在写程序时一旦需要定自己定义的函数如果过多,我就开始有点吃力了,个人感觉使用函数还是要多练习。
    • 在这几周的学习中,特别是经过了第一次的机房考试后,我才可以感受到:只有自己一句一句写出来,经过调试和优化的代码才能真正成为你自己的代码,多与别人探讨,多独立思考,才能把学习到的知识真正变成自己的。从网上找的或是从同学那里参考的,或许短期之内会印象深刻,但是时间一长就会逐渐淡忘。你可以与同学讨论,对比同学与自己的想法与思路,最后再考虑是根据自己的私利优化还是借鉴同学的思路,最后再自己写出代码。(个人认为:思路可以参考借鉴,但是代码一定要自己写!!!)。开学已经快两个月了,但是直到现在,当写出了代码并全部正确时,心中还是会很高兴和激动。希望在今后的学习中,我还可以保持这样的状态一直努力下去。
    • 代码量:

    2.PTA实验作业


    2.1 PTA题目1

    c03-单循环结构
    7-9 龟兔赛跑 (20 分)
    本题要求:在一行中输出比赛的结果:乌龟赢输出@_@,兔子赢输出^_^,平局则输出-_-;后跟1空格,再输出胜利者跑完的距离。
    

    2.1.1 伪代码

    #include<stdio.h>  
    int main()
    {
    	定义乌龟跑的总距离 tortoiseSum;定义兔子跑的总距离 rabbitSum;定义时间T;定义rest用于判断是否休息,rest=0时奔跑,rest=30时休息;定义i;time用于循环
            输入时间T。
    	令tortoiseSum = 0;rabbitSum = 0;rest = 0;
    	for time = 0 to T-1 
    	{
    		tortoiseSum = tortoiseSum + 3;
    		if 时间为10的倍数time % 10 == 0 && rabbitSum兔子距离 > tortoiseSum乌龟距离&& 休息时间rest == 0
    		{
    			兔子休息时间加30;
    		}
    		if 休息时间等于0
    		{
    			兔子结束休息,开始奔跑rabbitSum = rabbitSum + 9;
    		}
    		else休息时间不为0
    		{
    			随着时间过去,休息时间减少rest--;
    		}
                     end if
    	}
            end for
    	if (乌龟跑的总距离 > 兔子跑的总距离)
    	{
    		输出@_@ %d"和tortoiseSum
    	}
    	else if (乌龟跑的总距离 < 兔子跑的总距离)
    	{
    		输出^_^ %d"和 rabbitSum
    	}
    	else
    	{
    		输出-_- %d"和rabbitSum
    	}
           end if
    	return 0;
    }
    

    2.1.2 代码截图

    2.1.3 造测试数据

    2.1.4 PTA提交列表及说明

    说明:
    1.部分正确:在第一次提交之后,出现部分错误:问题出现在循环结构中,第一次将第一个if和第二个if-else的位置写反,导致进入的条件判断先后出现问题,在time=10的倍数时,先判断
                         此时的rest,在第一个10分钟时休息时间本应加上30分钟,之后开始递减,但是此时因为位置写反,没有进行应该进行的递减,导致答案出现错误。
    2.全部正确:将两个if的判断语句调换之后,全部正确。
    

    2.2 PTA题目2

    c03-单循环结构
    7-10 jmu-c-二进制转10进制
    输入一组二进制字符,输出其对应的十进制数。当输入回车键时,输入结束。若输入非二进制字符,输出error input!
    

    2.2.1 伪代码

    #include<stdio.h>
    #include<math.h>
    #include<string.h>
    int main()
    {
    	定义一个字符串num[1000]来储存输入的二进制数 ;定义i,item;sum;a
            令item = 0;sign = 1;sum = 0;
    	输入数字
    	for i = 0 to num[i] > 0
    	{
    		if (num[i] != '0' && num[i] != '1')
    		{
    			item = 1;
    			输出error input!
    			break;
    		}
                    end if
    	}
            end for
    	计算字符串的长度
    	if item等于0
    	{
    		for i = a - 1 to 0
    		{
    			逐位计算每一位二级制数转换的十进制数并累加sum = sum + sign * (num[i] - '0')
    			sign = sign * 2;
    		}
    		输出sum
    	}
            end if
    	return 0;
    }
    

    2.2.2 代码截图

    2.2.3 造测试数据

    2.2.4 PTA提交列表及说明

    说明:
    1.部分正确:第一次使用数组和循环,通过取余数来将输入的数字一位一位取出来,并用数组来存储分离出来的每一个数,对题目给的样例也输出了正确答案,但是提交后却是部分正确,
                        之后调试发现,一旦输入的二进制数超过了10位,数据就会溢出。因此尝试把数组的定义改成long int。
    2.部分正确:第一次改为long int之后提交仍然显示部分正确。
    3.在VS中经过多次调试发现数组仍会溢出,因此想到用字符串的形式来存储数字字符,最终通过了所有测试点。 
    

    2.3 PTA题目3

    c03-单循环结构
    7-2 求幂级数展开的部分和
    已知函数ex可以展开为幂级数1+x+x^2/2!+...+x^k/k!,现给定一个实数x,要求利用此幂级数部分和求ex​​ 的近似值,求和一直继续到最后一项的绝对值小于0.00001。
    

    2.3.1 伪代码

    #include <stdio.h>
    #include <math.h>
    
    int main()
    {
        定义x, sum ,result,i
        令sum,result=1.0
        输入x
        int i;
        for  i = 1 to
        {
           后一项均为前一项再乘(x/i)result = result *(x/i);
            累加sum += result;
            if 出现一项的绝对值小于0.00001。
            {
                结束循环break;
            }
            end if
        }
        end for
        输出4位小数sum
        return 0;
    }
    
    

    2.3.2 代码截图

    2.3.3 造测试数据

    2.3.4 PTA提交列表及说明

    1.部分正确:一开始循环时将分子与分母都用pow函数进行计算,导致最后在程序在进行时运行超时了
    2.全部正确:后来将循环过程中的pow函数计算改为根据前后项之间的联系来进行累加,就不会出现超时,答案全部正确
    


    3.代码互评

    3.1.1

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

    同学代码:

    我的代码:

    两段代码异同

      1. 都能实现题目的要求,对输入的日期进行合法的判断。
      2. 两段代码的总体思路上都是通过穷举法,将输入三个数据进行6种排列判断。
      1. 很明显,同学的代码虽然也是穷举法,但是很简洁;而我的代码明显太长了。
      2. 同学的代码主要使用函数来解决闰年等需要判断的量;而我全篇采用if来判断。
      3. 同学利用数组对6种排列方法进行输出;而我是用if语句对每一项进行判断,造成代码过长。

    总结:这道题在写代码时一开始没有想的很多,就是利用if对6种情况判断,所以程序分成了三块类似的代码来判断,造成代码的过于冗长;而看来同学的代码后,我才发现同样是穷举法,但是同学巧妙的运用函数与数组,在达到目的的同时代码量不到我的三分之一。我同样也会数组,但是我在思考时没有想到使用它,因此,这也是我要向同学学习的地方,如何运用自己已经掌握的知识,而不是停留在最初级的写法。

    3.1.2

    7-10 jmu-c-二进制转10进制  
    

    同学代码:

    我的代码:

    两段代码异同

      1. 两段代码都能实现题目要求,将二进制转为十进制。
      2. 都将数字用字符型的数据进行输入,来达到目的。
      3. 都使用了字符转数据的计算
      1. 同学的代码采用的时单个字符的存储;而我采用的是字符串的方式进行存储。
      2. 同学用来转进制的方式是在while循环中进行判断,合理时一边读取字符,一边进行计算转换;而我是在判断输入的二进制数合理时,对字符串的长度进行计算,最后利用循环计算。

    总结:在这道题上,我和同学的想法大同小异,都想到了用字符型数据进行输入,主要区别就在单个字符的输入与字符串的输入以及代码的写法。个人认为两段代码都有自己的长处,可以互相学习,多多讨论。

  • 相关阅读:
    安装Oracle时出现环境变量Path的值大于1023的解决办法
    JavaScript通过元素id和name直接获取元素的方法
    [转载]T-SQL(Oracle)语句查询执行顺序
    [转载]T-SQL(MSSQL)语句查询执行顺序
    HTML5权威指南 17.其他API
    HTML5权威指南 16.拖放API与通知API
    HTML5权威指南 15.获取地理位置信息
    HTML5权威指南 14.使用Web Workers处理线程
    HTML5权威指南 13.扩展的XMLHttpRequest API
    HTML5权威指南 12.WebRTC通信
  • 原文地址:https://www.cnblogs.com/caihaoweideboke/p/11688374.html
Copyright © 2011-2022 走看看