C语言I博客作业08

这个作业属于哪个课程 C语言程序设计II
这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2020-1/homework/11610
我在这个课程的目标是 掌握break、continue语句的使用,以及他们的区别,了解多层循环结构如何跳出多层循环,使用循环输出乘法表,了解循环嵌套的循环次数,简化代码
这个作业在那个具体方面帮助我实现目标 pta实验作业、同学代码互评。
参考文献 C语言程序设计(3)、C primer plus
学号 <20208956>
1.PTA实验作业(20分/题)
请再此处列出自己的排名图片。

从PTA题目集中选出2个你最满意的题目完成以下内容,选择题目难度越大,分值越高,每题20分(每项5分),内容要求如下:

1.1 题目名1 字符菱形

题目内容描述
输入数据含有若干组的数据,每组数据包括一个可见字符c和一个整数n(1≤n≤30)。 以键盘输入^Z或遇到文件结束符时结束数据输入。
输出以c为填充字符,边长为n的菱形,每个菱形之后都输出一个换行符。

1.1.1数据处理

数据表达:定义字符型变量c,整型变量n,c、n分别为输入的字符和边长。用i、j分别表示行列。
数据处理:先使用一个for(i=1;i<=n;i++)确定从上至n行,再嵌套for(j=1;j<=n-i;j++)确定每行输出的空格数(每行空格有多少列)for(j=1;j<=2*i-1;j++)表示字符所在的列,用来循环输出字符。当循环输出字符结束后输出换行。
for(i=1;i<=n-1;i++)表示下半部分的行数与上部分一样的思路,只不过算出行列的算式不一样,for(j=1;j<=i;j++)用来输出空格的循环,for(j=1;j<=2*n-1-2*i;j++)输出字符的循环,字符数量与上部分刚好成相反的变化,

1.1.2实验代码截图

1.1.3 造测试数据

输入样例 输出样例 说明
A 5 B 3 A\B为填充字符 边长分别为5、3
A 3 B 3 A\B为填充字符 边长分别为3、3

根据PTA提交列表,简要描述调试程序碰到的问题及解决办法。

提交列表说明:


1.编译错误主要是修改的时候不小心删掉了一些符号。
2.运行超时:但是使用while循环的时候跳出循环的条件是scanf("%c %d",&c,&n)=='EOF',跳不出while语句,死循环了。后来将''去掉了但答案错误。
3.答案错误:输出时A与B的菱形之间出现了一个与A边长一样的空格棱形,意味着输入多了什么,从提交列表也看得出来,这里卡了很久,我最终还是没找到原因,后来去问助教才知道在scanf中的%d后面还需加一个空格,因为如果没有这表示A 5 B 3中5后面的空格被当作字符输入了但是没有得到新的n所以会出现一个与A边长一样的棱形。

1.2 题目2 Wifi密码

A-1;B-2;C-3;D-4;把一系列题目的答案按照卷子上给出的对应关系翻译成 wifi 的密码。这里简单假设每道选择题都有 4 个选项,有且只有 1 个正确答案。

1.2.1 数据处理

数据表达:首先定义了mn两个整型变量,n表示行数,n是用来表示数组中的第几个数,再接着定义了啊,a,b两个字符型变量用来输入选项和对错。最后定义了一个数组(t[n])。用来保存得到的密码的每位数。用i表示行数,用j表示输入字符数。
数据处理:使用两层for循环对行数和列数进行计算,输入完后判断答案是否正确,对应到相应的密码并存入数组。
最后使用for循环依次将存入的数从数组中输出。用if语句简化问题。

1.2.2 实验代码截图

1.2.3 造测试数据

输入样例 输出样例 说明
132 三位密码
130 无输入时输出0
13224143 8位

1.2.4 PTA提交列表及说明


1.之前我的第二层循环j是小于等于4,因为我觉得我用scanf输入的是两个,一行只有四个,但是输出的结果却超过了n位。调试后发现在if语句时一次只判断一个,每行一共四次输入,每次输入两个,所以循环次数为8.
2.在最后输出数组的时候出了错误。漏了一位。

2.代码互评(5分)

同学代码截图

1

2


自己代码截图


1.第一位同学的代码使用了数组,函数、自定义函数,系统性很强。我目前水平还不够,还写不出。
2.第二位同学与第一位的风格相似,但有很多细节的处理方式不同,都非常值得学习。
3.我没有用到数组,按照平常的思路来,在判断素数是否达一百的这个地方,因为我没想出来怎么计数(每输出15个将计数变量初始化)于是就用另一段代码算出当输出100个素数时输入m的值,然后就判断输入值与m的大小即可。要是题目换了就得改代码,没有系统性。

3.学习总结(15分)

3.1 学习进度条(5分)

周/日期 这周所花的时间 代码行 学到的知识点简介 目前比较迷惑的问题
第八周 18 220 printf,scanf的使用,以及int类型
第九周 22 231 if语句分支结构、调用数学函数
第十周: 25 255 for、while、do...while语句、字符型数据的使用 switch语句多分支结构、break语句和continue语句
第十一周 28 600左右 switch语句,逻辑运算符,数组,自定义函数 多个循环结构的嵌套使用容易出错
第十二周 27 680左右 无新的知识点 排序问题
第十三周 25 400左右 巩固switch语句、const限定符、short int、long int、long long int、unsigned整数类型
第十四周 20 500 宏定义、多种循环结构的使用 for循环与while循环之间的转换
第十五周 19 700 break,continue语句的使用,九九乘法表,水仙花数··· 数组的使用,菱形字符···

3.2 累积代码行和博客字数(5分)

3.3 学习内容总结和感悟(5分)

3.3.1 学习内容总结

3.3.2 学习体会

这周学习了break、和continue语句。
continue语句和break语句的区别是:break语句只用于循环体和switch语句中,continue只能用于循环语句。continue语句只结束本次循环,而不终止整个循环的执行。而break语句则是结束整个循环过程。break语句用来跳出循环时遇到多层循环嵌套时,break只能跳出离它最近的循环体,所以多层循环使用break跳出时得一层一层的来。
我查阅相关资料找到多层循环跳出可以使用使用goto语句;借用c++异常处理中的throw抛出异常从多重循环出来;把嵌套循环写成函数,使用return语句结束函数。后面两个方法还不太懂。
goto语句想跳哪里都可以。

posted @ 2020-12-14 11:27  洪胤  阅读(225)  评论(6编辑  收藏  举报