大家好,我是小开,我又回来了~
开学了,初二学业也比较忙,所以小开以后C++的内容可能会更新的慢一点~
上次我们学习了while循环,有时候可以用来代替for循环。这次我们来学习do-while循环和循环嵌套。先来看do-while循环的写法:
int c=1,a=10;do{ c++;a--;}while(a>=0);
很显然,do里的内容就是符合while条件的时候的内容。唯一的区别是,while循环是先判断条件符不符合,然后在执行命令。而do-while则是先执行命令,如果符合条件就继续执行,不符合就不再执行。
比如下面这段while循环就能替代上面的do-while:
int c=1,a=10;while(1)//纠正一下,死循环中不能什么都不写,while中间要放一个1{ c++;a--; if(a<0) break;}
那我们来试试看用do-while来写斐波那契数列:
#include#include#includeusing namespace std;int main(){ int a[100],b,c=3; cin>>b; a[1]=1;a[2]=1; do { a[c]=a[c-1]+a[c-2]; c++; } while(c cout< return 0;)
接着来看循环嵌套。顾名思义,循环嵌套就是一个循环嵌着一个循环。其实这本身倒没什么好讲的,有意思的在于它的应用。
在讲它的应用之前,我们要学习一下二维数组。
二维数组,大致可以理解成一张表格。
只不过,在二维数组里,表达一个格子不是用A1这种来区分,而是像坐标轴一样来命名。
像在这张表格中,(4,5)就是标黄色的那个方格。
所以(4,5)指的就是第四行第五列。
那么这里的四个彩色方块分别怎么表示呢?这个就是今天的回家作业。
二维数组的定义方式很简单:
int a[101][101];
赋值的话需要定位到具体的那个变量:
a[1][1]=5;
二维数组的输出就涉及到了循环嵌套:
for(int i=1;i<=10;i++) for(int j=1;j<=10;j++) cin>>a[i][j];
在这里,i指行,j指列。用动图来演示应该比较方便:
上面这张图就是二维数组输入的顺序。
输出也是一样的道理。
for(int i=1;i<=10;i++){ for(int j=1;j<=10;j++) cout<" "; cout<}
和输入稍有不同的地方在于:输出一个表格的时候,每两个数之间要有一个空格,而输出第二行的时候要换行。
如果大家仔细看表格的话,会发现最左上角的是(0,0)。没错,二维数组是从(0,0)开始的。如果你想要一张20x20的表格,但是又不想在第0行和第0列放东西,那么你在定义数组的时候就要定义为a[21][21],和一维数组很相似。
举个例子:
for(int i=1;i<=7;i++) for(int j=0;j<=5;j++) cin>>a[i][j];
这段代码中,收到输入信息的其实是这一块:
到目前为止,我们已经掌握了很多知识:
if,if-else,for,while,do-while,switch,输入输出,赋值,数组等等。
那么我们能用这些知识做什么呢?
比方说:确定一个数是否为质数?
这个时候我们可以用“模拟”的方法。除了通过背诵的方法确定质数(其实就是打表啦),数学老师还教过我们一种方法,以131举例。
从2开始枚举,一直到sqrt(131)为止(根号131),如果其中有一个数是131的约数,说明它是合数。否则,它就是质数。
这道题作为回家作业的拓展题,先告诉大家几个常用到的数学函数:
int a=sqrt(131); //sqrt(x)指131的算术平方根。在这里,因为a是整数,所以a会自动向下取整,所以a=11
int a=abs(-11); //abs(x)指x的绝对值,此处a=11
int a=floor(11.9);//floor(x)指x的向下取整,此处a=11
int a=ceil(11.1);//ceil(x)指x的向上取整,此处a=12
//+,-,*,/分别对应加,减,乘,除//%读作模,也就是取余数。例如,5%2=1,9%3=0,11%3=2
注意:以上所有内容,需要加上头文件:
#include
好了,今天的内容就到这里了,下次再见~拜拜~
?在看,点赞,转发