0.PTA总分
-
单循环
-
嵌套循环
1.本章学习总结
1.1 学习内容总结
- 循环语句
- for语句: 其结构为:for( 语句1(只有开始执行一次);判断语句;循环结束后执行语句);。 需注意: 不适用于有特定的循环条件。
- while语句: 其结构为: {语句}while(条件);。 注意: 该语句为先判断后循环。
- do while语句: 其结构为:do{语句}while(条件);。 注意: 该语句先循环后判断。
- 控制循环的语句
- break; 适用于各循环语句,广泛应用于switch语句。其作用是跳出整个循环,提前结束。
- continue; 注意:其 只能 用于循环,其作用是跳出 本次循环 进入下一次循环。
- 单层循环
- 控制条件 :如素数判断循环语句中条件:i<=sqrt(n);
- 题目要求的代码理解 :如累加累乘中sum值的定义为0还是1;
- 对循环语句的选择:对 已知循环次数 或 按规律循环 用for ;对 已知循环结束条件 用 while 。注意 :当使用while和do while时记得 初始化和改变循环变量的值 。
- 嵌套循环
- 学会找错 :利用vs的断点调试,当循环此时较大时利用printf实现变量观察。
- 题目解题思路 :利用flag进行状态的分析(如输出的量间有空格,行末无空格)
- 写伪代码 :写出答题代码格式即思路,使解题更清晰。
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:
我的代码: