二期基础vip课件c语言补充_第1页
二期基础vip课件c语言补充_第2页
二期基础vip课件c语言补充_第3页
二期基础vip课件c语言补充_第4页
二期基础vip课件c语言补充_第5页
免费预览已结束,剩余70页可下载查看

下载本文档

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

文档简介

计算机和软件常识1.计算机运行原理1)硬件基本组成:硬盘、内存、CPU2)各个部件之间的运作协调(右图)2.计算机只能识别0和11)0和1组成的指令2)0和1组成的数据3.计算机和软件的联系1)软件的基本概念:指令的集合2)软件的安装运行过程:*安装在硬盘*运行在内存3)为什么要开发软件:写出能控制计算机的指令CPU硬盘内存装载软件读取指令

计算机语言发展史1.机器语言1)简介:所有代码里面只有0和1,每一条指令称为“机器指令”2)优点*代码能被计算机直接识别,直接对硬件产生作用,程序的执行效率非常高*能直接访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等3)缺点*程序全是些0和1的指令代码,可读性差,还容易出错*对硬件的依赖性很强,因此不同型号计算机的机器语言又不一样。也就是说,如果2台不同型号的机器想实现一样的功能,需要编写2套完全不同的代码*要熟记所用计算机的全部指令和指令的涵义,指令又多又难记

2.汇编语言1)简介:用英文单词等符号代替机器指令2)优点*像机器语言一样,可以直接访问、控制计算机的各种硬件设备*占用内存少,执行速度快3)缺点*不同的机器有不同的汇编语言语法和编译器,代码缺乏可移植性,也就是说,一个程序只能在一种机器上运行,换到其他机器上就不能运行*符号非常多、难记,即使是完成简单的功能也需要大量的汇编语言代码,很容易产生BUG,难于调试*必须对硬件非常了解,开发效率很低,周期长且单调4)使用场合*操作系统内核、驱动程序、单片机程序*软件的加密、解密、破解*病毒的制作、防治*程序的调试、分析计算机语言发展史

3.高级语言1)简介:接近自然语言2)优点*简单、易用、易于理解,语法和结构类似于普通英文*远离对硬件的直接操作,使得一般人经过学习之后都可以编程,而不用太熟悉硬件知识*一个程序还可以在不同的机器上运行,具有可移植性3)缺点*程序不能直接被计算机识别,需要经编译器翻译成二进制指令后,才能运行到计算机上4)种类:C语言、C++、C#、Java、Objective-C等计算机语言发展史

关键字1.什么是关键字1>关键字就是C语言提供的有特殊含义的符号,也叫做“保留字”2>C语言一共提供了32个关键字,这些关键字都被C语言赋予了特殊含义autodoubleintstructbreakelselongswitchcaseenumregistertypedefcharexternreturnunionconstfloatshortunsignedcontinueforsignedvoiddefaultgotosizeofvolatiledoifwhilestatic大致浏览一遍即可,这些关键字以后会经常用到的2.关键字的特征1>全部都是小写2>在开发工具或者智能文本编辑工具中会显示特殊颜色。默认情况下,C语言中的所有关键字在Xcode中都会显示紫褐色3.main函数中哪些是关键字int、return

标识符1.什么是标识符标识符就是在程序中自定义的一些符号和名称。要跟关键字区分开来:关键字是C语言默认提供的符号,标识符是程序员自定义的2.标识符的作用1)标识的目的就是为了将这些东西区分开来2)标识符的作用就跟人的名字差不多,为了区分每个人,就在每个人出生的时候起了个名字3)C语言是由函数构成的,为了区分多个函数,给每一个函数都起了个名字,函数的名称就是标识符的一种,变量的名称也是标识符3.命名1>命名规则(一定要遵守)*只能由26个英文字母的大小写、10个阿拉伯数字0~9、下划线_组成*严格区分大小写,比如Button和button是2个不同的标识符*不能以数字开头*不可以使用关键字作为标识符

2>命名规范(最好遵守)尽量起个有意义的名称,比如一个完整的英文单词,别人一看这个名称就能才能这个标识符的作用。如果标识符中含有多个单词,使用驼峰标识(除第一个单词,后面每个单词的首字母都是大写):twoClass、myTwoClass,或者使用下划线_来连接:first_class、my_first_class4.常见的标识符命名错误1.常见的标识符命名错误

