龙空技术网

C语言基础知识大总结

小张怕蚊子 368

前言:

此时咱们对“c语言里什么意思啊”可能比较看重,兄弟们都需要知道一些“c语言里什么意思啊”的相关文章。那么小编也在网络上汇集了一些有关“c语言里什么意思啊””的相关内容,希望咱们能喜欢,大家一起来了解一下吧!

C语言大总结一、基础:1、进制、位权、1字节等于8位(位是计算机的最小储存单位,字节是计算机最小存储单元)、十进制转换其他进制:连除倒取余,其他进制转换十进制:按权求和2、单行注释:// 多行注释:/**/ (内容写在量型号之间)3、数据类型:整形类型、浮点类型、字符类型。整型类型:长整形(long 4/8)、整形(int 4)、短整型(short 2)浮点类型:单精度(float 4)、双精度(double 8)字符类型:字符类型(char 1)4、常量:程序运行期间不能被改变的量。常量 类型:整型常量、浮点型常量、字符型常量变量:实际上是储存区域,也可以做表达式,是程序运 行期间可以被改变的量。变量定义:由类型符号、变量名、初始值三部分组成(如:int a = 5;)变量命名规则:由数字、字母、下划线组成的,但不能 以数字开头,不能与关键字重复,不能重复使用变量名(同一作用域),见名知意。5、赋值运算符:= 把右边的值赋给左边 优先级别最低算数运算符:+, -, *, / 整型两边相除取整,除数不能为0,% 两边均为正数 ,++ 自增运算符、- - 自减运算符:(它俩在前,先执行,它俩在后,后执行。6、复合运算符:+= (a += b; 相当于a = a + b); -=; *=; /=; %=;(语法含义同上)7、表达式:由常量、变量与运算符组合而成(注:表达式会有返回值)8、输出函数:printf();输入函数 scanf()(注:以回车确定输入结束,只有大回车键才会结束;不要再格式串后面加’\n’字符,否则会抵消人工输入的回车)。转化符:%c->char; %d->int; %sd->short; %ld->long;%f->float、double。9、转换格式控制:最少占4位:printf(“%04d”,12); //不足补0printf(“%4.2f”,1.2345); //保留小数点后两位printf(“%-4d”,12); //左对齐\n回车符;\打印\;%%打印%;

二、运算符1、BOOL类型:只有YES(1)和NO(0)两个值;bool类型:由ture(非0数字)和flase(0)两种值;BOOL和bool区别:1)、在C中只有小布尔没有大布尔;2)、在C和OC中小布尔中非零为真,零为假;3)、在OC中大布尔中1为真,0为假,其它数字原样输出,不做判断条件2、关系运算符:用于比较运算,结果值有真假两种,结果值由BOOL类型储存

< >= <= == !=3、逻辑运算符:由逻辑运算符组成,结果也是非真即假&&(逻辑与):一假即假(有一边为假则结果为假)||(逻辑或) :一真即真(有一边为真则结果为真)!(逻辑非) :对表达式结果取反4、条件运算符:条件表达式?表达式1:表达式2如果条件为真,则执行表达式1。如果条件为假,则执行表达式2。5、枚举类型:属于构造类型,是一组由符号的整型常量,一一罗列所有状态,罗列所有结果。enum枚举名{枚举值表}目的和作用:提高程序可读性;将人能看懂的标示符与计算机能识别的数字建立对应关系

三、程序的三种结构:1、顺序结构:按照语句顺序执行2、分支结构:判断条件在两个语句序列中选择,一旦进行判断必须选择其中一个。if语句:形式一:if (条件表达式) {语句;}形式二:if (条件表达式) {语句1;} else{语句2;}形式三:if (条件表达式1) {语句1;} else if条件表达式2){语句2;} else{语句3;}switch语句:多分支语句,通过判断整形表达式的值,来判断执行那个语句。常与case配合使用。break:跳出本层循环,如果外层还有循环的话,则执行外层循环,如果外层没有循环,则执行循环后面的代码。(常与if、switch连用)continue:跳出本次循环,跳出本次循环,遇到continue后,不管continue后面有无代码,均不执行,提前结束当前循环,开启下一次循环。(常与if连用)arc4random():返回随机数的函数。如果要一个随机数在【a, b】范围内的整数。公式为:arc4random() % (b - a +1) + a;

3、循环语句:在满足一个条件的情况下反复执行一个语 句序列。while语句:while(条件表达式){语句;}条件表达式为真执行循环体,一旦为假立即停止执行。do…while…语句:do{语句;} while (条件表达式),先执行循环体,再判断循环条件直到不满足,才结束循环。for语句:for(循环变量初始化;循环条件;循环增量){语句;}循环条件为真才执行循环体。四、一维数组一维数组:属于构造结构,是由相同类型的成员组成的一组数据。数组名:存储不同数据类型的数组有各种对应的名称(名称可以随意起),但 要见名知意。元素:数组由多个成员组合而成,每个成员被称为“数组的元素”

