day 06 回顾控制语句
基本数据类型
变量
数据的输入输出
数据在内存里面存储
数据溢出的处理
运算符
控制语句
--------------------------------------------
*****本周的内容:数组 函数 指针*****
--------------------------------------------
控制语句回顾
顺序结构
选择结构:if-else switch-case
if(num >= 100 && num <= 999)
{
// .....
}
else
{
// ....
}
if-else的使用场景要广一点,
switch-case 有限的 可罗列的结果选择。
循环结构:for while do-while
for循环一般适用于 知道次数的
while一般用于知道结束条件的。
字符串长度 : “123” "1212313" 用结束符号\0判断
数据的位数 : 1 156 348347
跳转结构:break continue goto return
break --- 跳出 离它最近的循环
continue --- 跳出本次循环,它下面的语句不执行,循环还在继续
-------------------------------------------------------------------
1、处理作业
2、do-while循环
3、循环嵌套
4、goto return
写作业的时候先梳理思路,然后再写代码
-------------------------------------------------------------------
2、do-while循环
格式:
do{
// 循环体
}while(条件表达式);
执行:
先执行循环体 然后进行 条件表达式的判断,如果条件表达式为真,则继续执行循环体。
直到 条件表达式为假,结束循环。
do-while无论条件表达式真假,循环体至少会执行一次。
案例:
do{
printf("hello world\n");
}while(0);
案例:
1+2+3+4+5+。。。。100;
int i; // 循环变量
int sum = 0;
i = 1;
do{
sum = sum + i;
i++;
}while(i<=100);
printf("%d",sum);
案例:
密码3次输入限定
int err_num = 0;
int passwd;
do{
// 输入密码
// 如果 密码 == 123456
// 输出 密码正确
// 结束循环 break
// 否则
// 如果 err_num == 2
// 输出 账号锁定
// 否则
// 输出 密码错误,请重新输入密码
// err_num++;
}while(err_num < 3);
-------------------------------------------------------------------------
3、循环嵌套
案例1:九九乘法表
1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8 1*9=9
2*1=2 2*2=4 2*3=6 2*4=8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18
3*1=3 3*2=6 3*3=9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27
4*1=4 4*2=8 4*3=12 4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 5*6=30 5*7=35 5*8=40 5*9=45
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 6*7=42 6*8=48 6*9=54
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 7*8=56 7*9=63
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 8*9=72
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
int i; // 行 1 ~9
int j; // 列 1 ~ 9
for(i=1;i<=9;i++)
{
for(j=1;j<=9;j++)
{
// i j
printf("%d * %d = %2d ",i,j,i*j);
}
printf("\n");
}
案例2:输出九九乘法表
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
int i; // 行 1 ~9
int j; // 列 1 ~ 9
for(i=1;i<=9;i++)
{
for(j=1;j<=9;j++)
{
if(i <= j)
{
printf("%d * %d = %2d ",i,j,i*j);
}
else
{
break;
}
}
printf("\n");
}
-----------------------------------------------------------------------------------------
int i; // 行 1 ~9
int j; // 列 1 ~ 9
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
{
printf("%d * %d = %2d ",i,j,i*j);
}
printf("\n");
}
-------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------
4、goto return
goto 语句一种无条件的跳转
在程序代码的某个位置定义一个标识符 ,写: 标识符:
需要跳转的地方,是用: goto 标识符名;
A:
printf("hello world\n");
goto A;
4种循环: for while do-while if+goto
应用:
用于跳出多层循环
#include<stdio.h>
int main()
{
int i;
int j;
for(i=1;i<=9;i++)
{
for(j=1;j<=9;j++)
{
if(i <= j)
{
printf("%d * %d = %2d ",i,j,i*j);
goto L;
}
}
}
L:
printf("end\n");
return 0;
}
return :
在函数中的作用:结束函数 √
返回数据 不需要返回数据的时候,return 后面可以不加数据 ,return ;
day06 下午 --- 数组
是什么
怎么使用
有哪些注意事项
---------------------------------------------------
1、数组是什么?什么场景下用数组?
2、数组的使用
---------------------------------------------------
1、数组是什么?
数组使用存放 大量的相同数据类型的数据
数组只是将数据组织在一起进行存放,后面对于数组中的数据操作还是需要单个单个操作。
数组在什么场景下用数组?
班级里面分数的统计
一个月对的温度信息
存储字符串数据
图片信息的存储
音频 视频信息的存储
2、数组的使用
1、数组的定义 --- 数据开空间
数组存放的数据 ---- 元素
数组名 --- 数据集合的名字 ages
数组里面的数据可以使用下标进行区分,从0开始--- 规定
{20,30,40,50,60}
格式:元素的数据类型 数组名[元素的个数];
练习:定义一个数组用来存放{20,30,40,50,60}
元素个数:5
元素的数据类型是整型:short
数组名:标识符 -- 自定义
short a[5]; // --- 开空间
练习:定义一个数组用来1个月(31)的温度 float temp[31];
定义一个数组用来1篇文章中所有的字符 char article[10000];
定义一个数组用来存放班级人的年龄 short ages[15];
2、数组的要素分析
数组名
元素的个数
元素的数据类型:除了 数组名[元素个数] 剩下的就是元素的数据类型
数组的类型: 除了 数组名 剩下的就是数组的数据类型
float temp[31];
元素的数据类型:float
数组名:temp
元素的个数:31
数组的类型:float [31]
short ages[15];
元素的数据类型:short
数组名:ages
元素的个数:15
数组的类型:short [15]
struct student arr[3];
元素的数据类型:struct student
数组名:arr
元素的个数: 3
数组的类型: struct student [3]
int *arr[4];
元素的数据类型:int *
数组名:arr
元素的个数: 4
数组的类型: int *[4];
3、数组的初始化
数组定义的时候就对元素空间进行写值操作。
定义一个数组用来存放20,30,40,50,60
short a[5] = {20,30,40,50,60};
// 访问一下 输出 数组名[下标]; 下标从0开始到总个数-1
printf("%hd %hd %hd %hd %hd",a[0],a[1],a[2],a[3],a[4]);
①数组只能在初始化的时候整体赋值,其他不行
下面的写法是错误的:
short b[5];
b = {10,20,30,40,50};
②初始化的时候,没有赋值的空间会补0
short c[5] = {10};
③初始化的时候,数据个数>元素个数 溢出舍弃
short d[5] = {10,20,30,40,50,60}; // 60被舍弃
练习:short a[5] = {20,30,40,50,60}; 进行数组中数据求和。
int sum = 0;
sum += a[0];
sum += a[1];
sum += a[2];
sum += a[3];
sum += a[4];
printf("%hd",sum);
--------------------------------------------------------------
short a[5] = {20,30,40,50,60};
int i; // 下标
int sum = 0;
for(i=0;i<=4;i++)
{
sum = sum + a[i];
}
printf("%d",sum);
数组的下标从开始,下标连续。
4、数组的赋值
数组里面元素的空间名称:数组名[下标]
数组里面元素的空间地址:&数组名[下标]
int a[5];
scanf("%d",&a[0]);
scanf("%d",&a[1]);
scanf("%d",&a[2]);
scanf("%d",&a[3]);
scanf("%d",&a[4]);
printf("%d %d %d %d %d",a[0],a[1],a[2],a[3],a[4]);
int c[5];
c[0] = 1;
c[1] = 9;
c[2] = 30;
c[3] = 8;
c[4] = 100;
printf("%d %d %d %d %d",c[0],c[1],c[2],c[3],c[4]);
5、数组元素在内存中的存储
数组元素在内存存储是连续的。
int c[5];
地址输出用 %p; 地址编号 --%p输出是16进制的数据。
printf("%p %p %p %p %p",&c[0],&c[1],&c[2],&c[3],&c[4]);
6、数组名是数组首元素的地址
int c[5] = {1,9,5,3,7};
c &c[0]
printf("%p %p",c,&c[0]);
c &c[0];
c+1 &c[1];
c+2 &c[2];
c+3 &c[3];
c+4 &c[4];
通过地址获取空间中的数据:解地址 --- *
*(&c[0]) == c[0]
*(c) == c[0]
*(c+1) === *(&c[1]) == c[1]
通过数组名的形式输出数组中的数据。