注释1.什么是注释1)注释是在所有计算机语言中都非常重要的一个概念,从字面上看,就是注解、解释的意思2)注释可以用来解释某一段程序或者某一行代码是什么意思,方便程序员之间的交流。假如我写完一行代码后,加上相应的注释,那么别人看到这个注释就知道我的这行代码是做什么用的3)注释可以是任何文字,也就是说可以写中文4)在开发工具中注释一般是豆沙绿色2.单行注释1)单行注释以两个正斜杠开头,也就是以//开头,只能注释一行,从//开始到这行的结尾都是注释的内容2)任何地方都可以写注释:函数外面、里面,每一条语句后面

注释3.多行注释多行注释以/*开头,以*/结尾,/*和*/中间的内容都是注释4.注释的作用1>被注释的代码不会参与编译注释是写给人看的,不是给计算机看的。计算机怎么可能看得我们写的中文嘛。因此,当编译程序的时候,并不会将注释编译到.o目标文件中从.o文件的大小可以间接看出注释后的代码并没有被编译2>检查代码的作用3>排除错误

注释5.注释的嵌套现象1)单行注释可以嵌套单行注释、多行注释//哈哈哈//呵呵呵//嘻嘻嘻///*abcdef*///abcdef2)多行注释可以嵌套单行注释/*//作者:EB

//描述:第一个C语言程序作用:这是一个主函数,C程序的入口点*/3)多行注释不能嵌套多行注释/*哈哈哈/*嘻嘻嘻*/呵呵呵*/4)下面的写法是错误的///*哈哈哈*/

注释的重要性要养成写注释的良好习惯。绝大部分项目经理检查代码的第一件事就是看有没有写注释,很多公司的机试也会检查注释(机试就是给你一道编程题、一台电脑)今天很高兴,哈哈劳资我真厉害,一天写了几百行代码,做出了一个非常不错的功能,等等,我好像忘记了什么(注释),管它的,我这么牛逼。几天过后,你再回去看那一段代码,你可能看不懂了,这是很正常的事。如果你写了注释,那情况就不一样了,注释可以帮助你回顾代码的作用。你在某家公司待了1年多,写了不知道多少行代码,但是你不写一点注释。有一天你离职了,新的员工接手你做的项目,他首先要做的事情肯定是要读懂你写的代码。可是你一点注释都没写,全部都是英文,这会让这位新员工非常地蛋疼。每个人都有自己的思想,写代码的思路肯定是不一样的,看别人写的代码是件非常痛苦的事情,特别是没有注释的代码。你不写注释的做法会大大降低公司的开发效率。因此,所有的大公司都非常重视注释。

数据1.什么是数据生活中我们时刻都在跟数据谈恋爱,比如体重数据、身高数据、股价数据等。使用计算机的过程中,会接触到各种各样的数据,有文档数据、图片数据、视频数据,文字数据、文件数据等。2.数据的分类计算机中存储的数据可以分为两种:静态数据和动态数据。1>静态数据*概念:静态数据是指一些永久性的数据,一般存储在硬盘中。硬盘的存储空间一般都比较大,现在普通计算机的硬盘都有500G左右,因此硬盘中可以存放一些比较大的文件。*存储的时长:计算机关闭之后再开启,这些数据依旧还在,只要你不主动删掉或者硬盘没坏,这些数据永远都在。*哪些是静态数据:静态数据一般是以文件的形式存储在硬盘上,比如文档、照片、视频等。

数据2>动态数据(临时数据)概念:动态数据指在程序运行过程中,动态产生的临时数据,一般存储在内存中。内存的存储空间一般都比较小,现在普通计算机的内存只有8G左右,因此要谨慎使用内存,不要占用太多的内存空间。存储的时长:计算机关闭之后,这些临时数据就会被清除。哪些是动态数据:当运行某个程序(软件)时,整个程序就会被加载到内存中,在程序运行过程中,会产生各种各样的临时数据,这些临时数据都是存储在内存中的。当程序停止运行或者计算机被强制关闭时,这个程序产生的所有临时数据都会被清除。你可能会问:既然硬盘的存储空间这么大,为何不把所有的应用程序加载到硬盘中去执行呢?有个主要原因是内存的访问速度比硬盘快N倍。程序员最关心的是什么数据呢?

数据3>静态数据和动态数据的转换静态->动态动态->静态3.数据的大小1)不管是静态还是动态数据,都是0和1组成的。0和1如何组成这么多的数据?2)数据都有大小,静态数据就会占用硬盘的空间,动态数据就占用内存的空间3)数据越大,包含的0和1就越多,比特位和字节4)1KB=1024B,1MB=1024KB,1GB=1024MB,1TB=1024GB

