C语言基础

39 篇文章 20 订阅

一、格式输入输出

1.printf(“输出格式控制符”,输出列表项)
输出格式控制符可以是以下四种字符
格式符:%d %f %c %s,是后面输出列表项变量的占位符
修饰符:l m n -
普通字符:原样输出
转义字符:换行 \n 制表符 \t
2.scanf(“出格式控制符”,输入项地址表列)
输入格式控制符可以是以下两种字符
格式符:%d %f %c %s
普通字符:输入时要照原样输入
注意:地址表列要用地址运算符&取变量的地址或用指针变量

二、运算符

算术运算符
(+ - * / %)
注意:整除运算符/不是四舍五入,而是截断小数部分,返回结果的类型由除数和被除数中高级别的类型决定
关系运算符
(> < == >= <= !=)
逻辑运算符
(! && ||)
注意后两者的短路现象
位运算符
(<< >> ~ | ^ &)
赋值运算符
(=)
条件运算符
( ? : )
逗号运算符
,
指针运算符
*:乘法、定义指针、取地址内容
&:取变量地址
求字节运算符
sizeof()
强制类型转换运算符
(数据类型)
分量运算符
.
->
下标运算符
[常量]

三、指针:存放内存地址的变量

1.定义一个整型指针
int *p;
2.给指针赋地址值
p = 某个整型变量内存地址

如何获取变量的地址值:
通过求地址运算符(&)
通过其他指针变量获得地址值
赋空值(NULL)

四、swap()

传地址进去,改变地址指向的内容
如果传值进去,值是拷贝到一个新地址的值,实参与形参的区别为内容相同而地址不同,交换形参的值对于实参而言无效果
在这里插入图片描述

五、流程控制

除了switch中表达式结果可以是非布尔值常量,其他控制结构的表达式必须为返回结果为布尔值的逻辑表达式
switch应该配合break使用,防止其向下继续执行
continue:不执行它后面的语句,开始下个循环
break:跳出整个循环,不再循环
default:表示前面所有情况之和的补集,保证逻辑完备
for循环:它是while的特殊情况,没有while灵活,建议遍历数组时使用for循环

七、常用数学函数

圆周率:PI
绝对值:|a|–>fabs()
幂指函数a^b–>pow(a,b)
平方根:sqrt()
天花板函数:ceil(x) 返回大于或等于 x 的最小的整数值。
地板函数:floor(x) 返回小于或等于 x 的最大的整数值。
产生X~Y范围随机数:k=rand()%(Y-X+1)+X;

八、运算符优先级

1.一元>二元>三元
2.最高:() [] -> . ++ – 最低:逗号运算符
3.运算>关系>逻辑>赋值

九、数据类型

字符类型char(1B):用来存储小范围的整数(-128~127),和“字符”(所有ASCII字符,128个)。
整数类型int(4B):用来存储整数,范围:2的-31次方~2的31次方-1。
长整形long(8B):也就是 long int,用来存储整数。
单精度类型float(4B):最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字
双精度浮点类型double(8B):最多能有16位有效数字,但绝对能保证的为15位,也即float的精度为15~16位有效数字

十、数组

1.下标运算符中表达式只能是整型常量/常量表达式/常量宏定义,不能是变量
2.数组名是一个地址常量,表示数组的首地址,即第一个元素的地址
3.编译器不会检查数组下标是否越界,所以要注意避免数组越界,否则会得到一个随机值,破坏系统
4.引用数组元素值:下标引用a[0] 指针引用int *p = a = &a[0]
5.初始化:{初值序列}按序为数组初始化,没有则自动初始化为0或0.0
6.求数组长度:sizeof(arr)/sizeof(arr[0]),只能求数组中有意义的元素个数
7.数组作为函数参数传递时,通常其长度也要传,在函数内部无法求数组长度
8.C语言中数组下标中最好不要使用自加/自减运算符
9.二维数组是一维数组的数组:int [2][3] 有2个长度为3的一维数组

十一、字符数组

1.字符串一定是字符数组,字符数组不一定是字符串,字符串是以’\0’结尾的字符数组,长度为n的字符串需要长度为n+1的字符数组存储
2.char str[]={‘h’,‘e’,‘l’,‘l’,‘o’,’\0’}=“hello”
3.scanf输入字符串:末尾自动补0,分隔符为回车或者空格,所以不能输入带空格的字符串,
4.printf输出字符串:从初始地址开始输出,直到遇到第一个’\0’停止输出,输出结束后不会自动换行
5.gets输入字符串:gets(字符数组地址),从所给地址开始,字符数组依次接收键盘输入字符,遇到回车键结束输入,可以输入空格
6.puts输出字符串:puts(字符数组地址),从所给地址开始,依次输出字符,遇到第一个’\0’结束,并把’\0’转换为’\n’,即输出结束后自动换行
7.char *str = “hello”=char str[]

十二、字符串处理函数:string.h

