第四章
1.if语句的几种常见形式
①If(表达式)语句1(无else语句)
②if(表达式) (有else子句部分)
语句1
else
语句2
③if(表达式1) (有else子句部分)
语句1
else if(表达式2)
语句2
else if(表达式3)
语句3
.
.
.
else if(表达式n)
语句n
else语句n+1
在if语句中需要对小括号里内给定的条件进行判断,判断产生的结果是一个逻辑值是或否。在判断中经常会遇到关系运算符,所谓的关系运算符就是比较运算。
C中主要有以下几种关系运算符,> < = >= <= == !=其中等于与不等于有着相同的运算优先级,且优先级偏低,前四种有着相同的优先级,且优先级较偏高。
优先级问题中:算术>关系>赋值
c>a+b -> c>(a+b)
a>b==c -> (a>b)==c
a==b<c -> a==(b<c)
a=b>c -> a=(b>c)
用关系运算符将两个数值或数值表达式链接起来的式子叫做关系表达式,如5==3,a>b关系表达式的值是一个逻辑值,即真(1,不为0)或假(0)。如果有以下表达式,d=a>b,若a>b的值为真,则d的值就是1;否则就是0
F=a>b>c,>号的结合性是自左向右结合,先执行a>b,得到1,在执行1>c得到0,赋给f
逻辑运算符与逻辑表达式
有三种逻辑运算符与&&或||非!a&&b若ab均为真,则结果为真,否则结果假,a||b有一个为真就真,全假才假。!a的真假性与a相反。
条件运算符与条件表达式
表达式1?表达式2:表达式3,表达式1的值为真则进行表达式2,否则进行表达式3
If语句的嵌套
switch case 实现多分支选择结构,
switch(表达式)
{
case 常量1:语句1
case 常量2:语句2
case 常量3:语句3
.
.
.
case 常量n:语句n
default:语句n+1
}
在执行switch case结构时,先把switch后面表达式的值给算出来,然后将他与各个case的标号比较,如果与某一个case标号的常量相同,就转到此case的语句,如果没有相同的就直接转到default语句,switch case结构中可以没有default语句,各个case的标号次序不影响结果,哪怕是把default 放在最前面也没事,但是每一个case‘后的值必须不同,否则编译过不去。
第五章:
几种常见的循环
while循环,do—while循环,for循环
- while循环while语句如下:
while(表达式)
{
语句
}
注意在大括号里的语句叫做循环体,小括号里的叫做循环条件表达式,当循环条件表达式的值为真时,才会进入while循环。
小结:while循环的特点就是先判断循环条件表达式,后执行循环体语句。
2. do—while循环
do—while循环语句如下:
do
{
语句
}while(表达式);
语句就是循环体,而且while最后有一个分号不要忘记了
小结:该循环的执行过程就是先执行循环体,然后再检查一下看结果是否成立,若成立则继续执行。
3.for循环
for循环语句:
for(表达式1;表达式2;表达式3)
{
语句
}
注意:for循环里分隔两个表达式用的是分号不是逗号,
for语句执行过程如下:
- 求解表达式1
- 求解表达式2,若此条件表达式的值为真就是非0,就执行for语句的循环体,然后再执行第三步,若为假就终止循环
- 求解表达式3
- 转回步骤2
这三种循环实际上可以相互转换,但是他们都有专门的使用场景。当不知道循环的次数时就选择while循环,当知道循环的次数时就可以使用for循环。
当然循环也是可以嵌套的,在求数列的前n项和时就会经常用到嵌套循环。
改变循环的状态的语句:break continue
- 用break语句终止循环,当执行到break语句时就会终止当前这个循环。
break语句的一般形式:break;
注意:break语句只能用于循环语句和switch语句,不能单独使用。
- 用continue提前结束循环
有时并不希望终止整个循环的操作,而是希望提前结束本次循环,而执行下次循环,就可以使用continue语句。
通俗一点就是说,遇到continue就重新开始循环
continue语句的一般形式:continue;
第六章
数组简介,其中数组是一组有序数据的集合,下标从零开始,而且数组中的每一个元素的是相同的数据类型,要是int都是int,要是double都是double,是一种同构数据集合。
1.一维数组
定义与引用
定义一维数组的一般形式,类型说明符 数组名 [常量表达式],如:int a[10]
有关定义的几点说明:
- 组名的命名规则和标识符一样
- 定义数组时,需要指定数组的元素个数,方括号里的常量表达式用来表示元素的个数,即数组长度。指定a[10]表明数组内有10个元素,注意下标从0开始,这10个元素从0到9,没有a[10]。
- 常量表达式中可以包括常量和符号常量,定义时这样定义是可以的,int a[5+3],而且在定义之后,系统开辟了连续的存储空间来存放数组元素
引用数组元素的表示形式如下:数组名[下标]
初始化
- 定义一维数组时就对全部数组元素赋初值。例如:int a[5]={0,1,2,3,4,5};将数组内的个元素处置顺序放在一对花括号里面,数据之间用逗号分割
- 可以只对数组内的一部分元素赋初值,如int a[8]={0,1,2,3,4,5};定义了a数组有八个元素,但是花括号内提供了六个初值,这表示只给前面的6个元素进行了赋值,后两个的元素默认为0
- 如果想让数组内的元素的值均为0那么可以这样,int a[5]={0};也可以int a[5]={0,0,0,0,0};
- 在对全部的数组元素赋初值时,由于数据的个数已经确定,可以不指定数组的长度int a[5]={0,1,2,3,4,5};和int a[ ]={0,1,2,3,4,5};等价
利用一维数组解决常见问题,排序问题,冒泡法
- 二维数组
定义与引用
定义一般形式 类型说明符 数组名 [常量表达式] [常量表达式];
二维数组的元素存储方式按行来存储的,先存第一行的,再存第二行的,以此类推,因此在多位数组的内存排序中,第一维的变化的下标变化的最慢,最右边的下标变化的最快
引用,二维数组的表示形式如下,
数组名 [下标][下标];
初始化
- 分行给二维数组赋初值 int a[2][3]={{0,1,2},{3,4,5}};
- 也可将所有数据都写在一个花括号里,int a[2][3]={0,1,2,3,4,5};
- 可以对部分元素赋初值,int a[3][4]={{1},{5},{8}};
这样赋初值的意思是说a[0][0]=1,a[1][0]=5,a[2][0]=8
也可以对各行的某一元素赋初值,例如int a[3][4]={{1,2},{5,6},{8}};结果就是
- 2 0 0
5 6 0 0
8 0 0 0
④如果对数组的全部元素都赋初值,那么定义数组时的第一维的长度可以不指定,但是第二维的长度不能省略
- 字符数组
因为C语言里面没有字符串类型,也没有字符串变量,所以用字符数组来解决字符串相关问题。
定义的字符数组和前面提到过的一维数组和二位数组基本上没区别
字符数组的初始化,
- char a[10]={‘I’,’ ‘,’a’,’m’,’ ‘,’h’,’a’,’p’,’p’,’y’};
- 另外一种就是自动确定数组的长度,但是这种情况还是要求提供的初值个数就是预定数组的长度。
- 用字符串常量来初始化字符数组,例如:char str [10]=”I am happy”; char str [ ]={”I am happy”};此时的数组长度是11而不是10,因为有一个隐藏起来的\0,因此他与char a[10]={‘I’,’ ‘,’a’,’m’,’ ‘,’h’,’a’,’p’,’p’,’y’,’\0’};等价,不和char a[10]={‘I’,’ ‘,’a’,’m’,’ ‘,’h’,’a’,’p’,’p’,’y’};等价。
若char s[10]={“china”};那么第六个之后的元素都是\0、
遇到多个\0时,只会输出第一个\0之前的内容。
引用字符数组的值,略
字符串
实际上,我们关心的是字符串的实际长度,而不是字符数组的长度,为了测定字符串的长度,c语言规定了一个字符串结束标志,以‘\0’作为字符串的结束标志,如果字符数组中钱就个字符都不是\0,而第十个是\0,那么c愿与你就会认为数组中有一个有效字符为9个的字符串,也就是说,遇到字符\0他就代表着字符串结束,把它前面的字符当作是一个字符串。
字符数组的输入和输出
输入输出有两种方法,一个是逐个字符的输入输出,用%c来输入输出一个字符,另一个是将这个字符串一次性的输入或输出,用%s,
说明:
- 输出的字符不包括\0
- 用%s输出时,printf函数中的输出项是字符数组名,不是数组元素名,写成这样是不对的printf(“%s”,c[0]);
- 若数组长度大于字符串的实际长度,那么也只输出到遇\0结束,
- 若存在多个\0那么在遇到第一个\0是输出停止
- 可以用scanf输入一个字符串,scanf(“%s”,str);注意这里不加&只有一个数组名,因为数组名就是地址常量
一些处理字符串用的函数
- Puts函数——用于输出字符串
- Gets函数——用于输入字符串
一般形式gets(字符数组名)
- Strcat函数——字符串连接函数
一般形式strcat(字符数组1,字符数组2)
作用是将两个字符数组的字符串连接起来,就是把字符串2放在字符串1后面,结果放入字符数组1里面,函数调用的结果是字符数组1的地址
说明:字符数组1必须足够大,
- Strcpy与strncpy——字符串复制函数、
- Strcmp函数——字符串比较函数
- Strlen函数——测量字符串长度的函数
- Strlwr函数——转换为小写的函数
- Strupr函数——转换为大写的函数