资源预览内容
第1页 / 共45页
第2页 / 共45页
第3页 / 共45页
第4页 / 共45页
第5页 / 共45页
第6页 / 共45页
第7页 / 共45页
第8页 / 共45页
第9页 / 共45页
第10页 / 共45页
亲,该文档总共45页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
C 语言学习(主要记录一些和 java 不一样的东西)1.数据类型1.1.常量与符号常量#define 程序用使用这个来定义常量#define PRICE 30 这个模式1.2.变量其值可以改变的量称为变量,一个变量有一个名字,在内存中占据一定的存储单元,在该存储单元中,存放变量的值,注意区分变量名与变量值的概念。变量名实际上是一个符号地址,在程序编译连接时,对变量名分配一个内存地址,通过变量名找到相应的内存地址,从其存储单元中读取数据。1.3.整型数据1.3.1 整型常量C 的整型常量有三种表现形式,十进制,八进制,十六进制1.3.2 整型变量1)基本类型,int 类型2)短整型 short int 或者 short3)长整型 long int 或者 long4)整型在5)1.4. 实型数据1.4.1.实型数据的表示方法实数又称浮点数十进制小数形式表示指数形式表示,科学计数法表示1.4.2 实型变量实型数据在内存的存储形式实型变量的分类实型变量的舍入误差实型变量是用有限的存储单元存储的,因此能提供的有效数字总是有限的,在有效位以外的数字将被舍去,由此可能会产生一些误差。1.5 字符型数据1.5.1 字符常量Abc ? $ 等等,常见转义字符1.5.2 字符变量Char 只能存放一个字符,1.5.3 字符数据在内存中的存储形式和使用方法将一个字符常量存放到一个字符变量中,实际上并不是把该字符本身放到内存单元中,而是将该字符的相应的 ASCII 代码放到存储单元中,而实际上是以二进制存放的。1.5.4 字符串常量使用”包裹的是字符串常量,而使用 是字符,这是不一样的,字符串可以是很多个字符,在 C 语言中,每个字符串的末尾都有一个0作为字符串结束标志,在 ASCII 码中0 是一个空操作字符。所以“a”虽然看上去只有一个字符,其实有一个隐藏的结束字符。不能赋值给 char 类型1.6 变量赋值可以在声明变量的时候,进行赋初始值1.7 各类数值之间的混合运算在不同类型混合运算的时候,要先转换为同一类型,在进行运算,转换的规则如图:1.8 算术运算符,算术表达式1.9 赋值运算,和赋值表达式1)赋值运算符就是“=”2)类型转换,将实型转换为整型的时候,会舍弃小数部分,3)小转大,一般没有问题,4)大转小,要强制转换,且考虑溢出的问题5)字符型数据赋给整型变量的时候,由于字符只占一个字节,在赋值的时候是放到整型变量的低 8 位中,有两种情况,对于无符号的,放低 8 位,高 8 位补 0,对于有符号的,若字符最高位是 1,高 8 位补 1,反之亦然。6)将 int,short, long, 给 char 时,低 8 位不变送到 char 类型,即截断2.简单的 C 程序设计2.1 C 语句概括5 大类一个语句必定有一个分号2.2 计算机输入输出的概念在使用 C 语言的库函数的时候,要用预编译命令 #include 将有关的头文件,包括到用户源文件中,在头文件中包含了与用到函数有关的信息。2.3 字符数据的输入输出2.3.1 putchar 函数Char a = a;Putchar(a); 输出单个字符2.3.2 getchar 函数,单个字符输入函数2.4 格式输入与输出2.4.1 printf 函数Printf(格式控制,输出列表)格式控制=“ 格式说明,用%,普通字符,需要按照原样输出的 ”。输出列表=可以是表达式格式字符1)%d 用来输出 10 进制整型,%md,m 可以指定输出字段的长度,%ld 长整型2)O 格式 %o ,以 8 进制输出,将内存单元中各位按照 8 进制输出,不带符号的3)X 格式,%x ,按照 16 进制4)U 格式,%u 用来输出无符号整型数5)C 格式 ,%c 输出一个字符6)S 格式 , %s 输出一个字符串7)f 格式, %f,输出实数8)e 格式,按照指数格式9)G 格式,输出实数2.4.2 scanf 函数格式输入函数Scanf(格式控制,地址列表)比较要注意的就是,后面地址列表,不是变量名,而是&变量名并且输入的时候,要严格按照格式控制里的输入2.5 顺序结构程序设计从上至下,按照程序顺序执行即可3.选择结构程序设计If else3.1 关系运算符与表达式3.1.1 关系运算符3.1.2 关系表达式用关系运算符将表达式连接起来的表达式!3.2 逻辑运算符与表达式3.2.1 逻辑运算符3.2.2 逻辑表达式由逻辑运算符连接起来的表达式!3.3 if与 java 差不多,不做解释3.4 switch和 java 差不多,也不做多解释4.循环结构4.1 概述相比 java 多了一个 goto 语句和 if 语句构成循环4.2 goto 语句以及 goto 语句构造的循环但是这个东西基本现在不用了4.3 while4.4 dowhile4.5 for4.6 循环的嵌套4.7 break 和 continue与 java 都差不多,不做解释几个程序例子,自己练练5.数组与 java 有许多不同之处,主要在于指针的涉及,后面学到指针在补充5.1 一维数组5.1.1 定义与 java 一样5.1.2 使用与 java 一样5.1.3 初始化1)在定义数组时,对元素赋以初值2)3)可以只给一部分元素赋值4)5)在对全都数组元素赋值的时候,可以不指定数组长度6)5.1.4 冒泡法5.2 二维数组5.2.1 二维数组的定义二维数组就相当于一个特殊的一维数组5.2.2 二维数组的引用与 java 差不多5.2.3 二维数组的初始化1)分行给二维数组赋值2)3)4)5)5.3 字符数组用来存放字符数据的数组,都是字符数组5.3.1 字符数组的定义与整型无太大区别5.3.2 字符数组的初始化5.3.3 字符串和字符串的结束标志字符串结束都是以0为结束标志的,0 前面的为实际长度但是字符数组,0是要算一个长度的C 语言中,数组名就代表了该数字的起始地址因为 C 语言用一维字符数组来存放字符串,而且允许使用数组名输入或者输出字符串,因此可以把一维字符数组当作是 java 的 String5.3.4 字符串处理函数Puts 函数:输出字符串Gets 函数:得到一个字符串到字符数组,并且得到一个函数值,该函数值是字符数组的起始地址。Strcat 函数:字符串连接函数,连接两个字符串数组中的字符串,把字符串 2 连接到字符串 1,结果放到字符数组 1 中,函数调用后得到一个函数值,字符数组 1 的地址连接的字符数组 1 必须足够大才可以Strcpy 函数:字符串复制,将字符串 2 复制到字符串 1Strcmp 函数:字符串比较函数,字符串的比较规则,从左至右,比较每个字符的 ASCII 码的大小,直到出现不同的字符或者遇到0为止,如果全都一样,则相同,如果不相同,则以第一个不相同的字符的大小的比较结果为准。Strlen 函数:字符串长度函数6.函数6.1 概述每一个大的程序都是由若干个子程序构成的,C 语言中,每一个子程序都是由一个函数构成的在程序设计中,常将一些常用的功能模块编写成函数,放在函数库中供公共使用,要善于利用函数,以减少程序重复编写的工作量。1)一个源程序由一个或者多个函数组成,一个源程序是一个编译单位,即以源程序为单位进行编译,而不是以函数为单位进行编译。2)一个 C 语言程序一般是是由多个或者一个源程序组成,对较大的程序,一般不希望全放在一个文件中,而将函数和其他内容(预定义),分别放在若干个源文件,这样分别编写,分别编译,提供调度效率,一个源文件可以为多个 C 程序调用。3)C 程序的执行是从 main 函数开始的4)所有函数的定义都是平行的,函数可以互相调用,但不能调用主函数5)标准函数库,即库函数,可以直接使用的,不同 C 系统,库函数不一样,用户自己的函数,用以解决用户专门的需要6)从函数的形式上看,有无参函数,与有参函数6.2 函数的一般定义形式1.无参定义2.有参定义3.空函数6.3 函数参数和函数的值6.3.1 形式参数和实际参数函数定义的时候,在函数名后面的括号中的变量名为形式参数,在主调函数中,调用一个函数,函数名后面的函数为实际参数。1)形式参数在函数调用的时候,才占用内存,调用完了之后,内存也就释放。2)调用时,是将实参的值赋给形参,如果形参是数组名,则传递的是首地址,而不是数组的值3)实参和形参的类型相同,或者兼容赋值4)C 语言中,实参变量对形参的数据传递是“值传递”即是单向传递,只有实参传给形参,而不能由形参传回给实参6.3.2 函数的返回值与 java 类似,不做解释6.4 函数的调用6.4.1 调用的一般形式与 java 相同,不做解释6.4.2 函数的调用的方式可以作为函数语句可以作为函数表达式可以作为函数参数6.4.3 对被调用函数的声明1.首先函数要已经存在了,自己定义或者库函数里有2.使用库函数,要在程序开头#include 将有关库函数的信息包含到头文件中3.如果使用自己定义的函数,而且该函数与主调函数在同一个文件中,一般还应该在主调函数中对被调用的函数作声明。6.5 函数的嵌套使用C 语言的函数的平行的,独立的,也就是说在一个函数里可以调用其他函数,但是却嵌套定义函数。6.6 函数的递归调用在调用一个函数的时候,又出现直接或者间接调用这个函数本身,称为函数的递归调用。6.7 数组作为函数参数6.7.1 数组元素作为实参数组元素作为实参的时候和一般的变量是一样的6.7.2 数组名作为函数参数6.8 局部变量和全局变量与 java 差不多,不做解释6.9 变量的存储类别6.9.1 动态存储方式和静态存储方式内存中,供用户使用的存储空间,程序区,静态存储区,动态存储区。全局变量是存储在静态存储区的,从程序开始执行给全局变量分配空间,到程序结束,它们是占据固定的存储单元。动态存储区,根据函数的调用的需要,动态的分配和释放存储地址。6.9.2 auto 变量默认的都是6.9.3 用 static 声明的局部变量有时候希望函数中的局部变量的值在函数调用时,不消失而保留原值,即占用的存储单元不释放,在下一次调用该函数的时候,该变来那个已经有值,而且就是上一次结束的值。则用 static 声明为局部变量。6.9.4 register 变量一般情况下,变量的值是存放在内存中的,当程序中用到哪一个变量的值时,由控制器发出指令将内存中该变量的值送到运算器中,经过运算器进行运算,如果需要存数,再从运算器送回内存中。如果有一些需要频繁使用的变量,上述做法比较浪费时间,为了提高程序效率,C 语言允许将局部变量的值放在 CPU 中的寄存器中,这样比从内存存取变量的速度快很多,这种变量就是寄存器变量用 register 声明。现在的编译系统很智能,所以基本不用开发人员自己定义寄存器变量。6.9.5 用 extern 声明的外部变量即是全局变量。作用域从定义除开始,到程序结束。6.9.6 用 static 声明的外部变量有时候有些程序的某些外部变量不希望其他文件使用,可以使用static 声明。6.9.7 声明和定义把建立存储空间的声明,叫做定义,没有建立存储空间的声明为声明6.10 外部函数与内部函数Static 内部函数,只能被本文件中使用。Extern 外部函数,可以被其他文件使用。7.预处理命令7.1 宏定义7.1.1 不带参数的宏定义#define 标识符 字符串这就是已经介绍过的定义符号常量7.1.2 带参数的宏定义不是简单的字符串替换了,还要进行参数替换。#define 宏名(参数列表) 字符串7.2 文件包含 处理#include 将文件包含进来,类似于 j
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号