C语言博客作业02--循环结构

0.展示PTA总分



1.本章学习总结

1.1 学习内容总结

  • while语句的循环:while语句循环的适用范围比for循环语句更加广泛,而且while语句只有一个表达式和循环体语句,
    构成简单,while语句先是判断是否满足条件,才进行循环。

  • do-while语句:采用do-while语句,适合于先循环,后判断循环条件的情况,一般在循环体的执行过程中明确循环
    控制条件。他每执行一次循环体后,再判断条件,已决定是否进行下一次循环。

  • break语句和continue语句:break语句强调循环结束,一旦执行了break语句,循环提前结束,不再执行循环体中
    位于其后的其他语句. continue语句的作用是跳过循环体中continue后面的语句,继续下一次循环。而且continue语句
    一般也是与if语句一起使用. 两者的区别在于,break结束循环,continue只是跳过后面的语句继续循环break除了可以
    终止循环外,还用于switch语句,而continue语句只能用于循环.

  • 嵌套循环: 即是大循环中嵌套了小循环,可以用其来求阶乘的代码结果,对于一些复杂题目更加容易做出判断选择,
    列子如下:

  • 嵌套循环中的函数计算:每次循环中可以调用函数计算阶乘,然后累加,循环100次,累加一百个阶乘

1.2 本章学习体会

  • 这周的学习感觉还是挺紧张的,主要还是对于代码量的练习还不够,所以尽管理解了课本上的内容,当遇到pta上的题目时也是一脸茫然,不知道怎么下手,特别是下周要进行的函数内容,那些复杂的函数调用更是很烦,不知道怎么处理。老师在课堂上的讲课倒是听清楚的,还是可以听得懂,就是在代码上面的练习,一直都是落后的,因为在暑假也没有学习,所以赶上来比较紧张。 关于本章c语言的学习,体会到,只有紧紧着跟着节奏,才能够慢慢的跟上去,因为之前的一些落后,也不能去放掉后面的去补前面的,要学会先把老师的教学先吸收进来,在学习之余才把之前所缺漏的慢慢补起来。然后关于接下来的内容,即下一章的函数,都是与之前所学的内容是紧密联系的,所以要想跟上老师的步伐,学好下一章的内容,就一定要抽出时间,把之前学习过的内容好好复习,补缺补漏,才能得到提升。


  • 这两周打的代码量很少,pta的题目还有很多不会,也还没有刷满,希望根据自己的时间好好安排,赶快跟上老师
    和同学们的脚步,将代码量的值努力上升到四位数,就像林老师说的,只有代码量打的越多,发现的错误才会
    越多,这样子写代码的能力才能得到有效提升.


2.PTA实验作业

2.1 猜数字游戏

2.1.1伪代码

  • 数据处理:定义了num1,num2,N,i的变量,并且赋值flag=0,用flag来表示猜数字猜对的次数,以至于对于输入的值和变量
    i相互呼应,执行循环.
- 定义两个不超过100的正整数num1,num2,以及猜测的次数N,flag=0来表示猜对的次数;
- 输入数字num1和N;
- for (i = 1; i <= N; i++)开始循环
- 输入你所要猜的数字num2;
- if 输入数据小于0,break跳出循环;
- if 输入数据num2大于 num1,printf("Too big\n");
- if 输入数据num2小于 num1,printf("Too small\n");
- if (两个数据相等)
{
  如果i等于1,printf("Bingo!\n");
  如果i小于等于3,printf("Lucky You!\n");
  如果i小于等于N,printf("Good Guess!\n");
  否则,printf("Game Over\n");
}
如果猜对次数为1或者3,结束循环
如果猜对次数为0,printf("Game Over\n");
return 0;

2.1.2 代码截图


2.1.3 造测试数据

2.1.4 PTA提交列表及说明

