C语言I博客作业08
1.作业头
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/zswxy/SE2020-2/ |
---|---|
这个作业要求在哪里 | <https://edu.cnblogs.com/campus/zswxy/SE2020-2/homework/11627 > |
这个作业的目标 | <回顾以往知识点,熟悉并运用各种语句(break,continue语句)的使用解决问题并学会进行学习总结,从别人的作业中吸取经验> |
学号 | <20209124> |
一、本周教学内容&目标
第4章 循环结构 4.3熟悉break、continue的使用 4.4 熟悉使用循环的嵌套解决问题。
二、本周作业
1,PTA实验作业
2,代码互评
3,学习总结
三、作业格式
1.PTA实验作业
排名图片
1.1显示指定范围内的素数
输入整数m,将所有大于1小于整数m的素数存入所指定的数组中(数组最多只存放100个素数,超过则提示“OVERFLOW”),输出各素数——若输入的m≤2,则提示“NO”,程序终止。注:素数(Prime Number),亦称质数,指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。
1.1.1数据处理
数据表达:使用整型函数进行定义素数prime并在其中包含定义了一个m,以便于进行后期的程序判断,程序中包含了大量的if-else语句判断,并将for语句嵌入其中,从而得出最后答案,其中程序中还含有"return 1"这个意思是跳回去
数据处理:多处使用了判断加条件语句,虽未使用新教学的嵌套循环方法,但却运用了新的知识"数组"(其中有了解到)进行一些必要处理,在本段程序中主函数并不和其他程序一样位于最开始,而是位于程序的中间,但这样处理更有利于对程序的理解,以便于得出最后答案
1.1.2实验代码截图
1.1.3造测试数据
按照以下表格,输出你的程序面向各种测试数据结果,除了题目给出的测试数据,可以自己再造其他临界数据,越多越好,并加上必要说明
输入数据 | 输出数据 | 说明 |
---|---|---|
99 | 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 | 说明在0~99中含有如输出数据所示的25个素数 |
330 | OVERFLOW | 一个数组中最多可存放100个素数,说明0~330中的素数不止100个 |
1 | NO | 由于0<2,导致程序终止出现NO |
1.1.4 PTA提交列表及说明
根据PTA提交列表,简要描述调试程序碰到的问题及解决办法
提交列表说明:
1.编译错误:逻辑无错误,有些语句后面缺乏必要的符号,偶尔缺少必要的符号等还将scanf语句后的;错误打成了中文符号,造成了本题的编译错误并且本题只有编译错误,提交结果显示无错误还不够,不知道为啥只有9分,认真对比了其他同学的代码也并未发现错误
2.解决方法:发现题目编译错误后仔细检查并在检查过程中发现了符号的错误,询问同学查询c语言相关书籍确认并改正过来后编译正确,并且在其他编译器上输入代码时也显示正确,思前想后我觉得可能是缺少了或者有更好的方法进行运算
1.2字符菱形
根据读入的字符和边长,勾画字符菱形。
输入格式:
输入数据含有若干组的数据,每组数据包括一个可见字符c和一个整数n(1≤n≤30)。 以键盘输入^Z或遇到文件结束符时结束数据输入。
输出格式:
输出以c为填充字符,边长为n的菱形,每个菱形之后都输出一个换行符。
1.2.1数据处理
数据表达:使用整型函数定义i,j,k,n,使用字符型函数定义变量c,并且能利用嵌套循环作为程序的总体框架以得出最后的答案--字符菱形
数据处理:多处运用for循环进行嵌套处理,其中最重要的处理便是for循环中的判断条件,必须对前面的条件有一个总的了解,才能保证不出错误
1.2.2实验代码截图
1.2.3造测试数据
按照以下表格,输出你的程序面向各种测试数据结果,除了题目给出的测试数据,可以自己再造其他临界数据,越多越好,并加上必要说明
输入数据 | 输出数据 | 说明 |
---|---|---|
A 5 B 3 | <🔷🔶> | 输入相应的数据可以得出与之对应的菱形 |
M 8 L 5 | <🔶🔷> | 输入相应的数据可以得出与之对应的菱形 |
J 5 Q 2 | <🔷🔶> | 输入相应的数据可以得出与之对应的菱形 |
1.2.4 PTA提交列表及说明
根据PTA提交列表,简要描述调试程序碰到的问题及解决办法
提交列表说明:
1.编译错误:由于第一次前几次都未正确找到错误地方,导致了多次编译错误(一直将以为错误的地方改来改去,其实错误地方一直没有找到)
2.解决方法:几次编译错误后心态有点崩看了一些其他同学和我用相同方法的同学,发现自己漏写了一个重要语句(其实是没想到这种情况),最后添加上去,显示答案正确
2.代码互评
找2份同学代码,和自己代码比较,建议互评代码尽量找代码风格差异较大。
同学代码截图
自己代码截图
不同地方
1.同学代码和我的看起来整体相同,但仔细看,同学和我的代码定义变量不一样
2.同学代码整体框架和我看起来差不多,但同学在代码最后有一个getchar( )而我没有
3.我只使用了整型进行定义,同学使用了整型,字符型,并且还是用了while 语句
4.整体看来,我的代码更容易理解一些,但同学的方法也很值得我学习
同学代码截图
自己代码截图
不同地方
1.同学使用了多个头文件,我也不是很理解,然后我只用了一个
2.我使用了整型和字符型,同学也使用了整型和字符型,但我和同学定义的变量不一样,例如字符型我定义了两个变量,同学只定义了一个t
3.我使用了switch 语句进行运算,同学使用的是数组进行运算,虽然我们还没学过,但能看出这个同学的努力
4.同学使用的方法和我的也完全不一样,例如gets,我不是太能看懂,但是可见一斑
3.学习总结
3.1 学习进度条
周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
8 | 17 | 120 | Hello world和其变形 | 无 |
9 | 18 | 300 | 选择结构,求华摄温度 | 判断语句if else |
10 | 19 | 400 | 循环结构 | 循环结构和循环体的区分 |
11 | 17 | 420 | 定义和调用函数,生成乘方表与阶乘表 | 学会定义函数,以及完整代码的格式和语句的顺序问题 |
12 | 18 | 400 | if-else语句结构,多分支结构,以及掌握字符型数据类型和逻辑运算符的使用 | 语句结构的运用选择和程序的基本框架 |
13 | 27 | 430 | switch语句的使用 | 对于switch里其他程序的镶嵌以及switch的灵活运用 |
14 | 30 | 450 | 熟运用while和do-while语句解决实际编程问题 | 对于判断次数无法确定 |
16 | 40 | 500 | break语句和continue语句的使用以及熟练的使用嵌套循环解决实际问题 | 对于嵌套循环中语句的条件判断不准确以及多重循环更容易搞不清楚 |
3.2 累积代码行和博客字数
3.3 学习内容总结和感悟
3.3.1 学习内容总结
3.3.2 学习体会
请回顾自己的本周的学习过程,描述学习感受,也可以提出你不理解的地方、对教师教学建议等。如果你有新的想法或者新的方法,请及时记录下来。
***1.上周没有pta 作业固然开心,但这一周下来对于作业完成的情况感到了前所未有的难度,太难了叭,我感觉自己已经跟不上进度了,好像大多数人和我差不多的情况,但在我看来,他们可比我好多了,看来革命尚未成功,同志仍需努力(扶额)
***2.对于作业中出现的数组问题,看到题目时感到无能为力了(虽然后来也感到无能为力(狗头))∪・ω・∪,自己查阅资料,在b站大学上学了很久,看了很久的网课才勉强搞懂了一丢丢皮毛,OMG 太难了
***3.这周完成作业的速度相比于之前显著降低了,可能是看到提交时间为星期天20点,自己也有所放松,但是对于提交列表的分数扣了一分,思前想后很久也没头绪,想参考别人的代码时发现别人和自己写的不一样,自己也不想改了,我总觉得是pta 上面bug 太多了
***4.一些以前存在的问题,目前感到明显好转,如以前是打字特别慢,现在只是慢了,有进步,就很棒,虽然以前问题有好转,但是随之而来的就是一连串的新问题,这个无可避免,因为一名合格的程序员就是在不断改bug 中成长起来的
***5.自己对于一些没解决的问题,有了一丝懈怠,明明自己知道这样子做不好,但是总无可避免的犯一些错误,希望自己能够改正过来,养成良好的打代码习惯
***6.效率!效率!效率!为什么这么慢呢,都怪自己的速度太慢了,一道题目摆在眼前,总是想不到思绪,明明自己逻辑还可以(自我感觉),毕竟当我们踏入社会后,效率才是最重要的,决定了一切事情,以后以后拿到的工资哈哈
***7.新语句break ,continue ,适用于大多数循环但还是有所区别,比如continue 语句可用于for ,do while ,while ,switch 等语句,而break 可用了除这些以外的if else 语句等
***8.趁着年轻趁着岁月总该去做些什么,比如打代码,加油吧大帅比!!!
***9.这次作业完成的还行吧,助教小姐姐手下留情哈
***10.菱形那一块测试数据显示不出来,主要是不知道该怎么显示,懂的都懂哈哈哈哈,秋秋泥,放一马叭 wink!!!
怎么跳出多重循环?
c语言的break语句只能跳出离它最近的一层循环,但是我们有时候需要跳出多层循环,以下有几种跳出多重循环的方法:
- 使用goto
for (int i = 0; i < MAX1; i++)
{
for (int j = 0; j < MAX2; j++)
{
if (condition)
{
symbol = 1;
goto outloop;
}
}
}
outloop:
//somecode
- 写成函数 return
for ()
{
for ()
{
for ()
{
if(condition)
{
symbol = 1;
return;
}
}
}
}
- 直接修改外层循环条件
for(int i = 0; i < MAX1; i++)
{
for(int j = 0; j < MAX2; j++)
{
if(condition1)
{
symbol = 1;
i = MAX1;
break;
}
}
}
- 在外层循环设置判断条件
内层循环判断满足条件修改标志后 外层循环进行判断:
for(;symbol != 1 && condition1;)
{
for(;symbol != 1 && condition2;)
{
for(;symbol != 1 && condition3;)
{
if(condition)
{
symbol = 1;
}
}
}
}
- 在大循环后面判断标志加入break
for(;condition1;)
{
for(;condition2;)
{
for(;condition3;)
{
if(condition)
{
symbol = 1;
}
}
if (symbol == 1){
break;
}
}
if(symbol == 1){
break;
}
}