关于C语言笔记_第1页
关于C语言笔记_第2页
关于C语言笔记_第3页
关于C语言笔记_第4页
关于C语言笔记_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言笔记第一堂 C 基础一、进制的规则 1、n进制使用0n-1之间的数字表示所有的数值 (1)二进制 0 1 (2)八进制 07 (3)十进制 09 (4)十六进制 09 AF(1015) 2、n进制的数值,每一位在计算时都是逢n进一 (1)在十进制下,计算9+1,数值是10,表示:10, (2)在二进制下,计算1+1,数值是2,表示:10 二、进制转换 1、基数:n进制的基数为n 2、位:对数值的每一位的描述。从右向左,最低位使用0表示,向最高位依次递增。 3、权:n进制的权是n。例如:十进制的权是10 4、位权:数值的每一个位置对应的单位值。n(i-1) (1)十进制 转 n进制 连除倒

2、取余 (2)n进制 转 十进制 按位求和 5、区分进制 (1)十进制 没有修饰 (2)八进制 以0开头 eg:063 (3)十六进制 以0 x开头 eg:0 x63 6、进制常识 (1)十进制:给开发人员用的 二进制:计算机能够识别的语言 (2)十六进制的存在为了方便表示二进制。1个十六进制位=4个二进制位 eg:1=0001 F=1111注释有单行注释、多行注释(程序运行时,注释不被执行)#include作用:导入文件的内容 stdio standard input output 标准输入输出sizeof查看占多少字节 eg:sizeof(char);C语言包含的数据类型:一、基本数据类型

3、整型、浮点型、字符型二、整型 1、有符号 short int long long long 2、无符号 unsigned short unsigned int unsigned long 三、浮点型 float、double 四、字符型char变量的数据类型转换:一种是隐式转换,一种是显示(强制)转换显示(强制)转换float f = 5.75;printf(“%d”, (int)f);运行结果:5隐式转换:由编译系统自动完成在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度比左边长,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五

4、入向前舍入。float a = 7.72; int b = 2, c = 0; c = a + b; printf(%dn, c); 结果:9 五、数据的存储单位 1、存储单位。字节Byte,最常用的存储单位。位bits,最小的存储单位2、1字节=8位(二进制位)=2位(十六进制位)关键字说明字节大小char字符类型1short短整型类型2int整型类型4float单精度浮点类型4long长整型类型8double双精度浮点类型8常量:程序运行期间不能被修改的量 整型常量 12 浮点型常量 1.3 字符型常量 a,A 字符串常量 yihuiyun变量:只能由数字、字母、下划线组成,不能用数字开头

5、.不可以与系统保留字同名。不能使用重复的变量名。 定义变量:读取和存储数据 类型 变量名 = 初始值变量名驼峰原则赋值运算符 变量 = 常量或变量算数运算符中 除法运算符 被除数/除数 除数不能为0,如果除号两边都是整数,结果也是整数,省略小数部分(不存在四舍五入);如果除号两边有至少一个浮点数,结果就是浮点数。取余(模)运算符% 运算符两边必须都是整数,余数 4 3; / 5 4结果为真,1 3结果为假关系运算符1、用于两个数的比较2、关系运算符的结果只有两种:真、假。使用BOOL类型变量接受。3、由常量、变量、关系运算符组成的表达式,称为关系表达式=等于 !=不等于= 赋值运算符 = 等于

6、浮点型数不能使用 = 比较是否相等,小数在存储时存在精度问题,相等不相等只能用于整型和字符型。计算机在存储字符时,本质上存储的是对应的整型数字符和整型数的对应关系,依据ASCII编码规范逻辑与 & 公式: 表达式1 & 表达式2 运算规则:只有表达式1和表达式2同时为真,逻辑与表达式的结果才为真。 一假全假。短路现象当表达式1结果为假时,逻辑与表达式的结果已经可以确定为假,所以表达式2不在执行。逻辑或 | 公式: 表达式1 | 表达式2 运算规则:表达式1和表示式2,只要有一个结果为真,逻辑或表达式结果为真。 一真即真。运算符的优先级: () ! 算数运算符 关系运算符 逻辑运算符 赋值运算符