语言中的数据类型由于app中的数据种类繁多,为了方便操作数据,C语言数据进行了分类

常量1.什么是常量常量,表示一些固定的数据2.常量的分类1>整型常量(int)包括了所有的整数,比如1、2、3、4、-1、0、-2等2>浮点型常量(float\double)浮点型常量分为double和float两种数据类型*double:双精度浮点型,其实就是小数。比如13.14、-13.14、0.0等(注意,0.0也算是个小数)*float:单精度浮点型,也是小数,比double的精确程度低,就是表示的小数位数比较少。为了跟double区分开来,float型数据都是以f结尾的,比如13.14f、-13.14f、0.0f。需要注意的是,不能有1f这样格式的,编译器会直接报错,只有小数才允许加上f。

常量3>字符常量(char)*将一个数字(0~9)、英文字母(a~z、A~Z)或者其他符号(+、-、!、?等)用单引号括起来,这样构成的就是字符常量。比如'2'、'a'、'F'、'+'、'$'等。注意:单引号只能括住1个字符,而且不能是中文字符,下面的写法是错误的:'abc'、'123456'、'男'4>字符串常量*将一个或者多个字符用双引号("")括起来,这样构成的就是字符串常量。比如"2"、"男"、"哇哈哈"、"abcd"、"my_class2",其实printf("HelloWorld");语句中的"HelloWorld"就是字符串常量。那究竟2、'2'、"2"在用法上有什么区别呢?这个先不作讨论,以后会介绍。

变量1.什么是变量当一个数据的值需要经常改变或者不确定时,就应该用变量来表示。比如班级人数(inti;charc;inta,b;)。2.定义变量1>目的*任何变量在使用之前,必须先进行定义。*定义变量的目的是:在内存中分配一块存储空间给变量,方便以后存储数据。*如果定义了多个变量,就会为这多个变量分别分配不同的存储空间。2>格式变量类型变量名;比如intnum;*变量名属于标识符*变量类型*不同类型的变量占用不同大小的存储空间。内存极其有限,分配适当的存储空间*约束变量所存放的数据类型(方便运算)

变量3.变量的使用1>赋值*往变量里面放东西,就是赋值。赋值语句后带个分号;i=10;注意:这里的等号=,并不是数学中的“相等”,而是C语言中的赋值运算符,作用是将右边的常量10赋值给左边的变量i*第一次赋值,可以称为“初始化”*初始化的两种形式*先定义,后初始化:inta;a=10;*定义的同时进行初始化:inta=10;2>修改可以修改变量的值,多次赋值。每次赋值都会覆盖原来的值i=10;i=20;变量i最后的值是20

变量使用printf输出一个\多个变量的值inta=1,c=11;printf("a=%d,c=%d",a,c);double\float\char的输出,格式符的一些小技巧doubleheight=1.58;charblood='A';printf("height=%.2f,血型是%c",height,blood);简单的加减操作inta=1+2;没有初始化时不要拿来使用(下面的写法是不建议的)intscore;printf("score=%d",score);3>变量之间值的传递可以将一个变量的值赋值给另一个变量inta=1;intb=a;连续赋值a=b=1;

4.常见错误1>变量名相同inta=1;inta=11;2>变量的作用域不对*变量的创建和释放过程*代码块作用域{inta=10;}5.习题1>交换整型变量a、b的值。比如a=1、b=11;交换之后a的值是11,b的值是1。用两种方式实现:*使用第三方变量intc;c=a;a=b;b=c;*不使用第三方变量a=b-a;b=b-a;a=b+a;变量

一、变量的内存分析1.字节和地址为了更好地理解变量在内存中的存储细节,先来认识一下内存中的“字节”和“地址”。1>内存以“字节为单位”2>不同类型占用的字节是不一样的,数据越大,所需的字节数就越多2.变量的存储1>所占用字节数跟类型有关,也跟编译器环境有关变量

变量2>变量实例intb=1;inta=2;*内存由大到小寻址,优先分配内存地址较大的字节给变量*每个变量都有地址:第一个字节的地址就是变量的地址3>查看内存地址:inta;printf("a的地址是:%p\n",&a);4>注意在变量未经初始化之前,不要尝试使用变量的值inta;printf("a的值是:%d\n",a);上面的写法是不建议的

