zoukankan      html  css  js  c++  java
  • 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;进行结束程序。

  • 相关阅读:
    start tag, end tag issues in IE7, particularly in xslt transformation
    用SandCastle为注释生成chm文档
    Firebug
    架构的重点
    Linux Shell常用技巧(十) 管道组合
    Linux JDK升级
    Linux Shell常用技巧(十二) Shell编程
    Packet Tracer 5.0实验(一) 交换机的基本配置与管理
    Linux Shell常用技巧(六) sort uniq tar split
    Linux Shell常用技巧(二) grep
  • 原文地址:https://www.cnblogs.com/gdlkblue/p/11706321.html
Copyright © 2011-2022 走看看