1、定义一个数组int array[3] = {1, 2, 3};int:声明数组类型 array:数组名 [5]:数组长度(注:定义数组时,可以省略元素个数,因为编译器会自动推断出元素个数,但是“[]”坚决不能省略。) { } :给数组赋值,元素之间用逗号分隔开(注:1)定义数组时,可以不给每一个元素赋值,没有赋值的元素系统会默认为0。2)定义数组时,给定了数组长度,首元素为0,其他元素不赋值,则默认为0,这样五个元素均为0。3)大括号中最好赋上初始值,因为没有赋值是系统会根据Xcode编译环境来赋值,有时可能有,有时可能无,这样就会出现定义不明,所以建议赋上值。)

2、数组的内存占用1)使用sizeof()函数求数组占字节数printf("array[3]数组所占字节数%ld", sizeof(array));结果:12 因为每个int类型占4个字节,有3个元素,所以共12个字节 。2)利用sizeof()函数求数组元素个数先求出数组所占字节数,再求出其中某个元素所占字节数,再相除就得出数组元素个数。int array[5] = {4, 6, 7, 2, 8};int a = (sizeof(array) / sizeof(array[1]));printf("a = %d\n", a); 结果为:a = 5

3、数组元素的访问方式:数组名+下标1)int array[6] = {12, 21, 32, 23, 25};访问array中的32这个元素:数组名:array,下标:从零开始计数,32在第3个位置上,所以32的下标是2。int temp = array[2];printf("temp = %d, array[2] = %d\n", temp, array[2]); 结果:32,32(注:可以直接访问,打印出来,也可以把值赋给另一个相同类型的变量再打印出来)2)数组下标越界:数组下标超过了数组长度,访问了不属于数组的内存空间。在C中是没有“数组下标越界保护”机制,所以在写代码时,要避免下标越界。3)修改数组元素

3.1)修改array中的第二个元素为62int array[6] = {12, 21, 32, 23, 25};array[1] = 62;printf("array[1] = %d\n", array[1]); 结果:array[1] = 623.2) 定义一个新的数组,array1,将array的元素,原样赋给arrary1.int array[5] = {12, 21, 32, 23};int array1[5] = {0};for (int i = 0; i < 5; i++) {array1[i] = array[i]; // 数组的下标可以是常量,也可以是变量printf("array1[%d] = %d\n", i, array1[i]); // 数组的输出需要for循环进行遍历}// array1 = array; 数组中不能整体访问数组元素,也不能整体赋值,而要逐一的遍历数组元素,进行访问、赋值、输出。// 定义一个具有20个元素的数组,每个元素的取值范围是【30,70】,求数组元素的和// 1.定义一个整型数组长度为20int array[20] = {0};// 2.开启一个for循环,使用循环给数组元素赋值for (int i = 0; i < 20; i++) {// 2.1 生成【30,70】之间的数int temp = arc4random() % (70 - 30 + 1) + 30;//2.2 将生成的随机数赋值给对应的元素array[i] = temp;printf("array[%d] = %d\n", i, array[i]);}// 3.求数组元素的和// 3.1定义一个保存和的变量int sum = 0;//3.2 使用for循环遍历数组元素,同时将元素累加起来for (int i = 0; i < 20; i++) {// 3.2.1 获取当前数组元素并将获取到的元素加起来sum = sum + array[i];

}printf("元素总和为%d\n", sum);

// 定义三个数组,将随机产生的数放入其中两个数组中,将这两个数组的值加起来放入第三个数组中// 1、 定义三个数组,并初始化。int array1[10] = {0};int array2[10] = {0};int array3[10] = {0};// 2、 使用一个for循环,给第一个数组和第二个数组赋值,将两个数组个元素加起来,交给第三个元素。for (int i = 0; i < 10; i++) {// 2.1、 分别把生成的随机数赋给两个数组array1[i] = arc4random() % (40 - 20 + 1) + 20;array2[i] = arc4random() % (40 - 20 + 1) + 20;// 2.2、两数组进行相加array3[i] = array1[i] + array2[i];// 3、 打印验证结果是否正确printf("array1[%d] = %d, array2[%d] = %d, array3[%d] = %d\n", i, array1[i], i,array2[i], i,array3[i]);}

4、冒泡排序

