条件运算符由两个符号 ?和 :组成,必须一起使用,是C语言里唯一的一个三目运算符。 三目运算符:要求要有三个运算对象(操作数)。 条件表达式的一般形式为:
表达式1?表达式2:表达式3
执行过程:表达式1的值为真,条件表达式取表达式2的值;表达式1的值为假,条件表达式取表达式3的值。
特别注意:条件运算符的优先级别大于赋值运算符,小于关系运算符和算术运算符。
2.4. 位运算
? 按位与运算 &
规则:0&0=0 0&1=0 1&0=0 1&1=1 ? 按位或运算 |
规则:0|0=0 0|1=1 1|0=1 1|1=1 ? 按位异或运算 ∧
规则:0∧0=0 0∧1=1 1∧0=1 1∧1=0 ? 求反运算 ~ 规则:~0=1 ~1=0 ? 左移运算 <<
规则:把<<左边的运算数的各二进位全部左移若干位,高位丢弃,低位补0。左移一位相当于该数乘以2。左移n位相当于该数乘以2n。
? 右移运算 >>
把>>左边的运算数的各二进位全部右移若干位。高位补0,低位丢弃。右移一位相当于该数除以2。右移n位相当于除以2n。
2.5. 使用switch语句实现多分支选择结构
注意:
? switch语句的圆括号中的表达式的值必须是整型或字符型,不能为实型。 ? case后的表达式可以是求得整型和字符型的常量表达式,但不能含有变量。 ? default的位置对程序的执行没有影响。
3. 循环结构程序设计
while循环语句:
while循环语句的一般形式:
while(表达式)
{语句}
其中,“语句”就是循环体,循环体只能是一个语句,只要当循环条件为真(即给定的
条件成立),就执行循环体语句。
注意:
? while语句的特点是:先判断条件表达式,后执行循环体语句。
? 如果第一次判断表达式的值为0,则循环一次也不执行。即while循环体最少执行
0次。 do...while循环语句:
do...while循环语句的一般形式:
do{语句}
while(表达式);
其中,“语句”就是循环体,先执行循环体,然后再检查条件是否成立,若成立,再执
行循环体。
注意:
? do...while语句的特点是,先无条件的执行循环体,然后判断循环条件是否成立。 ? do-while循环体最少执行1次。 for循环语句:
for循环语句的一般形式为:
for(表达式1;表达式2;表达式3) {语句}
表达式1:设置初始条件,只执行一次。可以为零个、一个或多个变量设置初值。 表达式2:循环条件的表达式,用来判定是否继续循环,在每次执行循环体前先执行此表达式,决定是否继续执行循环。
表达式3:作为循环的调整,例如使循环变量增值,它是在执行完循环体后才进行的。 因此,for语句可以理解为:
for(循环变量赋初值;循环条件;循环变量增值) {语句} 表达式1; while(表达式2) { }
语句; 表达式3;
可以改写成为while循环的形式:
注意:
? 表达式1、表达式2、表达式3可以缺省,但两个分号不能省略。 ? 表达式1和表达式3也可以是逗号表达式。
3.1. break语句
break语句作用是使流程跳到循环体之外,接着执行循环体下面的语句。 注意:
? 功能:跳出整个switch语句;跳出循环体,防止死循环。
? break语句只能出现在switch、while、do-while、for循环中,不能出现在其他地方。 ? 作用范围:所在循环体从属的最内层循环,而不是外层的某个循环。
3.2. continue语句
cintinue语句作用是结束本次循环,即跳过循环体中下面尚未执行的语句,转到循环体结束点之前,接着继续执行循环条件判定。
continue语句只结束本次循环,而不是终止整个循环的执行,而break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。
注意:
? 功能:结束本次循环,接着判断是否继续下一次循环。 ? continue语句只能出现在while、do-while、for循环中。
? 作用范围:所在循环体从属的最内层循环,而不是外层的某个循环
4. 数组
数组(array)是一组有序数据的集合。数组中的每一个元素都属于同一个数据类型。
4.1. 定义和引用一维数组
定义一维数组
类型符 数组名[常量表达式];
引用一维数组
数组名[下标];
初始化一维数组
? 在定义的数组时对全部数组元素赋予初值。例如
int array[5] = {0,1,2,3,4};
数组元素间用逗号分隔。 ? 只给数组中一部分元素赋值。例如
int array[10] = {0,1,2,3,4};
定义数组有10个元素,但是花括号只提供了5个初值,系统自动给后面5个元素赋初值为0。
? 如果在定义数值型数组时,指定了数组的长度并对之初始化,凡未被“初始化列表”
指定初始化的数组元素,系统会自动把它们初始化为0。(如果是字符型数组,则初始化为’\\0’,如果是指针型数组,则初始化为NULL,即为空指针) 注意:
? 在定义数组时,需要指定数组中元素的个数,方括号的常量表达式用来表示元素的
个数,即为元素长度。
? 下标是从0开始的。例如:array[10],则这个数组有10个元素,其次,第一个元
素是array[0],最后一个元素是array[9],不存在数组元素array[10]。 ? 定义数组时用到的“数组名[常量表达式]”和引用数组元素时的“数组名[常量表达
式]”形式相同,但是含义是不同的。
4.2. 排序算法
所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。
排序分为很多种,其中书上主要讲解冒泡法和选择法。(见附录表5) 冒泡法:略 选择法:略
4.3. 定义和引用二维数组
定义二维数组
类型符说明符
数组名[常量表达式] [常量表达式];
例如定义array为3x4(3行4列)的数组:
float array[3][4];
C语言对二维数组采用这样的定义方式,使得二维数组可被看作一种特殊的一维数组;它的元素又是一个一维数组。
C语言中,二维数组中的元素排列是按行存放的,即在内存中先顺序放第1行的元素,接着存放第2行的元素。
引用二维数组
数组名[下标] [下标];
初始化二维数组
略(和一维数组初始化无差异)
4.4. 字符数组
字符型数据是字符的ASCII代码储存在存储单元中的,一般占一个字节。
定义字符数组、初始化字符数组和引用字符数组的方法和数值型数组类似,这里不详细讲解。
字符数组用来存放字符数据的数组时字符数组。字符数组中的一个元素存放一个字符。
4.4.1. 字符串和字符串结束标志
C语言中,是将字符串作为字符数组来处理的。
C语言规定以 ‘\\0’ 作为字符串的结束标志。‘\\0’ ASCII代码为0,即为空操作。
4.4.2. 字符数组的输入输出
字符数组的输入输出有两种方法:
? 逐个字符的输入输出。用格式符“%c”输入或者输出一个字符。
? 将整个字符串一次输入输出。用格式符“%s”,意思是对字符串(string)的输入输
出。 ? 输出的字符串中不包括结束符“\\0”。
? 用“%s”格式符输出字符串时,printf和scanf函数中输出项是字符数组名,而不
是数组元素名。 ? 使用scanf函数输入多个字符串时,以空格键分隔后输入。
? 如果一个字符数组中包含一个以上的“\\0”,则遇见第一个“\\0”输出就结束。
4.4.3. 使用字符串处理函数(见附录表6)
? puts(字符数组):将一个字符串输出到终端。其中输出字符串时默认后面自动补上
换行符。 ? gets(字符数组):从终端输入一个字符串到字符数组,并且得到一个函数值,为该
字符数组的首地址 ? strcat(字符数组1,字符数组2):连接两个字符数组中的字符串,数组1必须足够大。 ? strcpy(字符数组1,字符串2):将字符串2拷贝到字符数组1中。
? strcmp(字符串1,字符串2):比较字符串,相等返回0,字符串1>字符串2,返回
正数,小于返回负数。 ? strlen(字符数组名):求字符串长度。
? strlwr( 字符串):将字符串中的大写字母转换成小写 ? strupr( 字符串):将字符串中的小写字母转换成大写
5. 用函数实现模块化程序设计
5.1. 定义函数
C语言要求,在程序中用到的所有函数,必须“先定义,后使用”。 定义函数一般形式
类型名 函数名(形式参数列表) {
函数体 }
函数体包括声明部分和语句部分。
在定义韩式要用“类型标识符”(即类型名)指定函数值的类型,即指定函数带回来的值的类型。
5.2. 函数调用
定义函数的目的就是为了调用函数,以得到预期的结果。 函数调用一般形式
函数名(实参表列)
注意: