第一章C语言概述NEW_第1页
第一章C语言概述NEW_第2页
第一章C语言概述NEW_第3页
第一章C语言概述NEW_第4页
第一章C语言概述NEW_第5页
已阅读5页,还剩84页未读 继续免费阅读

下载本文档

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

文档简介

1高级语言程序设计2教师:胡全办公室:科研楼B250E-mail:huquan@3教材、参考书教材

C语言程序设计第三版陈文宇黄迪明等电子科技大学出版社参考书

C程序设计第三版谭浩强编著清华大学出版社C程序设计题解与上机指导第三版

谭浩强清华大学出版社C程序设计语言第二版徐宝文译

B.W.Kernighan&D.M.Rithie著,机械工业出版社课时及课程成绩组成课时安排授课:24学时上机:40学时(第6周起)平时30%+期中10%+期末考试60%5课程学习要求

课前做好预习,鼓励自学。教师讲解难点和重点作为学习引导。保持课堂安静,认真听课、积极思考。认真、独立、按时完成并提交作业。重视上机实践,有效利用上机时间。培养基本的编程能力,形成良好的编程风格。6死的伟大的人,永远没有失败。逆境是到达真理的一条道路。拜伦的女儿ADA-应用数学家第一位软件工程师7ENIAC,1946第一台通用电子计算机GUI个人计算机(PC)XeroxPARC-mid1970’sAltoBravoWYSIWYGtexteditor.BravoXMicrosoftWordprototype.LaurelE-mail.NeptunefilemanagerPressfileprintingmanager.Sil.paintXeroxStar-1981商业失败,但技术领先384kharddisk$15kcostClosedarchitectureLackingkeyfunctionality1981IBMPC微型计算机-家庭计算机-个人计算机(PC)IBM个人计算机非常成功IBMPC:DonEstridge,13人团队AppleLisa-1982BasedonideasofStarMorepersonality,notonlyofficetoolsLisaWrite:wordLisaCalc:excelLisaGraph:graphLisaList:PlanningmanagerLisaProject:ProjectScheduleLisaDraw:imageLisaTerminal:communication商业失败AppleMacintosh-1984非原创,smartcopier价值点Aggressivepricing-$2500FriendlyGUIThirdpartycomponentsHigh-qualifiedLaserWriterprinterApplications:MacWrite、MacDrawNewapps:Pagemaker,Word,Excel数字化时代通信领域:程控交换机取代模拟交换机GSM和CDMA取代模拟移动通信系统图像领域:数字相机普及胶卷行业和洗印业……影像领域:数字摄像机取代胶片摄像机数字影像编辑数字观影设备取代胶片观影设备从根本上说,以计算机为中心的数字技术革命改变了社会各个领域的基本面貌,改变了我们的生活习惯以及思维习惯雷达预警机X-47B投掷JDAM弹药1920图像识别和处理222324第一章C语言概述

C语言发展历史

C语言特点

C程序格式和结构特点

C程序上机步骤1.1C语言发展历史251.1C语言发展历史26VonNeumanArchitecture271.1C语言发展历史程序设计语言的发展机器语言汇编语言高级语言面向过程面向对象CPU指令系统,由0、1序列构成的指令码组成如:10000000加

10010000减用助记符号描述的指令系统如ADDA,B面向机器的语言程序设计是数据被加工的过程客观世界可以分类,对象是类的实例对象是数据和方法的封装对象间通过发送和接受消息发生联系5254565860626466687072747678808284868890929496AdaALGOL60ALGOL68PascalModula-2CPLBCPLBCC++JavaLISPPROLOGCOBOLFORTRAN77FORTRANPL/1Simula67Smalltalk80BASICANSI-BASICQBASICVBFORTRAN90

C语言发展过程

C语言是国际上广泛流行的高级语言。C语言是在B语言的基础上发展起来的。B(BCPL)语言是1970年由美国贝尔实验室设计的,并用于编写了第一个UNIX操作系统,在PDP7上实现。优点:精练,接近硬件,缺点:过于简单,数据无类型。1973年贝尔实验室的D.M.Ritchie在B语言的基础上设计出了C语言,对B取长补短,并用它改写了原来用汇编编写的UNIX(即UNIX第5版),但仅在贝尔实验室使用。1975年UNIX第6版发布,C的优点引起关注。1977年出现了《可移植C语言编译程序》,推动了UNIX在各种机器上实现,C语言也得到推广,UNIX和C的发展相辅相成。1978年BrianW.Kernighan和DennisM.Ritchie合著了影响深远的名著《TheCProgrammingLanguage》,被称为标准C。之后,C语言先后移植到大、中、小、微型计算机上,已独立于UNIX和PDP,风靡世界,成为应用最广泛的几种计算机语言之一。UNIX是我们的杰作,呵呵!BrianW.KernighanKenThompson和DennisRitchie我参加了UNIX、C、语言开发,也写书,厉害吧,呵呵!1983年,美国国家标准化协会(ANSI)根据C语言各种版本对C的发展和扩充,制定了新的标准ANSIC,比标准C有了更大的发展。1988年K&R按照ANSIC修改了他们的《TheCProgrammingLanguage》。1989年,ANSI公布了ANSIX3.159-1989。1990年,国际标准化组织接受了ANSIC为ISOC的标准(ISO9899:1990)。1994年,ISO又修订了C语言标准。目前流行的C语言编译系统大多是以ANSIC为基础进行开发的。ISO/IEC9899:1999,是1999年出的C语言标准。再加上2001年和2004年经过两次技术修正ISO/IEC9899:1999与两次技术修正被统称为C99标准。2011年12月8日,ISO正式发布了新的C语言的新标准C11,之前被称为C1X,官方名称为ISO/IEC9899:2011。目前大多数的编译系统并没有完全的实现C11标准说明:

不同版本的C编译系统所实现的语言功能和语法规则略有差别,因此读者应了解所用的C语言编译系统的特点(可以参阅相关手册)。本课程以ANSIC为基础。基于C的语言C++:包含了C的所有特性,增加了类和其他特性支持面向对象编程。Java:基于C++,但抛弃了其复杂和奇异性,增加了接口技术,纯面向对象编程语言。C#:基于C++和Java发展起来的新语言。Perl:脚本语言,采用了C的许多特性,具有了C的强大能力和灵活性。解释1:C++是由于开发大型应用软件的需要而产生的,并不是所有的人都要去编写大型软件。解释2:面向对象的基础是面向过程。C++是面向对象的语言,C是面向过程的,学起来比C语言困难得多,所以不太适合程序设计的初学者。问题:既然有了面向对象的C++语言,为什么还要学习C语言?C语言特点语言简洁、紧凑,使用方便、灵活。32个关键字、9种控制语句,程序形式自由运算符丰富。34种运算符数据类型丰富,具有现代语言的各种数据结构。具有结构化的控制语句,是完全模块化和结构化的语言。语法限制不太严格,程序设计自由度大。允许直接访问物理地址,能进行位操作,能实现汇编语言的大部分功能,可直接对硬件进行操作。兼有高级和低级语言的特点。目标代码质量高,程序执行效率高。只比汇编程序生成的目标代码效率低10%-20%。程序可移植性好(与汇编语言比)。基本上不做修改就能用于各种型号的计算机和各种操作系统。具有标准库;功能强大C语言缺点容易隐藏错误可能难以理解大程序维护和修改较困难(与面向对象程序相比)解决办法:利用库采用编码规范紧贴标准避免模糊和复杂代码401.2C语言特点语言简洁、紧凑、灵活运算符和数据类型丰富程序设计结构化、模块化允许直接访问物理地址

生成目标代码质量高可移植性好中级语言41autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunsignedunionvoidvolatilewhile32个关键字

(由系统定义,不能重作其它定义)