7、关系和逻辑运算符的优先级都低于算数运算符(逻辑非除外)。程序的三种结构:顺序、分支、循环if语句,先执行()内的表达式,如果表达式结果为真,则执行if后面内的代码;如果表达式结果为假,则跳过内的代码,执行if语句后的代码。整除问题中常用到a % b = 0 a能被b整除能被400整除BOOL r1 = (year % 400 = 0);能被4整除,并且不能被100整除BOOL r2 = (year % 4 = 0) & (year % 100 != 0);if (r1 | r2) printf(该年是闰年n); else printf(该年不是闰年n);公式: 条件表达式 ? 表达式1 : y

8、;如果条件表达式结果为真,则运算结果为表达式1的结果;如果为假,则为表达式2的结果表达式也可以是三项表达式x 0 ? 1 : x -1 : 0;switch (整型/字符型表达式) case 值1: / case后面的值是 整型或字符型常量 语句1 break; case 值2: 语句2 break; default: break; 1、如果表达式的值没有和任何一个case后面的值匹配成功,执行default分支。 2、break语句对switch的作用:结束当前case分支的执行,并且结束switch语句。多个case可以运行同一个代码段练习:按照考试成绩(A、B、C、D)的等级输出百分制分

9、数段。A、B、C:输出“60分以上” D:输出“60分以下” char level = A; switch (level) case A: case B: case C: printf(输出60分以上n); break; case D: printf(输出60分以下n); break; default: break; 枚举也是属于构造类型一组 具有名称的 整型常量/ 枚举类型enum NumberTpye shichang = 901, jiaoxue = 902, zhiye = 903, xingzheng = 904 ;/ 定义枚举类型enum TestType/默认情况下,第一个标示符

10、对应的数字是0/ 标示符对应的数字,从第一份开始逐渐递增,增量为1 one, / 0 two, / 1 three = 6, / 6 four / 7;连习:从控制台输入分机号 901 市场部 902 教学部 903 职业规划部 904 行政部,跟据输入的分机号,打印各部门的名称while (YES) int number = 0; printf(请输入分机号:); scanf(%d, &number); switch (number) case shichang: printf(这里是市场部n); break; case jiaoxue: printf(这里是教学部n); break; ca

11、se zhiye: printf(这里是职业规划部n); break; case xingzheng: printf(这里是行政部n); break; default: printf(输入的分机号不存在n); break; printf(%dn, shichang);printf(%dn, jiaoxue);printf(%dn, zhiye);printf(%dn, xingzheng);/ 定义枚举类型的变量 / 枚举类型中提供的枚举值,是当前枚举类型可以使用的所有数据/ enum NumberTpye number = 901; 可以这么写 enum NumberTpye number

12、= shichang; 也可以这么写 printf(%dn, number); 结果 901第三堂 循环结构顺序结构:顺序执行语句。分支结构:通过进行一个判断在两个可选的语句序列之间选择执行(分支)。循环结构:当满足某个特定条件的情况下,重复执行一段代码循环的作用:减少重复冗余的代码,增加代码可读性、易于维护。条件始终成立的循环被称为死循环 应该避免出现误操作的死循环while (count 100) printf(hello wordn); / 循环增量控制 count +; 条件表达式为真,执行循环体,一旦条件表达式为假,循环停。do 语句 while (条件表达式);do-while 语

13、句的表达式后面必须加分号。先执行循环体,再判断循环条件,直到条件不满足的适合,循环结束。count循环变量:控制循环次数,()内称为循环条件结果只有两个:真、假随机数:arc4random()-返回一个随机数,没有范围限制,是正整数如果要随机一个【a,b】范围内的整数公式:arc4random()%(b - a + 1)+ a 原理:余数必须小于除数10, 30之间的随机数 可看成0, 20 + 10死循环while (YES) for (循环变量初始化;循环条件;循环增量) 语句循环条件为真,执行循环体。循环体可以是空语句用 for 打印出 1100之间不是7的倍数并且不包含7的数 。for

