C语言第二次作业循环结构

0.展示pta总分

1.本章学习总结

1.1for循环语法

首先是关于对for循环的使用范围:for循环主要用于求解具有确定循环次数的题目,本节中例如求一到一百以内的素数及求素数的和,给定a串数列求和之类的都用到了循环结构。
其次是for循环进行的流程:for循环的括号类有三个语句,它们之间用分号隔开;程序会首先执行语句一,然后进行语句二的判断,如果语句二正确的话,这执行循环,一次循环体的运行后执行语句三,一次循环体的执行就结束了,然后接下来的循环中跳过语句一的赋值,重复以上操作,知道循环条件不满足跳出循环。接下来就是for循环的具体内容,如何循环体只有一个语句的话,可以加大括号,也可以不加大括号,我们习惯上加上大括号。如果循环体是多个语句组成的复合语句,那就必须加上大括号了,不然for的循环体就终止在了第一个分号之前。循环体内还要有能使循环条件改变的语句,不然循环一直做,那就是死循环了。
下面是我写pta过程中在for循环中出错的一道题。


这个题中当时由于循环条件p<=i写成了p<i,导致少了一次循环使结果出错。

1.2while,do while循环语法

while do while 语句主要用于不知道循环次数的题,例如上方截图中那题求幂级数展开的部分和就是通过判断进行到某一项的值是否小于0.00001来控制循环是否进行。 while
与do while 语句最主要的区别除了有do while语句在条件判断前至少进行了一次循环体的执行,而while语句必须先判断条件再进行条件的执行外,我觉得最大的区别在于,在进行条件判断时while语句中只能有之前定义过的变量,而 do while 语句中可以在do 中先对变量进行表达式上的运算然后再判断。例如还是求部分幂指数之和。在do循环中我首先用表达式将分子,父母表示了出来,最后在判断时用到了分子分母进行判断。如果写成while 语句也是可以的,只不过需要在while语句执行之前把分子,分母表达式再写一遍。

1.3跳出循环相关语句break,continue。

简单的可以概括为两句话。break语句是跳出循环而且终止循环的进行;continue也是跳出循环但是仍然执行下一次循环。牢记一点,break,continue是跳出的是一层循环!!!而不是一个分支或者多个循环。

关于break的例子:

例如判断素数的程序:(在程序中如果满足了i是素数的条件及i%m==0,则直接跳出循环,而不必继续判断m到i/2之后的数字。)

第二个例子:(一开始不知道“若n以内不够k个素数,则按实际个数输出。”这个条件如何处理,最后发现可以用break解决。)


3关于continue的例子:(这个书上好像基本上没有continue的例子,写题过程中也没遇到),在csdn中发现了别人总结的例子。代码及题目如下:(简单的总结就是在某些条件下跳过循环,然后在另外条件下继续执行循环。本题中就是在a等于3,5,7时不进行循环体的执行。)

1.4循环嵌套

基本概念:一个循环语句的循环体内包含另一个完整的循环结构,称为循环的嵌套。这种嵌套的过程可以有很多重,一个循环的外面包围一层循环叫双重循环,如果一个循环的外面包围二层循环叫三重循环,…,一个循环的外面包围三层或三层以上的循环叫多重循环。这种嵌套在理论上来说可以是无限的。
正常情况下:应先执行内层的循环体操作,然后是外层循环。例如:对于双重循环,内层循环被执行的次数应为:内层次数×外层次数。
三种循环语句while、do…while、for可以互相嵌套,自由组合。外层循环体中可以包含一个或多个内层循环结构,但要注意的是,各循环必须完整包含,相互之间绝对不允许有交叉现象。因此每一层循环体都应该用{}括起来。(来自百度百科)

2.编程技巧总结

2.1:数列求和问题

首先数列求和如果知道确切的项数的话,就用for循环,如果不知道确切项数考虑while或do while 结构,while与do while 的区别上述也已讲过。
另外如果每项正负是交替出现或按一定规律出现的,一般引用变量flag从而控制项数。

例题(这一题总是在最大值错误,最后运行了几个结果发现输入的x的值必须小于2.2才能过,但是就是不知道为什么错了)


2.2:字符如何转数字。数字逆序问题。

如果输入字符的话,如果最后的printf括号内写成%c ,那么就是以字符的形式输出的,如果写成%d ,那么就是以数字的形式输出的,这就完成了字符转数字。
逆序输出的话首先要借助while循环判断给出的数是否满足大于零的条件,然后在循环体中进行区域运算,然后将数字除以10.

2.3:图形打印问题。

打印图形的话,其实关键在于找规律,例如如果打印空心菱形,如果给定确定的行数,那么这题就比较容易解决,但如果打印n行,则再用n表示一些变量时要多思考。可以在纸上写出来,自己找规律。

3:pta实验作业。

3.1数列求和的问题:

流程图:



3.2:图形打印问题:


数据处理:根据超星视频中老师所讲的,我外循环用i控制行数,内循环用blank控制每一行数字前方的空格数,用m控制输入的字符数和中间空格数。其中在 m 这层循环中还要做判断,如果是首尾则输出字符,其它仍然输出空格。这里的困难的地方是如何控制输出的字符,这里需要找规律,借用ascll来输出字符。还有就是对空格输出的控制,一开始没有把字符前空格和字符后空格分开进行处理,导致完全不会写。

这里的六分是直接将n当成5带入写的,最后换成n了就不会写了。

3.3介绍printf调试如何检查错误。


单步调试截图:

posted @ 2020-12-05 11:11  灰烬小飞侠  阅读(265)  评论(0编辑  收藏  举报