选择结构
1、定义:从main()开始,由上往下有些语句执行有些不执行。
2、两类语句 -》执行语句:控制语句
(1)、两类表达式
A 关系运算符及关系表达式
< <= > >= == !=
----------- -----
优先级6级 7级
B 逻辑运算符与逻辑表达式
&& 逻辑与 || 逻辑或 !(单目)逻辑非
------------ ---------- -------------------
优先级2级 从右向左
(2)、if()...else...
(3)、switch(){...}
【字符数组】
C语言中没有字符串变量,如何存储字符串?
方法1:字符数组来存放
1、字符数组的初始化
char s[] = {'a','b','c','d','e'};
与其它类型数组的初始化方式一样,只是其初始值是字符。
2、字符串
因为字符串最后都有一个字符串结束符('\0'),所以用字符数组来存放字符串时都要有一个元素存放结束符('\0')
C编译器见双引号才在末尾加 '\0'。
用字符串给一字符数组进行初始化有三种情况:
方法一:char a[] = "abcd";
同:char a[] = {'a','b','c','d'};
方法二:char a[] = {"abcd"};
方法三:char a[] = {'a','b','c','d','\0'};
3、字符串存储(赋值)四种方法
方法一:scanf(); 键盘输入
char a[10];
scanf("%s",a); //此时不能用&a,因为数组名本身就是数组首地址
用这种方法输入时,遇到空格符或回车符则自动结束输入。
方法二:gets()键盘输入
格式:gets(字符数组)
功能:读取一个字符串赋给字符数组
用这种方法输入字符时,只有遇到回车符才结束读取字符。
puts()输出
格式:puts(字符数组或字符串常量)
功能:在屏幕上输出字符数组中的字符。
用该函数输出与用%s格式输出一样,只是该函数将'\0'转成'\n'输出。
方法三:字符串初始化
4、字符串函数 要引入头文件
第1个函数:strcat()
格式:strcat(字符数组1,字符数组2);
功能:连接 -> 将字符数组2的值连接到字符数组1中,字符数组2的值不变。
例如:char a[10] = "abc";
char b[10] = "def";
strcat(a,b);
a => "abcdef"
b => "def";
第2个函数:strcpy()
格式:strcpy(字符数组1,字符数组2);
功能:将字符数组2中的字符串替换到字符数组1中。函数值为字符数组1的道地址。
例如:char a[10] = "abc";
char b[10] = "def";
strcpy(a,b);
a => "def"
b => "def";
第3个函数:strcmp()
格式:strcmp(字符数组1,字符数组2);
功能:函数返回值相同位置不同字符的ASCII码差值。
例如:strcmp("abc","abc"); => 返回差值为0 表示相等
strcmp("abc","abfc"); => 返回差值 -3 表示小于
strcmp("abc","ab"); => 返回差值 99 表示大于
注:不能用关系运算符直接进行字符串大小或字符数组大小的比较。
第4个函数:strlen()
格式:strlen(字符数组);
功能:求出字符数组的实际长度(不包括结束符)
方法2:字符型指针变量
变量的一些知识
【变量三属性】 先定义后使用
类型、作用范围、存储类别
{类型} 定义的
类型名 变量名列表
{作用范围}
分为局部变量和全局变量
(1)局部变量
定义:在一个函数内部定义的变量
a.局部变量只能在它所在的函数内有效
b.在不同的函数中可以出现同名变量,它们分别属于不同的变量
c.复合语句中定义的变量只能在此复合语句中有效
d.所有形式参数都是局部变量
(2)全局变量(外部变量)
定义:在函数外部定义的变量
a.全局变量的有效范围是在本文件内从定义该变量的位置开始到本文件的结束
b.全局变量可以在它的有效范围内被每个函数使用(引用、调用)
c.在同一文件中若全局变量与局部变量同名,局部变量“屏蔽”全局变量
{存储类别}说明类别
(1)auto 类别变量
a.auto类别变量用完后释放所占用空间。
b.局部变量默认为auto类别,无初始化时,初始值为随机值。
c.使用时间短,一般都为auto类别变量。
(2)static 类别变量
a.static 类别从定义到程序运行结束均占用存储空间。
b.全局变量默认为static类别,无初始化时,初值为 0。
c.static 类别变量只进行一次初始化。
(3)register 类别变量
a.register类别只能是局部变量才能被说明。
b.一般不能直接使用。
(4)extern 类别变量
a.extern类别变量可以加大变量的作用范围。
b.两种说明格式
格式1:定义同时说明类别
存储类别 类型名 变量名
格式2:分别定义、说明
类型名 变量名;
存储类别 变量名;
【预编译命令】
1、预编译命令 =》 标志是 #
文件包含(include)
#include <> 在指定的标准路径下搜索库文件
#include " " 不仅在标准路径下, 用在当前项目中的函数原型、类型定义和宏
2、宏
第一种:无参宏定义
格式:#define 宏名 宏内容
功能:用一个指定的标识符(宏名-》一般用大写-》符号常量)来代表一串字符(宏内容)。无语法检查,无类型说明。
注:
(1)宏名一般用大写字母表示,遵守用户自定义标识符命名规则
(2)#define可以在函数外部定义也可以在函数内部定义,但该命令应该在单独一行上。
(3)在进行宏定义时,可以引用已经定义的宏名进行层层置换。
(4)在进行宏替换时,必须先替换完所有的宏后再按优先级运算,同时替换过程中不能乱加括号。
。
第二种:带参宏定义
格式:#define 宏名 (参数列表) 宏内容
功能:提供了一种更加灵活的替换方式。
注:
(1)在定义有参宏时,参数列表必须用一对小括号括起且小括号和宏名之间不能有空格。
(2)对有参宏名进行替换时,需要将形参改成相应的实参,并且注意分清形参和实参的对应关系。
口诀:原模原样替换,先替换再按优先级计算