第七课循环结构程序设计——第一节
一、概述
循环:就是在满足一定条件的时候,反复执行某个程序段的过程
比如输出100000行
hello,worrld!
就算你粘贴复制一次需要一秒
也是100000秒
就算你不停止工作
也需要27.78小时
But采用循环结构只需要两行主体代码就OK
一般来说有四种实现方式
- while语句
- for语句
- do-while语句
- goto语句
二、用goto语句构成的循环。
#include <stdio.h>
int main()
{
int i=1;
L1:printf("%d,",i);
i=i+1;
goto L1;
return 0;
}
程序中反复执行的部分就称为循环体
这里就是
L1:printf("%d,",i);
i=i+1;
goto L1;
这是一个无条件的循环,因此它是一个无限循环,或”
者称为‘死循环”。因为没有给她设置停止的指令。
可以通过if进行限定循环条件
用goto语句和if语句构成的循环。
#include <stdio. h>
int main(void)
{
int i=1;
L1:if(i<=5)
//这里限定了循环次数
//在if子句中通过i这个变量
//来实现了循环次数的计算,
//我们一般称其为计数器
{
printf("%d,",i);
i=i+1;
goto L1;
}
return 0;
}
这种利用goto语句构成的循环不多
三、while循环:while语句构成的循环
while语句的格式:
while(表达式)← 循环条件
单条语句←循环体
循环条件:
关系表达式或逻辑表达式。
循环体:
只能是单条语句,若需要多条语句,须用
花括号括起来,构成一条复合语句。
结构大概就是下面的图,只要是真的话,就直接的回到判断条件然后进行循环直到为假,为假然后就直接退出循环了。
例1. while循环示例。
#include <stdio.h>
int main()
{
int i=1;
while(i<=5)
{
printf("%d,",i);
i=i+1;
}
return 0;
}
四、编程序计算:1+2+3+…+100之和。
思路:
- 首先定义变量sum用于存储累加和,并将sum初始化为0;
这个不初始化的话,可能会有随机数的误差
2.将1累加到sum中,即sum=sum+1;(此时sum的值为1)
3.将2累加到sum中,即sum=sum+2;(此时sum的值为1+2之和)
…
…
…
101.将100累加到sum中,即sum=sum+100;
(此时sum的值为1+2+3+…+100之和)
写100条???
不可能的
这辈子不可能的
sum=0;
i=1;
while(i<=100)
{
sum=sum+i;
i=i+1;
}
编写程序计算n的阶乘,其中n是一个非负整数。
编程思路:
定义变量f用来存储累乘的积,并且给f赋初值为1。==初值1 ==
依次将1到n累乘到变量f中。
f=f1;
f=f2;… f=f*n;
这n条语句可以归纳为一-个循环。
while(i<=n)
{
f=f*i;
i=i+1;
}
总结一下:累加初值就是0,累乘初值就是1
数据溢出:
运算结果超出了变量的取值范围
在程序中应当根据运算结果的大小,选择合适的数据类型,从而避免产生溢出。
比如说你往int类型变量里面存1000000000试一下
五、自增运算符、自减运算符,以及复合赋值运算符。
- 重点:自增运算符++,功能是使得某个变量的值加1,分为前自增和后自增两种。前自增++i这种;后自增i++这种。
跟i=i+1一个意思,就是少打几个符号,省点力气
- 自减运算符功能是使得某个变量的值减1,分为前自减和后自减两种。前自减–i,后自减i–
- 前后自增就是计算还是引用的顺序问题。++i很明显,先进行++,然后再进行引用赋值
i=3;
j=++i;
那么j的值是4,i的值也是4。
j=++i相当于j=(i=i+1)
反之
后自增表达式i++的值
是i加1之前的值
可以称之为先引用后加1
若有i=3;j=i++;
那么j的值是3,i的值是4。
j=i++相当于j=(i=i)+1
-
一堆闲杂资料
自增运算符++
其基本功能是使得某个变量的值加1;又分为前自增和后自增两种。
前自增表达式的一般
形式为:
++变量、例如++i
后自增表达式的一般形式为:
变量++、例如i++
从基本功能上来说,自增表达式i++和++i;与赋值表达式i=i+1都是相同的。
自减运算符–
其基本功能是使得某个变量的值减1;又分为前自减和后自减两种。
前自减表达式的一般形式为:
–变量、例如–i
后自减表达式的一般形式为:
变量–、例如i–
从基本功能上来说,自减表达式i–和--i, 与赋值表达式i=i-1都是相同的。
前自增(减)表达式与后自增(减)表达式单独使用时,是没有区别的;
只有作为另一个表达式的一部分时,才有区别。
例如:
语句i++;和语句++i;是完全等价的。
表达式j=i++与表达式j=++i则是完全不同的。(自增自减这个时候就作为赋值表达式的一部分了)
前自增表达式++i的值,是i加1之后的值。可以称之为先加1后引用。
例如,若有i=3;j= ++i;,那么j的值是4,i的值也是4。
可见,j=++i相当于j=(i=i+1)。再如,若有i= 3;printf("%d\n",++i);,则结果是4。
后自增表达式i++的值,是i加1之前的值。可以称之为先引用后加1。
例如,若有i=3;j=i++;,那么j的值是3,i的值是4。
可见,j=i++相当于i=(i=i)+1。
再如,若有i=3: printf("%d\n" ,i++);,则结果是3。 -
注意事项(优先级)
优先级:后自增>取负
例如,若有i=3;printf("%d\n",-i++);,则结果是-3。
因为后自增的优先级高于取负运算符,因此-i++等价于-(i++)。
先进行的是引用,因为是后自增,所以是个3,但这个时候i其实本身是4。对3取负就是-3.
多绕一下吧 -
复合赋值运算符:就是将算术运算符或者位运算符,与赋值运算符
相结合,而构成的一类运算符
包括
+=
-=
*=
/=
%=等
少用这玩意就行了
别把自己绕晕了
a+=3
相当于
a=a+3
X*=y+8
相当于
x=x*(y+8)
而不是x=x*y+8
个人建议少用少用少用
好处就是提高简洁性
但是降低了可读性
如果你看着都得反应一会
读程序本来就不高
就别给自己挖坑了
别再题目都搞错了