第五章 循环结构
-
定义:从main()开始,从上向下,使得某些语句重复执行(这些语句被称为循环块/循环体)
-
循环结构的程序:在顺序结构中加入循环控制语句
格式1: 执行过程:自上向下,只有当表达式的值为0时才会退出循环 表达式必须放在()内 没有 { },while控制一条语句;如果出现 { },则控制整个{ }里的语句 整个while算一条语句 格式2: dowhile循环中最后必须加分号!! do要和while配对!! do只能就近控制一条语句,如果控制多条语句,必须加 { };在多条语句的情况下,如果不加 { },那么中间的语句就会让do和while割裂开,语句就会报错! 格式3: 执行过程:先exp1,然后无条件执行exp2,如果非0,则循环体,然后exp3;然后exp2,如果非0,则循环体,然后exp3,一直循环;一旦exp2为0,则跳出循环 exp1只执行一次,这个过程可以称为初始化,exp2为判断;exp3为增量,可以影响exp2 若exp2一直为真,则为死循环 for循环中两次分号一定不能少 exp1和exp3可以缺少 for(exp1; ;exp3) 若缺少exp2,系统就会自动填充1,程序陷入死循环,所以缺省也是永为真 格式4:If ( ){} else{} 与 goto配合使用 break语句 格式:break; 功能:中止退出//跳出 范围:循环体中和switch体 循环结束的两个出口:1、exp2为假;2、遇到break; continue语句 格式:continue; 功能:结束一次循环继续//跳回 范围:循环体中 在for中遇到continue就跳回exp3;如果是while或者dowhile则跳回while后面表达式
第六章 数组
-
特点:同一数组中的所有元素都属于同一种数据类型(int char float)数组元素用数组名和相应的下标来确定
-
方法:一个数组元素其实就是一个变量(可以称为带下标的变量)
一维数组
一维数组应用于单行单列的同类型的数据中
一维数组的定义格式:类型名 数组名[常量表达式];
定义一维数组有四个注意:
数组名属于用户定义标识符,要遵守标识符命名规则
定义一维数组时数组名后必须用一个方括号([])将常量表达式括起来,常量表达式的值表示所定义数组共有多少个元素(数组长度或数组的大小)
定义数组时方括号中的表达式不能含有变量。另外表达式的值必须要大于零且为正整数
C语言每个数组在内存中分配空间时是连续分配的
一维数组元素的引用格式:数组名[下标]
数组必须先定义后使用
数组不能整体用,要用只能用元素,引用时下标可以是表达式,数组元素的下标值在(0~N-1之间)
一维数组的初始化
格式:类型名 数组名[常量表达式]={初值1,初值2,…};
注意:
(1)定义一维数组时可以将各元素的初始值依次放在一对{}中赋给数组(必须用{}将初值括起,且初值之间用一个逗号分隔)
(2)多则出错;少则补0
(3) 定义赋初值的个数等于数组长度,则数组长度可以省略
(4)若 一个也不给则所有元素值都是随机值
(5) 只能在定义数组的同时用{}给数组元素整体赋值
二维数组
二维数组的定义格式:类型名 数组名 [常量表达式1(行数)][常量表达式2(列数)];
定义二维数组有四个注意:
(1) 数组名要遵守用户自定义标识符的命名规则
(2)定义二维数组第一个方括号常量表示行数,第二个方括号常量表示列数
(3) 定义数组时方括号中的表达式不能含有变量,且表达式的值必须是大于0的正整数
(4) 在内存中二维数组元素的存放也是连续的,先行后列原则
二维数组元素的引用格式:数组名[行下标][列下标]
(1)不能整体引用,只能引用其中的元素
(2) 引用二维数组元素时,必须有行下标和列下标两个下标。从0开始依次加1
二维数组的初始化
方法1:将初值依序放在一对{}中,与一维数组初始化格式相同 (按列划分)
方法2:定义二维数组同时,按行初始化每一行初值均用一对{}括起,采用嵌套的{ }格式
注意:
定义二维数组的同时给数组初始化,则可以省略行数,但列数不能省略(只有初始化的时候可以省略行数)
多则出错;少则补0
字符数组(字符串)
C语言中没有字符串变量,那么如何存储?
方法1:字符数组来存放
方法2:字符型指针变量
字符数组的初始化
与其它类型数组的初始化方式一样,只是其初始值是字符
字符串
标志:一对双引号
字符串常量后有一个 (前提是单引号,而非双引号引号!!!)
如:“abcd” 由5个字符组成,“abcd ” 由6个字符组成,“” 等价于” ”,是一个空字符串
' ' 字符型," "空字符串
用字符串给一字符数组进行初始化有三种情况:
方法1:char a[]=”abcd”; (出现""可以省略 { }) [ ]里应该填的是5
方法2: char a[]={”abcd”};
方法3:char a[]={‘a’, ’b’, ’c’, ’d’, ’ ’};
字符串的使用
(1)字符串存储(赋值)四种方法
方法1:scanf( );键盘输入;printf( );输出
char a[10]; scanf(“%s”,a); printf(“%s”,s);
| scanf(“%s”,&a); 非法(因为此时的a本身就是一个地址)
注:
1、scanf输入时不能加&
2、用%s格式输入时,遇到空格符或回车符则自动结束输入(空格或者回车相当于输入了一个 ,程序遇到 就会结束运行,而 作为结束运行的标志并不会被输出!)
3、连续输入时不能加逗号,如:scanf(“%s,%s”,a,b); 不能正确读取数据
方法2:gets( )键盘输入,puts( )输出
gets( )键盘输入
格式:
功能:读取一个字符串赋给字符数组
注:
(1)用该函数输入字符时,只有遇到回车符系统才结束读取字符
(2)不论是用%s还是gets()在输入时均不需要输入双引号,若输入时用了双引号则双引号也作为字符串的有效字符
puts( )输出
格式:
功能:在屏幕上输出字符数组中的字符
注:用该函数输出与用%s格式输出一样,只是该函数将’ ’转成’n’输出
方法3:字符串初始化
char a[]=”abcd”; (出现""可以省略 { })
char a[]={”abcd”};
char a[]={‘a’, ’b’, ’c’, ’d’, ’ ’};
方法4:strcpy();
(2)字符串函数
第1个函数:strcat()
格式:
功能:“连接”
注:
1、第一个‘ ’处开始连
2、第二个串的‘ ’也要连接上
3、返回的是第一个数组的地址(指针)
4、是将第一个字符数组后面的所有字符数组连接到第一个字符数组后面,以此类推
第2个函数: strcpy()
格式:
功能:将字符数组2中的字符串替换(拷贝)到字符数组1中。函数值为字符数组1的首地址
注:
1、是将字符数组2里的所有元素以及 依次替换到字符数组1中的
2、一定是总字符数组1 的第一个字符开始连接
3、遇到 之后就结束了, 之后的就不输出了
第3个函数:strcmp()
格式:
功能:函数返回值相同位置不同字符的ASCII码差值
返回的是一个整型值
0:表示两个字符串相等
大于0:表示前面的字符串比后面的字符串大
小于0:表示前面的字符串的比后面的字符串小
注:不能用关系运算符直接进行字符串大小或字符数组大小的比较
第4个函数: strlen( )
格式:
功能:求出字符数组的实际长度(不包括结束符)
注:
1、见到 时要注意后面是否有数字,后面最多可以接三位的八进制数
2、见到 无法结合后面的数字的时候,就要注意:此时到 之后就结束了,得出的数值为 前面的元素长度
字符数组的两个责任
1、就是当字符数组使用:{ },单个的一个字符。没有
2、字符串存入字符数组中:直接写“”,' ' 时一定加 ,有一个元素存
字符数组如何存字符串
1、要有元素存 ,必须显性地写出来
2、字符串的外围 { }可加可不加,但是必须要有 “”;如果没有“”,那就必须加 { }