14、 (int i = 1; i 100; i+) if (i % 7 != 0) & (i / 10 != 7) & (i % 10 != 7) printf(%d , i); 使用for循环输出20个【12,34】之间的随机数 for (int i = 0; i 20; i+) int num = arc4random() % 23 + 12; printf(%d , num); 循环嵌套:在一个循环体内又包含另一个完整的循环体乘法表for (int i = 1; i = 9; i+) for (int j = 1; j = i; j+) printf(%d * %d = %d , j, i,

15、 j * i); printf(n);break 只能用在switch语句或循环语句中,在switch语句中的作用是跳出switch语句,循环体中的作用是跳出本层循环(通常与if连用)转去执行后面的程序。Continue语句只能用在循环体中,在循环体中的作用:结束本次循环(continue后面的代码不再执行),进入下次循环。(通常与if连用)break 跳出本层循环,continue 结束本次循环,通常与if连用for (int i = 1; i = 3; i+) for (int j = 1; j = 5; j+) if (j = 4) continue; printf(%d , j); p

16、rintf(n); for最常用,通常用于知道循环次数的循环。while也很常用,通常用于不知道循环次数的循环。do.while不是特别常用,通常用于需要先执行一次的循环。第四堂 一维数组、字符数组C语言中数组:相同类型的成员组成的一组数据。1、数组属于构造类型2、什么是数组?具有相同数据类型的成员组成的一组数据3、整型数组、浮点型数组、字符数组。数组前的修饰词表示数组中存储的成员的数据类型。定义数组: 类型修饰符 数组名常量表达式 = 值1, 值2, 值3, .; 1、类型修饰符:声明了数组中成员的数据类型 2、 中的值决定了数组中成员的数量 3、 中设置数组中的成员数组元素:数组中的成员数

17、组下标:数组元素的序号。注:下标从0开始,即第一个元素的下标为0定义数组方式:1、定义整型数组,数组中存储3个学生的年龄 int age3 = 18, 17, 20; 2、没有赋初值的成员,系统自动设置为0 int b5 = 4, 5, 6;3、int c5 = 0;4、根据初始化设置,推断数组成员的数量 int d = 7, 8, 9, 10;错误方式:1、指定的成员的数量 实际初始化的成员的数量 int e3 = 1,2,3,4;2、int f = 0; / 一个成员,值0如果定义数组后,没有初始化,数组中是有值的,是随机的垃圾数,所以如果想要正确使用数组应该要进行初始化。求数组所占的存储

18、空间:元素个数 * 每个元素所占的字节数。数组的存储空间是连续的。访问数组元素 1、不能通过数组名依次性访问所有的数组元素 2、访问数组元素:通过数组名下标访问某个数组元素 3、下标可以使用常量或变量读取数组元素的值/ int age5 = 12, 15, 20, 26;/ printf(%dn, age0); / 读取第一个元素中的值/ printf(%dn, age3); / 读取第四个元素中的值遍历数组: 按照顺序,从第一个元素开始访问到最后一个元素结束。使用for循环实现遍历数组for (int i = 0; i = 0; i-) printf(%dn, agei);修改数组元素的值i

19、nt a = 1, 2, 3, 4, 5;a0 = 19;a4 = 100;for (int i = 0; i 5; i+) printf(%dn, ai);数组越界 使用数组下标时,超出下标范围 int a10 = 0; 下标范围 09 a10 越界了 编译器不会检测下标是否越界注意事项 1、区分 定义数组 和 数组元素二者区别:定义数组 数组名前有类型修饰符。数组元素,不带类型修饰符。 2、数组作为一个整体,不能直接参与运算。通常用到数组的地方都会用到循环。int m = 1, 2, 3;int n = m; 错误的,数组名是一个符号常量,表示数组首元素的地址,int n = m; 对的排

20、序 1、排序的规律:升序、降序 2、冒泡排序的基本思路:每次将相邻的两个数进行比较,按照升序或降序的顺序进行交换,直到所有数字的顺序全部正确 3、冒泡排序需要两层循环实现 (1)外层循环 控制排序的趟数 (2)内层循环 控制每趟排序中,比较的次数eg:/冒泡排序 升序int a5 = 5, 4, 3, 2, 1;/ 外层循环控制趟数for (int i = 0; i 5 - 1; i+) / 5 是元素的个数/ 内层循环 控制每趟中比较的次数 for (int j = 0; j aj+1) int temp = aj; aj = aj+1; aj+1 = temp; / 遍历数组for (in

21、t k = 0; k 5; k+) printf(%d , ak);/ 练习:随机产生10个【2040】之间的随机数存储在整型数组中,并对数组进行升序排列int a10 = 0;for (int i = 0; i 10; i+) ai = arc4random() % 21 + 20; printf(%d , ai);for (int j = 0; j 10-1; j+) for (int k = 0; k ak+1) int temp = ak; ak = ak+1; ak+1 = temp; printf(n);for (int i = 0; i 10; i+) printf(%d , a

22、i);/ 练习:定义一个整型数组,5个元素,获得最大值 int b5 = 1, 3, 5, 45, 64; int max = b0;/ int max = 0; 如果用这个 数组中元素必须全部大于0 for (int i = 0; i 5; i+) if (max bi) max = bi; printf(%dn, max);字符数组char a5 = h, e, l, l, o;char b10 = i, P, h, o, n, e; /未设置初始值的元素,默认设置为0. 0是空操作符,不能显示/ 访问字符数组/ 读取数组a中的第一个元素printf(%cn, a0);/ 遍历数组bfor

