C1.关系运算符
- < (小于)
- > (大于)
- >= (大于等于)
- == (等于)
- != (不等于)
- 关系表达式的值是一个逻辑值,即“真”或“假”
- 关系运算符优先级低于算数运算符
关系表达式
- a>b
- a+b>b+c
- (a=3)>(b=5)
- 'a'
- (a>b)>(b
- a!=(c==d)
逻辑运算符
- !(逻辑非)
- && (逻辑与)
- 当a和b的值都是非0时,结果为1,否则为0
- || (逻辑或)
- 当a和b的值都是0时,结果为0,否则为1
- 逻辑表达式的值应该是一个逻辑量“真”或“假”
- 例如
- a&&b 若a,b都为真,则为真
- 例如
逻辑表达式
- 例如
- a=4,b=5
- !a 0
- a&&b 1
- a||b 1
- !a||b 1
- 4&&0||2 1
- 在逻辑表达式的求解中,并不是所有的逻辑运算符都要被执行
- a&&b&&c只要a为真时,才需要判断b的值,只有a和b都为真时,才需要判断c的值
- a||b||c只要a为真时,就不必判断b和c的值,就不必判断b和c的值,只有a为假,才判断b。a和b都为假才判断c
- 例如
- (m=a>b)&&(n=c>d)
- 例如
- 当a=1.b=2.c=3,d=4,m和n的原值为1,m=1 n=0
条件运算符和条件表达式
- 一般形式为
- 表达式1?表达式2;表达式3
- 其求值规则为:如果表达式1的值为真,则以表达式2的值,否则以表达式2的值作为整个条件表达式的值
- 表达式1?表达式2;表达式3
- 条件的运算符的运算优先级低于关系运算符和算术运算符,但高于赋值运算符
- 条件运算符?和:是一对运算符,不能分开单独使用
- 条件运算符的结合方向是自右至左
if(表达式)语句
- if语句的嵌套
- if(表达式1) b
- else 语句2
- else
- if(表达式3)语句3
- else 语句4
- if(表达式1) b
- 注意:else总是与它前面最近的if配对
C2.多分支语句
-
-
- if(表达式1)语句1
- else if(表达式2)语句2
- else if(表达式3)语句3
- -- -- - -
- else if(表达式m)语句m
- else 语句n
- Switch语句
- switch(表达式)
- {
- case 常量表达式1:语句1
- case常量表达式2:语句2
- -----
- case常量表达式n:语句n
- default:语句n+1
- }
- 每一个case的常量表达式的值必须交互相不相同
- 各个case和default的出现次序不影响执行结果
- 在执行swich语句时,根据switch后面表达式的值找到匹配的入口表扣,就从此标号开始执行下去,不在进行判断。应该在执行一个case分支后,可以用一个break语句来终止switch语句的执行
- 多个可以共用一组执行语句
-
do while循环
- 一般形式
- do
- 循环体语句
- while(表达式)
for循环
- 一般形式
- for(表达式1;表达式2;表达式3)语句
- for语句最简单的形式
- for(循环变量赋初值;循环条件;循环变量增值)
- for(i=1;i
- 相当于
- i=1;
- while(i
- {
- sum=sum+i;
- i++
- 相当于
- for循环中的“表达式1(循环变量赋初值)”“表达式2(循环条件)”和”表达式3(循环变量增量)“都是选项,即可以缺省,“;”不能缺省
- 省略了“表达式1(循环变量赋初值)”表示不对循环控制变量赋初值
- 省略了“表达式2(循环条件)”,则不做其他处理时便成为死循环
- 省略了“表达式3(循环变量赋初值)”,则不对循环控制变量进行操作,这时在语句提中加入修改循环控制变量的语句
- 3个表达式都可以省略
- 表达式1可以是设置循环变量的初值的赋值表达式,也可以是其他表达式
- 表达式1和表达式3可以是一个简单表达式也可以是逗号表达式
- 表达式2一般是关系表达式或逻辑表达式,但可以是数值表达式或字符表达式,只要值非零,就执行循环体
- 循环的嵌套
- 一个循环体内又包含另一个完整的循环结构称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就叫多层循环
- break语句可以用来从循环体内跳出循环体,即提前结束循环,接着执行下面的语句,或者用来跳出switch语句
- 一般形式:break;
C3.一维数组的定义格式
- 类型说明符 数组名【常量表示式】
- int a【10】;
- 它表示定义了一个整形数组,数组名为a,此数组为10个元素
- float b【10】,c【20】
- 它表示定义了实型数组b,有10个元素,实型数组c,有20元素
- 数组名定名规则和变量名相同,遵循比较师傅定名规则,不能与其它变量名相同。
- 在定义数组时,需要指定数组中元素的个数,方括弧中的常量表示,用来表示元素的个数,即数组长度
- 常量表示中可以包括常量和符号常量,但不能包含变量。但可以包含变量
- 允许在同一个类型说明中,说明多个数组和多个变量
- 常见错误
- float a【0】 数组大小0没有意义
- int b(2) 不能使用圆括号
- int k=10,a【k】 不能用变量说明数组大小
C4.数组元素的引用方式
- 数组元素的引用方式
- 数组名【下标】
- 例如
- a【0】,a【2*3】,a【i+j】
- 注意:定义数组和引用数组元素区别
- int a【10】
- t=a【6】
- a【0】,a【2*3】,a【i+j】
- 例如
C5.一维数组的初始化
- 在定义数组时对数组元素赋以初值
-
- 例如
- int a【10】={0,1,2,3,4,5,6,7,8,8};
- 经过上面的定义和初始化之后
- a【0】=0,a【1】=1,a【2】=2,---- a【9】=9
- 经过上面的定义和初始化之后
- int a【10】={0,1,2,3,4,5,6,7,8,8};
- 例如
- 可以只给一部分元素赋值
-
- 例如
- int a【10】={0,1,2,3,4,5}
- 定义a数组有10个元素,但是花括号内只提供5个初值。则前面5个元素付赋初值,后5个元素0
- int a【10】={0,1,2,3,4,5}
- 例如
- 如果想使一个数组中全部元素值为0,可以写成:
-
-
- int a[10]={0};
- 如果给十个元素全部赋1值,只能写
- int a【10】={1,1,1,1,1,---,1}
- 而不能写成 int a【10】=1
- int a【10】={1,1,1,1,1,---,1}
-
- 在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度
-
- 例如
- int a【5】={1,2,3,4,5}
- 也可以写成
- int a【】={1.2.3.4.5}
- int a【10]={1,2,3,4,5}只能初始化前5个元素,后5个元素为0
- int a【】={1.2.3.4.5}
- 也可以写成
- int a【5】={1,2,3,4,5}
- 例如
C6.二维数组的定义
- 二维数组定义的一般形式为
- 类型说明符 数组名【常量表示式】【常量表达式】
- 例如
- int a【3】【4】
- 例如
- 类型说明符 数组名【常量表示式】【常量表达式】
- 表示定义了一个3行4列的数组,数组名为a,数组元素为3x4个整形变量
- 例如
- 定义a为3x4的数列,b为5x10的数列
- 不能写成
- float a【3,4】,b【5,10】
- 不能写成
- 定义a为3x4的数列,b为5x10的数列
- 例如
- c语言中,二维数组中元素排列是以行为主序排列的
- 例如
- int a【3】【4】
- 错误
- a【3】【4】=4
- 错误
- int a【3】【4】
- 例如
A5,二维数组的初始化
- 分行给二维数组赋初值
- 可以将所有数据写在一个花括号内,按数组排列的顺序对各元素赋初值
-
- 例如
- int a【3】【4】={1,---12} 中间无花括号
- 例如
- 可以对部分元素赋初值,未赋初值的元素自动取0值
- 如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不省
C7.字符数组
- 字符数组的定义
-
- 类型说明符 字符名【常量表示式】【常量表达式】
- 对字符数组初始化,可逐个字符赋给数组中各元素,其余的元素自动定为空字符
- 如果提供的初值个位与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度
- 字符数组的初始化
- c语言规定了一个字符结束标志‘\0’
- 例如
- 定义了如下的字符数组
- char c【】={‘c program’};
- char c【】=”c program”;
- 字符串结束多一个‘\0’
- 定义了如下的字符数组
- 例如
- 字符数组的输入和输出
- 字符数组的输入输出有两种方法
- 逐个字符输入输出,用格式符“%c”
- 将整个字符串一次输入或输出,用格式符“%s”
- 输出字符不包括结束符'\0'
- 用“%s”格式符输出字符串时候,printf函数中的输出项是字符数组名,而不是数组元素名
- 如果一个字符数组中包含一个以上‘\0’,则遇第一个'\0’时输出就结束了
- 可以用scanf函数输入一个字符串
- 如果用scanf函数输出多个字符串,则在输入时以空格分隔
- get函数
- 一般形式:gets(字符数组)
- 作用从终端输入一个字符串到字符数组,并且得到一个函数值
- puts函数
- 一般形式:puts(字符数组)
- 作用是将一个字符串(以‘\0’结束的字符序列)输出到终端
- 用puts函数输出的字符串可以包含转义字符
- 字符串处理函数
- strcat(字符数组1,字符数组2)
- 其一般形式:strcat(字符数组1,字符数组2)
- 连接两个字符数组中的字符串把字符串2接到字符串1的后面
- strcpy(字符数组1,,字符串2)
- 其一般形式为:strcpy(字符数组1,字符串2)
- 将字符串2复制到字符数组1中去
- 字符数组1必须定义的足够大,以便容纳被复制的字符串。字符数组1的长度不应该小于第二个数
- 字符数组1必须写成数组名形式(如str1),字符串2可以是字符数组名,也可以是字符串常量。
- 复制时连同字符串后面的‘\0’一起复制到字符数组1中
- 可以用strncpy函数将字符串2中前面若干个字符复制到字符数组1中去(str1,str2,2);
- 不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组
- 可以用strcpy函数将一个字符串复制到另一个字符数组中去
- strcmp(字符串1,字符串2)
- 比较字符串1和字符串2.如果字符串1=字符串2,函数值为0
- 如果字符串1>字符串2,则函数值为一个正整数
- 如果字符串1
- strlen(字符数组)
- 其一般形式:strlen(字符数组)
- strlen是测试字符串长度的函数。函数的值为字符串中的实际长度(不包括‘\0’)