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

展示PTA总分(0----2)
截图展示2次题目集:单循环和嵌套循环题目集,排名分数截图。PTA2个题目集至少完成2/3,否则倒扣-2分

1.本章学习总结(2分)

整理这两周学习主要知识点,并能对每个知识点介绍简单案例或语法。不要截图ppt,自己文字书写。知识点包含:

1.1 for循环语法

for(语句1;语句2;语句3)
{
循环体
}
  • 理解:for循环是我目前用到最多的一个循环结构,在已知循环次数的情况下,用for循环思路十分清晰。

1.2 while、do while循环语法

while(循环条件)
{
循环体
}
  • 理解:在不知道循环的具体次数时,优先使用while语句。
do
{
循环体
}while(循环条件)
  • 理解:这个平时用的相对少一些,但在某些情况下循环不得不执行一次时,do-while语句大有妙用。

1.3 跳出循环相关语句break\continue

2种区别,举例说明。

  1. break语句:提前终止循环
    举个栗子:
    罗翀今天举行纳妾,有一群女生排着队一个一个给他表演才艺以求被选上,罗翀只肯看她们60分钟,并最多乐意看二十个女生,一个一个输入女生的表演时间,请问罗翀总共看了多少女生?
#include<stdio.h>
int main()
{
double totalTime=0,time;
int n=0;
while(totalTime<60)
{
printf("第%d个女生的表演时间:",n+1);
scanf("%lf",%time);
totalTime+=time;
n+=1;
if(n>20)
break;
printf("罗翀总共看了%d个女生”,n);
}
  • 遇到break直接跳出循环,不再进行任何循环体里的语句。
  1. continue语句:只提前结束本次循环
    再举个栗子:
    输出100~300之间所有不能被4整除的数
#include<stdio.h>
int main()
{
int n=99;
while(n<300)
{
n+=1;
if(n%4==0)
continue;
printf("%d\t",n)
}
}
  • continue只结束本次循环,并没有跳出循环体。

1.4 循环嵌套

for(i=1;i<=3;i++)
{
      语句1
      for(j=1;j<=10;j++)
      {
      语句2
      }
}
  • 像这样循环嵌套,外层3次,内层10次,总共循环了3*10=30次。

学习体会
相对于分支来说,循环对逻辑的要求明显提高,但总体来讲也并不算特别难。我的薄弱之处仍然是编程基础不扎实,很多编程的细节与技巧弄不明白,而非逻辑上想不通。所以仍要加强专业知识的学习。
2 编程技巧总结(2分)
列举本周写代码过程,PTA题目或课本知识点的编程技巧。如

  • 各种数列求和问题

关于数列求和的问题,有一个技巧可以大大简化编码量,就是在遇到正负号交替时,把flag=1引入循环中,每次循环使其变换正负号,实现正负交替。

  • 字符如何转数字、数字逆序问题等

字符转数字,只需定义一个字符ch,然后printf("%d",ch)即可。
数字逆序的处理方式是将某个数放入循环中不断取余10后再除以10,一个一个输出取余得到的数,即逆序输出。

  • 四则运算问题

每次循环吸收一个数字和一个字符,用switch语句分别罗列出四个运算符所对应的运算法则,达到四则运算的目的。

3.PTA实验作业(6分)

介绍下面3个题目的做法。

3.1 数列求和问题

数列求和问题较为简单,可以直接使用高中解决数列问题的思维来编程,只不过数列的首项项数总和以前是条件或未知,现在变成了代码中的变量。

3.1.1 流程图或伪代码介绍思路

流程

  1. 定义三个变量:n=1,sum=0,a=第一项的值;
  2. 加入while语句(或其它循环语句)
  3. 找出相加的总项数,在条件括号里写上n<=项数;
  4. 循环体中写:n+=1;
    sum+=a;
  5. 列出第n项与n-1项的关系式,将式子写入括号内
  • 按照这个流程,再根据题目作出适当改变,基本上能解决一般的数列求和问题。同样的,如果是乘积问题,也是相同的框架和思路,只不过sum要初始化为1。

3.1.2 代码截图

贴图展示代码,不要复制

3.1.3 PTA提交列表及说明

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

数列求和暂时没有碰到问题。

3.2 图形打印问题

这类题在我看来分为两类,一类是固定输出内容的,比如那个打印菱形的题目,直接无脑堆砌printf就行了,哪里用得着循环。第二类就是输出内容随着输入内容变化的,比如那个空心字符菱形,呜呜呜好难好难的说。

3.2.1 数据处理

这道题我参考了其他同学还有网上一些高人的做法,这里介绍两种做法。
方法一:把菱形分成上三角和下三角分别输出;
方法二:十分巧妙的一个程序,以菱形的中心为原点,把它看成一个坐标的形式,经过分析可以发现每个菱形边界点的坐标刚好是整数除以二所得的整数。但pta每一行字母不允许后面有空格,所以需要能够及时判断换行。

3.2.2 代码截图

方法一:

方法二:

3.2.3 PTA提交列表及说明


这道题对我来说比较难,一开始没想到思路,所以借鉴了别人的做法。吸取别人的奇思妙想是必要的,但也少了自己试错的过程。

3.3 自选一题,介绍printf调试如何检查错误是如何检查错误

  • 所谓printf检查错误,就是把循环外的printf提到循环内来,输出每一次循环各个变量的结果。
    例题:龟兔赛跑


    如图所示,把三个变量的printf提到循环内,可以清晰地看到每分钟兔子和乌龟的路程,很容易找出错误。

3.3.1 单步调试截图




3.3.2 代码截图

3.3.3 PTA提交列表及说明

  • 在这道猜数字的题目中,之前老眼昏花,一直没发现第18行小于号打成了大于号,运行结果总是不对,在单步调试中,发现输入更小数时是从18行跳到21行,十分奇怪,于是在反复检查18行后,发现了错误。
posted @ 2020-11-22 21:39  letmee  阅读(186)  评论(1编辑  收藏  举报