scanf函数1.简介这是在stdio.h中声明的一个函数,使用前必须加入#include<stdio.h>。调用scanf函数时,需要传入变量的地址作为参数,scanf函数会等待标准输入设备(比如键盘)输入数据,并且将输入的数据赋值给地址对应的变量2.简单用法intage;scanf("%d",&age);(1)scanf函数时,会等待用户的键盘输入,不会往后执行代码。scanf的第1个参数是"%d",说明要求用户以10进制的形式输入一个整数。这里要注意,scanf的第2个参数传递的不是age变量,而是age变量的地址&age,&是C语言中的一个地址运算符,可以用来获取变量的地址输入完毕后,敲一下回车键,目的是告诉scanf函数我们已经输入完毕了,scanf函数会将输入的值赋值给age变量

3.其他用法1>用scanf函数接收3个数值,每个数值之间用中划线-隔开scanf("%d-%d-%d",&a,&b,&c);3个%d之间是用中划线-隔开的,我们在每输入一个整数后都必须加个中划线-(1)注意:数值之间的分隔符是任意的,不一定要用中划线-,可以是逗号、空格、星号*、井号#等等,甚至是英文字母//逗号,scanf("%d,%d,%d",&a,&b,&c);//输入格式:1,2,3

//井号#scanf("%d#%d#%d",&a,&b,&c);//输入格式:1#2#3

//字母xscanf("%dx%dx%d",&a,&b,&c);//输入格式:1x2x32>用scanf函数接收3个数值,每个数值之间用空格隔开scanf("%d%d%d",&a,&b,&c);3个%d之间是用空格隔开的,我们在每输入一个整数后必须输入一个分隔符,分隔符可以是空格、tab、回车scanf函数