1.字符串连接函数strcat(str1,str2):将两个字符串拼接为一个字符串赋值给str1,要保证str1长度足够
2.字符串拷贝函数strcpy(str1,str2):把str2拷贝到str1中,相当于str1 = str2
3.字符串比较函数strcmp(str1,str2):按顺序比较对应位置的ASCII码值
4.求字符串长度函数strlen(字符数组地址):返回字符串实际长度(不包含结束标志’\0’),推广来说是数组地址到结束标志间的字符个数
5.ASCII码 0:48 A:65 a:97

十三、结构体

1.类似于一个表或者记录,内部有多种不同数据类型的成员变量
2.struct 结构体名 { 成员表列}别名,指针;
3.结构体变量.成员变量
4.结构体指针->成员变量
5.定义结构体指针:struct 结构体名 *结构体指针名
6.单链表结构体:数据+后继结构体指针

十四、动态申请内存空间:stdlib.h

1.malloc函数
*void malloc(unsigned int size)
在内存中申请一块长度为size的连续空间,并返回一个无类型的指针,需要根据需求进行强制转换
p = (int ) malloc(8sizeof(int)) p指向一个可以连续存储8个整型数据的内存空间,相当于一个数组,p是数组名,不同的是,8可以是变量,即可以在程序运行是根据程序需要来进行动态申请内存空间,没有足够大小的连续空间则返回空指针,而一般数组只能在编写程序就需要确定数组大小,运行过程中不能更改。
2.free函数
void free(malloc函数返回的指针) 作用是释放malloc函数申请的内存空间

十五、文件

1.打开文件(仅写文件时文件不存在会自动创建)
FILE *fp = fopen(文件名,使用文件方式)
文件名:文件的绝对路径,注意\要进行转义为\
文件使用方式:r(read) w(write) a(append) t(text) b(binary) +(read&write)
注意:

用写方式打开一个已存在的文件时将清除原有文件内容,写入字符从文件首开始,而追写不会
如果没有“b”字符,文件以文本方式打开。
凡用“r”打开一个文件时,该文件必须已经存在

文件结束符:EOF
2.关闭文件
fclose(文件指针) 正常关闭返回0,否则为不正常关闭
3.字符读写函数fgetc和fputc
char ch = fgetc(文件指针) :从文件中读取一个字符送入字符变量,并且文件的位置指针向后移动一个字符
fputc(字符量,文件指针) :从文件指针开始写入字符量,并且文件内部位置指针向后移动一个字符,写入成功返回写入的字符,写入失败返回EOF
4.字符串读写函数fgets和fgets
fgets(字符数组名,n,文件指针) 从文件中读不超过n-1个字符到字符数组中,在读入最后一个字符后加结束标志’\0’,中途遇到换行符或EOF,则读出结束,返回值是字符数组的首地址
fputs(字符串,文件指针) 将字符串写入到文件
5.数据块读写函数fread和fwrite
fread(buffer,size,count,fp)
fwrite(buffer,size,count,fp)

buffer:存放数据的首地址
size:数据块的字节数
count:要读写的数据块块数
fp:文件指针

6.格式化读写fscanf和fprintf
fscanf(文件指针,格式化字符串,输入表列)
fprintf(文件指针,格式化字符串,输入表列)
7.文件的随机读写
1.rewind(文件指针) 把文件的位置指针移动到文件首
2.fseek(文件指针,位移量,起始点)

起始点:
文件首 0
当前位置 1
文件末尾 2

8.文件结束检测函数feof函数
feof(文件指针) :判断文件是否处于文件结束位置,如文件结束,则返回值为1,否则为0

十六、语法

1.标识符只能由英文字母、数字和下划线组成,且不能用数字开头,且区分大小写
2.变量必须先定义后使用,变量名标识内存中一个具体的存储空间,而变量值是存储单元中存放的数据
3.混合算术计算,按运算符优先级确定计算顺序,优先级相同则按照结合性决定计算顺序
4.使用const常量替换宏定义和宏常量,因为宏定义仅仅只是简单的字符串替换,不会进行类型检测,可能会发生错误
5.不同数据类型进行运算时的自动类型转换:char->int->long->double->long double ; float->double (赋值等号右边转换为与左边相同),可能发生精度损失
6.利用getchar()和putchar()进行字符的输入输出
7.大小写转换:大写+(‘a’-‘A’)->小写
8.字符类型的特殊性,既可以是字符也可以是数字
9.使用%c格式读入字符时,空格字符和转义字符(包括回车)都会被当做有效字符读入:在%c前加一个空格或者用getchar()提前接收
10.for循环适合遍历数组,在循环顶部进行循环条件测试
11.while循环适合循环次数未知的循环,在循环顶部进行循环条件测试
12.do-while至少循环一次,在循环底部进行循环条件测试,适合构造菜单子程序
13.exit(0):无错误终止整个程序的执行
14.return;:不返回任何值而结束函数执行
15.变量声明位置决定其作用域
16.变量是否用static决定其生存周期,static修饰可使变量生存周期为与程序共存亡
17.函数指针的作用:设置通用函数,例如将从小到大排序和从大到小排序抽象为排序函数,传递不同的排序函数指针以实现不同的效果

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值