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


    0.PTA总分

    • 单循环
      单循环

    • 嵌套循环
      嵌套循环


    1.本章学习总结

    1.1 学习内容总结

    • 循环语句
      1. for语句: 其结构为:for( 语句1(只有开始执行一次);判断语句;循环结束后执行语句);。 需注意: 不适用于有特定的循环条件。
      2. while语句: 其结构为: {语句}while(条件);。 注意: 该语句为先判断后循环。
      3. do while语句: 其结构为:do{语句}while(条件);。 注意: 该语句先循环后判断。

    • 控制循环的语句
      1. break; 适用于各循环语句,广泛应用于switch语句。其作用是跳出整个循环,提前结束。
      2. continue; 注意:其 只能 用于循环,其作用是跳出 本次循环 进入下一次循环。

    • 单层循环
      1. 控制条件 :如素数判断循环语句中条件:i<=sqrt(n);
      2. 题目要求的代码理解 :如累加累乘中sum值的定义为0还是1;
      3. 对循环语句的选择:对 已知循环次数按规律循环 用for ;对 已知循环结束条件while注意 :当使用while和do while时记得 初始化和改变循环变量的值

    • 嵌套循环
      1. 学会找错 :利用vs的断点调试,当循环此时较大时利用printf实现变量观察。
      2. 题目解题思路 :利用flag进行状态的分析(如输出的量间有空格,行末无空格)
      3. 伪代码 :写出答题代码格式即思路,使解题更清晰。

    1.2 本章学习体会

    1.2.1学习体会

    个人感觉虽然内容比上一章难了些,但这也是个循循渐进的过程,可以接受。对于一些较难的题,毫无头绪时,便会查阅相关资料,大部分能够解决,而其他的我只能直接借鉴代码来理解,这样一来浪费的时间就出奇的多。此外个人感觉作业偏多(算上PTA),虽难不难。
    

    1.2.2代码量

    7 8 2周
    累计 440 570 1100

    2.PTA实验作业

    2.1 简单计算器

    2.1.1 伪代码

    输入第一个数;
    while(1)
            输入一个字符;
            switch(字符)
            {
                case('+'):输入第二个数,将两数相加的结果保存在第一个数,break;
                case('-'):输入第二个数,将两数相减的结果保存在第一个数,break;
                case('*'):输入第二个数,将两数相乘的结果保存在第一个数,break;
                case('/'):输入第二个数,
                                if(第二个数是0)
                                     输出"ERROR"
                                     return 0;
                                else 
                                     将相除的结果保存在第一个数
                                end if   break;
                case('='):输出第一个数的变量的值,break;
                default:输出"ERROR",break;
            }
        end while
    

    2.1.2 代码截图



    2.1.3 造测试数据

    输入 输出 说明
    -1+5= 4 开头的符号不作为字符
    3/2*9/5= 1 乘除混合
    5+-6= -1 多个字符以最后字符为准
    5/0 ERROR 除法分母为零判断错误

    2.1.4 PTA提交列表及说明


    1.编译错误:scanf语句的分号(;)以及case语句判断字符时的 ' ' 号忘记打。
    2.全部正确。
    

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

    2.2.1 数据处理

    定义一个长度为100的整型数组
    
    	for (n=0; ;n++)
    		输入一个字符;
                    if(字符为换行)
                        break;
    		end if
                    将字符转化为数字;
                    if(数字大于1)
                        输出"error input!"
                    else
                        将数字存放在数组中
                    end if
    	end for
    	for (m = 0, n = count - 2; ; m++, n--)
                    if(n=-1)
                        break;
    		end if
                    将数组的数从高到底进行十进制转换;	
    	end for                                          
    	输出结果;
    	return 0;
    }
    

    2.2.2 代码截图


    2.2.3 造测试数据

    输入 输出 说明
    111111 63 普通数据
    101010 42 以0结尾
    131 error input! 非法数字在中间
    311 error input! 非法数字在开头
    113 error input! 非法数字在末尾

    2.2.4 PTA提交列表及说明


    1.部分正确:起初代码没有采用数组,直接输入一个二进制数的方法,通过了样例跟多个零,对大于1判断部分代码不规范,随后改正。
    2.部分正确:完善后,发现多个1测试点过不去,其他均正确,调试发现当输入超过10个1(10还是11记不太清楚)后变量储存不了多个1。
    3.部分正确:这时改为数组做法,起初没有考虑到数组要重后往前操作,随后增加了计算数位通过数位跟循环从后递减到0进行操作。
    4.部分正确:部分代码编写的粗心导致,随后更改。
    2.全部正确。
    

    2.3 7-4 编程打印空心字符菱形

    2.3.1 数据处理

    输入需要打印的字符以及长度;
    	for (i=1; i <= 长度一半取整; i++)        //i=1为第一行
    		for (j = 1; j <= 长度一半取整 - i; j++)
    			输出字符前空格;
    		end for
    		输出字符
                    if(第一次输出)	
    			换行;
    		else		
    			for (j = 1; j <= 2 * i - 3; j++)
    				输出字符间空格;
    			end for
    			输出字符并换行;
    		end if
                    字符加一;
    	end for
    
    	字符减一,以抵消前面最后一次循环的加一;
    
    	for (i = 长度一半取整 - 1; i >= 1; i--)	
    		字符减一;
                    if(是最后一行)
    			for (j = 1; j <= 长度一半取整 - i; j++)
    				输出字符前空格;
    			end for
    			输出字符;
    		else
    			for (j = 长度一半取整 - i; j >= 1; j--)
    				输出字符前空格;
    			end for
    			输出字符;
    			for (j = 2 * i - 3; j >= 1; j--)
    				输出字符间空格;
    			end for
    			输出字符;
    		end if
    		换行;
    	end for
    

    2.3.2 代码截图



    2.3.3 造测试数据

    输入 输出 说明
    B 5 (结果符合题意) 样例数据
    A 1 A 长度为一
    C 9 (结果符合题意) 最大小于10的奇数

    2.3.4 PTA提交列表及说明

    1.部分正确:仅高度为1时正确,调试发现打印图形只对上半部分,对下半部分空格输出修正。
    2.部分正确:样例跟最小高度正确,当高度不为样例高度时,图像空格的输出仍然不正确,随后发现每行空格通用的规律,随后进行全面空格输出修改。
    3.全部正确。
    

    3.代码互评

    同学代码1:

    我的代码:


    1.同学仅采用了一个三嵌套循环,而我使用了两个二嵌套循环,相对而言同学代码更为简练,值得学习。

    2.同学通过定义空格变量实现对空格输出的控制,而我则用行数跟空格间的关系进行限定。


    同学代码2:



    我的代码:



    1.同学采用do while语句判断结束条件,而我用了恒真循环。

    2.同学均采用了flag来进行是否非法的判断,而我直接在非法条件下return 0;进行结束程序。

  • 相关阅读:
    愿你始终不移真心
    beautiful sentences
    (转)Design Pattern 新解(非常经典贴近生活)
    简述.Net下的应用程序授权。(转)
    thin的调试汇集
    Asp.net1.0 升级 ASP.NET 2.0 的几个问题总结 (转)
    Microsoft .NET Pet Shop 4 架构与技术分析 (转)
    面向对象编程,我的思想[上](转)
    七个问题:经济学常识 (转),真的很好,值的思考
    .NET控件收集(转)
  • 原文地址:https://www.cnblogs.com/gdlkblue/p/11706321.html
Copyright © 2020-2023  润新知