int array[5] = {12, 45, 23, 42, 56};//趟数 = 元素个数 - 1;每趟比较的次数 = 元素个数 - 当前的趟数//两层for循环,外层丛植比较趟数、内层控制比较次数//趟数for (int j = 0; j < 5 - 1; j++) {//次数for (int k = 0; k < 5 - (j+ 1); k++) {if (array[k] > array[k + 1]){ //因为每趟比较都要从下标为0开始,j在每次从外层循环进入内层时,都要被初始化为0。因为每次比较,下标都要加一,j在每次内层循环时,也会加一,所以,在这里是用j做下标是没有问题的。//满足交换条件,开始交换位置。//1.定义一个临时变量int temp = array[k]; 6array[k] = array[k + 1];array[k + 1] = temp;}}}for (int i = 0; i < 5; i++) {printf("%d ", array[i]);}

5、字符数组字符数组:保存字符的数组就是字符数组。有’\0’结束标识的字符数组也称为字符串。定义一个字符数组:声明类型、数组名、数组长度、赋初值char char_Array[5] = {'h', 'e', 'l', 'l', ‘o’};//每个字符占一个字节,数组长度是5,所以数组占5*1个字节的内存。char char_Array[5] = {'h', 'e', 'l', 'l', 'o', '\0'};和char char_Array[5] =“hello”;是同一个意思都便是定义字符串hello。字符串和字符数组的区别:如果字符数组最后一个字符末尾没有‘\0’,则是一个字符数组如果字符数组最后一个字符末尾有‘\0’,则是这个字符数组就是字符串。字符串操作函数strlen():返回字符串的有效字符个数strcpy():字符串拷贝函数:把第二个参数的值拷贝给第一个参数strcat() 字符串拼接:把第二个参数的值,拼接到第一个参数的后面strcmp() 字符串比较:第一个参数大于第二个参数返回一个正整数,第一个参数小于第二个参数,返回一个负整数,两个参数相等,返回零。

五、函数1、函数:完成某一功能的代码段。函数名:给这段代码取一个名字,以后就可以通过这个名字来代替这段代码,遵守变量名的命名法则。函数参数:有的函数在完成某一任务时需要的材料,我们把在完成任务所需的材料叫函数的参数。在被调函数中,参数叫“形参”,在主调函数中,参数叫“实参”。函数参数传递:将实参的值拷贝一份到形参变量的空间中,在被调用函数中操作的参数是新开辟的内存的数值,和实参没有关系。参数列表:如果没有参数,可以用void修饰,也可以什么都不写,但是小括号不能省略。函数的返回值:有的函数在完成任务之后,需要把任务结果返回给主调函数,就可以通过return语句来将值返回。注意:return只能返回一个值,同时不能返回数组。return:return标志着函数的结束,如果return后边有数值,则将这个数值交给主调函数。当return只负责结束函数执行时,可以省略return。return后⾯的语句不再执行。函数定义:一般定义在main函数前,函数会遭遇嵌套定义。返回值类型 函数名 (参数列表) {函数实现……return 返回值;}函数的调用:必须要先定义出来这个函数,定义之后才能调用函数调用方式:函数名+参数列表函数类型:无返无参,无返有参,有返无参,有返有参返回值类型:如果无返回值,必须要使用void修饰符

2、.h和.m文件1)如果使用多个文件来管理定义函数时,函数的声明要放在.h文件中,函数定义在.m文件中。2)由于函数的声明和定义在其他文件中,所以想使用该函数,必须先引入声明部分,也就是.h文件

import"文件名.h" 把这个放在 主函数和系统头文件之间

3) 如果函数定义在主调函数(main)函数之前,函数的声明可以省略,因为在编译时,编译到主调函数时,已经知道该函数被调函数的意义,所以不会出现异常。如果函数定义在主调函数(main)函数之后,务必要在main函数之前对函数进行声明。4)声明的意义在于:告诉系统,后面将会出现一个该类型的函数。一个完整的自定义函数,应该包括:函数声明、函数定义、函数调用,共三部分。5)函数声明的方法:将函数的“返回值类型+函数名+形参列表+;”写在导入头文件语句下面,就是一个函数声明。

3、函数的嵌套调用1)函数可以嵌套调用:在一个函数中,调用另一个函数完成某项功能,这就是函数的嵌套调用。函数可以嵌套调用,但是函数不可以嵌套定义。2)函数不可以嵌套定义:在定义一个函数时,又定义另一个函数,就叫函数的嵌套定义,这种行为是不允许的。

4、函数的递归调用函数递归时一定要有出口,否则会造成程序递归环路(死递归),那么程序一定会崩溃。递归调用:自己调用自己完成某项功能。

5、变量的作用域// 局部变量:只在当前作用域中起效// 全局变量:不属于任何一个作用域的变量就是全局变量,全局变量可以在当前文件中任何一个地方被访问到(从创建的位置开始,一直到文件结束)// 如何确定作用域?使用{}来确定作用域,一对大括号,就确定了一个作用域。

标签: #c语言里什么意思啊