Day5
1、循环结构
循环:重复做某一件事
循环三要素
(1)循环的初始条件 (2)循环的中止条件 (3)循环变量的变化
1.1 for循环
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的值都可省略,但是分号不能省略
案例
案例
1.2 while语句
while(表达式)
{
语句;
}
//判断表达式的值是否为真,为真执行循环体,否则,跳出循环
1.3 do while语句
do
{
语句;
}while(表达式);
//先执行一次语句,然后再判断表达式的值是否真,如果为真继续执行,否则跳出循环
总结:
while先判断,再执行,循环体至少执行0次
do while先执行,再判断,循环体至少执行1次
转向语句
1.4 break
(1)跳出switch语句 (2)跳出循环
1.5 continue
作用:结束本次循环,开始下一次循环
1.6 死循环
(1)
while(1)
{
;
}
(2)
for(;1;)
{
;
}
3
LOOP:
;
goto LOOP;
1.7 goto语句
无条件跳转语句,一般格式goto语句标号
语句标号:符号标识符的命名规范
程序执行到goto时跳回到语句标记loop的位置
2、数组
整型数组、字符数组、二维数组
2.1 概念
一组数据类型相同
的元素的集合
(1)数据类型相同 (2)地址连续
2.2 数组的定义
存储类型 数据类型 变量名
auto int a;
存储类型 数据类型 数组名[元素的个数];
存储类型:auto(修饰局部变量,存储在栈区)
static(局部和全局,存储在静态区;延长局部生命周期,只需初始化一次;限制全局变量在本程序内)
register局部,寄存器,无空闲,在栈区
extern 全局,静态区
数据类型:数组中每一个元素的数据类型
去掉变量名剩下的都是数据类型
数组的数据类型:数据类型[元素的个数]
数组名:(1)数组名代表的是数组首元素的地址 (2)代表整个数组
元素的个数:必须是一个确定的数(整型变量)
2.3 数组的初始化
2.3.1 部分初始化
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)
2.3.2全部初始化
int a[5] = {1,2,3,4,5};
int b[];//error,元素个数必须是确定的
int b[] = {1,2,3};//数组中的元素个数由后面的复制的具体个数决定
总结:
(1)如果数组定义函数体内部,如果没有初始化,其值为随机值
(2)如果数组定义在函数体外部,如果没有初始化,其值为0
(3)如果用static修饰,没有初始化,其值为0
2.4 数组的访问
2.5 数组的输入输出
(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
作业
1、打印9*9乘法表
#include <stdio.h>
//打印一个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;
}
2、求数组中的最大值(不能使用冒泡排序)
#include <stdio.h>
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);
}
3、求数组中的次大值
#include <stdio.h>
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]<max)
{
//另一种情况 arr[i]在两者之间*/
mid = arr[i];
// 把arr[i]赋给mid
}
}
printf("max=%d,mid=%d\n",max,mid);
return 0;
}