C语言程序设计主讲:高照艳2020/2/182第一章C语言概述主要内容:–C语言的发展–C语言的特点–简单C程序介绍–算法–结构化程序设计–C程序的执行过程2020/2/183C语言出现的历史背景(1)C语言的发展源于人们希望用高级语言编写操作系统。ALGOL60(高级语言)60-CPL(剑桥大学推出接近硬件规模大难实现)63-BCPL(剑桥大学简化CPL)67-B语言(贝尔实验室用B写了UNIX操作系统)70-C语言(用C改写了UNIX90%,即第5版)72-73-标准C(K&R《TheCProgramminglanguage》)78-ANSIC83(ANSI美国国家标准化协会)-87ANSIC-ISOC90(ISO-国际标准化组织)版本:MicrosoftC、TurboC、BorlandC、QuickC(2)C语言既具有高级语言特性,又具有低级语言特性-中级语言。1.1C语言的发展2020/2/1841.2C语言的特点语言简洁,表达能力强,易于理解–只有32个关键字,9种控制语句32个关键字:(由系统定义,不能重作其它定义)autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunsignedunionvoidvolatilewhile2020/2/1859种控制语句:if()~else~for()~while()~do~while()continuebreakswitchgotoreturn2020/2/186运算符丰富34种运算符,运算能力强、效率高。算术运算符:+-*/%++--关系运算符:====!=逻辑运算符:!&&||位运算符:~|^&赋值运算符:=及其扩展条件运算符:?:逗号运算符:,指针运算符:*&求字节数:sizeof强制类型转换:(类型)分量运算符:.-下标运算符:[]其它:()-2020/2/187•数据类型丰富C数据类型基本类型构造类型指针类型空类型void定义类型typedef数值类型字符类型char枚举类型enum整型浮点型单精度型float双精度型double短整型short长整型long整型int数组结构体struct共用体union2020/2/188具有结构化的控制语句程序书写格式自由能进行位操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作语言生成的代码质量高,程序执行效率高可移植性好2020/2/189例1.1编写程序,在屏幕上打印字符串“ThisisaCprogram.\n”。main(){printf(ThisisaCprogram.\n);}1.3简单C程序介绍2020/2/1810例1.2/*求两数之和*/main(){inta,b,sum;/*定义变量*/a=123;b=456;sum=a+b;printf(“Sumis%d\n”,sum);}Sumis5792020/2/1811例1.3求两数之最大值main(){inta,b,c;scanf(”%d,%d”,&a,&b);c=max(a,b);/*调用自定义函数max*/printf(“max=%d\n”,c);}intmax(intx,inty)/*自定义函数*/{intz;if(xy)z=x;elsez=y;return(z);}2020/2/1812C程序结构C程序–由函数构成–必须有,且只能有一个main(主函数)–总是从main函数开始执行函数–由函数首部和函数体组成–函数首部指定函数名、函数参数、类型–函数体从{开始,到}结束–函数内有语句2020/2/1813C程序结构(续)语句–包括说明性语句、可执行语句–以;表示语句结束注释–可以出现在程序的任何位置–用/*和*/括起来,必须成对出现书写格式–C语言没有行的概念,书写格式自由。–习惯小写字母,缩进格式。2020/2/18141.4程序的灵魂-算法程序包括两方面内容:1.对数据的描述。数据元素及各元素之间的关系,即数据结构。2.对操作的描述。即操作步骤,也就是算法。程序=数据结构+算法程序=数据结构+算法+程序设计方法+语言工具环境说明:高级语言的数据结构是以数据类型来体现的。2020/2/18151.4.1算法什么是算法–为解决某一应用问题而采用的解题步骤算法的描述方式–用自然语言描述算法–用流程图描述算法–用N-S结构图描述算法–用计算机语言表示算法(即实现算法)例如:输出两个数中的最大数2020/2/1816用自然语言描述算法第一步:输入x和y的值第二步:比较x和y的值,如果x大于y,则输出x的值,否则输出y的值。例如当描述“输出10个数中最大数”的算法时,会冗长、难于理解2020/2/1817图1.5用流程图描述算法用流程图描述算法NYz=yz=xxy?开始输入x和y结束输出z起止框输入/输出框判断框处理框流程线2020/2/1818用N-S结构图描述算法输入x、y的值xyTFz=xz=y输出z的值图1.7用N-S结构图描述的算法2020/2/1819第一章1.1引言•算法的特性(1)有穷性。(2)确定性。(3)有效性。(4)输入。(5)输出。2020/2/18201.4.2结构化程序设计程序的三种基本结构–顺序结构程序:按照书写顺序依次执行语句–选择结构程序:按照条件判断选择执行语句–循环结构程序:通过条件控制循环执行语句三种基本结构的共同点:•都是只有一个入口和一个出口;•结构内的每一个框都有机会被执行;•结构内没有死循环。2020/2/1821结构化程序设计的三种基本结构:1)顺序结构传统流程图N-S流程图ABAB开始结束其中:A、B为操作框,可由一条或多条语句实现。2020/2/18222)选择结构(分支结构)传统流程图N-S流程图入口出口ABPPABTFTF其中:P为分支判断条件;A、B必有一个且只有一个被执行;A、B之一可是空操作,用表示。2020/2/18233)循环结构当型循环——先判断后循环,有可能一次也不循环。入口FTPA当P为真A出口其中:P为循环判断条件;A为要重复执行的操作,称为循环体;2020/2/1824直到型循环——先循环后判断,至少循环一次。入口FTPAA直到P为真出口其中:P为循环判断条件;A为要重复执行的操作,称为循环体;2020/2/1825算法举例例:计算5!(1×2×3×4×5)1→t1→i当i≤5t×i→ti+1→i输出t1→t1→it×i→ti+1→i直到i5输出t当型循环直到型循环2020/2/1826结构化程序设计的基本原则:结构化程序设计的基本原则:–采用自顶向下、逐步细化的方法进行设计;–采用模块化原则和方法进行设计。即将大型任务从上向下划分为多个功能模块,每个模块又可以划分为若干子模块,然后分别进行模块程序的编写;–每个模块都是用结构化程序实现,即都只能由三种基本结构组成,并通过计算机语言的结构化语句实现。2020/2/18271.5C语言的上机操作步骤一.上机过程:编译正确正确正确有错误有错误编辑运行2020/2/1828C程序的执行过程1.源程序文件的建立和编辑–编写源程序,形成.C文件–需用编辑工具:tc.exe、记事本2.编译–编译源程序,形成目标程序.Obj文件–需用编译工具:tcc.exe3.连接–连接OBJ文件和调用的库函数,形成运行程序.exe文件–需用连接工具:tlink.exe4.运行.exe文件2020/2/1829装载c程序编辑c程序运行c程序(ctrl+F9)正确?看结果(alt+F5)运行下一程序?是是否退出否2.上机过程流程图:2020/2/1830F3(打开源程序)F2(保存当前源程序)F9(编译当前源程序)CTRL+F9(运行当前源程序)ALT+F5(查看运行结果)3.编写、运行C程序时常用功能键2020/2/1831三、需要记住的TC中一些常用功能键F1:帮助。F2:将当前文件存盘。F3:装载原有文件或给新文件命名。F4:程序运行到光标所在行。F5:放大或缩小活动窗口切换。F6:开或关活动窗口切换。F7:单步运行程序,跟踪进入函数内部运行。F8:单步运行程序,不跟踪进入函数内部。第一章1.3C语言集成开发环境2020/2/1832实验报告实验一[实验目的][实验内容和步骤]1.设计算法,写出程序2.在TurboC下编辑,得到源程序(.c)3.编译,得到目标文件(.obj)4.连接,得到可执行文件(.exe)5.分析结果[实验体会]C程序设计数据类型、运算符与表达式2020/2/18342.1数据类型2.2常量与变量2.3整型数据2.4实型数据2.5字符型数据2.6变量赋初值2.7混合运算2.8运算符与表达式数据类型、运算符与表达式CHAPTER22020/2/1835数据类型、运算符与表达式C的数据类型C语言提供的数据结构是以数据类型形式出现的数据在内存中存放的情况有数据类型决定数据的操作要依靠运算符实现,而数据和运算符共同组成了表达式。2020/2/1836数据类型、运算符与表达式C的数据类型数组类型数据类型构造类型空类型指针类型双精度单精度实型(浮点型)字符型枚举类型基本类型整型结构体类型共用体类型2020/2/18373.2常量与变量3.2.1常量和符号常量1.常量:在运行过程中,其值不能被改变的量称为常量。分类:整型﹑实型﹑字符﹑字符串2.符号常量,用一个标识符代表的常量。习惯上,符号常量名用大写,变量用小写,以示区别。-1,0,123为整型常量4.6,-1.23为实型常量‘a’,‘d’为字符常量#definePRICE255A=PRICE*A+6C=PRICE+C/120PRICE是标识符,符号常量2020/2/18383.2.2变量1.变量:在程序运行过程中,其值可以改变的量称为变量。2.标识符:用来标识变量名、符号常量名、函数名、类型名、数组名、文件名的有效字符序列称为标识符。由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。合法的变量名如:average,abd,a,s2,student_name,_init不合法的变量名:M.D.John,1a,#33,ab3.C语言要求对变量“先定义,后使用”。2020/2/18393.3整型数据3.3.1整型常量由一系列数字组成。也可带有减号,但不使用加号。十进制整数:123,-456,0八进制整数:以0开头的数据,如:-011,0123十六进制整数:以0x开头的数据,如:0x123整型常量的分类根据其值的范围而决定其类型,并可以赋值给类型相匹配的整型变量。2020/2/18403.3.2整型变量1.整数数据在内存中的存放形式数据在内存中是以二进制形式存放的。例如:3=(0000000000000011)2要区别:+3和-3方法是:将符号也数码化即:正的符号+用0表示负的符号-用1表示数值是以补码表示的。正数的补码和其原码的形式相同。负数的补码:将该数的绝对值的二进制形式,按位取反再加1。-3=(11111111111111101)22020/2/18412.整型变量的分类整型…int在内存中以二进制形式存放,每一个整型变量在内存中占2个字节。短整型…以shortint表示或以short表示,一般与int占有的内存相同。长整形…以longint表示或以long表示,一般占有在内存中字节为int两倍。无符号型…只能存放正整数,它的表示是在上述三种类型之前加上unsigned类型名称类型符bit取值范围整型(短整型)intshort[int]16--215~215-1(-32768~32767)无符号整型unsigned[int]160~216-1(0~65535)长整型long[int]32-231~231-1无符号长整型unsignedlong