C语言知识点
一、数据类型
数据类型分类
基本数据类型,构造数据类型,指针类型,空类型四大类,详细如下:
二、运算符和表达式
运算符
表达式
是由常量、变量、函数和运算符组合起来的式子
- 一个表达式有一个值及其类型, 等于计算表达式所得结果的值和类型。
- 表达式求值按运算符的优先级和结合性规定的顺序进行。
- 单个的常量、变量、函数可以看作是表达式的特例。
三、输入输出操作
基本输入输出函数
- putchar():把变量中的一个字符常量输出到屏幕上
- getchar():从键盘上输入一个字符常量,此常量就是该函数的值
- printf():把变量中的各类数据,加以格式控制输出到屏幕上
- scanf():从键盘上输入各类数据,并存放到程序变量中
- puts():把数组变量中的一个字符串常量输出到屏幕上
- gets():从键盘上输入一个字符串常量并放到程序的数组中
- sscanf():从一个字符串中提取各类数据
printf格式输出函数
按用户指定的格式向终端(或系统隐含指定的输 出设备) 输出。
printf函数的一般形式:
printf(格式控制,输出表列)
格式控制
用双引号括起来的字符串,也称“转换控制字符串”
① 格式说明符
作用是将输出的数据转换为指定的格式输出。
由“%”和格式字符组成,如%d,%f, %c等。
② 普通字符
需要原样输出的字符。如双引号内的字符串、 逗号、空格 和换行符。
输出表列
输出列表为需要输出的一些数据
若参数列表中若包含多项参数,则用逗号分隔。
参数可以为变量、常量、函数以及其他表达式。
各输出项必须与格式控制字符串严格对应。
scanf格式输入函数
按用户指定的格式从键盘上输入数据,将其值存储到相应的变量之中。
scanf函数的一般形式:
scanf(格式控制,地址表列)
- 格式控制 —含义同printf函数;
- 地址表列 —由若干个地址组成的表列
- 必须保证两者的一一对应
scanf格式输入函数
- 若需要连续输入多个数值,一般用空格、回车符或制表符分隔数据。
- 可以在格式控制字符串中指定的特殊分隔符。但不建议使用,增加输入复杂度
scanf ( "%d %c %f ",&i,&c , &f );
scanf (“%d,%c ,%f ”, &i,&c , &f );
scanf( ”i=%d c=%c f=%f”, &i,&c,&f);
四、选择结构
if语句分支结构的三种形式
- 基本形式
if(表达式) 语句
- if-else形式
if(表达式)
语句1;
else
语句2;
-
if-else if形式
•if(表达式1)
• 语句1;
•else if(表达式2)
• 语句2;
• …
•else if(表达式m)
• 语句m;
•else
• 语句n;
if语句需要注意的问题
- 在三种形式的if语句中,在if关键字之后均为表达式。
- 在if语句中,条件判断表达式必须用括号括起来,在语句之后必须加分号。
- if语句的嵌套时,为了避免这种二义性,C语言规定,else 总是与它前面最近的if配对。
五、循环结构
循环控制语句的三种形式
- while循环语句
while (表达式)
语句;
- 计算while后面括号里表达式的值,若其结果非0,则转入②,否则转③
- 执行循环体,转①。
- 退出循环,执行循环体下面的语句
- do-while循环语句
do
语句;
while(表达式);
①执行循环体,转②
②计算while后面括号里表达式的值,若其结果非0,则转入① ,否则转③
③退出循环,执行循环体下面的语句。
- for循环语句
for ( [表达式 1]; [表达式 2 ]; [表达式3] )
语句;
表达式1:一般为赋值表达式,给控制变量赋初值;
表达式2:关系表达式或逻辑表达式,循环控制条件;
表达式3:一般为赋值表达式,给控制变量增量或减量;
①首先计算表达式1,然后计算表达式 2。
②若表达式2为真,则执行循环体;否则,退出 for循环,执行for循环后的语句。
③如果执行了循环体,则循环体每执行一次,都计算表达式3,然后重新计算表达式2,依此循环,直至表达式 2的值为假,退出循环。
六、数组
数组概念
数组是用来存储一组数据的构造数据类型。
只能存放一种类型的数据,如全部是int型或者全部是char型。
一维数组的格式
类型 数组名[元素个数];
举例:存储5个人的年龄
int ages[5]; //在内存中开辟4x5=20个字节的存储空间
- 一维数组的初始化
①. int ages[5]={17,18,19,20,21};//一般写法
②. int ages[5]={17,18};//只对前两个元素赋值
③. int ages[5]={[3]=10,[4]=11};//对指定的元素赋值,这里为第三个和第四个
计算数组元素
int count=sizeof(ages)/sizeof(int); //数组的总长度除以单个的长度等于元素个数
遍历数组
for(int i=0;i<5;i++)
printf(“ages[%d]=%d\n”,i,ages[i]);
- 二维数组
二维数组本质上是以一维数组作为数组元素的数组,即“数组的数组”。
二维数组的格式
类型 数组名[元素个数] [元素个数] ;
举例:存储3组年龄,每组10个人
int ages3;//数组能够存放3个数组,每个数组存放10个数值,共3x10=30个数值
七、函数
函数概念
函数(Function)是一段可以重复使用的代码。
C语言程序由多个函数组成,main() 是入口函数,只能有一个。
函数的一般形式
返回值类型 函数名(参数列表){
函数体
}
函数分类
从函数定义的角度
- 库函数:由C系统提供,用户无须定义.
- 用户定义函数:由用户按需要写的函数。
从函数返回值的角度
- 有返回值函数:此类函数被调用执行完后将向调用者返回一个执行结果,称为函数返回值。
- 无返回值函数:此类函数用于完成某项特定的处理任务,执行完成后不向调用者返回函数值。
从主调函数和被调函数之间数据传送的角度
- 无参函数:函数定义、函数说明及函数调用中均不带参数
- 有参函数:也称为带参函数。在函数定义及函数说明时都有参数,称为形式参数(简称为形参)。
八、指针
指针概念
内存单元的编号叫做地址(Address),也称为指针(Pointer)。
对于一个内存单元来说,单元的地址(编号)即为指针,其中存放的数据才是该单元的内容。
指针原理
设有字符变量C,其内容为“K”(ASCII码为十进制数 75),C占用了011A号单元(地址用十六进数表示)。设有指针变量P,内容为011A,这种情况我们称为P指向变量C,或说P是指向变量C的指针。
指针变量
变量的指针就是变量的地址。存放变量地址的变量是指针变量。
一个指针变量的值就是某个变量的地址或称为某变量的指针。
指针变量的形式
类型说明符 *变量名;
int *p1; // 表示p1是一个指针变量,它的值是某个整型变量的地址。或者说p1指向一个整型变量。
九、自定义数据类型
结构体
结构体是一种构造数据类型(也称复杂数据类型),由若干不同类型的变量组成。
每个变量都是结构体的成员(member),每个成员可以是基本数据类型,也可以是构造类型。
结构体形式
struct 结构体名{
成员列表
};
struct Student{
int age; //年龄
char *name; //姓名
char sex; //性别
};
共用体
共用体(共同体)的定义和结构体类似。
共用体的所有成员共享一段内存,它们的起始地址一样,并且同一时刻只能使用其中的一个成员变量。
共用体形式
union 共用体名{
成员列表
};
union Test
{
int age;
char sex;
float soloar;
};
枚举类型
枚举(Enum)类型,可以列出所有可能的取值。
枚举值(也称为枚举元素)为常量,不是变量,不能赋值。
枚举类型的形式
enum 变量名{枚举值列表 };
例如,列出一个星期有几天
enum week{sun, mon, tue, wed, thu, fri, sat};