1.部分正确:打出格式错误,就是有部分答案是错的,少了一些感叹号
2.部分正确:还有就是i=1错误,应该写成i1,所以因为这个错误没有发现,
因此导致好几次数据都错误.
3.部分正确:刚开始没有写入代码最后的flag
0的情况.


2.2念数字

2.2.1 伪代码

  • 数据处理:定义number即是用户即将输出的整数,定义b来作为负数转整数后的number,再定义一个mask,
    作为number除mask来提取各位的数字.
- 定义number,并将其输入;
- if(number小于0)
printf("fu ");
然后将负数转化为整数
- 定义mask=1,定义b为转整数后的number;
- do
{
定义n来代表数字,n=number/mask;
switch(n)
{
如果接受到0,输出ling;
如果接收1,输出yi;
如果接收2,输出er;
如果接收3,输出san;
如果接收4,输出si;
如果接收5,输出wu;
如果接受6,输出liu;
如果接收7,输出qi;
如果接受8,输出ba;
如果接收9,输出jiu;
}
if(mask大于等于10)输出空格
重新定义mask,使循环继续
而number再次取余
}
循环条件是mask大于0
return 0;

2.2.2代码截图




2.2.3 造测试数据

2.2.4 PTA提交列表及说明

  1. 格式错误 :格式错误就是没有看清楚题目,就是输出答案最后是没有空格的
    2.部分正确:依然没有找出空格存在的问题, 经过VS调试输入-600,输出只是fu,没有其他的,而后面
    很多部分正确也是在调试,后来在后面加入代码if(mask>=10)
    {
    printf(" ");
    }
    才解决了部分问题
  2. 部分正确:将输出答案打错了
  3. 部分正确:没有确定最后的循环条件的判断即是while(mask>0).以至于循环只进行一次.

2.3正负数个数

2.3.1伪代码

  • 数据处理:定义好即将输入的n个用空格隔开的整数,再定义i和j的初始值为0,用于for循环中
    是的两个i和j来计算题目的正负数的个数,而n值则是作为循环的临界值。
  • 伪代码
- 定义n来表示整数的个数,定义i和j的初始值为0,程序开始
- 输入n值
- if(n整数的值大于0)
就可以执行i++,计算正数个数
- if(n整数的值小于0)
就可以执行j++,计算负数个数
- 循环的条件就是n不等于0,就可以循环
- 最后printf("i=%d\nj=%d", i, j);
- return 0;

2.3.2 代码截图

2.3.3 造测试数据

2.3.4 PTA提交列表及说明

  • 编译错误:程序符号不小心用到了中文的符号
  • 答案错误:首先,开始没有判断到再次循环的条件,即是循环的条件n不等于0没有,后来 发现少了n=0的
    条件,才将其改正过来
  • 答案错误:输出的应该是printf("i=%d\nj=%d", i, j),而刚开始输出的是printf("i=%d j=%d", i, j),没有
    用\n换行来正确输出正确答案

3.代码互评

3.1猜数字

  • 同学的代码

  • 我的代码

1.同学的代码比我的代码,多定义了一个count,初始值为0;用来作为循环的计算,将count放在循环里面的if中,用&&进行结合,将两个条件一起判断,进行循环.
2.我的代码和同学代码比,同学运用了while语句来进行循环判断,更多条件加入语句进行判断;而我的代码运用的是for循环语句,定义i来进行循环
3.我们的代码均使用了定义整形数据,用if else 语句.

3.2查询水果价格

  • 同学的代码


  • 我的代码

  1. 两个代码的主要区别就在于函数的调用,同学的代码运用了函数,调用listMenu函数进行后面的菜单输出而我的代码,则是在刚开始就直接printf输出菜单
    2.同学的代码运用for循环,定义time表示用户查询 的次数,如果超过五次就跳出循环;我的代码运用了switch语句进行判断,先是判断定义的K,若k=0就跳出循环,然后用switch对K进行判断来输出用户点单的价格.
posted @ 2019-10-20 18:58  吴奕恒  阅读(370)  评论(3编辑  收藏  举报