导图社区 C语言知识导图
这是一篇关于二级C语言的思维导图,讲述了概述、运算符、基本语句、选择结构、循环结构、数组与函数、编译预处理、结构体和共用体。
编辑于2021-09-22 11:59:33二级C语言
概述
程序生成
源程序(.c)——目标程序(.obj)——可执行程序(.exe)
编译
连接
基本概念
标识符:关键字、预定义标识符、用户标识符
常量
类型:整型、实型、字符、字符串、符号
形式:整型{十进制、八进制(0开头)、十六进制(0x,0~9,a~f不区分大小写)} 实型:小数(小数点两边必须有数字)、指数(e前有数字,e后为整数) 字符:单引号,区分大小写,包括转义字符 字符串:双引号 符号:预处理命令定义的常量
变量
整型:int16、short16、long32、unsigned16、unsigned short16、unsigned long32(基本型在不同软件中有区别) 实型:float32、double64(单:7位有效数字,双:15-16位有效数字) 字符:char(每个变量存一个字符)
类型转换
自动转换
条件:同一表达式中各数据类型不同,会先转换再计算
优先级:char<int<float<double
赋值运算:以左边为准,向左转换,右级别高则截取
强制转换
(类型)(表达式)
运算符
优先级:1、初等运算符([]、()、结构体成员.、->) 2、单目运算符(负号-、~取反、++、--、取值*、求址&、逻辑非!)、强制转化运算、长度运算符sizeof() 3、算术运算符(*/%高于+-)>左移、右移>关系运算符(>、>=、<、<=高于==、!=) 4、按位与&>异或^>或|>逻辑运算符(逻辑与&&>逻辑或||) 5、条件运算符(表达式1?表达式2:表达式3)>赋值运算符(=、%=、*=、/=、+=、-=、<<=、>>=、^=、&=、|=) 6、逗号运算符
结合方向
右到左:单目运算、条件运算、赋值运算、扩展运算
左到右:初等、算数、关系、位、逻辑
注意事项: 1、赋值表达式左侧只能是变量,不能是常量或表达式 2、求余运算符运算对象必须是整型 3、逗号表达式的值为其中最后一个表达式的值(注意区分逗号表达式和有逗号的语句)
基本语句
1、字符输入getchar()字符输出putchar() 2、格式化输入scanf(格式控制,地址表列)printf(格式控制,输出表列)
格式表列: 1、整数:d(十进制)、o(八进制)、x(十六进制)、u(无符号十进制) 2、字符:c(字符)、s(字符串) 3、实数:f(小数形式,包括单、双精度)、lf(长双)、e(指数形式)、g(实数,会将小数点后无用的0过滤掉)
选择结构
表达式
关系表达式:由关系运算符连成的表达式,自动转化格式,0表示假,非0为真(>、>=、<、<=高于==、!=)
逻辑表达式(!>&&>||):逻辑运算符与运算对象(具体的值或合法表达式)组成。运算符不能连用,1真0假
语句
if
形式:if(表达式)语句1;else 语句2;
注意事项:1、多条语句应使用{}2、else采用就近原则3、可以嵌套
条件运算符
表达式1?表达式2:表达式3 表达式1的值非0,则以表达式2作为整个表达式的值,否则以表达式3作为整个表达式的值
switch(多分支)
形式:switch(表达式)(后面可以加:) { case 常量表达式1:语句1 case 常量表达式2:语句2 …… case 常量表达式n:语句n default:语句+1 }
注意:1、case语句标号后的语句可以不写2、case语句标号的的值不能重复 3、default可以出现在语句体中任意位置,也可以没有
循环结构
循环语句
do……while
形式: do{ 循环体语句 }while(表达式)
执行:先执行语句,再判断,表达式为真时,则返回重新执行,为假时,循环结束
注意:1、do不能独立出现2、无论条件是否成立,都会先执行一次循环体语句
while
形式:while(表达式)循环体
执行:表达式为非0时,执行语句,继续循环,为0时,退出循环
for
形式:for(表达式1;表达式2;表达式3)循环体语句
执行:先求1,再求2,2为真,则执行语句后再求3,继续循环;若2为假,则退出循环,不执行语句
注意:1、表达式1只在开始执行一次2、可以省略表达式,但是不能省略分号; 3、省略表达式2会进入死循环
tip:由while完成的循环,用for语句都能完成
循环嵌套
可以互相嵌套,但必须保证结构完整
结束语句
break
作用:提前结束循环
说明:1、只能出现在循环体和switch语句
continue
结束本次循环,继续下一次循环的判定
数组
字符数组
字符串处理函数 (调用前必须在程序前面 的命令行包含标准头文件 “string.h”
puts()输出字符串
gets()输入字符串
strcpy(字符数组1,字符数组2)将2的内容复制到1
strcat(字符串1,字符串2)将2的内容连接到1后面
strlen(字符数组)计算长度
strcmp(字符数组1,字符数组2)比较ASCII值,以第一个不同处的值为结果,1大,则值大于0,相等则为0,1小则值小于0
普通数组
一维数组
类型说明符 数组名[常量表达式](可以通过赋初值来定义大小,方括号中的表达式可以省略)
二维数组
类型说明符 数组名[常量表达式(行)][常量表达式(列)](同一维数组一样可以通过赋初值定义大小,行表达式可以省略,但列表达式不能省略)
函数
形参和实参
开辟空间
malloc()
calloc()
常用
sqrt()开根号
rand()随机函数
pow(x,y)求x的y次方(e的x次方直接用exp(x))
abs()求绝对值(abs是对整数取绝对值,而fabs是对浮点数取绝对值)
指针
指向普通变量的指针变量和指向指针的指针变量
指向数组的指针
字符串指针
指向函数的指针
数据类型(*指针变量名)()
指针数组
4字节
编译预处理
宏定义:#define 宏名 替换文本或 #define 宏名
结构体和共用体
typedef:typedef 类型名 标识符 用来说明一种新类型名
结构体类型: struct 结构体名 {成员列表};
方式:1、可以再声明结构体名时定义变量名;2、可以先声明结构体名再定义变量名;3、可以不声明结构体名直接定义变量名,但这样的结构体不能重复使用
成员引用:1、变量名.结构体成员名 2、指针变量名->结构体成员名 3、(*指针变量名).结构体成员名 如果是嵌套,则需要层层写出来
链表
文件
是什么
类型:文本文件(数据序列)和二进制文件(结构序列、数据序列)
存取方式:顺序存取、直接存取
文件类型指针
FILE *fp;
打开与关闭
打开:fopen(文件名,文件使用方式);
常见方式:r只读;w写,会覆盖原有文件内容;r+读写;w+建立新文件去写,若指定文件已存在,则原有内容全部消失;wb+与w+相同,但可以由位置函数设置起始位置
注意:无论使用什么使用方式,打开文件出现错误都会返回NULL
关闭:fclose(文件指针)
完成操作,应关闭文件,否则会导致丢失 执行操作后,若成功则返回0,失败则返回非0
读写
文本文件:fread(buffer,size,count,fp);fwrite(buffer,size,count,fp); buffer:一个指针变量,用于接收数据的内存地址,大小至少是size*count字节;size:要读写的字节数;count:指定数据块的个数(每个数据块有size个字节);fp:文件类型指针
二进制文件:fscanf(文件指针,格式字符串,输入列表); fprintf(文件指针,格式字符串,输出列表); 用于文本文件
fgets(str,n,fp); fputs(str,fp); str:要输出的字符;fp:文件指针,字符串末尾的\0不输出
1、rewind(fp);指针重新返回到文件的开头 2、fseek(文件指针,位移量,起始点);重新定位(0文件开始;1文件当前位置;2文件末尾) 3、feof()判断是否指向文件尾部,若是,则为真,返回非0;否则为假,返回0. 4、ftell();获取文件当前位置; 5、fputc(ch,fp);把ch的字符写到fp中; ch=fgetc(fp);从fp中读取数据写入ch;
sizeof()获得能容纳实现所建立的最大对象的字节大小。 strlen()返回的字符串长度不包括NULL
问题:case后面的常量表达式有顺序么? 是按照程序编写顺序还是表达式值的顺序?