您好,欢迎访问三七文档
高级语言程序设计(一)(CProgramming)北京航空航天大学计算机学院软件所晏海华晏海华2作业及参考书教师:晏海华联系方式:柏彦大厦708,Tel:82328212,Email:yhh@buaa.edu.cn参考书:C程序设计语言》,B.W.Kernighan,D.M.Ritchie,机械工业出版社,徐宝文等译《从问题到程序—程序设计与C语言引论》,裘宗燕编著,机械工业出版社《C语言教程》,孙玉芳,孟庆昌编著课程信息、作业及答疑:考核方式:作业占10%,期中考试占30%,期末占60%晏海华3忠告掌握C语言程序设计的唯一途径:上机实践(编程)!!!(Try!!!)高级语言程序设计(一)(CProgramming)第一讲:C语言基础晏海华5本章目标了解C语言的历史及现状;初步了解C程序的结构知道在某个操作系统环境下(Windows)一个C程序的编写过程;掌握变量、常量、简单数据类型、类型转换、表达式及部分C语言运算符;知道运算符优先级及结合律晏海华6程序设计与程序设计语言程序设计(Programming):为计算机解决问题所需的分析、设计、编写及调试程序过程。(Theprocessofplanning,writing,testing,andcorrectingthestepsrequiredforacomputertosolveaproblemorperformanoperation.)程序设计语言(ProgrammingLanguage):用来表达程序的计算机能够执行的人工语言。晏海华7为什么要学C程序设计C语言仍是目前广泛使用的编程语言,主要特点:表达能力强,支持结构化程序设计;语言简洁;代码效率高:C编写的程序仅比用汇编语言编写的程序相差20%;可移植性好;特别适合编写操作系统、编译程序、数据库系统、嵌入式软件及图形/图象处理等对性能要求高的软件;C语言是目前广泛流行的面向对象语言C++、C#及Java的基础晏海华8C语言历史C语言的产生与UNIX操作系统是密不可分的:UNIX由BellLab的K.Thompson和D.M.Ritchie最先在1969年开发的O.S.(它的前身是MIT和AE开发的Multies)。1970年,V1,V2版在PDP-7机上用汇编语言实现1971年V3PDP11/23;1972年V4PDP11/451972年,D.M.Ritchie开发出新语言C。(CBBCPLCPL单数据型语言)1973年,Ritchie和Thompson用C改写了UNIX核心(90%)即V5晏海华9C语言历史(续)C语言的发展经历三个阶段:第一阶段:78年以前,C称为UNIXC,即C被看成UNIX的一部分。第二阶段:78年D.Ritchie的《C程序设计语言》出版到88年ANSIC(标准C)标准出现。此C又称为K&RC。第三阶段:88年ANSIC标准(89年3月批准)。CPL1968C.StracheyBCPL1969M.RichardsB1970K.ThompsonC1972D.M.RitchieC++1988B.Stroustrup晏海华10一个简单的C程序:在屏幕上显示一行正文[例1-1]/*file:hello.c*/#includestdio.hmain(){printf(“hello,world\n”);}/*…*/为注释,不可嵌套#include为一条预处理指令,当程序中用到输入/输出函数时,应在文件开始处加上该指令。•main为一函数名。•由{}括起来的部分为函数体。•函数名为一标识符。•printf为一条输出语句,在C语言中分号(;)为语句的结束符。•printf为标准I/O库中标准输出函数。•“…”为一字符串常量。•\n为C语言转义字符,表示回车。晏海华11标识符在C语言中标识符定义为:”由字母(或_)开头的字母(_)数字串“。标识符在C语言中可作为变量名、常量名、函数名、参数名、类型名、枚举名和标号等。晏海华12C程序结构一个C程序由一系列外部说明和函数组成;一个函数则由局部变量说明及语句序列组成;一个C程序可由一个或多个函数组成,但其中必有一个(也只能有一个)命名为main(主函数),其它函数可由用户任取名字。程序运行时必需从main开始,但main函数在程序中的前后位置没有关系;组成C程序的各个函数可在一个源文件上,也可以分放在多个文件上(函数不能跨文件),每个源文件可单独编译。C源文件必须以.c作后缀(.h为C程序的头文件);晏海华13C程序的编辑、编译和运行编辑编译/连接运行有错?结果正确?有有编译错语法错运行错语义错使用编辑器如:vi(UNIX),edit(DOS)编译=.o或.obj连接.o(.obj)=.exe晏海华14在Windows下使用VC编写及运行C程序项目名晏海华15晏海华16晏海华17给出C源文件名晏海华18编辑C程序晏海华19编译Compile编译及连接Build编译及连接信息运行Execute晏海华20运行结果晏海华21在UNIX(Linux)下编写及运行一个C程序cc[-o执行文件名][–c]文件名o:指定执行文件名,缺省为a.outc:产生.o文件如:s1.c,s2.cs3.c组成一个C程序,则有:cc–cs1.ccc–cs2.ccc–oss1.os2.os3.c晏海华22另一个简单的C程序:整数求和int为数据类型说明符,其为一个关键字。a,b,c,sum为变量,其为标识符。[例1-2]#includestdio.hmain(){/*c1_2.c*/inta,b,c,sum;a=1;b=2;scanf(“%d”,&c);/*注意不能省略&*/sum=a+b+c;printf(“Sum=%d\n”,sum);}a=1;为赋值语句,其中1为数字常量,=为赋值运算符。scanf为标准输入函数,在此从键盘上读入一个整数存入变量c中。在此,printf将变量sum内容显示到屏幕上。+为算术运算符。晏海华23关键字intautogotoiffloatstaticreturnelsecharexternbreakwhileshortregistercontinueforlongdounsignedswitchdoublecasestructdefaultunionvoidenumtypedefsizeofconstsigneddefine,undef,include,ifdef,ifndef,endif,及line,虽不是关键字,但是最好把它们看作关键字,它们主要用于C预处理程序中。晏海华24标准输入及输出函数:scanf&printf在scanf和printf中,%号开始的为格式转换控制字符,用来控制输入/出数据的格式,常用的有:scanfprintf%d%d十进制整数%f%f十进制浮点数%c%c单个字符%s%s字符串%o八进制整数%x十六进制整数%%%本身在控制字符前还可以加数字,如:%4d:输出最小域宽为4个字符的整数。%6.2f:输出最小域宽为6个字符的浮点数,并且小数点占两位。晏海华25一个例子:计算圆的面积及周长[例1-3]#includestdio.hmain(){doubleradius,area,perimeter;scanf(“%f”,&radius);area=3.14159*radius*radius;perimeter=2*radius*3.14159;printf(“Radius=%6.2fArea=%6.2fPerimeter=%6.2f”,radius,area,perimeter);}浮点数据类型晏海华26变量与变量说明在C中,所有变量必须先说明(定义)后使用;说明方式:[存贮类]类型变量(列)表;例:intlower,upper,step;charc,line[100];externdoublex;constdoublePI=3.1415926;constcharmsg[]=“Warning”;晏海华27变量属性doublesalary=1500.23;变量的类型变量的名字变量的值变量的存储位置地址:0x00222000晏海华28常量整型常量(十进制、八进制、十六进制、long整型常量),如:1275,0127,0x19a,0xABD,123l,89L浮点常量,如:23.15,-8E-3,-125e+4字符常量,用一对单引号括起来字符称为字符常量,如:‘A’,‘b’,‘?’…一个字符常量的值是该字符在机器字符集(通常是ASCII字符集,但某些IBM大型机用EBCDIC码)中的编码值,它是一个整数值。如上,在ASCII字符集中‘A’的值为65,‘b’的值为98,‘?’的值为63。转义字符常量,如:‘\0’,‘\n’,‘\t’,‘\b’,‘\r’,‘\f’‘\\’,‘\’‘,‘\ddd’(位模式,ddd为八进制数,其值为ddd)字符常量可像其它数一样参与数值运算,主要用于同其它字符作比较,如:if(c=‘A’&&c=‘Z’)return(c+‘a’–‘A’);晏海华29常量(续)字符串常量,用一对双引号括起来的字符串称为字符串常量,如:“TheCProgrammingLanguage”注意:所有字符串均以‘\0’结束(代码值为0的字符),因此,“x”和‘x’不同,末尾的‘\0’由编译程序自动添加。晏海华30常量定义所有常量可以用#define来定义,即可以给一个常量命名。如:#definePI3.14156使用常量定义的好处:可提高程序的可读性程序的可移植性更好,可维护性更好#includestdio.h#definePI3.14159main(){doubleradius,area,perimeter;scanf(“%f”,&radius);area=PI*radius*radius;perimeter=2*radius*PI;printf(“Radius=%6.2Area=%6.2Perimeter=%6.2”,radius,area,perimeter);}晏海华31基本数据类型数据类型一般32位操作系统(如UNIX,W32)16位操作系统(如DOS)int3216short(int)1616long(int)3232unsigned(int)3216float3232double6464char88注意:在C语言中,没有Bool(布尔)类型,它用非0值表示真(True),用0表示假(False)。在ANSIC中,类型修饰符:const----其变量值在程序执行中不可以通过赋值等方法对它进行修改(是定义常量的另一种方法,用#define定义的常量无类型,而用const定义的常量有类型)。如:constfloatPI=3.14159;#includestdio.hconstfloatPI=3.14159;main(){doubleradius,area,perimeter;scanf(“%f”,&radius);area=PI*radius*radius;perimeter=2*radius*PI;printf(“Radius=%6.2Area=%6.2Perimeter=%6.2”,radius,area,perimeter);}晏海华32类型转换C语言类型转换通常是自动的---隐式(自动)类型转换1)字符与整数可以用整数的地方就可以用字符。而整数转换成字符时,超出8位就将高位丢掉。2)浮点数与整数3)无符号整数一般整数(int)和无符号整数(unsigned)混合使用,则简单整数转换成无符号整数。浮点数整数截去小数部分晏海华33类型转换(续)4)算术转换如果一个运算符,有不同类型的运算对象,那么“较低”类型会自动转换成“较高”类型。doublefloatlongunsignedintshort,char此外,赋值号右边表达式的
本文标题:北航的C语言课件
链接地址:https://www.777doc.com/doc-4798010 .html