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;进行结束程序。

原文地址:https://www.cnblogs.com/gdlkblue/p/11706321.html