运算符一、算数运算符C语言一共有34种运算符,包括了常见的加减乘除运算1.加法运算+*除开能做加法运算,还能表示正号:+1、+22.减法运算-*除开能做减法运算,还能表示符号:-1、-23.乘法运算*注意符号,不是x,而是*4.除法运算/*注意符号,不是÷,也不是\,而是/*整数除于整数,还是整数。1/2的值是0,这个并不是二分之一5.取余运算%*什么是取余:两个整数相除之后的余数*%两侧只能是整数*正负性取决于%左侧的数值

6.注意点1>自动类型转换inta=1.6;intb=1.5+1.7;自动将大类型转换为了小类型,会丢失精度2>自动类型提升intb=1.5+1;将右边的10提升为了double类型doubleb=1.0/2;解决除法的精度问题3>强制类型转换doublea=(double)1/2;doubleb=(double)(1/2);4>运算顺序表达式结合性(结合方向):1+3+5优先级:2+2*2-2运算符

7.习题1)当?是什么运算符时,不论整型变量a的值怎么变,结果c都不超过10intc=a?10;2)提示用户输入两个整数,并输出两个整数的平均数3)提示用户输入一个时间的秒数,比如100秒就输入100,然后输出对应的分钟和秒,比如100s就是1分钟40秒运算符

二、赋值运算1.简单赋值*inta=10+5;的运算过程*a=b=10;的运算过程*等号左边不能是常量,比如10=11;2.复合赋值*复加减乘除余:a+=4+5;三、自增自减1.简单使用*++

自增运算符。如a++,++a,都等价于a=a+1*自减运算符。如a--,--a,都等价于a=a-1*5++是错误的2.++a和a++的区别*inta=10;*a++;++a;*intb=a++;intb=++a;运算符

四、sizeof1.作用用来计算一个变量或者一个常量、一种数据类型所占的内存字节数。2.基本形式*sizeof(变量\常量)*sizeof变量\常量*sizeof(数据类型)*不能是sizeof数据类型五、关系运算(比较运算)1.条件判断*默认情况下,我们在程序中写的每一句正确代码都会被执行。但很多时候,我们想在某个条件成立的情况下才执行某一段代码(条件)*这种情况的话可以使用条件语句来完成,但是我们暂时不学习条件语句,先来看一些更基础的知识:如何判断一个条件成不成立。运算符

2.真假*在C语言中,条件成立称为“真”,条件不成立称为“假”,因此,判断条件是否成立,就是判断条件的“真假”。*怎么判断真假呢?C语言规定,任何数值都有真假性,任何非0值都为“真”,只有0才为“假”。也就是说,108、-18、1.5、-1.5等都是“真”,0则是“假”。3.关系比较开发中经常要比较,比如斗地主游戏中牌的大小。利用关系运算符就可以比较两个值的大小。*关系运算符的运算结果只有2种:如果条件成立,结果就为1,也就是“真”;如果条件不成立,结果就为0,也就是“假”。4.使用注意*关系运算符中==、!=的优先级相等,<、<=、>、>=的优先级相等,且前者的优先级低于后者:2==3>1*关系运算符的结合方向为“从左往右”:4>3>2>1*关系运算符的优先级小于算术运算符:3+4>8-2运算符

5.习题计算下列表达式的值3>4+7 (3>4)+75!=4+2*7>3==10六、逻辑运算*有时需要多个条件同时成立才能执行某段代码,比如:用户只有同时输入了QQ和密码,才能执行登录,如果只输入了QQ或者只输入了密码,就不能执行登录。这种情况下,我们就要借助于C语言提供的逻辑运算符。*逻辑运算的结果只有2个:“真”为1,“假”为01.&&逻辑与1>使用格式“条件A&&条件B”2>运算结果只有当条件A和条件B都成立时,结果才为1,也就是“真”;其余情况的结果都为0,也就是“假”。运算符

3>运算过程总是先判断条件A是否成立如果条件A成立,接着再判断条件B是否成立:如果条件B成立,“条件A&&条件B”的结果就为1,即“真”,如果条件B不成立,结果就为0,即“假”如果条件A不成立,就不会再去判断条件B是否成立:因为条件A已经不成立了,不管条件B如何,“条件A&&条件B”的结果肯定是0,也就是“假”4>举例逻辑与的结合方向是“自左至右”。比如表达式(a>3)&&(a<5)若a的值是4:先判断a>3,成立;再判断a<5,也成立。因此结果为1若a的值是2:先判断a>3,不成立,停止判断。因此结果为0因此,如果a的值在(3,5)这个范围内,结果就为1;否则,结果就为0运算符

5>注意若想判断a的值是否在(3,5)范围内,千万不能写成3<a<5,因为关系运算符的结合方向为“从左往右”。比如a为2,它会先算3<a,也就是3<2,条件不成立,结果为0。再与5比较,即0<5,条件成立,结果为1。因此3<a<5的结果为1,条件成立,也就是说当a的值为2时,a的值是在(3,5)范围内的。这明显是不对的。正确的判断方法是:(a>3)&&(a<5)C语言规定:任何非0值都为“真”,只有0才为“假”。因此逻辑与也适用于数值。比如1&&2的结果是1,为“真”;1&&0的结果是0,为“假”运算符

||

逻辑或1>使用格式“条件A||条件B”2>运算结果当条件A或条件B只要有一个成立时(也包括条件A和条件B都成立),结果就为1,也就是“真”;只有当条件A和条件B都不成立时,结果才为0,也就是“假”。3>运算过程总是先判断条件A是否成立*如果条件A成立,就不会再去判断条件B是否成立:因为条件A已经成立了,不管条件B如何,“条件A||条件B”的结果肯定是1,也就是“真”*如果条件A不成立,接着再判断条件B是否成立:如果条件B成立,“条件A||条件B”的结果就为1,即“真”,如果条件B不成立,结果就为0,即“假”4>举例逻辑或的结合方向是“自左至右”。比如表达式(a<3)||(a>5)*若a的值是4:先判断a<3,不成立;再判断a>5,也不成立。因此结果为0*若a的值是2:先判断a<3,成立,停止判断。因此结果为1因此,如果a的值在(-∞,3)或者(5,+∞)范围内,结果就为1;否则,结果就为0运算符

注意

C语言规定:任何非0值都为“真”,只有0才为“假”。因此逻辑或也适用于数值。比如1||2的结果是1,为“真”;1||0的结果是1,为“真”;0||0的结果是0,为“假”!

逻辑非1>使用格式“!条件A”2>运算结果其实就是对条件A进行取反:若条件A成立,结果就为0,即“假”;若条件A不成立,结果就为1,即“真”。也就是说:真的变假,假的变真。3>举例逻辑非的结合方向是“自右至左”。比如表达式!(a>2)*若a的值是3:先判断a>2,成立,再取反之后的结果为0*若a的值是1:先判断a>2,不成立,再取反之后的结果为1因此,如果a的值大于2,结果就为0;否则,结果就为1运算符

4>注意可以多次连续使用逻辑非运算符:!(2>1)结果为0,是“假”,!!(2>1)结果为1,是“真”,!!!(2>1)结果为0,是“假”C语言规定:任何非0值都为“真”,只有0才为“假”。因此,对非0值进行逻辑非!运算的结果都是0,对0值进行逻辑非!运算的结果为1。!1、!1.1、!-1的结果都为0,!0的结果为1优先级*逻辑运算符顺序为:小括号()>负号->!>算术运算符>关系运算符>&&>||*表达式!(3>5)||(2<4)&&(6<1):先计算!(3>5)、(2<4)、(6<1),结果为1,式子变为1||1&&0,再计算1&&0,式子变为1||0,最后的结果为1*表达式3+2<5||6>3等价于((3+2)<5)||(6>3),结果为1*表达式4>3&&!-5>2等价于(4>3)&&

((!(-5))>2),结果为0七、三目运算符表达式:条件?a:b;表示条件成立为a,不成立为b*inta=5?10:2;*获得a、b中的最大数*获得a、b、c中的最大数运算符

123流程控制一、顺序结构:默认的流程结构。按照书写顺序执行每一条语句。选择结构:对给定的条件进行判断,再根据判断结果来决定执行哪一段代码。循环结构:在给定条件成立的情况下,反复执行某一段代码。

二、选择结构-if1.简单使用if(表达式)语句1;if(count>20)开班;上课;if(表达式)语句1;else语句2;f(count>20)开班;else不开班;if(表达式){}if(count>50){开班;布置课室;}else{}{}的作用域if-elseif-elseif(a==0)elseif(a>0)else特点:只有一个括号会被执行复合条件上课时间的取值范围(20:30~22:00||22:10~23:30)陷阱:if(a!=0){a不是0;}else{a是0;}if(a);{}if(a=0)a==0;if(10)inta=9;流程控制

123流程控制2.习题1>输入一个整数day代表星期几,根据day的值输出对应的星期几,比如day==1,就输出“星期一”2>输入一个整数month代表月份,根据月份输出对应的季节。春季:3、4、5夏季:6、7、8秋季:9、10、11冬季:12、1、23>输入一个整数score代表分数,根据分数输出等级(A-E)(用两种方式)A:90~100B:80~89C:70~79D:60~69E:0~60

三、选择结构-switch1.简单使用switch(表达式){case数值1:break;…default:break;}举例inta=10;switch(a){case0:printf("这是一个0");break;case5:printf("这是一个5");break;case10:printf("这是一个10");break;default:printf("什么也不是");break;}流程控制

123流程控制自己试着想想break的作用尝试在case中定义变量2.if和switch的对比很多情况可以互换if用得比较多,比较灵活,switch只能某个单值3.习题用switch替代if实现if中的习题

123流程控制四、循环结构-while1.简单使用连续printf(“俯卧撑”)20次;while(表达式){}continue:输出5次休息一下break的使用:某次的时候停止循环2.特点只有条件成立才会执行循环体3.习题1>提示用户输入一个正整数n,计算1+2+3+…+n的和2>提示用户输入一个正整数n,计算1-2+3-4+5-6+…+n的和4.陷阱while(条件);

123流程控制

五、循环结构-dowhile特点:一定会执行一次循环体while和dowhile循环对比inti=0;while(i<0){i++;}inti=0;do{i++;}while(i<0);

六、循环结构-for1.简单实用运行过程初始化语句等可以是多句(把printf放到for的括号中)2.for循环嵌套好友列表1 好友1...好友列表2 好友1...好友列表3 好友1...3.陷阱1>死循环for(;;);2>for循环体内部变量的作用域3>作用域混淆for(inti=0;i<5;i++)inta=10;4.while循环和for循环的比较可以互换for循环的变量可以及时回收流程控制

1235.习题1>提示用户输入一个正整数n,如果n5,就输出下列图形,其他n值以此类推2>输出九九乘法表流程控制

七、break和continue1.break*使用场合:switch\循环结构*循环嵌套下的break2.continue*使用场合:循环结构*循环嵌套下的continue流程控制

一、什么是函数*任何一个C语言程序都是由一个或者多个代码块构成的,每个代码块都有自己的功能,我们一般称这些代码块为“函数”。所以,你可以说C语言程序是由函数构成的。*比如你用C语言编写了一个播放器程序,那么它的程序结构如下图所示:二、函数的定义1.定义函数的目的*将一个常用的功能封装起来,方便以后调用2.定义函数的步骤*函数名:函数叫什么名字*函数体:函数是干啥的,里面包含了什么代码函数

3.格式*固定格式(很多语言的函数都是这么写的)返回值类型函数名(形式参数列表){ 函数体}*举例定义一个函数,计算两个整数的和sum(inta,intb){ intc=a+b;}函数

三、函数调用*sum(1,11);引出返回值*说明函数的调用过程*简述return的作用四、函数的参数1.形参和实参的基本概念2.形参个数和实参一致:sum(1,11,12)3.参数的传递是值传递4.参数名不能跟函数内的局部变量同名5.函数可以没有参数:设计一个函数返回π五、函数的返回值1.返回值的基本概念、return的作用2.void3.return*void可以省略return*可以多次使用return*return后面不能有其他语句4.函数的弱语法*如果没有写返回值类型,默认是int*如果写了返回值,可以不返回*调用一个没有定义过的函数函数

六、函数注意*不能嵌套定义函数*死循环调用,自己调用自己*不能重复定义、可以重复声明七、函数的补充1.main函数*返回值:0,正常退出;1,异常退出2.printf函数*#include*返回值:字符串的长度八、习题1.编写一个函数doubleavr(inta,intb),计算a和b的平均值2.编写一个函数intpows(inta,intn)返回a的n次方3.编写一个函数intadd(intn),计算1+2+3+……+n的值并返回。比如add(3)的返回值是1+2+3=6函数

九、函数的声明1.函数的定义顺序函数的声明作用:声明和定义,类似于身份证和人的关系,编译买火车票、链接上火车3.只有函数声明、没有定义,编译警告、链接报错函数

十、.h文件和.c文件的分工1.单文件的坏处*一个文件的内容太多,不利于阅读、调试*多人修改同一个文件出问题*公司里面是团队合作2.将sum函数抽取到另一个.c文件中*先直接调用sum函数,编译警告、链接main.c错误*#include“sum.c”,编译链接main.c,运行成功(画图分析.o文件中的东西)*如果avr.c中使用sum.c,编译链接main.c,运行程序(画图分析出错原因)3.在其他文件中声明sum函数*intsum(int,int);*编译链接main.c*编译链接sum.c*编译链接main.csum.c,运行成功*avr.c利用一样的方法函数

4.将intsum(int,int)抽取到另外一个文件中不抽取声明的坏处:增加新的函数了抽取到.c文件中?开发工具会将所有的.c进行编译链接抽取到.h文件中5.抽取步骤总结.c文件写函数的定义.h文件写函数的声明要想用我的函数,请包含我的.h文件好处分析函数

十一、#include1.预处理指令简介2.#include的作用纯粹是文件拷贝3.#include<stdio.h>stdio.h中有什么?链接的时候做了什么事情<>和””的区别4.#include的路径问题默认是同路径,其他问题以后再讨论函数

1.什么是进制*是一种计数的方式,数值的表示形式汉字:十一十进制:11二进制:1011八进制:13*多种进制:十进制、二进制、八进制、十六进制。也就是说,同一个整数,我们至少有4种表示方式软件开发,肯定要了解这个2.二进制1>特点:只有0和1,逢2进12>书写格式:0b或者0b开头3>使用场合:二进制指令\二进制文件,变量在内存中就是二进制存储4>二进制和十进制的互相转换5>n为二进制位所能表示的数据范围(不考虑负数):0~2的n次方-13.八进制1>特点:0~7,逢八进一2>书写格式:0开头3>八进制和二进制的互相转换进制

4.十六进制1>特点:0~F,逢十六进一2>书写格式:0x或者0X开头3>十六进制和二进制的互相转换5.习题1>判断下列数字是否合理000110x00110x7H410.980986.089-109+1780b3250b00100xFFdc96f96.0f96.0F-.00315.4e610e8.77.6e-62>分别写出它们的十进制、八进制、十六进制0b001111010b011110113>写出它们的二进制670560x004f进制

2>变量实例intb=10;inta=134;*内存由大到小寻址*只存储二进制形式*每个变量都有地址:第一个字节的地址就是变量的地址3>查看内存地址的两种方式:%x和%p4>查看整数的二进制形式//输出整数的二进制形式voidputBinary(intn){intbits=sizeof(n)*8;while(bits-->0){printf("%d",n>>bits&1);if(bits%4==0)printf("");}printf("\n");}进制

3.负数在内存中的存储1>一个字节的取值范围2>负数的表示形式3>原码、反码、补码4.取值范围如右图:5.习题写出下列变量在内存中的存储情况inta=134;intb=0;intc=-10;进制

类型说明符1>short和long*100l和100ll和100的区别*long和longlong的输出*不同类型所占用的存储空间规则:*short跟int至少为16位(2字节)*long至少为32位(4字节)*short的长度不能大于int,int的长度不能大于long*char一定为为8位(1字节),毕竟char是我们编程能用的最小数据类型2>可以连续使用2个long,也就是longlong。一般来说,longlong的范围是不小于long的3>还有一点要明确的是:shortint等价于short,longint等价于long,longlongint等价于longlong进制

2.signed和unsigned1>首先要明确的:signedint等价于signed,unsignedint等价于unsigned2>signed和unsigned的区别就是它们的最高位是否要当做符号位。signed:表示有符号,也就是说最高位要当做符号位,所以包括正数、负数和0,signed的取值范围是-231~231-1。unsigned:表示无符号,也就是说最高位并不当做符号位,所以不包括负数,也就是0~232-1(64位)。进制

1.&按位与1>功能只有对应的两个二进位均为1时,结果位才为1,否则为0。2>举例:比如9&5,其实就是1001&101=1,因此9&5=13>规律*二进制中,与1相&就保持原位,与0相&就为02.|按位或1>功能只要对应的二个二进位有一个为1时,结果位就为1,否则为0。2>举例:比如9|5,其实就是1001|101=1101,因此9|5=133.^按位异或1>功能当对应的二进位相异(不相同)时,结果为1,否则为0。2>举例:比如9^5,其实就是1001^101=1100,因此9^5=123>规律*相同整数相^的结果是0。比如5^5=0*多个整数相^的结果跟顺序无关。比如5^6^7=5^7^6*因此得出结论:a^b^a=b位运算

4.~取反对整数a的各二进位进行取反,符号位也取反(0变1,1变0)5.<<左移*把整数a的各二进位全部左移n位,高位丢弃,低位补0。左移n位其实就是乘以2的n次方*由于左移是丢弃最高位,0补最低位,所以符号位也会被丢弃,左移出来的结果值可能会改变正负性6.>>右移*把整数a的各二进位全部右移n位,保持符号位不变。右移n位其实就是除以2的n次方*为正数时,符号位为0,最高位补0*为负数时,符号位为1,最高位是补0或是补1取决于编译系统的规定7.习题1>在不用引入其他变量的情况下,使用位异或^运算符实现两个变量值的互换2>使用位与&运算符变量的奇偶性3>编写一个函数,用来输出整数在内存中的二进制形式位运算

1.存储细节ASCII单字节表(双字节GBK\GB2312\GB18030\Unicode)2.常见错误charc=A;charc="A";charc='ABCD';charc='男';3.当做整型使用在-128~127范围内,可以当做整数来用4.%c和%d\%i的使用printf(“%d”,‘A’);printf(“%c”,68);char类型

5.转义字符char类型

一个int类型的变量能保存一个人的年龄,如果想保存整个班的年龄呢?1.什么是数组数组就是用来存储一组数据的2.数组的特点*只能存放一种类型的数据,比如int类型的数组、float类型的数组*里面存放的数据称为“元素”二、数组的定义1.定义*声明数组的类型*声明数组的元素个数(需要多少存储空间)2.格式元素类型数组名[元素个数];比如:intages[3];3.简单使用*简单初始化:intages[5]={19,19,20,21,25};*元素有顺序之分,每个元素都有一个唯一的下标(索引),从0开始*数组元素的访问:a[i]数组的基本概念

4.初始化*初始化方式*inta[3]={1,2,3};*inta[3]={1,2};*inta[]={1,2,3};*inta[4]={[1]=11,[0]=7};*常见错误*inta[];*int[4]a;*inta[b];*a={1,2};*a[4]={1,2,3,4};5.内存分析*数组存储空间的大小*存储空间的划分(内存的分配是从高地址到低地址进行的,但一个数组内部元素又是从低到高进行的)*数组名的作用,查看元素地址*数组越界的注意数组的基本概念

6.其他使用*数组与函数参数*数组元素作为函数参数*数组作为函数参数(sizeof注意)*遍历数组元素*两种方式遍历(while循环和for循环)*遍历元素值和元素地址*字符数组的使用7.习题1>提示输入5个学生的成绩,算出平均分、最高分、最低分,然后输出2>设计一个函数:intarrayMax(inta[],intcount),找出数组元素的最大值3>设计一个函数:intarraySum(inta[],intn),求一维数组a前n个数的和4>设计一个函数:将一维整型数组中的元素逆序存放。比如本来是1,2,3,4,逆序存放就变成了:4,3,2,1数组的基本概念

1.什么是字符串*简单的字符串”abcd”*一个’i’是一个字符*很多个字符组合在一起就是字符串了2.字符串的初始化*chara[]=“123”;和chara[]={‘1’,’2’,’3’};的区别,可以比较大小*“123”其实是由’1’、’2’、’3’、’\0’组成*“123”的存储分布*字符串的输出”%s”,’\0’是不会输出的3.\0的作用*输出chara[]={‘o’,’k’};*在chara

温馨提示

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

评论

0/150

提交评论