


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、深入理解计算机系统存储器层次CPU主频:3.2GHz高速缓存(110ns,一个周期)主存(10100ns)辅助(磁盘)(1byte/10ms,一次可以传送大量字节,几十到几百个周期)三级存储(分钟为单位)虚拟存储虚拟页(VP),物理页(PA),页表(PageTable),页表条目(PTE,PageTableEntry),DRAM(虚拟存储器缓存),SRAM(CPU和主存的缓存),MMU(存储器管理单元),路旁转换缓冲(TLB,TranslationLookasideBuffer)东芝sataliteL700笔记本进入BIOS(ctrl+alt+del之后F12)Ubuntu15.10可能不适配
2、NVDIA显卡(如:NVDIAGeForeGTX745)Day01C语言程序的绝大部分必须记录在以.c作为扩展名的文件里,这种文件叫源文件C语言程序里可以直接使用加减乘除四则运算符号(+、-、*、/)每个独立的计算步骤最后必须使用分毫结束,用分号结束的一个计算步骤叫一条语句任何C语言程序一个由大量的语句构成C语言程序中,采用分组的方式管理所有的语句一组里的所有语句必须写在一对大括号里可以吧一组里面的语句再次进行分组绝大多数语句必须届于某个分组任何语句不可以跨越分组不被其他大括号包含的大括号可以叫做顶级大括号顶级大括号可以用来表示函数(可以吧函数看成一组语句)每个函数必须有自己的名字,不用的函数
3、的名字必须不同任何C语言程序一对由一个活多个函数构成C语言程序中必须有一个叫做main的函数,这个函数叫做主函数C语言程序必须从主函数的第一条语句开始执行当主函数的最后一条语句结束的时候整个程序结束C语言程序允许一个函数的结束的时候遗留一个数字,这个数字叫做这个函数是返回值主函数需要有一个返回值,这个返回值表示主函数的工作结果。如果这个返回值是0,则表示一切正常,否则就表示出现非正常情况。C语言程序里预留了几十个英文单词,这些英文单词叫做关键字。每一个关键字有特定的用途,不能随便使用。Return就是一个关键字,它有两个用途。主要用途是结束函数的执行(任何时候一定会起到这个作用),辅助作用是用
4、来指定返回值数值(当关键字后面有数字时起这个作用)根据数字在某个方面的区别把数字分成几组,每组叫做一个数据类型每个数据类型有自己的名字整数类型是一种数据类型,它的名字是int,它里面包含几乎所有不带小数点的数字程序中所有数字必须有类型C语言程序中所有不带小数点的数字默认是整数类型每个函数必须明确表示它返回值的类型(把返回值类型名称写在函数名称前面)C语言程序基本开发步骤:1、使用vi编写以.c作为扩展名的源文件2、使用gcc工具对源文件进行翻译得到名为a.out的文件(编译)3、用命令./a.out执行得到的文件能够完成编译工作的软件叫编译器不同编程语言有自己的编译器Gcc是c语言的一种编译器
5、MinGW软件是windows里的gcc所有C语言程序中都会包含预处理指令预处理指令全都是以#作开头,而且不是以;作结尾标准C阶段遇到的预处理指令都可以把源文件内容改变成其他内容#include是一个预处理指令,它可以把其他文件内容合并到当前源文件中使用这个预处理指令的适合需要指定文件路径,这个路径对应的文件会被包含到当前源文件中这个路径通常采用相对路径:如果把路径写在中间表示相对路径的起点是系统预先设定好的一下目录如果把路径写在中间表示相对路径的起点还包括当前源文件所在的目录gcc工作步骤:1、先处理所有预处理指令2、把修改后源文件内容翻译成计算机认识的格式(也叫编译)3、把编译得到的不同部
6、分合并在一起(链接)gcc的选项:-E只完成预处理指令的处理工作-c只完成预处理和编译工作-o用来指定新文件名称-std=c89/-std=c99用来指定编译过程中遵循的版本(缺省情况下采用c89版本)程序中的文字信息必须加入到注释的区域里,编译器会忽略所有注释以/做开头一直到行尾的区域叫单行注释以/*做开头,以*/做结尾的区域叫多行注释C语言程序中大量使用名称区分不同内容,这些名称叫做标识符标识符最好米用有意义的英文单词编写标识符命名规则:1、第一个字母只能是英文字母或者下划线2、后面的字母可以是英文字母、下划线或者阿拉伯数字字符3、标识符中大小写不同的字符被看作是不同的字符(大小写敏感)4
7、、关键字不可以当做标识符使用5、标识符长度没有限制,但计算机只会截取前一段使用(c89规范中截取前31个字符,c99规范里截取前63个字符)C语言书写规范:1、一行中最多包含一条语句2、不同层次的语句要使用缩进区分开3、在合适的地方使用空格和空行提高程序的可读性4、标识符采用驼峰方式(区分大小写XiAn)或者下划线(xi-an)方式编写C语言中提供了一组标准函数,每个函数负责解决一个常见问题每个标准函数都有自己是名字在程序中编写函数调用语句就可以使用某个函数了printf是一个标准函数的名字,这个标准函数可以把程序中的数字打印在终端窗口里;为了使用这个标准函数需要包含stdio.h文件。在pr
8、intf函数调用语句中使用占用符可以把双引号里面的某个位置保留下来,在打印的适合先用某个数字填充这个位置然后再打印使用占位符可以打印编写程序时还不知道的数字不同类型的数字应该和不同的占位符配合使用和整数类型配合使用的占位符是%d可以在一条函数调用语句中使用多个占位符,有多少个占位符就应该在双引号后面提供多少个数字,数字之间使用逗号分开计算机内存分成很多字节,任意两个的大小一样每个字节可以用来存放一个数字。可以临时把几个相邻的字节合并用来记录一个数字我们可以把内存中用来记录一个数字的区域叫做一个存储区(一个存储区一定是由一个或多个相邻字节构成的)每个字节有一个编号,这个编号叫做这个字节的地址所有
9、字节的地址从0开始逐渐递增只有通过地址才能找到字节一个存储区也有地址,它的地址是它所包含的字节中最前边的字节的地址C语言中可以使用变量代表一个存储区,这一可以简化对存储区的使用一个存储区只能用来存储一种类型的数字,因此存储区是分类型的(变量也是)计算机可以根据变量计算出对应存储区的地址(变量可以代表存储区的原因)变量和存储区的对应关系完全由计算机决定为了在程序中使用一个变量必须首先声明它,变量声明语句用来声明变量变量声明语句会让计算机为变量分配一个存储区变量声明语句中不用包含变量的类型和名称变量的使用方法:1、变量可以用来存储一个数字2、从变量中获得数字并进行计算变量赋值语句可以向变量中存放一
10、个数字赋值语句需要采用赋值操作符(=)编写赋值操作符要求左边必须是一个能代表存储区的内容(左值)赋值操作符要求右边必须是一个能代表数字的内容赋值语句执行完成后可以把右边的数字记录在左边的存储区里只要在程序中把代表存储区的内容当作数字使用,计算机就会先从存储区里获得数字,然后再使用变量名称在程序中既可以带便存储区,也可以代表存储区的数字(num=num)变量名称在程序中代表什么是由环境决定的预习:1变量2、scanf标准函数3数据类型作业:1、假设有1克到127克之间的127个不同的整数重量,要求设计一套石去码表示其中任何一个整数重量。(同样重量的石去码不能重复,石去码数量越少越好)24816-
11、Day01day02总结:whoami查看当前使用的账号clear活除终端窗口里的文字信息pwdcdlstouchmkdirmkdirrmTab键cdls-l-Prm-rf补齐查看当前目录ls-als-la创建新文件创建新目录qwe/asd两个目录一起创建出来tartarzcvfzxvf压缩文件名.tar.gz路径1路径2压缩文件名.tar.gz打包压缩解包解压nyynpndd(n为整数,如果是1可省略)拷贝n行粘贴n次剪切n行(必须在正常模式下)(必须在正常模式下)(必须在正常模式下)(每次vi启动时,都会从/.vimrc文件中获得setnusetnonugccgccgcc-E-c-o-st
12、d=c89/-std=c99只完成预处理指令的处理工作(编译)只完成预处理和编译用来指定新文件名称用来指定编译过程中遵循的版本(缺省时采用chmodu+x(g+w/o-r)user/group/otherchmod664(二进制后转的十进制数)文件路径修改操作届性mv路径1路径2移动(覆盖)(也可以用来改名)cp路径1路径2拷贝(复制)ln-s路径1路径2(可以不存在,新建)链接(等同操作)echoabca.txt(重定义输出)(abc覆盖a.txt)echoabca.txt(追加)(abc加在a.txt后)ps(-aux系统所有进程)查看当前窗口进程kill(-9强制结束)234(id号)结
13、束进程ctrl+c结束进程(相当亍kill-2自动寻找死循环)echoabca.txt重定义输出echoabca.txt追加通配符:?(a?)代表a_vi/.vimrc查看set命令大量set命令并按顺序执行它们)代表以a开头的*(a*)c89版本)Day03:可以在一条语句中声明多个同类型变量,这个时候类型名称写一次就行了可以在声明变量的语句中立刻对变量进行赋值,这叫做变量的初始化c语言里所有变量都应该初始化变量可以用来在程序中代表一个未知的固定数字变量可以用来代表一组相关数字(任何时候只使用其中某一个数字,使用过后就不再使用了)在printf()中用%,才会打印出%;Scanf()如果sc
14、anf函数调用语句的双引号里有不是占位符的内容,则用户必须在输入的时候把它们按照顺序依次输入,否则计算机就无法得到数字如果多次从键盘得到数字时某一次用户输入的格式错误则后面的所有输入都可能会错误清理缓存区(有时前面输入错误,后面会都出错,清理缓存后就好了)Scanf(%*An”);Scanf(%*c”);scanf(%*An”);scanf(%*c”);字符类型是一种数据类型,名称是char这个类型中一个包含256个不同的数据,每个数据可以代表一个字符(#)ASCII码表中记录所有256个数据两种表示方式之间的对应关系a97A65048所有字符数据分成两组,每组128个字符其中一组里所有字符数
15、据两种表示方式之间的对应关系在所有计算机上都一样(这组字符的整数表示方式范围从0到127)另外一组中所有字符数据两种表示方式之间的对应关系在计算机上有可能不同(这组字符的整数表示方式范围从-128到-1,也有可能从128到255)无符号字符类型也是一种数据类型无符号字符类型用unsignedchar表示这个数据类型里同样包含那256个不同的字符,所有的字符数据的整数表示方式范围固定从0到255)ASCII码表中所有小型英文字符的整数表示方式是连续排列的,a的整数表示方式最小所有大写英文字母和阿拉伯数字字符也都符合这个规律t-a=T-A3-0=3-0=d-aShort%hdUnsignedsho
16、rt%huLong%ldUnsignedlong%luInt%dUnsignedint%uFloat%f或者%gDouble%lf或者%lg%lf和f会保留小数后面无效的零%nd和%-nd%0nd也可以做站位符,(n同样代表一个整数)打印n个位子,无效位置用0%n,mf作浮点占位符,共n个位置,小数点占m位不同数据类型之间的区别是有它们是存储区所包含的字节个数不同造成的Sizeof关键字可以用来计算一个变量或数据的存储区所占的字节个数各种数据类型所包含的字节个数:1个字节2个字节4个字节4个字节4个字节8个字节char(unsignedchar)short(unsignedshort)long
17、(unsifnedlong)int(unsignedint)floatdoubleSizeof关键字的小括号里可以写任何能当作数字使用的内容(赋值语句也可以当作数字)Sizeof关键字的小括号里如果修改了任何存储区的内容则这种修改不会真正生效(如:sizeof(num=10)不会真正赋值)计算机采用二进制表示数字,二进制里每个数位上只有0或1者两种可能计算机里每个字节分成八段,每段可以用来记录一个0或者1数字的二进制表示方式中每个数位有一行编号,最右边数位的编号是0,向左依次递增二进制中每个数位上的1单独代表一个数字,它的数值就是2的编号次方一个二进制所代表的数值就是他里边所有数位上的1所代表
18、的数值之和二进制加一是计算规则是吧最右边的0变成1,把它右边的所有1都变成0二进制转十进制方式:把所有1单独转换最后把转换结果求和01110011=1+2+16+32+64=115预习:1二进制(八进制十六进制,负数的二进制)2操作符作业:1编写程序计算给定长和宽的长方形的面积2编写程序计算给定半径的元的周长扩展:crontab(任务调度)crontabT查看任务调度crontab-e修改任务调度可执行的shell脚本viabc.shmkdirshellcdshelltoucha.txtlsTabc.sh(查看脚本问价操作届性)chmod777abc.sh(修改脚本操作届性,使其能被运行)./
19、abc.sh执行脚本,从而运行里面步骤远程操作别id的电脑(有对方ip和密码)(ftp也可以)telnet+ip(远程连接)/sbin/ifconfig查看本地ipIpconfig在windows下查看ip退出:exit(正常进入)Quit(不正常进入)服务器下:ftp43xlyxly下载:gat文件上传:put文件退出:byeDay04十进制转二进制两种方法:第一种,首先把十进制表示方法拆分成多个2的整数次方值和,然后把所有拆分结果单独转换成二进制,最后把所有转换结果合并就得到证个数字的二进制57=32+16+8+1=00100000+00010000+00001000
20、+00000001=00111001第二种是不断除以2取余,把所有余数按照从后向前的顺序书写得到转换结果83410*12000*010000*050000*100000*01000000*1000000000113/2=56/2=28/2=14/2=7/2=3/2=1/2=01000111001110001通过上述方法计算得到的二进制叫做源码计算机里采用补码计算数字非负数的源码和补码是一样的八进制也是一种表示数字的方式(可以看成是二进制的简写方式)把二进制的补码从有向左每三个数位分成一组,把每一组用0到7之间的数字替换得到结果就是八进制表小方法01010111010101111274分3分八进
21、制可以直接在程序中使用八进制方式表示数字,但是必须在数字前写一个0采用%o做占位符可以把一个数字的八进制表示方式打印在屏幕上十六进制也是一种表示数字的方法(也可以看成是二进制的简写方式)把二进制补码中所有数位从右向左每四个数位分成一组,每组用一字字符替代得到的结果就是十六进制表示方式如果某一组的转换结果在0到9之间则使用对应的阿拉伯数字字符替换,如果在10到15之间则使用a到f替换。001011012d(十六进制)可以在程序中使用十六进制的方式表示数字,但是必须在前面写上0x采用%x或者%X可以把一个数字的十六进制表示方式打印在屏幕上-50-500000000-0000010110000000
22、0-00000101=11111111+1-00000101=11111111-00000101+1=11111010+1=11111011负数二进制补码计算方法:1计算出负数相反数的补码2把第一步的结果中每个数位变成相反数值,然后在加一这种方法得到的结果直接是二进制补码无符号类型的二进制补码一定是非负数有符号类型的二进制最左边的数位可以用来盘点正负,如果是0则是非负数,如果是1则是负数这个数位叫做符号位不能直接把符号位替换成正负号所有有符号类型中有一个特殊的二进制补码,它最左边的数位是1右边全是0,这个补码用来表示这个数据类型中最小的负数当吧一个占地大的整数类型数据赋值给以个占地小的整数类型
23、存储区的时候,计算机会保持二进制内容不变(会丢失一些数据)当把一个占地小的整数类型数据赋值给一个占地大的整数类型存储区时会扩充二进制数位。原有的数字是有符号的,则扩充出来的二进制数位全是符号位。如果原有数字是无符号的,则扩充出来的二进制数位都是0C语言程序中使用加减乘除C语言中使用表示区余操作、,在C语言中可以做为操作符使用,它的左右和写一个能当数字使用的内容使用这个操作符编写的表达式可以当数字使用,这个数字就是逗号操作符后面的那个数字逗号操作符的优先级非常低,甚至比赋值操作符优先级都低赋值操作符(=)可以把一个数字放在一个存储区里赋值操作符左边必须是一个能代表存储区的内容(左值)赋值操作符右
24、边必须是可以当数字使用的内容赋值操作符的优先级非常低,但是比逗号操作符高使用赋值操作符编写的赋值语句可以当作数字使用,这个数字就是赋值完成后的右边的存储区里的数字一条语句中可以包含多个赋操作符,它们的计算顺序是先右后左只需要一个数字就可以配合使用的操作符叫单目操作符需要两个数字配合使用的操作符叫双目操作符需要三个数字配合使用的操作符叫三目操作符绝大多数双目操作符可以和赋值操作符合并形成赋值操作符(+=-=%=)符合赋值操作符要求左边是能代表存储区的内容,有边是能当数字使用的内容复合赋值操作符也是爽目操作符所有复合赋值操作符的优先级都和赋值操作符的优先级一样低自增+/自减-它们是单目操作符,它们
25、必须和一个存储区配合使用这两个操作符都可以采用前操作方式或后操作方式使用(i+i)不用在一条语句中队同一个变量多次进行自增自减计算,因为结果不确定布尔类型数据只包含两个数值,分别是真(true)和假(false)在C89规范中真用整数1表示,假用整数0表示整数也可以作为布尔值使用,0作为布尔值使用时是假,其他整数作为布尔值使用时是真逻辑操作符用来编写逻辑表达式,逻辑表达式的计算结果只能是布尔值!是单目逻辑操作符,表示求反双目逻辑操作符:=双目逻辑操作符的优先级比算术操作符的优先级低C语言中所有逻辑表达式必须由一个或多个简单逻辑表达式构成(最多包含以个双目逻辑操作符的表达式叫简单逻辑表达式)&与
26、II或(!Gender&weight(height-110)|(Gender&weight(height-105)与(&)和或(|)都具有短路特性(前面的逻辑表达式如果能决定整个表达式的结果则不会去考虑后面的内容)作业:1、编写程序从键盘上得到一个1到127之间的整数,把它转换成二进制并把转换结果打印在屏幕上(两种方法)Day05位操作符可以直接对字节中的二进制数位进行操作是以个单目位操作符,它可以把字节中所有二进制数位求反,叫求反操作符求反操作符不会修改原有数字内容双目为操作符包括按位与(&),按位或(|)以及按位异或(A)以上双目操作符首先把两个数字转化二进制补码,然后把对应数位上的数字进
27、行操作(不对应的数位之间不会互相影响)按位与会把对应数位上的数字进行与计算按位与可以用来把租借中某些二进制数位活0;任何数位和0按位与后是0任何数位和1按位与后还是他本身a6501000001A9701100001Charch;Ch&=32/00100000;/11011111按位或把对应数位上的数字进行或计算(或0得本身,或1得1)1 00000011|500000101=700000111按位或可以把字节中某些二进制数位设置成1按位异或把对应上的数字进行异或计算(异或0不变,异或1结果改变)0A0=03A5=000001100a1=1=61a1=0按位异或可以把某二进制数位求反移位操作符也
28、是双目操作符;可以把所有二进制数位上的数字统一向左或向有移动n个位置左移操作使用表示移位操作符左边的数字是要进行移位操作的数字,右边的数字是移动的位数移位操作不会修改原有的数字移位操作后一定会有些数字丢失,另外一些位置空出来左移时右边空出的位置上一定补充0;右移时有符号类型数据左边空出来的位置上一定补充符号位,无符号类型数据左边空出来的位置上一定补充0在移动过程中如果没有丢失有效数据位,则左移n位相当于乘以2的n次方,右移除以。取地址操作符(&)可以根据一个存储区计算出它的地址这是一个单目操作符,它必须和一个存储区配合使用使用%p做占位符把地址打印在屏幕上地址方式都是以十六进制来写的可以在地址
29、数据前使用*操作符获得地址对应的存储区三目表达式可以根据一个布尔值从两个计算规则中选择一个作为最终结果三目表达式格式:布尔值?表达式1:表达式2如果布尔值是真则采用表达式1计算最终结果,如果是假则采用表达式2计算最终结果不要把赋值操作符写在三目操作符的问号后面如果一个表达式中多个数据的类型不同,则计算机会首先把它们转换成同一类型,然后在进行计算这个转换过程完全由计算机完成,这个过程叫隐式类型转换隐式类型转换过程中会把char,short都转换成double当不同类型占地大小不同时会把有符号类型转换成武符号类型,整数类型转换成浮点类型在C语言程序中可以随时给一个数据指定新类型,者叫做强制类型转换
30、强制类型转换的实现方法是在数据前写一对小括号,小括号里写数据类型名称强制类型转换不受规则约束,所以转换过程中有可能造成数据丢失实现强制类型转换的时候计算机会分配一个新的存储区,这个存储区的类型是我们在小括号里指定的类型。计算机用原来的数据对这个存储区进行赋值,然后使用这个存储区里的内容进行计算如果对一个存储区的内容做强制类型转换则转换过程不会修改原有存储区里的数字流程控制语句可以让程序中的语句不再从上到下执行分支是一种流程控制语句,它可以从几组语句中选择一组执行而忽略其他组使用if关键字可以编写分支,在if分支中可以使用一个逻辑表达式的结果控制一组语句是否要执行(括号为真执行,位假不执行)如果
31、有多个分支,在任何时候最多只会执行其中一个分支,则可以使用else关键字把它们合并如果合并好的多个分支任何时候必然会执行其中一组,则可以把最后一组的逻辑表达式省略合并好的分支中多个逻辑表达式之间有先后顺序,只有当前面的逻辑表达式为假才会考虑后面的逻辑表达式可以利用者一点在合并多个分支的时候简化它们的逻辑表达式已经合并好的分支不一定能当作多个无关分支理解作业:1编写程序从用户提供的三个数中找出最大数并打印2编写程序从键盘得到小时、分钟、秒,计算出下一秒的时间,并按照如下格式打印Hh:mm:ssDay06Switch-case语句也可以用来实现分支如果一个分支中包含有限个整数,每个整数对应一组专门
32、的语句,这种一般使用Switch-case语句Switch-case语句中在大括号内部把所有整数都歹U举出来,每个整数对应的处理语句就可以卸载这个整数下面。每段必须用break;语句结束在大括号里可以编写一组语句用来处理没有处理没有例句出来的数字,可以用default:来包括所有这些没有歹U举过的数字循环也是一直流程控制语句,它可以让一组语句反复多次执行For关键字可以用来编写循环在for关键字编写的循环中,可以采用一个变量代表一组相关数字,这个变量叫循环变量在循环的大括号里可以使用break;语句随时终止循环的执行Break;语句不会执行后循环变量也不会再改变Continue;语句会直接跳转
33、到循环大括号的末尾,中间的语句这次都不会执行(只结束这次循环,而不会像break那样结束掉整个循环)Break;和continue;语句通常写在分支里假设有如下的for循环语句For(1;2;3)4它的执行顺序:【1、2】【4、3、2】【4、3、2】【4、3、2】第一组和其他所有组都不同循环嵌套可以解决复杂的循环问题首先把所有问题分组,为每组找一个代表数字使用一个循环描述所有组代表数字的变化过程在这个循环内部再写一个循环负责处理这一组内部的所有任务内循环的开始数字和结束数字可能是不固定的,需要根据外循环的循环变量计算得至U作业:1编写程序打印99惩罚表2假设一个面包店卖三种面包,重量分别是20
34、克,25克,30克,编写程序吧所有能凑成200克的情况打印Day07For循环的多种写法:1、当大括号里只有一条语句时,大括号可以省略2、小括号里可以使用逗号操作符3、在小括号里临时定义循环变量(c99规范中才可以使用)。当循环结束后临时定义的循环变量不再能使用4、如果大括号里没有语句则可以直接在小括号后用;结束,这种写法叫空语句5、只保留小括号里之间的逻辑表达式6、可以省略小括号中间的逻辑表达式(这个时候计算机认为这个逻辑表达式的结果永远是真,这种循环无法正常结束,所有叫死循环)While循环也是一种实现循环的方式如何编写循环的时候不知道循环要执行多少次就可以考虑采用while格式编写Whi
35、le循环和for循环可以互相替代,仅仅是两种不同的编写思路While循环格式:While(逻辑表达式1)反复执行的语句2反复执行大括号里由直到逻辑表达式为假时结束执行顺序:【1】【21】【21】【21】如果某一组最后编号为1的逻辑表达式结合为假则循环结束,否则启动下一组While循环也可以编写空语句和死循环(把1作为逻辑表达式就可以实现死循环)While循环中也可以使用break;和continue!;语句Dowhile也是编写循环的方式,格式如下:Do2while(1);它按照如下顺序分组执行:【21】【21】【21】【21】【21】相当于把while循环中第一组排除掉它的结束方式和whil
36、e循环一样这种格式可以保证大括号里的语句至少执行一次编写程序是无法预知的数字叫随机数计算机生成的随机数叫伪随机数Rand标准寒素可以用来获得随机数把函数调用语句当数字使用就得到随机数为了使用这个函数需要包含stdlib.h函数Srand标准函数可以用来设置随机数种子这个函数把一个整数作为种子使用为了使用这个标准函数需要包含stdlib.h文件Srand函数调用语句只应该在主函数的开始执行一次Time标准函数可以用来获得当前时间把函数调用语句当数字使用结束得到的时间(1970-00:00:00到现在的秒数)为了使用这个标准函数需要包含time.h文件Goto也是流程控制语句,它可以指定任何一条语
37、句作为下一条语句不要使用got。语句数组可以代表内存中一组连续的同类型存储区数组需要先声明再使用声明数组时需要指定存储区类型,数组名称以及存储区域个数数组创建后内部所包含的存储区个数不可以改变数组不可以当作整体使用,一次只能使用其中某一个存储区数组中每个存储区有一个专门的编号,这个编号叫下标第一个存储区的下表是0,向后依次递增最大下标是存储区个数减一超过范围的下标不可以使用数组名称不代表存储区,而只代表第一个存储区的地址(数组名称不可以被赋值)数组名称加N可以计算出下标位N的存储区地址数组中下标为N的存储区还可以使用如下方式表小:*(数组名称+N)可以使用一个for循环依次处理数组中每个存储区
38、,循环中循环变量依次代表所有存储区的下标数组也应该初始化初始化数组的时候需要提供多个初始化数据,每个数据用来初始化一个存储区所有初始化数据写在一对大括号里,不同数据之间使用逗号分开初始化数据的使用顺序是从前向后如果初始化的时候提供过多的初始化数据则多余的会被丢掉如果初始化数据过少则没有对应初始化数据的存储区自动被初始化成0如果初始化数据个数和存储区个数一样则可以省略数组声明中存储区个数可以采用sizeof关键字对数组名称进行计算,计算结果是数组中包含的字节个数Intarr5=;Sizeof(arr)=4*5=20声明变长数组的时候可以使用变量表示数组中存储区的个数,这种数组只能在C99规范中使
39、用(变长数组只表示声明是不确定长度,可一旦确定就不可以再改变了)intarrnum;/变长数组变长数组不可以初始化!Day08二位数组采用循环嵌套的处理方式对它每一个二位数组的初始化:二维数组既可以作为一个一维数组进行初始化,也可以作为多个一维数组进行初始化二维数组名称加N跨越了N组存储区的大小,结果是下标为N那组第一个存储区的地址对二维数组组名称进行sizeof计算结果是整个二维数组中所有存储区的大小可以把二维数组名称转换成一维数组使用转换方式是二维数组名称后面加一个组下标这个一维数组中包含组下标对一维数组名称进行取地址操作结果可以看成是一个二维数组这个二位数组中只有一个分组,这个分组里包含
40、原来一维数组中所有存储区Day09函数C语言中可以采用分组的方式管路所有的语句最简单的分组方式可以把所有语句分成多个函数,每个函数中包含多个语句所有C语言程序一定由一个或多个函数构成每个函数有自己的名字,名字用来区分不同的函数C语言规定每个程序中必须包含一个叫做main的函数,这个函数叫主函数多函数程序执行的时候遵守如下规则:1、任何时候只能有一个函数工作2、任何时候也必然有一个函数在工作3、如果函数A在工作过程中停下来让函数B开始工作,则函数B结束所有工作后必须要让函数A继续后面的工作如果函数A在工作过程中停下来让函数B开始工作,则它们之间存在调用关系函数调用关系一定发生在两个函数之间调用关
41、系中先开始工作的函数叫调用函数,后开始工作的函数叫被调用函数函数A和函数B之间的调用只在函数B工作期间有效存储区是有主人的存储区的主人可以任意使用它所拥有的存储区同一个主人的存储区不可以重名,不同主人的存储区可以重名声明在函数内部的存储区它的主人是这个函数的某一次运行过程绝大多数函数调用过程中存在双方之间数据的传递数据传递有两个完全相反的方向,它们分别使用不同的方法实现任何一个方向的数据传递都需要一组专门的存储区来记录要传递的数字所有这些存储区的主人都是被调用函数从被调用函数向调用函数只能传递一个数据,这个数据叫做被调用函数的返回值为此只需要准备一个存储区只能由被调用函数向这个存储区里放数字被
42、调用函数只能在最后一条语句使用return关键组向这个存储区放数字只有调用函数才能从这个存储区里获得数字把函数调用语句当作数字使用就可以获得这个数字这个存储区的类型名称要写在函数名称前面调用函数在得到返回值以后必须立刻使用或者转存到其他存储区一个函数可以选择不使用返回值存储区,这时需要在函数名称前写void如果函数名称前没有写数据类型名称则计算机认为函数使用一个整数类型的返回值存储区如果没有使用return关键字返回值存储区赋值,则调用函数从这个存储区里获得的数字是随机的在对返回值存储区进行赋值的时候最好保证数据和存储区的类型一致Exit标准函数可以随时结束一个程序的执行;为了使用这个函数需要
43、包含stdlib.h文件为了把数据从调用函数传递给被调用函数需要被调用函数提供一组存储区(这些存储区的个数和类型都是任意的)为了使用这些存储区需要被调用函数声明一组变量这些变量必须声明在函数名称后面的小括号里面这些变量叫做形式参数函数名称后面小括号里的内容叫形式参数列表形式参数列表中每个形式参数都需要专门写类型名称,用逗号分隔不同的形式参数声明函数调用语句中需要在小括号路位每个形式参数提供一个对应的数字。被调用函数在工作的时候就可以通过形式参数获得这些数字。这些数字叫实际参数如果存在多个实际参数,一个实验逗号把它们分隔开所有可以当作数字使用的内容都可以作为实际参数使用形式参数和实际参数的存储区
44、完全不同,对形式参数的修改不会影响实际参数如果函数名称后面的小括号里什么都没有则表示函数可以接受任意个数任意类型的实际参数在小括号里写void表示函数没有形式参数利用数组作为形式参数可以传递大量数据,声明在小括号里的数组就是形式参数地址数据可以作为实际参数和数组形式参数配合使用(大多数情况下使用数组名称)数组作为形式参数使用时可以省略中括号里的数字,但是必须要另外提供一个形式参数表示数组中存储区个数数组形式参数并不是数组,而是一个可以当作数组使用的存储区预习:1、函数(数组形参,函数隐式声明和显示声明)2、递归函数3、变量的生命周期和作用域4、程序的分段5、声明变量时可以使用的关键字作业:1、
45、编写函数解决鸡兔同笼问题,调用函数提供头和脚的个数,函数负责计算出兔子的个数2、编写程序在屏幕上打印如下内容1x9=92x8=173x7=214x6=245x5=25每行使用一个函数调用语句打印Day10Rabbit兔子chicken鸡数组作为形式参数的时候,真正的形式参数并不是数组,而是一个可以作为数组使用的单个存储区函数调用的时候,这个真正的形式参数只记录了一个地址数据数组形式参数的名称代表了这个存储区数组作为形式参数的时候,数组名称所代表的存储区主人是被调用函数,数组里所包含的所有存储区主人一定不是被调用函数使用数组形式参数可以让被调用函数使用其他主人的存储区使用数组作为形式参数可以让调
46、用函数和被调用函数共用同样的存储区使用数组形式参数可以实现双向数据传递,这个参数叫输入输出参数普通变量作为形式参数只能吧数组从调用函数传递给被调用函数,这个参数叫输入参数被调用函数可以通过数组形参改变调用函数里的数组的数据函数可以分成函数声明和函数体(大括号里的叫函数体,大括号前的叫函数声明)函数声明可以独立作为一条语句,这个时候可以省略所有形式参数的名称当编译器首先遇到函数调用语句时会猜测函数的格式,这个猜测的结果叫函数的隐式声明所有函数的隐式声明格式一样,有一个整数类型的返回值存储区,可以接受任意个数任意类型的参数应该把文件所有函数(主函数)的声明在文件开头列出,这叫做函数的显示声明。显示
47、声明可以避免隐式声明所带来的问题会调用自己的函数叫递归函数适合采用递归方式解决的问题需要符合如下特征:1、问题比较复杂,难以找到直接解决的方法2、问题可以分解成几个小问题,至少有一个小问题和原来问题的本质一样,只是稍微简单一点编写递归函数的步骤:1、用语句把问题的分解方式描述出来(假设递归函数已经编写好了)2、在函数的开头编写一个分支用来处理不可分解的情况(这个分支必须能直接结束函数)采用递归函数解决问题的思路叫递归采用循环解决同样问题的思路叫递推程序中所有存储区都有主人主人可以任意使用自己拥有的存储区如果希望使用其他主人的存储区需要使用特殊的手段,甚至无法实现如果一个存储区对应的变量声明在一
48、对大括号里,则它的主人是这个大括号的一次运行过程如果一对大括号在程序运行过程中多次运行,则会出现多个主人,每个主人拥有自己私有的存储区声明在所有大括号之外的变量,它的主人是整个程序的运行过程在主人存在的时间范围内,存储区是存在的,是可以使用的,这个时间范围叫做存储区或变量的生命周期代表存储区的变量只有在存储区主人内部所包含的语句中才可以使用,这些语句叫做存储区或变量的作用域根据变量的生命周期和作用域,把变量分成三种:1、声明在所有函数之外的变量叫全局变量,它是主人是整个程序的运行过程,它的生命周期是整个程序运行范围,它的作用域包含程序中所有语句,没有初始化的全局变量自动被初始化成0。2、声明在
49、函数内部的变量叫局部变量,它的主人是函数的一次运行过程,它的生命周期是函数一次执行的时间范围,它的作用域是函数内部的所有语句3、函数内部的大括号叫做语句块,声明在语句块里的变量叫块变量,它的主人是语句块的一次执行过程,它的生命周期是语句块的执行时间范围,它的作用域是语句块里的所有语句预习:1、重名变量的使用2、程序分段3、声明变量时可以使用的关键字4、指针变量作业:编写函数把一个数组中所有存储区的内容前后颠倒,然后在主函数里打印修改后的内容(米用循环和递归两种方式实现)Day11全局变量,局部变量和块变量时可以重名的如果一条语句使用了重名变量,则会优先选择作用域小的那个程序在内存中是分段保存的
50、代码段记录程序语句转换得到的数字,在运行的时候这个段落的内容不可以被修改全局段-包含生命周期是整个程序运行期间的存储区,包含的存储区个数在程序运行期间固定不变栈局部变量,块变量,形式参数和返回值的存储区都被包含在这个段落里;当一个函数开始运行的时候,计算机会从这个段落中为这个函数分配必要的存储区,当一个函数结束的时候,计算机会把这个段落中分配给这个函数的存储区回收(回收时计算机不会修改存储区的内容)分配顺序和回收顺序刚好相反堆可以认为大小是无限的,可以存放大量数据;需要使用专门的函数调用语句才能从这个段落分配存储区;当不再使用这个段落中存储区的时候需要使用专门的函数调用语句把它们还给计算机如果
51、没有把这个段落中存储区还给计算机则会导致内存泄露声明变量时可以使用的关键字1、auto关键字用来声明自动变量,所有局部变量都是自动变量,不需要特别声明2、static关键字用来声明静态变量,所有静态变量的生命周期都是整个程序运行期问;没有初始化的静态变量自动被初始化成0;静态全局变量的作用域只包含声明它的那个文件中所有语句;不论静态变量的初始化语句写在哪里,它只会在程序开始的时候执行一次初始化(静态变量不能在别的文件里执行)3、const关键字用来声明不可赋值的变量。这种变量只能在声明的时候进行赋值;但可以用scanf改变4、volatile关键字用来声明多变的变量指针才旨针变量专门用来记录地
52、址数据指针变量的主要用途是帮我们找到某一个存储区可以把指针变量当作种子文件来理解指针变量和种子文件的区别:1、任何时候指针变量只能帮我们找到另外一个存储区2、指针变量在不同的时候可以帮我们找到不同的存储区只有把指针和另外存储区捆绑后才可以通过指针找到这个存储区只要把存储区的地址记录在指针变量里就可以实现它们的捆绑指针也分类型,不同类型的指针适合跟不同类型的存储区进行捆绑指针变量可以用来代表四个不同的内容:1、不加*的指针可以代表指针本身的存储区或这个存储区里的地址数据2、加了*以后可以代表捆绑存储区或捆绑存储区里的数据Null代表空地址,它的数值是数字0;记录空地址的指针叫空指针除了空指针以外
53、没有捆绑的指针叫野指针;程序中禁止出现野指针没有初始化的指针都是野指针指针初始化语句中*没有参与赋值过程,它仅仅代表指针类型指针在不同的时候可以和不同的存储区捆绑,使用指针的时候应该关注捆绑存储区域的使用方式,而不是它的来源在我们的计算机里所有指针变量的大小都是四个字节不同类型的指针之间互相赋值不会导致地址数据丢失(大小一样)不同类型指针之间进行强制类型转换也不会导致地址数据丢失指针的类型决定了通过指针找到的捆绑存储区的类型不同类型指针可以记录同样的地址,但是通过它们找到的捆绑存储区的类型不同,所以数值也可以不同无类型指针用void*表示这种指针没有声明捆绑存储类型,它只表示里面存储了一个地址
54、数据这种指针可以记录任何地址数据不可以在这种指针前加*表示捆绑存储区(无类型)只有先强制类型转换成有类型指针后才可以加*(如:*(int*)p_vd=10)这种指针通常用来记录来源不明并且有多种可能性的地址数据指针可以加减一个整数,计算结果还是一个地址数据指针加减整数N实际地址数据的变化时N个捆绑存储区的大小两个同类型的指针之间可以进行减法操作计算结果是一个整数这个整数代表两个地址之间可以容纳的捆绑存储区个数把数组名称赋值给指针后可以用这个指针代替数组名称这个时候可以认为指针间接和数组中每个存储区实现了捆绑指针可以和数组中每个存储区捆绑,捆绑好以后就可以代替下标表示这个捆绑存储区预习:1、指针
55、2、字符申作业:1、使用指针把数组中所有存储区的内容前后颠倒Day12可以使用指针作为循环变量依次处理数组中每个存储区数组作为函数形式参数的时候真正的形式参数就是一个指针,指针和数组名称的差异:1、指针可以被赋值,数组名称不可以被赋值2、对指针进行sizeof计算结果是4,对数组名称进行sizeof计算结果是数组中包含的字节个数3、对数组名称取地址的结果是二维数组,对指针取地址结果是指针本身存储区的地址声明指针时也可以使用const关键字,使用方法有如下两种:1、const关键字写在指针类型前面,例如:constint*p_num=NULL;不可以通过这个指针对它的辐绑存储区进行赋值2、con
56、st关键字写在指针变量名称前,例如:int*constp_num=NULL;这种指针本身不可以被赋值,只能在初始化的时候捆绑如果一个函数在执行过程中不会修改指针形式参数所捆绑的存储区内容,则应该在指针形式参数前加const关键字使用指针作为形式参数可以让被调用函数使用其他主人的存储区(存储区的声明周期包含被调用函数的执行时间)函数调用语句中可以使用任何地址数据和指针类型形式参数配合使用如果函数的指针形式参数不能确定类型,就可以采用void*类型的指针当使用void*类型的指针形式参数时需要通过其他途径知道指针的类型指针也可以作为函数的返回值使用使用指针作为函数的返回值可以间接从被调用函数通过返
57、回值向调用函数传递多个数据当指针作为返回值的时候,绝不可以把局部变量和块变量的地址赋值给指针类型的返回值字符串C语言中使用一组连续的字符类型存储区记录文字信息所有文字信息最后必须放一个ASCII码的字符(用0表示)表示结束位置符合以上要求的一组字符类型存储区叫一个字符申0字符前的内容是要记录的文字信息所有字符申都可以使用一个字符类型指针表示(这个指针要求和第一个字符类型存储区捆绑)字符申乂分为两种:一种字符申叫字符申字面值,例如:“abc”“$&八”等;编译器在编译的时候会自动在字符申字面值后面加0字符,编译器会自动用第一个字符类型存储区的地址替换掉值字符申字面值的内容在程序执行过程中不可以修改编译器会把字符申字面值中所有存储区放在一个专门的段落里,这个段落里的所有内容在程序执行的时候都不可以修改内容一样的字符申字面值在计算机里只保存一份两个字符申字面值连着写在一起,则编译器会自动把它们合并成一个第二种:字符数组也可以用来表示字符申只有包含0字符的字符数组才能当字符申使用可以采用字符申字面值对字符数组进行初始化,这个时候会把0字符也初始化到字符数组中。初始化完成后字符数组可以当字符申使用。当使用字符申字面值对字符数组完成初始化以后,它们的存储区之间完全无关,仅仅是内容
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 财产处理协议书
- 表5安全教育与培训
- 2024-2025学年七年级数学北师大版上册期末检测卷(含答案)
- 幼儿园《雨天的活动》科学教案
- 大班幼儿全面发展指南策略分析
- 2024-2025学年下学期高二生物人教版期末必刷常考题之生态系统的信息传递
- 森林之旅心理题目及答案
- 2025届河南省九师联盟高三下学期2月教学质量检测语文试题(解析版)
- 年底员工评价的评语
- 渣土车辆超速检讨书
- 山东产权交易集团有限公司招聘(校招、社招)笔试真题2023
- (正式版)HGT 6263-2024 电石渣脱硫剂
- GB/T 6346.1-2024电子设备用固定电容器第1部分:总规范
- 广州市广大附中2024届八年级数学第二学期期末学业质量监测试题含解析
- 建筑美学智慧树知到期末考试答案2024年
- (高清版)DZT 0280-2015 可控源音频大地电磁法技术规程
- 教师论文写作培训课件
- 矿井探放水图牌板管理标准
- 学校安全:如何应对学生赌博行为
- 廉洁应征承诺书
- 《多囊肾的护理》课件
评论
0/150
提交评论