42if()~else~for()~while()~do~while()continuebreakswitchgotoreturn9种控制语句43算术运算符:+-*/%++--关系运算符:<<===>>=!=逻辑运算符:!&&||位运算符:<<>>~|^&赋值运算符:=及其扩展条件运算符:?:逗号运算符:,指针运算符:*&求字节数:sizeof强制类型转换:(类型)分量运算符:.->下标运算符:[]其它:()-34种运算符44C数据类型基本类型构造类型指针类型空类型void定义类型typedef数值类型字符类型char枚举类型enum整型浮点型单精度型float双精度型double短整型short长整型long整型int数组结构体struct共用体union451.3C程序格式和结构特点/*example1.1ThefirstCProgram*/#include<stdio.h>main(){printf(“Hello,World!”);}注释编译预处理函数语句输出:Hello,World!例:第一个C程序Hello,World!46/*example1.2calculatethesumofaandb*/#include<stdio.h>/*Thisisthemainprogram*/main(){

int

a,b,sum;

a=10;b=24;sum=add(a,b);printf(”sum=%d\n",sum);}/*Thisfunctioncalculatesthesumofxandy*/int

add(int

x,inty){

int

z;

z=x+y;

return(z);}运行结果:sum=34函数语句预处理命令注释47C格式特点习惯用小写字母,大小写敏感不使用行号,无程序行概念可使用空行和空格常用锯齿形书写格式main(){

……………….………………

…………..…………..

……………….

………………………….

……………….………………..}main(){

inti,j,sum;sum=0;for(i=1;i<10;i++){for(j=1;j<10;j++){sum+=i*j;}}printf(“%d\n”,sum);}优秀程序员的素质之一:使用TAB缩进{}对齐有足够的注释有合适的空行48C结构特点函数与主函数程序由一个或多个函数组成必须有且只能有一个主函数main()程序执行从main开始,在main中结束,其它函数通过嵌套调用得以执行。程序语句C程序由语句组成用“;”作为语句终止符注释/**/为注释,不能嵌套不产生编译代码编译预处理命令例:/*Thisisthemain/*ofexample1.1*/*/非法491.4C程序的上机步骤编辑链接编译执行程序代码的录入,生成源程序*.c语法分析查错,翻译生成目标程序*.obj与其它目标程序或库链接装配,生成可执行程序*.exe50TurboC集成开发环境配置要求UNIX,PC-DOS,MS-DOS,UCDOS操作系统硬盘容量约2M,448KRAM运行空间安装TurboC创建子目录Install若不是可安装盘,将文件拷贝到对应的目录下TC*.*INCLUDELIB*.*SYS*.*51进入TurboCD:\TC>TC.exe主控菜单文件操作FILE:New

Load

Save

Writeto编辑操作EDIT:插入/修改

查找/替换编译链接COMPILE

LINK

MAKE执行RUN退出TurboCAlt+xAlt+F,Q帮助HelpF1Ctrl+F152基本操作:F10调用主菜单F2存盘F3打开Alt+F9CompileCtrl+F9RunAlt+F5UserScreenTC常用热键文本编辑:移动光标PgUp,PgDn上下翻页Ctrl+PgUp,Ctrl+PgDn文件首尾HomeEndDeleteInsertBackspace块操作:Ctrl+KB块开始标记Ctrl+KK块结束标记Ctrl+KC块拷贝Ctrl+KV块移动Ctrl+KY块删除

Ctrl+KH块隐藏程序调试:F8StepoverF7TraceintoF4GotoCursorCtrl+F7AddWatchCtrl+F8ToggleBreakpointCtrl+F2ProgramReset窗口操作:F5窗口缩放F6窗口切换§2-3运行C程序的步骤和方法一、运行C程序的步骤上机输入与编辑源程序预处理器Preprocessor:执行以#开头的指令,类似于编辑器,可以添加和修改源程序。对源程序进行编译与库函数链接运行目标程序预处理器CPPHello.c源程序(文本)Hello.i被修改的源程序(文本)编译器CCLHello.s汇编程序(文本)Hello.o可执行位目标程序(文本)#include<stdio.h>void

main(){

printf("Hello,ThisisaCprogram.\n");}汇编器ASHello.o可重定位目标程序(文本)链接器LDprintf.o上机运行C程序的方法目前使用的大多数C编译系统都是集成环境(IDE)的。可以用不同的编译系统对C程序进行操作。可以用VisualC++对C程序进行编译。本课程采用的VisualStudio2010的集成开发环境。轻量级的IED推荐:C-Free(/cfree_ch/index.htm)GCC(GNUCompilerCollection)是最流行的编译器。GCC是Linux环境下的编译器。Cygwin是一个在windows平台上运行的Linux模拟环境。MinGW是指只用自由软件来生成纯粹的Win32可执行文件的编译环境,它是MinimalistGNUonWindows的略称。例:VisualStudio2010

1、文件-新建-项目。选择“Win32控制台应用程序”,输入“名称”,点“确定”。2、点“下一步”,在下面窗口选择“空项目”,点“完成”3、点鼠标右键,添加-新建项4、在下面窗口选择“C++文件(.cpp)”,名称输入“hello.c”,点“添加”。5、在hello.c中输入源程序,点“保存”,#include<stdio.h>voidmain(){printf("Hello,ThisisaCprogram.\n");system("pause");//增加该语句使字符界面可以暂时停留}6、点菜单:调试-启动调试(或F5),运行程序。61补充:C程序设计预备知识数的表示及进制转换字节和位原码、反码和补码62数码、基与权数码:表示数的符号基:数码的个数权:每一位所具有的值数制二进制八进制十进制十六进制计算机中数的表示及进制转换63数制进位计数制有三个要素:

数位——数码在一个数的位置

基数——某计数制中,数码的个数

位权——某计数制中,数位中数码所代表数值的大小等于这数码乘上一个固定的值,该值称为位权。

一个十进制数可以按位权展开成一个多项式,例如:

(1234)10=1×103+2×102+3×101+4×100

计算机内部使用二进制数。因为八进制和十六进制能方便地与二进制实现转换,所以常用八进制和十六进制进行输入或输出。64由数字0,1组成,基数为2,逢二进一。一个二进制数可按位权展开成一个多项式,例如:

(11.101)2=1×21+1×20+1×2-1+0×2-2+1×2-3二进制65八进制由数字07组成,基数为8,逢八进一。一个八进制数可按位权展开成一个多项式,例如:

(274)8

=2×82+7×81+4×8066十六进制由数字09和英文字母A至F组成,用A表示10,B表示11……F表示15,基数为16,逢十六进一。一个十六进制数可按位权展开成一个多项式,例如:

(2EA6)16

=2×163+14×162+10×161+6×16067数制基权表示数码特点10º,10¹,10²,…十进制数0~910逢十进一二进制数0~122º,2¹,2²,…逢二进一八进制数0~788º,8¹,8²,…逢八进一十六进制数0~9,A~F,a~f1616º,16¹,16²,…逢十六进一十进制:4956=410³+910²+510¹+610º二进制:1011=12³+02²+12¹+12º十六进制:81AE=816³+116²+1016¹+1416º八进制:4275=48³+28²+78¹+58º68各种进制之间的转换二进制、八进制、十六进制转换成十进制方法:按权相加69各种进制之间的转换(整数)十进制转换成二进制、八进制、十六进制方法:连续除以基,从低到高记录余数,直至商为0例把十进制数59转换成二进制数5922921427232120(59)10=(111011)2110111111011余余余余余余例把十进制数159转换成八进制数1598198280(159)10=(237)8237余7余3余2例把十进制数459转换成十六进制数4591628161160(459)10=(1CB)161CB余11余12余170二、八、十六进制与十进制数的对照表十进制二进制八进制十六进制000011112102231133410044510155611066711177810001089100111910101012A11101113B12110014C13110115D14111016E15111117F1610000201071二进制与八进制之间的转换二进制转换成八进制:从右向左,每3位一组(不足3位左补0),转换成八进制八进制转换成二进制:用3位二进制数代替每一位八进制数例(1101001)2=(001,101,001)2=(151)8例(246)8=(010,100,110)2=(10100110)2000~0001~1010~2011~3100~4101~5110~6111~772例:将十进制小数0.6875转换成二进制数结果为:(0.6875)10=(0.1011)2××××0.687521.3750整数部分为10.375020.7500整数部分为00.750021.5000整数部分为10.500021.0000整数部分为173例:将十进制数117.6875转换成二进制数。

(117.6875)10=(117)10+(0.6875)10=(1110101)2+(0.1011)2=(1110101.1011)274内存以字节为单元组成每个字节有一个地址一个字节一般由8个二进制位组成每个二进位的值是0或101234567012345678910……...字节和位75计算机的数据单位在计算机内部,数据是以二进制形式存储和运算的。数据采用的单位有位、字节和字。●位(bit)是指二进制数的一个位●8个二进制位作为一个字节,即

1B(Byte)=8bit●字是由一个或若干个字节组成的存储单元●组成一个字的二进制位数叫做该字的字长●存储器的容量:B,KB(1K=1024B),MB(1M=1024K),GB(1G=1024M),TB(1T=1024G)76ASCII码ASCII码是通用的字符编码例如:字母A的ASCII码为1000001(十进制为65)

每个ASCII码用一个字节表示,最高二进制位为077汉字的编码

1.

区位码和国标码例如,汉字“啊”的区位码为1601,转换成16进制数为1001H,则国标码3021H

2.

汉字内码(机内码)例如,汉字“啊”的区位码为1601,转换成16进制数为1001H,则机内码B0A1H。

3.

汉字外码(汉字输入码)78

带符号数的表示真值:用+、-分别表示正、负符号的带符号的数据,如:(-1011)2、(+56)10、(-67)10

。真值是数的原始形式机器数:符号被数码化的带符号数据的表示,如:(1011)2表示-3;(0011)2表示+3最高有效位MSB表示符号位(Signbit)

正数用0,负数用1表示带符号数的三种常用编码方式:

原码(Signed-Magnitude)反码(One’sComplement)补码(Two’sComplement)79符号数值(原码)表示法原码:若数长度N则最高位为符号位;正数用0,负数用1表示。其余N-1位为数值位,为二进制数,位数不足时高位补0零有两种表示(+0、–0)n位原码表示范围:

–(2n-1–1)∽+(2n-1–1)80反码表示法反码:正数时,与原码相同;负数时,符号位不变,数值位按位求反原码数值

反码

按位取反零有两种表示(+0、–0)n位反码表示范围:–(2n-1–1)∽+(2n-1–1)81补码表示法零只有一种表示n位补码表示范围:

–2n-1-+(2n-1–1)原码数值

补码数值

按位取反再加1补码:正数时,与原码相同;负数时,在反码的基础上加1,或者从原码直接求:符号位不变,最低数值位开始,出现第一个1之前,不变!其余数值位按位求反82先求(65)10=(?)22232216余08422余0余0余0余0低位652余121余1将得到的二进制码用0补足数 值位的位数—这里为15,得到:(65)10=(000000001000001)2对正数,符号位(最高位)补0,且其原码=反码=补码,则:(+65)10的原码=反码=补码=0000000001000001对负数,符号位(最高位)补1,则:(-65)10原码=1000000001000001(-65)10的反码=1111111110111110(-65)10的补码=1111111110111111例:设机器码长度为16,求十进制数+65、-65的原码、反码和补码831.(11110110)原码=(?)真值

因为是原码,去掉符号位后直接将数值部分转换为十进制数据: (1110110)2=(64+32+16+4+2)10=(118)10

符号位为1,说明为负数,所以:(11110110)原码=(-118)真值2.(11110110)反码=(?)真值

先将反码转换成原码——

符号位不变,数值部分按位取,得: (11110110)反码=(10001001)原码

按1中步骤将该原码转换为十进制数:(10001001)原码=(-9)真值3.(11110110)补码=(?)真值

对负数而言,数值部分相同的补码比反码小1,得: (11110110)补码=(-10)真值例:设机器码长度为8848位二进制数的不同含义8位二进制数据十六进制数无符号十进制数原码反码补码0000000000H0+0+0+00000000101H1+1+1+10000001002H2+2+2+2………………………………

温馨提示

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

评论

0/150

提交评论