专业编程基础技术教程

网站首页 > 基础教程 正文

我了解的C语言---for循环与等差数列的关系

ccvgpt 2024-10-19 03:27:55 基础教程 7 ℃

相信点开这篇文章的读者,应该是学习了C语言或者C++。

在大家初学C语言时,都知道C语言有32个关键词,9种控制语句,今天我们就来学习一下9种控制语句中的嵌套for循环。

我了解的C语言---for循环与等差数列的关系

学习嵌套for循环,那么首先我们需要知道的是,在2层的for循环中,假设我们定义循环变量i和j,那么我们通常我们认为,循环次数就应该是i*j次。让我们来看一个例子:

加群466572167,有学习资料

在这个简单的for循环中,很明显我们通过i变量和j变量来控制打印*号的个数。其中内层循环j的值从0开始到5结束,循环次数为6次。简而言之,就是循环打印6个*号。然后跳出内层循环之后换行,回到外层for循环。同理,外层循环的循环次数也应该为6次。所以在这段程序中,(连续打印6个*号之后换行)这件事情一共做了6次。

上面的情况是属于,循环变量i和j各司其职的情况,那么如果i和j之间如果有关系的情况呢?我们在来看几个常见的题目。

题1.请使用*号打印出以下形状(请注意每一行的*号个数):

加群466572167,有学习资料

(1) (2) (3) (4)

细心的各位会发现,这个题目,跟大家学习中遇到的等腰三角形的情况并不完全一样,其中:(1)的*号个数为1,2,3,4,5,6;(2)的*号个数为1,3,5,7,9,11;(3)的*号个数为2,4,6,8,10,12;(4)的*号个数为1,2,3,5,7,9;那么我们一个一个来看:

(1)*号个数为1,2,3,4,5,6;

加群466572167,有学习资料

这个题目很简单。我们知道i控制打印的行数,j控制打印的列数,且都从0开始控制,那么第0行打印1个,第1行打印2个,第2行打印3个,以此类推,j的循环次数总是要比i大1(注意这里是j的循环次数而不是j)。所以在内层循环中让j<i+1就可以了。

(2)*号个数为1,3,5,7,9,11;

加群466572167,有学习资料

这个题目跟大家的等腰三角形就差不多了。我甚至猜测很多人都会去强行记忆其中的2*i+1这个关系(被猜中的各位请面壁5分钟)。这里我们先来看另一题。

有如下一个*号组成的图形和一段实现该程序的代码,请在____上填空。

加群466572167,有学习资料

答案应该是-2*i+138。这个答案并不是每一位同学都能得到,所以,学习编程,不仅要知其然还要知其所以然。

我们先回到(2)这个题目中,外层for循环中i控制行数为6行没有问题,那么在内层for循环中,j控制的循环次数分别为:1,3,5,7,9,11。由此得到如下关系:

i的值: 0 1 2 3 4 5

j的循环次数: 1 3 5 7 9 11

仔细观察不难发现,这与高中数学所讲的等差数列是一模一样的。那么等差数列中有一个通项公式:

加群466572167,有学习资料

其中d是等差数列的等差。那么这个时候就相当于:

加群466572167,有学习资料

而i就相当于下标,我们把这些数字带入公式中来看一下:

加群466572167,有学习资料

2*i+1是不是我们需要的答案呢?

我们回到刚才的填空题,需要注意的是,j的循环次数是1、3、5、7、9、11,但是j的初始值是139,而且j在不断的自减。所以对应关系应该是:

i的值: 0 1 2 3 4 5

j的循环次数: 1 3 5 7 9 11

j要大于的值:138 136 134 132 130 128

同样的代入公式:

加群466572167,有学习资料

是不是得到了我们想要的答案呢?

(3)*号个数为2,4,6,8,10,12;

有了上面的讲解,我相信下面的就会更加简单了。

加群466572167,有学习资料

(4)*号个数为1,2,3,5,7,9;

这个题目出现了不是等差数列的情况,也没有问题,我们只需要把123跟579分开,就变成了两个等差数列,大家都想到了吗?

加群466572167,有学习资料

好!说到这里,那等腰三角形其实就是打印空格与*号的组合。

加群466572167,有学习资料

更多的图形,交给大家自己去尝试,可以加小编的群466572167,有学习资料,可以交流学习,包括在后面的排序算法中的for循环跟这也是一个道理,希望能帮助到大家。小编就暂且说到这,这些都是自己的总结,希望可以帮到大家。

Tags:

最近发表
标签列表