C语言I博客作业07

1.作业头

这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/SE2020-2
这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2020-2/homework/11585
这个作业的目标 <与上周作业要求基本一致,让我们能够学会自主学习的技能,自主找到自己的错误,以他人为老师,学习其优点避免其缺点>
学号 <20209134>

一、本周教学内容&目标

第4章 循环结构 4.1-4.2 熟悉使用while和do-while结构解决问题。


二、本周作业头

这个作业属于哪个课程 <C语言程序设计II>
这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2020-2/homework/11585
我在这个课程的目标是 <每周上课之前提前预习下堂课内容,在下学期上课之前,学完下学期内容,并提前学习Python与Java>
这个作业在那个具体方面帮助我实现目标 <这个作业的内容要求可以很好的督促我完成我的目标,比如PTA的练习截图等>
参考文献 https://www.bilibili.com/video/BV1x7411M74h

三、本周作业

  • 1.PTA实验作业
  • 2.代码互评
  • 3.学习总结

四、作业格式

1.PTA实验作业:

1.1 题目名1: 7-2 野王认证

内容描述:小刘刚打上了巅峰赛2500 分, 就迫不及待地向他们室友发起了solo(单挑 他们会选择不一样的英雄,每个英雄都只有两个属性(血量,攻击力 ), 小刘有很多皮肤 会给他带来增益( 减损)效果(增加或者减少血量和 攻击力) 然后小刘和他的室友进行 solo (单挑), 小刘先手, 每次使对方血量减少自己攻击力 数值, 当一方血量小于等于 0 时被击败,小刘自认为自己能成为认证野王, 现在想让你帮助他判断 自己能否成为认证野王

输入格式:如果小刘能击败无限多的室友成为认证的野王, 则输出“The king of the wild certification!”;

否则如果小刘不可以击败任何一个室友, 则输出 “I'm too dishes!”;
否则输出一个整数, 表示小刘击败的室友数量。

输出格式:如果小刘能击败无限多的室友成为认证的野王, 则输出“The king of the wild certification!”;

否则如果小刘不可以击败任何一个室友, 则输出 “I'm too dishes!”;

否则输出一个整数, 表示小刘击败的室友数量。
输入样例:

2 1
2 1
3 0

输出样例:

4

1.1.1 数据处理:

数据表达:运用了8个整形变量,2个表示小刘的攻击力与血量,2个表示室友的攻击与血量,2个表示皮肤的属性,另一个用于当击败室友的计数器,最后一个用于重置死亡室友的血量。
数据处理:该题运用了标准输入输出语句,同时运用了while循环与if判断的嵌套使用,在进入该死循环之前,判断小刘的攻击力如果大于室友血量,就直接输出他可以成为野王,并跳出程序,while(1)表示死循环,通过判断语句以及goto语句来跳出循环,即当小刘死亡的时候跳出循环,室友死亡的时候计数器+1同时血量重置。
**函数参数:该题仅含有一个主函数,不含被调函数**

伪代码:

if a_liu≥b_mate
    then printf "The king of the wild certification!"
    else b_mate←b_mate-a_liu;
            if b_mate≤0
                then i++
                b_mate←c
                else  b_liu←b_liu-a_mate
                    if b_liu≤0
                       then goto end
end:if i=0
            then printf "我是菜鸡"
            else printf "i"

1.1.2实验代码截图:

1.1.3 造测试数据:

输入数据 输出数据 说明
4 2
2 1
4 1
The king of the wild certification! 小刘攻击力一次打死室友,即可以击败无限室友,成为野王
8 1
2 1
4 0
11 小刘可以击败11个室友
4 1
4 3
2 0
I'm too dishes! 小刘一个都打不过,承认自己是菜鸡

1.1.4 PTA提交列表及说明:

1.部分正确:其实3次部分正确都是因为测试点7,我猜该测试点是用于测试小刘一个室友都打不败的情况,前面真的改了好久好久好久!!后面我直接把循环改成死循环,然后室友每当死一次的时候,计数器加一,当小刘血量降为0的时候跳出该循环,并输出。然后就对了。

1.2 题目2:7-4 猜数字游戏

内容描述:猜数字游戏是令游戏机随机产生一个100以内的正整数,用户输入一个数对其进行猜测,需要你编写程序自动对其与随机产生的被猜数进行比较,并提示大了(“Too big”),还是小了(“Too small”),相等表示猜到了。如果猜到,则结束程序。程序还要求统计猜的次数,如果1次猜出该数,提示“Bingo!”;如果3次以内猜到该数,则提示“Lucky You!”;如果超过3次但是在N(>3)次以内(包括第N次)猜到该数,则提示“Good Guess!”;如果超过N次都没有猜到,则提示“Game Over”,并结束程序。如果在到达N次之前,用户输入了一个负数,也输出“Game Over”,并结束程序。

输入格式:输入第一行中给出两个不超过100的正整数,分别是游戏机产生的随机数、以及猜测的最大次数N。最后每行给出一个用户的输入,直到出现负数为止。

输出格式:在一行中输出每次猜测相应的结果,直到输出猜对的结果或“Game Over”则结束。
输入样例:

58 4
70
50
56
58
60
-2

输出样例:

Too big
Too small
Too small
Good Guess!

1.2.1数据处理:

数据表达:该题运用了4个整形变量,num1表示需要猜的数字为,time表示最多猜多少次,num2表示每一次猜的数字,i为计数器,每输入一次i就会加一。
数据处理:该程序运用了标准输入输出函数,同时用了一个输入循环,从键盘上接收数字,并比较其值与需要猜的数字,并输出题目要求的答案,同时运用了goto语句,在猜到数字之和跳出循环。
**函数参数:该代码只含一个主函数,未涉及被调函数。**

伪代码:

if i>time or num2<0
    then printf"Game Over" and goto end
    else if i=1
        if num2=num1
            then printf"Bingo!" and goto end
        else if num2<num1
            then printf"Too small"
        else
            then printf"Too Big"
    else if i≤3
        if num2=num1
            then printf"Lucky You!" and goto end
        else if num2<num1
            then printf"Too small"
        else
            then printf"Too Big"
    else if i≤time
        if num2=num1
            then printf"Good Guess!" and goto end
        else if num2<num1
            then printf"Too small"
        else
            then printf"Too Big"
i++
end:return 0

1.2.2实验代码截图:

1.2.3 造测试数据:

输入数据 输出数据 说明
58 4
70
50
56
58
Too big
Too small
Too small
Good Guess!
刚好time次猜中数字
66 3
55
58
87
66
Too small
Too small
Game Over
未猜中数字
98 4
98
Bingo! 一次猜中数字
1507 10
69
200
1507
Too small
Too small
Lucky You!
三次内猜中数字
1.2.4 PTA提交列表及说明:

运行超时:忘记添加计数器,导致循环不会跳出一直运行,于是导致运行超时
部分正确1:第二次运行时添加了计数器,但是计数器的数量多计了一次,于是导致部分错误
部分正确2:当要求的次数等于3并且3次猜出时,会输出矛盾,输出2句话。
部分正确3:最后一次部分正确,是因为当最后一次没有猜对的时候,跳出循环但不输出game over因为while循环和后面的if判断矛盾了,删除while循环中的判断计数器之后就正确了

挑战题:L1-035 情人节

内容描述:以上是朋友圈中一奇葩贴:“2月14情人节了,我决定造福大家。第2个赞和第14个赞的,我介绍你俩认识…………咱三吃饭…你俩请…”。现给出此贴下点赞的朋友名单,请你找出那两位要请客的倒霉蛋。

输入格式:输入按照点赞的先后顺序给出不知道多少个点赞的人名,每个人名占一行,为不超过10个英文字母的非空单词,以回车结束。一个英文句点.标志输入的结束,这个符号不算在点赞名单里。

输出格式:根据点赞情况在一行中输出结论:若存在第2个人A和第14个人B,则输出“A and B are inviting you to dinner...”;若只有A没有B,则输出“A is the only one for you...”;若连A都没有,则输出“Momo... No one is for you ...”
输入样例:

GaoXZh
Magi
Einst
Quark
LaoLao
FatMouse
ZhaShen
fantacy
latesum
SenSen
QuanQuan
whatever
whenever
Potaty
hahaha
.
输出样例:
Magi and Potaty are inviting you to dinner...

数据处理:

数据表达:用了一个计数整型变量i与三个记名字符型变量name,name2,name3。
数据处理:用到的表达式有输入与输出表达式,该函数的主要内容为while循环,在该循环内判断输入的名字是第几楼,同时将题目要求的楼数判断出来并输出,若不满足则输出其他要求。
**函数参数:该题仅含有一个主函数,不含被调函数**

实验代码截图:

造测试数据:

输入数据 输出数据 说明
LeLe
MaMa
GaGa
Zz
.
MaMa is the only one for you... 2<人数<14
LeLe
.
Momo... No one is for you ... 人数<2

PTA提交列表及说明:

1.部分正确:前几次提交的时候将第一次输入语句写在while循环外部,就导致i的计数器会多1,如果输入的名字是1的时候,会被误判为2,输入的是13的时候会被误判为14,于是导致了部分正确。

2.代码互评:

同学代码截图1:

自己代码截图1:

  • 该同学运用的是do while的语法,至少会执行一次循环体,而我用的是while的死循环,知道碰见输入的是小于0的数,才会跳出循环。

同学代码截图2:

自己代码截图2:

  • 1.该同学是运用的for循环来计算鸡蛋的数量,如果他家非常有钱,鸡蛋的数量大于9999,会导致程序出错,而我运用的是while循环,每循环一次,鸡蛋数量就会加一,不会出现数量过多而程序出错。
  • 2.该同学的判断条件在for循环内部,会增加代码的行数,增加程序的复杂度,而我是在while循环的执行条件内判断。

3.学习总结:

3.1 学习进度条:

周/日期 这周所花的时间 代码行 学到的知识点简介 目前比较迷惑的问题
8 29h 508 输入、输出函数 除法的运算法则
9 34h 603 其他类型的函数如整型浮点型 判断语句if else
10 31h 563 for循环、if else判断 近期刚了解到的数组问题
11 30h 686 for循环的嵌套使用、调用自己定义的函数 调用自己定义的函数时还不够熟练
12 29h 664 判断语句的进一步学习以及自学while循环与数组 判断语句的嵌套以及while循环不够熟练,数组有些迷茫
13 25h 721 判断语句switch switch判断语句运用还不够熟练
14 32h 865 while、do while循环与for循环的比较,个人更偏向while循环的使用 本周的内容多次练习后暂时没有问题,但是对于数组问题还是不够熟练,需要多多练习

3.2 累积代码行和博客字数:

3.3 学习内容总结和感悟:

3.3.1 学习内容总结:

3.3.2 学习体会:

本周学习到了一个新知识点———while循环与dowhile循环其用法为:

while(执行条件)
{
      巴拉巴拉巴拉(循环体);
}
do
{
      巴拉巴拉巴拉(循环体);
}
while(执行条件);

二者的区别为后者必定会执行一次循环体,而前者会先判断。

本周的学习体会:都说学习是一件死板的事情,而我认为,学习一定不能一板一眼,因为一板一眼只会滋生弱点,在学习过程中我们需要不断总结自己在该方面的问题,在做题目的时候如果遇到问题不要急着找别人去问如何写,而是应该弄清楚为什么这里会错,应该怎么改,这样就会对这个地方有一定的掌握,最终熟练运用。就拿本周的while循环为例,在执行条件判断内,如果和循环体内的if判断语句内的goto语句冲突时,他会直接跳过循环执行下一步,而不执行if判断内的goto语句,在我写本周的pta作业时就出现过这个问题,要防止出现跳出循环条件的重复。
学习感受:感觉随着学习的深入,越来越多的知识点互相交杂错综,并不一定每种都需要精通,而是选择自己用着最舒服舒适顺手的方法或者语法,就比如swhich的分支结构和if else的分支结构,我更喜欢运用if else,就专精该语句,但是这并不代表switch语句就可以落下不学,同样也需要弄懂用法和规则。其次这么多的知识点,要经常做题练习运用才不会弄混甚至忘记。
每周的逼逼赖赖日常吐槽环节:听说要拍视频讲解题目,其实一开始我是觉得挺新鲜的,甚至还想尝试一下,但是转念一想,我自己都还不太明白用法,等下把他们带歪了琛哥不得把我鲨咯🙆🏻‍♂️🙆🏻‍♂️?所以就算了蛤蛤蛤蛤蛤蛤,而且那么多优秀的助教们顶在前面,咋会轮到我嘞,于是就没想啦嘿嘿(为啥我们的大琛哥可以有那么多花里胡哨的想法啊,又是博客园又是拍视频讲题目的,想拆开他脑袋康康里面除了脑子还有啥🌈🌈。),然后感觉本周的题目好多好多好多呢,改了好久好久好久啊啊啊!!!孩子要秃了,为了孩子的发量,琛哥下次少发点PTA的题目吧🧚🏻‍♂️🧚🏻‍♂️。

最后的最后还是送给本班宝贝儿们一句话:吾生也有涯,而知也无涯。❤❤❤❤❤

posted on 2020-12-02 14:57  handsome李大乐  阅读(302)  评论(10编辑  收藏  举报