C语言基础学习笔记
前言
本学习笔记为我个人结合b站的厦门大学C语言程序设计基础课程自学总结而来,记录学习成果,交流学习经验,希望能对广大计算机专业学生有所帮助。建议在学习其他编程语言之前,首先学习一下C语言基础,理解数据类型、语法规则、流程控制语句等内容即可,不用深入学习指针等内容。C语言具有很好的代表性,对于学习其他编程语言都有很大的帮助。本人能力有限,学识尚浅,如有谬误,欢迎交流。感谢各位的阅读、评论,如有引用、转发需要征得本人同意,保留权利。
正文![]()
Visual C++6.0→文件→新建→文件→C++Source File→位置→文件名xxx.c→编写→组建F7→编译Ctrl+F5
#include 文件包含命令
stdio.h 标准输入/输出函数库
|
scanf(“格式控制字符串”,变量地址); |
输入函数 |
|
printf(“格式控制字符串”,表达式); |
输出函数 |
math.h 数学函数库
|
sqrt(x) |
求x的平方根 |
|
cos(x) |
求弧度x的余弦值 |
|
sin(x) |
求弧度x的正弦值 |
|
fabs(x) |
求x的绝对值 |
|
exp(x) |
求e的x次方 |
|
log(x) |
求log以e为底,x的对数 |
main() //主函数注:e=2.718282,C语言中没有π
{
return 0;
}
//注释 单行注释
/*注释*/ 多行注释
%d 整型格式控制符; %h short型格式控制符; %u unsigned int; %l long; %o 八进制; %x 十六进制
%f float型格式控制符; %lf double型输入格式控制符
%e 浮点型格式控制符,以指数符形式输出浮点数,小数点占一列
%g 根据数据大小,自动选择%f或%e
附加说明项与格式控制符搭配使用
%md中的m指定输出数据的最小宽度,符号位占一列,即右对齐
%-md中的-m指定m列中数据左对齐
%0md中的0m指定m列数据中的空位填0
%-m.nf中的.n指定输出数据的精度,即保留小数点后n位,未说明时默认保留6位,-、0、m同上,可省略
%md在scanf语句中控制截取m列数据作为输入
%*md在scanf语句中控制跳过m列数据不输入
\n 换行符
\t 水平制表符
\0 字符串标识
aEn 指数符a×10n
变量必须先声明后使用
标识符(identifier):变量名,以字母或下划线开头,由字母、下划线和数字组成,区分大小写
C语言不能直接输入分数,需要以设置两个变量n和m,以n/m形式输入
|
++ 自增运算符 |
前置++i |
i=i+1 |
表达式的值=i |
|
-- 自减运算符 |
后置i++ |
表达式的值=i |
i=i+1 |
运算符类别、名称、优先级和结合性
|
序号 |
类别 |
运算符 |
名称 |
优先级 |
结合性 |
|
1 |
强制 下标 成员 |
() [] ->、· |
类型转换,参数表,函数调用 数组元素的下标 结构或联合成员 |
15 (最高) |
自左向右 |
|
2 |
逻辑 位 算术自增、算术自减 指针 算术 长度 |
! ~ ++、-- &、* +、- sizeof |
逻辑非 位非 增加1、减少1 取地址、取内容 取正、取负 数据长度 |
14 |
自右向左 |
|
3 |
算术 |
*、/、% |
乘、除(整除)、模(取余) |
13 |
自左向右 |
|
+、- |
加、减 |
12 |
|||
|
4 |
位 |
>> << |
右移位 左移位 |
11 |
|
|
5 |
关系 |
>=、> <=、< |
大于等于、大于 小于等于、小于 |
10 |
|
|
==、!= |
相等、不等 |
9 |
|||
|
6 |
位 |
& |
位与 |
8 |
|
|
^ |
位异或 |
7 |
|||
|
| |
位或 |
6 |
|||
|
7 |
逻辑 |
&& |
逻辑与 |
5 |
|
|
|| |
逻辑或 |
4 |
|||
|
8 |
条件 |
?: |
条件(三目运算符) |
3 |
自右向左 |
|
9 |
赋值 |
= |
赋值 |
2 |
|
|
10 |
自反赋值 |
+=、-= *= /= %=、&= ^=、|= <<= >>= |
加赋值、减赋值 乘赋值 除赋值 模赋值、位与赋值 按位异或赋值、位或赋值 位左移赋值 位右移赋值 |
2 |
|
|
11 |
逗号 |
, |
逗号 |
1 (最低) |
自左向右 |
分支语句:
if语句:
1. if(表达式)语句;
2. if(表达式)
3. 语句1;
4. else
5. 语句2;
switch语句:
1. switch(表达式)
2. {
3. case 常量1:
4. 语句序列1
5. break;
6. case 常量2:
7. 语句序列2
8. break;
9. ……
10. case 常量n:
11. 语句序列n
12. break;
13. default:
14. 语句序列n+1;
15. }
循环语句:
for语句:
1. for(表达式1:循环变量赋初值;表达式2:循环结束条件;表达式3:循环体后对循环变量的改变)
2. 循环体语句;
while语句:
1. 循环变量赋初值语句;
2. while(循环结束条件)
3. 循环体语句;
4. 循环体后对循环变量的改变语句;
do-while语句:
1. 循环变量赋初值语句;
2. do
3. 循环体语句;
4. 循环体后对循环变量的改变语句;
5. while(循环继续条件);
自定义函数:函数不能嵌套定义(main函数也是函数),但是可以嵌套调用
1. 函数类型 函数名(形式参数表)
2. {
3. 声明部分
4. 语句部分
5. }
调用函数:
1. 函数名(实际参数表);
|
int |
1234 |
十进制 |
1234567890 |
|
long |
1234l |
八进制(0开头) |
012345670 |
|
unsigned int |
1234u |
十六进制(0x或0X开头) |
0x1234567890ABCDEF |
调试:F9:设置断点位置→F5:进入调试界面→F10:单步执行→Shift+F5:结束调试
(数据类型)表达式 强制数据类型转换运算符
一维数组定义:数据类型数组名[数组长度]={0,1,2,3……}
一维数组引用:数组名[下标],下标从0开始
冒泡排序法:模仿自然界中气泡上升,重物下降,两两比较,n个数进行n-1轮排序
%s 字符串格式控制符
gets(); 字符串输入函数=scanf(“%s”,字符串标识符); 但scanf不能输入带有空格的字符串
puts(); 字符串输出函数=printf(“%s”,字符串标识符);
getchar(); 单个字符输入函数,可以用于暂停程序
putchar(); 单个字符输出函数
string.h字符串处理函数库
|
strlen(字符串); |
求字符串长度 |
由函数值返回字符串不包括’\0’在内的实际字符长度 |
|
strcpy(目的字符串,源字符串); |
字符串复制 |
将源字符串的内容复制到目的字符串中 |
|
strcmp(字符串1,字符串2); |
字符串比较 |
对两个字符串从左到右按ASCII码值逐个比较 |
|
strcat(目的字符串,源字符串); |
字符串连接 |
将源字符串添加到目的字符串’\0’,返回目的字符串首地址 |
二维数组定义:数据类型数组名[行][列]={{第一行},……,{第n行}}
二维数组引用:数组名[行下标][列下标]
多维数组以二维数组推广
|
结构体 |
成员项1 |
成员项2 |
成员项n |
|
结构体变量1 |
成员 |
成员 |
成员 |
|
结构体变量n |
成员 |
成员 |
成员 |
|
结构体数组 |
|||
构造体定义:
struct 结构体名
{
数据类型成员项1;
数据类型成员项2;
数据类型成员项n;
}结构体变量表(可选);←注意:定义是一个语句,以分号结尾
结构体变量定义:struct 结构体名结构体变量名;
结构体成员赋值:struct 结构体名结构体变量名={成员数据1,……,成员数据n};
结构体变量成员引用:结构体变量名.成员项名
结构体数组定义:struct 结构体名结构体数组名[维界-整数常量表达式];
结构体数组赋值:struct 结构体名结构体数组名[维界-整数常量表达式]={数据表};
共用体使用方法同结构体
枚举定义:enum 枚举名{元素表};
枚举变量定义:enum 枚举名枚举变量名;
枚举元素按顺序编号,默认从0开始,也可以自定义编号,若某一元素没有指定编号,则为前一元素编号+1
自定义编号:enum 枚举名{元素=编号};
可以使用元素或编号对变量进行初始化,但编号必须进行转换
Day enDay=Sun;等价于Day enDay=(Day)0;
为数据变量定义别名:typedef 现有数据类型名新数据类型名;


浙公网安备 33010602011771号