23、 (int i = 0; i = 字符数组2的存储空间strcpy(a, b);printf(%sn, a);/练习:计算一个字符串的长度char a = ai hg oih g;int count = 0;while (acount != 0) count+;printf(count = %dn, count);查找字符串中的空格数char a = ai hg oih g;int count = 0;int i = 0;/下标while (ai != 0) if (ai = ) /访问的字符是空格,记一次数 count+; i+;printf(空格数为%dn, count);将字符串 倒转:

24、例如:“afjnpue”转变 成字符串“eupnjfa”(注:是改变 字符串本身,不是 反向输出) char str = afjnpue;/ (类型)数据 强制类型转换/ 理论上:从 存储空间小的类型向存储空间大的类型转换/ 实际上:只要不会出现数据溢出,可以从存储空间大的类型向存储空间小的类型转换int lengh = (int)strlen(str);/ 只需要循环一半for (int i = 0; i 字符串2,strcmp返回结果大于0字符串1 字符串2,strcmp返回结果小于0练习:实现字符串拼接char a30 = hello;char b = world;int i = 0;/

25、 i是数组b的下标int length = (int)strlen(a);/a中字符串的实际长度while (bi != 0) / 将数组b中的字符,拼接到数组a的0位置 alength+i = bi; i+;/ 数组b中的非0字符拼接完成后,手动添加0位置alength+i = 0;printf(%sn, a);第五堂 二维数组、字符串数组、多维数组二维数组 1、二维数组的本质:数组中的元素 还是数组 统计一个班的5个学生的年龄,使用一维数组 11, 12, 13, 14, 15 统计三个班的,每个班都是5个学生,使用二维数组 11, 12, 13, 14, 15, 21, 22, 23,

26、24, 25, 31, 32, 33, 34, 35 2、为了形象化的表示二维数组中的数据,使用行和列的排列方式 11 12 13 14 15 21 22 23 24 25 31 32 33 34 35 3、二维数组通常称为:m * n 数组 m行n列的数组 m 表示二维数组中,包含m个一维数组 n 表示一维数组中,包含n个元素定义二维数组方式1 类型修饰符 数组名行数列数 = 值 int ages35 = 11, 12, 13, 14, 15, 21, 22, 23, 24, 25, 31, 32, 33, 34, 35;定义二维数组的方式2 定义一个4*4的二维数组 int b44 = 1

27、, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12;定义二维数组的方式3 行数可以省略不写 但后面要具体 定义一个2*4的二维数组 int c4 = 1, 2, 3, 4, 5, 6;一维数组 1 3 5 7 9 访问:数组名下标二维数组 1 3 5 7 92 4 6 8 10 访问:数组名行下标列下标遍历二维数组/控制行for (int i = 0; i 3; i+) / 控制列 for (int j = 0; j 4; j+) printf(%d , arrayij); printf(n); / 不推荐定义二维数组方式 /2*4int a4 = 1, 2, 3, 4,

28、 5, 6, 7, 8;字符串数组: 数组中的元素是 字符串字符串数组的本质:二维数组 因为字符串本身就是字符数组/ 定义字符串数组,存储3个人的姓名的拼音。char names320 = songyingtao, yangyi, xiaobowen;/ 访问字符串数组中的字符/ 打印第二行第四列的元素printf(%cn, names13);/ 打印第三行第20列的元素printf(%cn, names219);/ 遍历数组 打印所有的字符for (int i = 0; i 3; i+) for (int j =0; j 20; j+) printf(%c , namesij); print

29、f(n);访问字符串数组中的 字符串/ 数组名第一维下标 数组名行printf(%sn, names0);/ 遍历字符串数组,打印所有的字符串for (int i = 0; i 3; i+) printf(%sn, namesi);1、如果访问字符串数组中的字符,使用两个下标2、如果访问字符串数组中的字符串,使用一个下标3、字符串数组本质是二维数组,但是在操作字符串时可以看成一维数组使用字符串输入/ 从控制台输入一个字符串char a30 = 0;/ 第一种 使用scanf 不能输出空白字符 比如空格/当使用%s转换符时当输入空白字符(空格、Tab、回车),字符串读取结束,并且空白字符及其后面

30、的字符会留存在缓冲区printf(请输入字符串:);scanf(%s, a); / 如果输入的是字符串,直接填写数组名,不用加去地址符&printf(%sn, a);第二种 使用scanf 回车结束scanf输入,n 会被留存在缓冲区/ % 字符集 %n 除了n字符不接收,剩余的字符都被读取char a30 = 0;printf(请输入字符串:);scanf(%n, a);printf(%sn, a);从控制台输入多个字符串,存储在字符串数组中char str430 = 0;for (int i = 0; i 4; i+) / str行下标 访问字符串的位置 scanf(%s, stri);

31、getchar(); /从控制台读取一个字符。 读取留存在缓冲区的n/ 遍历输出所有的字符串for (int i = 0; i 4; i+) printf(%s , stri);代码安全 / 从后台服务器获取数据 一组 / OC数组越界会崩溃访问三维数组的元素 使用三个下标/ 打印 第二层 第二行 第一列的元素printf(%dn, a110);/ 遍历三维数组的元素需要三个循环for (int i = 0; i 2; i+) for (int j = 0; j 4; j+) for (int k = 0; k 3; k+) printf(%d , aijk); printf(n); prin

32、tf(n); 1、多维数组的访问 数组名. n维数组使用n个下标 2、多维数组的元素个数 = 各个维数个数的 乘积 int a234 2 * 4 * 3 3、多维数组占用的内存 = 元素个数 * 单个元素占用的空间第六堂 函数函数是具有特定功能的代码段 函数的使用可以省去重复代码的编写,提高效率函数从定义上分为:库函数(系统提供好的函数)、自定义函数(开发者自己写的)定义函数包含: 返回值类型 函数名(参数列表) 函数体(实现函数功能的代码) 一个函数只能有一个返回值函数调用 函数名() 如果没有参数:必须写() 如果有参数:函数需要几个参数,必须传入几个参数 传入的值必须与提示的类型相同函数

33、名称就是一个标识符标示符命名规范:1、由字母、数字、下划线以及美元符号组成 2、不能和系统保留字重名 3、不能以数字开头 4、严格区分大小写/ 无返回值 无参数 / 定义函数,功能:输出自己的姓名void sayHi() / return 功能:结束函数运行 / return 数值 功能:结束函数运行,返回结果 / return 语句后面的代码不执行 / return; printf(陈浩男n);/ 无返回值 有参数 / 定义函数,功能:传入两个整数,打印两个数的和void printSum(int n1, int n2) printf(%dn, n1+n2);/ 有返回值 有参数 / 定义函

34、数,功能:传入两个整数,返回两个数的和int sumValue(int x, int y) / return 后面的数值类型必须和返回值类型相同 return x + y; / 将数值返回到调用函数的地方/ 有返回值 无参数 / 定义函数,功能:返回2040之间的随机数int randomFrom20To40() return arc4random() % 21 + 20;如果函数有返回值 1、只调用,不接收返回值 2、调用函数,返回值参与运算、作为其他函数的参数3、调用函数,使用变量接收返回值函数调用的过程: 1、使用函数名调用函数 2、进入到被调用函数的函数体内运行代码 3、函数运行结束后,返回调用函数的位置主调函数:main函数被调函数:sumValue函数.形参 形式参数 出现在函数定义中,存储传入函数中的值实参 实际参数 出现在函数调用时,给函数提供值3和5是调用sumValue时的实参,是提供给函数的值printf(sum = %dn, sumValue(3, 5);/ 调用函数的时候实现传值,实参向形参

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论