导图社区 C语言基础知识
这是一篇关于C语言基础知识的思维导图,包含C语言程序结构、数据类型、常量与变量、指针、数学库中的几个常用函数等。
编辑于2021-08-23 10:40:54C语言
数据类型
、常量 1.概念 常量是指程序运行期间其数值不发生变化的数据。 2.分类 整型常量 前缀 输出标识 二进制 0b //没有专门输出二进制的函数,后面学过位运算后可以自己写 八进制 0 %#o 十进制 %d 十六进制 0x %#x 浮点型常量 float 类型 %f double 类型 %lf 字符常量 %c 》1.字符常量只能用单引号括起来。 2.字符常量只能是单个字符 3.转义字符 字符串常量 %s 1.字符串常量在内存中储存时系统自动在字符串的末尾加一个“串结束标志”,即ASCII码值为0的字符NULL。 举例字符‘A’占一个字节,字符串"A"占两个字节。 指数常量 %e 》在C语言中,指针常量只有唯一的一个NULL(空地址)。 标识常量 define(宏定义)//一般用大写字母表示
不同的计算机结构中这些类型所占的bit位可能不同
基本数据类型
整型int
分为unsigned和signed
短整型short int
长整型long int
浮点型float,double
字符型char
枚举型enum
指针型
空类型
void
构造类型
数组
数组就是具有一定顺序关系的若干变量的集合。这些变量的数据类型必须相通。 C语言中规定了数组元素必须逐个引用。 static数组不初始化。数组中的元素默认值为0. 数组名不能与其他变量名相同。
数组下标越界,结果是不可预料的。一定要谨慎处理数组下标
一维数组
一维数组是指只有一个下标的数组。
数组text
完成一个斐波那契数列? 斐波那契数列是一组第一位和第二位为1,从第三位开始,后一位是前两位和的一组递增数列,
text2冒泡
冒泡排序是所有排序算法中效率最慢的,他是时间复杂度是 O(n^2)。 先拿第一个数与第二个数比较,将相对较大的数放在第二个数里, 然后第二个数和第三个数比较,将相对较大的数放在第三个数里, 依次类推,直到走完最后一个数,这时最后一个数里就是当前数字中的最大的 然后开启第二次比较 先拿第一个数与第二个数比较,将相对较大的数放在第二个数里, 然后第二个数和第三个数比较,将相对较大的数放在第三个数里, 依次类推,直到走完倒数第二个数,这时倒数第二个数里就是当前数字中的第二大的 依此类推,完成整个数列的排序。
多维数组
有两个下标的数组称为二维数组。一个是行号,一个是列号。 二维数组(或多维数组)是逻辑上的二维(或多维),本质上都是一维数组,在内存上是连续的只不过,增加了行号,相当于按行偏移时,每次偏移的宽度为列宽。
二维数组text
定义一个二维数组并完全初始化,找到数组中最大的元素及其对应的行号列号
字符数组
指针数组
结构体数组
结构体struct
共用体union
常量与变量
变量的定义: 存储器为其分配一定的存储空间,一个变量在作用域范围内只能由一个定义。 变量的声明: 一个变量可以有多次声明。存储器不会为其分配存储空间。 作用域:一个变量根据其作用域的范围可以分为函数原型作用域,局部变量和全局变量。 函数原型作用域:函数原型中的参数,其作用域始于“(”,结束于“)”. 局部变量:函数内部定义的变量,仅能被定义该变量的模块内部语句所访问,局部变量在自己的代码模块外不可见。 全局变量: 字符变量:完全可以当成一个整型变量。 指针变量:当一个函数每次被调用时,它的自动变量(局部变量)每次分配的内存位置都不同,因此把非零的常量赋给一个指针变量是没有意义的。
宏定义
宏定义就是将一个常量表达式定义成另一个名字, 使用这个名字就相当于使用这个常量表达式,如果改变了这个名字对应的常量表达式, 代码中使用过这个名字的位置的值都会改变,这个名字是一个标识符, 所以需要遵循标识符的命名规则,一般都是用大写字母表示
运算符和表达式
运算符是告诉编译程序执行特定算术或逻辑操作的符号。运算的对象成为操作数。
运算符类型
算术运算符
算术运算符优先级 ()++ (-负号运算符) -- * / % + -
+ - * / %
关系运算符
> < == <= <= !=
逻辑运算符
! && ||
位运算符
<< >> ^ | & ~
赋值运算符
=
条件运算符
? :
指针运算符
* &
求字节运算符
sizeof
强制类型转换运算符
(类型)
分量运算符
->
下标运算符
[]
面试题
函数
全局变量
//写在函数外面的变量叫做全局变量 //全局变量的作用域是从开始一直到整个文件结束 //全局变量的生命周期是直到进程结束
局部变量
//写在函数里面的变量叫做局部变量 //局部变量的作用域是最近的{} //局部变量的生命周期是当前{}结束,生命周期结束,变量所占的内存空间被系统回收 //当去全局变量和局部变量重名时,采用局部优先原则。
值传递和地址传递
函数test
指针
*
在定义指针变量时只是起到标识的作用,在其他场景下,都是地址的内容进行操作。
指针练习
test1用指针实现strlen功能
test2用指针实现strcpy功能
test3实现atoi函数
atoi 将字符串的数字转成对应的整型数字 char arr[] = "123456"; int a = 123456;
test4
输入一个字符串,将里面的大写字母转成小写,小写字母转成大写,其他字符都转成'-' 例如: abcdFGH**()(aaa ABCDfgh-----AAA
指针的大小
无论什么类型的指针,大小是固定的。 在32位系统中,是4字节。 在64位系统中,是8字节。 可以想象寄存器内的地址编号是固定大小的。
大小端存储
小端:地址低位存在数据低位。 大端:地址低位存在数据高位。
指针和一维数组
对于数组而言,数组名就是一个指针,指向数组的首地址。 数组的首地址和数组首元素的地址和数组名是同一地址。 //可以用 *(arr+i)的方式访问数组元素。 //数组名 可以作为地址赋值给其他指针。 、、注意 指针q指向arr q可以进行偏移 也就是说支持q++ q=q+1 但是arr不可偏移。
数学库中的几个常用函数
pow
求x的y次方 #include <math.h>//编译时需要加 -lm ----gcc a.c -lm -o a.out double pow(double x, double y); 例: double value = pow(3,2);//9
sqrt
开二次方,得到的是整数根 #include <math.h>//编译时需要加 -lm ----gcc a.c -lm -o a.out double sqrt(double x); 例: double value = sqrt(16);//4
abs
求绝对值 // -3的绝对值是3 3的绝对值是3 #include <stdlib.h> int abs(int j); 例: int value = abs(9-20);//11
字符串相关函数
strlen
strlen 函数原型:size_t strlen(const char *s); 功能:计算字符串 s 的长度,返回字符串的长度 size_t 是 long unsigned int 别名 遇到 '\0' 结束,所以统计的是字符串s中'\0'前面的长度
strcpy
char *strcpy(char *dest, const char *src); 功能:将src字符串'\0'及之前的部分 拷贝到dest字符串中
strcat
char *strcat(char *dest, const char *src); 功能:字符串拼接,将src字符串拼接到dest字符串后面 src的 '\0' 也会被赋值 从desc的'\0'那一位开始接收
strcmp
int strcmp(const char *s1, const char *s2); 功能:比较两个字符串的大小(!!!!!!!!不是长度) 先比较两个字符串的第0位的asc码,如果相等,接着往后比 知道出现大小关系了,函数就返回了 '\0'前所有字符都相等,才判定为两个字符串相等。 返回值: 0 相等 >0 s1>s2 <0 s1<s2
C语言程序结构
顺序结构
goto语句也成为无条件转换语句
goto练习
用goto实现 求 1+2+3+4+...+100 的值 = 5050
分支结构
条件判断语句又称为选择语句
if else小练习1
输入三个数:按照从小到大的顺序进行排列?
小练习2
练习2.编写程序计算身高 每个做父母的都关心自己孩子成人后的身高, 据有关生理卫生知识与数理统计分析表明, 影响小孩成人后身高的因素有遗传、饮食习惯与坚持体育锻炼等。 小孩成人后身高与其父母身高和自身性别密切相关。 设faHeight为其父身高,moHeight为其母身高,身高预测公式为: 男性成人时身高 = (faHeight + moHeight) * 0.54(cm) 女性成人时身高 = (faHeight * 0.923 + moHeight) / 2(cm) 此外,如果喜爱体育锻炼,那么可增加身高2% 如果有良好的卫生饮食习惯,那么可增加身高1.5% 程序要求:父亲的身高与母亲的身高、小孩的性别、是否喜爱体育锻炼和是否有良好的卫生饮食习惯也从键盘上输入,最终输出预测的身高。
switch case
test1
学生成绩管理 switch case 从外部输入一个学习成绩 int,范围为0 – 100, 成绩大于等于90分,则输出A, 成绩大于等于80,则输出B, 成绩大于等于70,则输出C, 成绩大于等于60,则输出D, 小于60,则输出F
循环结构
break语句跳出本层循环 continue 结束本次循环,并不跳出循环。
while
test桃子
猴子吃桃问题: 猴子第一天摘下了若干个桃, 当即吃了一半数量的桃,还没吃过瘾,又多吃了一个, 第二天,又将剩下的桃子吃了一半,没吃过瘾,又多吃一个, 以后的每天都吃一半零一个, 到10天再想吃的时候,发现,只剩下一个桃了。 问,第一天,摘了多少个桃。
do while
限制性代码块,然后执行表达式,判断表达式是否为真, 如果为真,则继续执行语句块, 直到表达式为假,do...while 语句退出。 (也就是说,不管表达式真假,代码块都会先执行一次)
求和
for
水仙花问题
水仙花数:个位^3 + 十位^3 + 百位^3 == 自身 例:153 = 1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 * 3