C语言I博客作业08
1.作业头
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/zswxy/SE2020-2 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/SE2020-2/homework/11627 |
这个作业的目标 | <为了使我们能更熟练的解题,通过实战让我们学习循环嵌套的方法。> |
学号 | <20209136> |
一、本周教学内容&目标
第4章 循环结构 4.3熟悉break、continue的使用 4.4 熟悉使用循环的嵌套解决问题。
二、本周作业
1.PTA实验作业
2.代码互评
3.学习总结
三、作业格式
1.PTA实验作业
请在此处列出自己的排名图片:
从PTA题目集中选出2个你最满意的题目完成以下内容,选择题目难度越大,分值越高,每题20分(每项5分),内容要求如下:
1.1题目名1: Wifi密码
题目内容描述:
下面是微博上流传的一张照片:“各位亲爱的同学们,鉴于大家有时需要使用 wifi,又怕耽误亲们的学习,现将 wifi 密码设置为下列数学题答案:A-1;B-2;C-3;D-4;请同学们自己作答,每两日一换。谢谢合作!!~”—— 老师们为了促进学生学习也是拼了…… 本题就要求你写程序把一系列题目的答案按照卷子上给出的对应关系翻译成 wifi 的密码。这里简单假设每道选择题都有 4 个选项,有且只有 1 个正确答案。
输入格式:
输入第一行给出一个正整数 N(≤ 100),随后 N 行,每行按照 编号-答案 的格式给出一道题的 4 个选项,T 表示正确选项,F 表示错误选项。选项间用空格分隔。
输出格式:
在一行中输出 wifi 密码。
1.1.1数据处理
介绍实现本题过程中,你的数据表达、数据处理是怎么做的。注意:请务必按照以下方式书写。
数据表达:定义了一个长度最大为4个字符的字符串"可爱[4]",其中包括的值为用户输入的字符型数据。定义了n,i变量,其值分别由用户输入值后再被赋值和在循环中逐渐由零加一递增。都属于整型变量。
数据处理:用到了输入表达式scanf("%s",cute);用到了while、for循环结构。调用putchar输出函数。
1.1.2实验代码截图
1.1.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
2 A-T B-F C-F D-F A-F B-T C-F D-F | 12 | 两道题分别选A,B所以输出结果12 |
3 A-T B-F C-F D-F A-F B-F C-T D-F A-F B-F C-F D-T | 134 | 三道题分别选A,C,D所以输出结果134 |
4 A-F B-F C-F D-T A-T B-F C-F D-F A-F B-F C-T D-F A-F B-T C-F D-F | 4132 | 四道题分别选D,A,C,B所以输出结果4132 |
4 A-T B-F C-F D-F A-F B-F C-T D-F A-T B-F C-F D-F A-F B-F C-F D-T | 1314 | 四道题分别选A,C,A,D所以输出结果1314 |
5 A-F B-F C-F D-T A-F B-F C-T D-F A-F B-T C-F D-F A-F B-F C-F D-T A-F B-F C-F D-T | 43244 | 五道题分别选D,C,B,D,D所以输出结果43244 |
1 A-F B-F C-T D-F | 3 | 一道题选C,所以输出结果为3 |
1.1.4 PTA提交列表及说明
根据PTA提交列表,简要描述调试程序碰到的问题及解决办法。
提交列表说明:
1.答案错误:获取输入的整数时忘记加换行符“\n”,导致答案错误,认真修改后提交显示答案正确。
1.2题目名2:显示指定范围内的素数
题目内容描述:
输入整数m,将所有大于1小于整数m的素数存入所指定的数组中(数组最多只存放100个素数,超过则提示“OVERFLOW”),输出各素数——若输入的m≤2,则提示“NO”,程序终止。注:素数(Prime Number),亦称质数,指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。
1.2.1数据处理
介绍实现本题过程中,你的数据表达、数据处理是怎么做的。注意:请务必按照以下方式书写。
数据表达:用到了n,i,k,m,flag,h这六个变量。n的值通过调用输入函数获取用户输入的数值再进行赋值,m被2赋值,k通过调用sqrt函数被sqrt(m)赋值,flag根据情况分别被0和1赋值,h初始时被0赋值再在循环体里逐渐递增一,均属于整型变量。
数据处理:用到了输入输出表达式scanf("%d",&n);printf("OVERFLOW")赋值表达式k=sqrt(m);flag=1;flag=0。用到了do-while循环结构和while循环结构,调用了数学函数sqrt。
1.2.2实验代码截图
1.2.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
100 | 大于1小于整数100的素数有25个 | |
1 | 1小于2则提示“NO” | |
2 | 2等于2则提示“NO” | |
566 | 大于1小于整数566的素数超过了100个所以输出“OVERFLOW” | |
20 | 大于1小于整数20的素数有8个 | |
14 | 大于1小于整数14的素数有6个 | |
9 | 大于1小于整数9的素数有4个 |
1.2.4 PTA提交列表及说明
根据PTA提交列表,简要描述调试程序碰到的问题及解决办法。
提交列表说明:
1.编译错误:while(!(1<end));中丢了个括号,查找到错误后正确修改并再次提交。
2.部分正确:测试点0一直没通过,改了许多地方最后把m<=n改为m<n,正确修改后显示答案正确。
2.代码互评
同学代码截图
自己代码截图
1.同学的代码定义了六个变量,总计四十多行代码。我只定义了一个变量,总计十多行代码。看起来我的代码非常高效,但令人奇怪的是,连获取用户输入整数这个代码都没有居然在PTA上直接就满分了,在编译器上也不能得到符合要求的答案,怎么分析都没弄懂,不知是我才疏学浅还是PTAbug多。
2.同学代码for循环嵌套while循环再加switch语句成功的得到答案并且熟练的使用了所学知识,温故而知新!而我是先定义了一个内存为4个字符的字符串,再在while循环中在不获取到文件停止符时获取字符串,再判断数组中第二个位置是不是“T”再来输出对应的“1234”,把“A”当作是数组cute中“0123”上的0。
同学代码截图
自己代码截图
1.同学的代码总计五十多行比我的代码量要多,还比我多定义了一个变量,但运用了数组知识还有for循环嵌套,而我用了do-while循环结构和for循环结构,调用了数学函数sqrt来解决题目,两者都行。
2.对于同学的代码,让我感到不解的是为什么不直接把数组中的MAXN改成100,还要多加一个宏定义使得增加变量,并且MAXN仅在开头出现,在下面的程序中并没有反复的出现,个人觉得这个宏定义代码实在是没有意义。
二.学习进度条
周/日期 | 代码行 | 这周所花的时间 | 学到的知识点简介 | 目前比较疑惑的问题 |
---|---|---|---|---|
第八周10.19-10.25 | 480 | 23小时 | 调用输入输出函数,输出任意的字符串。 | 输入输出格式常没有与题目一致 |
第九周10.26-11.01 | 599 | 33小时 | 数的类型,定义变量时要先考虑清楚。 | 数据溢出和负数的浮点型 |
第十周11.02-11.08 | 519 | 27小时 | for循环语句,if的判断语句。 | 多次循环与循环体中再添加变量赋值并再循环 |
第十一周11.09-11.15 | 520 | 20小时 | 定义函数,调用函数 | 调用函数和定义函数易将变量弄混淆 |
第十二周11.16-11.22 | 550 | 28小时 | 多分支结构、字符型数据类型和逻辑运算符。 | 多分支结构容易弄错,逻辑运算符使用不熟练 |
第十三周11.23-11.29 | 540 | 30小时 | 多分支结构switch语句 | switch语句使用不熟练,容易出现漏掉符号的情况 |
第十四周11.30-12.06 | 510 | 20小时 | while和do-while结构 | 在while和do-while结构的循环体中添加判断和累加代码就很难弄清 |
第十六周11.14-12.20 | 510 | 19小时 | break、continue的使用,循环嵌套方法 | 多重循环中的运算步骤常常弄错 |
3.2 累积代码行和博客字数
3.3 学习内容总结和感悟
3.3.1 学习内容总结
感悟:
1.学习不仅仅只限于C语言,其实还有很多语言也是非常优秀值得去学习的,C++可以与C互通,比如使用C++编译器可以使用C语言中大部分的语义,JAVA语言通过本地化操作也可以引用C代码。
2.因为最近有各种考试,再加上一周没有写博客园PTA的作业了,导致在专业课上花的时间较少。我觉得大家应该都和我的情况差不多吧,但没关系,还有时间可以补回来的。
3.前几次作业中大放厥词希望PTA来的猛烈些,结果这次终于让我知道了花儿为什么这样红,仿佛马老师那句话在耳边浮现(耗子尾汁!),简直是大大的打击,发现自己对于这些题目简直是感到崩溃,各种循环嵌套脑子转不过去,还有数据移位啥的都得自学,看到建议用C++代码就临时去学,结果呢没有结果...还碰上了很疑惑的代码,我解题的速度简直是太慢了,我发现这分明就是换种方式做数学题啊!因为数学差有缘来到这,真是没想到啊~~
4.关于跳出多重循环的方法有:
- 使用goto
for ( i = 0 ; i < MAX1 ; i ++ )
{
for ( j = 0 ; j < MAX2 ; j ++ )
{
if ( condition1 )
{
symbol = 1 ;
goto here ;
}
}
}
here :
- 写成函数 return
void nestedfor ( void )
{
for ( condition1 )
{
for ( condition2 )
{
for ( condition3 )
{
if ( condition )
{
symbol = 1 ;
return ;
}
}
}
}
}
- 直接修改外层循环条件
for ( i = 0 ; i < MAX1 ; i ++ )
{
for ( j = 0 ; j < MAX2 ; j ++ )
{
if ( condition1 )
{
symbol = 1 ;
i = MAX ;
break ;
}
}
}
- 在外层循环设置判断条件
or ( 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 ;
}