循环:重复做某一件事
(1)循环的初始条件 (2)循环的中止条件 (3)循环变量的变化
- for(表达式1;表达式2;表达式3)
- {
- 语句
- }
- //for(i=0;i<3;i++)
- 表达式1:循环的初始条件
- 表达式2:循环的终止条件
- 表达式3:循环变量的变化
先执行表达式1的值,然后再执行表达式2的值,如果表达式2的值为真,执行循环体,再执行表达式3的 值,如此反复,直到表达式2的值为假,跳出循环
输出1+2+···+9

省略表达式1的值

注意:表达式1,2,3的值都可省略,但是分号不能省略
案例


案例


- while(表达式)
- {
- 语句;
- }
- //判断表达式的值是否为真,为真执行循环体,否则,跳出循环

- do
- {
- 语句;
- }while(表达式);
- //先执行一次语句,然后再判断表达式的值是否真,如果为真继续执行,否则跳出循环

总结:
- while先判断,再执行,循环体至少执行0次
- do while先执行,再判断,循环体至少执行1次
(1)跳出switch语句 (2)跳出循环

作用:结束本次循环,开始下一次循环

- (1)
- while(1)
- {
- ;
- }
- (2)
- for(;1;)
- {
- ;
- }
- 3
- LOOP:
- ;
- goto LOOP;
无条件跳转语句,一般格式goto语句标号
语句标号:符号标识符的命名规范
程序执行到goto时跳回到语句标记loop的位置

整型数组、字符数组、二维数组
一组数据类型相同的元素的集合
(1)数据类型相同 (2)地址连续

- 存储类型 数据类型 变量名
- auto int a;
- 存储类型 数据类型 数组名[元素的个数];
- 存储类型:auto(修饰局部变量,存储在栈区)
- static(局部和全局,存储在静态区;延长局部生命周期,只需初始化一次;限制全局变量在本程序内)
- register局部,寄存器,无空闲,在栈区
- extern 全局,静态区
- 数据类型:数组中每一个元素的数据类型
- 去掉变量名剩下的都是数据类型
- 数组的数据类型:数据类型[元素的个数]
- 数组名:(1)数组名代表的是数组首元素的地址 (2)代表整个数组
- 元素的个数:必须是一个确定的数(整型变量)


- int a[5] = {1,2,3};
- a[0] = 1,a[1] = 2,a[2] = 3,a[3]=0,a[4]=0

- 总结:部分初始化时,若未被赋值,默认为0,因此我们利用这一特点给数组清零 int a[5] = {0};
-
- 未初始化时,默认为随机值;(64位为0)
- int a[5] = {1,2,3,4,5};
- int b[];//error,元素个数必须是确定的
- int b[] = {1,2,3};//数组中的元素个数由后面的复制的具体个数决定
- (1)如果数组定义函数体内部,如果没有初始化,其值为随机值
- (2)如果数组定义在函数体外部,如果没有初始化,其值为0
- (3)如果用static修饰,没有初始化,其值为0

- (1)
- int a[5];
- a[5] = {1,2,3,4,5};//error a[5]:数组a中第五个元素
- (2)
- int a[5];
- a= {1,2,3,4,5};//error 数组名:(1)数组名代表的是数组首元素的地址
- (3)
- int a[] ={0};//没有意义,代表数组中只有一个元素
- (4)
- int a[];//error
- #include
- //打印一个9x9乘法表
- #define N 9
- int main(void)
- {
- int i,j=0;
- for(i=1;i<=N;i++)
- {
- for(j=i;j<=N;j++)
- {
- printf("%d*%d=%d\t",i,j,i*j);
- }
- printf("\n");
- }
- return 0;
- }

- #include
- int Max=0;
- int main()
- {
- int i=0;
- int a[5]={100,300,200,800,600};
- for(i=0;i<5;i++)
- {
- if(a[i]>Max)
- Max=a[i];
- }
- printf("Max:%d\n",Max);
- }

- #include
- int main()
- {
- int arr[5]={5,6,3,4,9};
- int max= arr[0]; //定义最大值
- int mid= arr[0]; //定义次大值
- for(int i = 0;i<5;i++){
- //因为arr[i]是固定的 ,所以可以用arr[i]先和max比较,如果大于max 则把max的值赋给mid的值,然后把arr[i]赋给max
- //这样max肯定比mid大
- if(arr[i]>max)
- {
- mid = max;
- max = arr[i];
- }
- else if(arr[i]>mid&&arr[i]
- {
- //另一种情况 arr[i]在两者之间*/
- mid = arr[i];
- // 把arr[i]赋给mid
- }
- }
- printf("max=%d,mid=%d\n",max,mid);
- return 0;
- }
