1、第第1讲讲 C语言基础知识语言基础知识一、计算机系统与计算机知识体系一、计算机系统与计算机知识体系二、程序设计与程序设计语言二、程序设计与程序设计语言三、三、C程序的基本结构和运行过程程序的基本结构和运行过程 四、数据类型、常量、变量四、数据类型、常量、变量五、赋值运算符和赋值表达式五、赋值运算符和赋值表达式六、基本的输入输出六、基本的输入输出七、算术运算符和算术表达式七、算术运算符和算术表达式八、数学标准函数八、数学标准函数九、数据类型转换九、数据类型转换一、计算机系统与计算机知识体系一、计算机系统与计算机知识体系输入设备输出设备存储器运算器控制器操作系统支撑软件应用软件(各种语言开发的应用
2、软件系统)软件软件硬件硬件计算机系统计算机系统典型的计算机硬件组成典型的计算机硬件组成内存内存中央处理器中央处理器外围设备外围设备外存外存输入输入/输出输出总线总线软盘、硬盘、光盘、软盘、硬盘、光盘、U盘、盘、键盘、显示器、鼠标、键盘、显示器、鼠标、计算机知识体系计算机知识体系 计算机硬件组成原理计算机硬件组成原理 操作系统操作系统 编译程序编译程序 数据库管理系统数据库管理系统 高级语言(高级语言(C,C+,Java等)等)数据结构数据结构 软件工程软件工程 人(用、编程序)人(用、编程序)软件软件什么是什么是ASCII码?码?计算机中用得最广泛的字符集及其编码,是由计算机中用得最广泛的字符
3、集及其编码,是由美国国家标准局美国国家标准局(ANSI)制定的制定的ASCII码码(American Standard Code for Information Interchange,美国标准信息,美国标准信息交换码)交换码)分析分析1位二进制数可以表示位二进制数可以表示2种状态种状态7位二进制数可以表示位二进制数可以表示128种状态种状态(0127)计算机中用计算机中用8位(一个字节)存储位(一个字节)存储ASCII码,其最码,其最高位高位(b7)用作奇偶校验位。用作奇偶校验位。ASCII对应键盘值对应键盘值数的进制数的进制10进制进制2进制进制8进制进制16进制进制二、程序设计与程序设计
4、语言二、程序设计与程序设计语言什么是程序?什么是程序?可以连续执行的一条条指令的集合。可以连续执行的一条条指令的集合。对计算任务的处理对象和处理过程的描述。对计算任务的处理对象和处理过程的描述。用什么写出程序?用什么写出程序?很多种计算机语言,比较熟悉的高级语言,如:很多种计算机语言,比较熟悉的高级语言,如:C、Basic、C+、Java等,还有汇编语言等。等,还有汇编语言等。高级语言接近自然语言的习惯,容易编写,容易理高级语言接近自然语言的习惯,容易编写,容易理解和交流,解和交流,是给人看的语言是给人看的语言。计算机只能接受和处理由计算机只能接受和处理由0和和1的代码构成的二进制指的代码构成
5、的二进制指令或数据,称为令或数据,称为“机器语言机器语言”。高级语言程序一定要转换(如编译)成机器语言程高级语言程序一定要转换(如编译)成机器语言程序才能在计算机中被执行。序才能在计算机中被执行。编译程序与开发环境编译程序与开发环境编译程序编译程序你知道的开发环境?你知道的开发环境?(环境包括编写、编译、连接、运行程序)(环境包括编写、编译、连接、运行程序)Microsoft CTurbo CBorland CQuick C通常通常C+编译系统兼容编译系统兼容C,我们用我们用Visual C+6.0C语言源程序.cC语言编译程序二进制机器指令.obj连接程序可执行程序.exeC语言语言C语言的
6、语言的产生产生语言是贝尔实验室于语言是贝尔实验室于70年代初研制出来的,用于年代初研制出来的,用于编写编写UNIX。后来又被多次改进,并出现了多种版本。后来又被多次改进,并出现了多种版本。80年代初,美国国家标准化协会(年代初,美国国家标准化协会(ANSI),根据),根据语言问世以来各种版本对语言的发展和扩充,制定语言问世以来各种版本对语言的发展和扩充,制定了了ANSI C标准标准(1989年再次做了修订)。年再次做了修订)。C语言的特点语言的特点中间语言的特点中间语言的特点:C语言同时具有汇编语言和高级语语言同时具有汇编语言和高级语言的优势。言的优势。面向过程,结构化程序设计语言面向过程,结
7、构化程序设计语言应用非常广泛,体现程序员的水平应用非常广泛,体现程序员的水平语言简洁、紧凑,使用方便、灵活。运算符极其丰富,语言简洁、紧凑,使用方便、灵活。运算符极其丰富,表达能力强。表达能力强。可移植性好可移植性好区别区别C语言与语言与C语言开发环境语言开发环境程序设计程序设计程序设计的发展程序设计的发展面向计算机的程序设计面向计算机的程序设计二进制形式、汇编二进制形式、汇编面向过程的程序设计面向过程的程序设计按功能划分,自顶向下,逐步求精按功能划分,自顶向下,逐步求精面向对象的程序设计面向对象的程序设计按对象划分,研究对象之间的关系按对象划分,研究对象之间的关系三、三、C程序的基本结构和运
8、行过程程序的基本结构和运行过程一个简单的一个简单的C程序程序是由是由函数函数组成的。组成的。仅且仅有一个主函数 main(),程序总是从主函数开始运行。还可以有多个其它函数 自己编的 别人编的 系统提供的库函数。#include int main()printf(Hello,World.n);return 0;语句语句函数体由语句组成。函数体由语句组成。语句:语句:常量、变量、运算符常量、变量、运算符一行可以写多个语句,一个语句也可以写在多一行可以写多个语句,一个语句也可以写在多行上。行上。写各种表达式:算术表达式、关系表写各种表达式:算术表达式、关系表达式、赋值表达式、达式、赋值表达式、语句
9、语句加注释的方法:加注释的方法:/*/或者或者 /只有只有;的语句叫的语句叫“空语句空语句”,什么都不执行。,什么都不执行。main();/什么时候用?什么时候用?复合语句:用复合语句:用 括起来的多个语句,什么时候用?括起来的多个语句,什么时候用?main()/*复合语句。注意:右括号后不需要分号。复合语句。注意:右括号后不需要分号。*/集成开发环境集成开发环境很多产品可以用很多产品可以用上课暂用上课暂用Microsoft Visual c+6.0你当然可以用别的什么,比如你当然可以用别的什么,比如Turbo C 2.0,Turbo C+3.0 等等等等打开打开Microsoft Visua
10、l c+6.0FilenewprojectsWin32 Console Application选好工程名和位置,依向导指示做选好工程名和位置,依向导指示做试着进行试着进行调试调试(书附录(书附录C)单步运行,设断点,运行中查看变量值等。单步运行,设断点,运行中查看变量值等。The Build Process调试例子调试例子int main()int x,y,sum;/*定义变量定义变量*/scanf(%d%d,&x,&y);/*键盘输入变量值键盘输入变量值*/sum=0;/变量赋初值变量赋初值 sum=x+y;/计算计算 printf(sum=%dn,sum);/*输出计算结果输出计算结果*/
11、return 0;关键字关键字数据类型关键字:数据类型关键字:char,double,enum,float,int,long,short,signed,struct,union,unsigned,void控制语句关键字:控制语句关键字:break,case,continue,default,do,else,for,goto,if,return,switch,while存储类型关键字:存储类型关键字:auto,extern,register,static其它关键字:其它关键字:const,sizeof,typedef四、数据类型、常量、变量四、数据类型、常量、变量存什么样的数据存什么样的数据(基
12、本数据类型)(基本数据类型)整型整型实型实型字符型字符型数据的存储空间与取值范围数据的存储空间与取值范围8位(位(1个字节)个字节)16位(位(2个字节)个字节)32位(位(4个字节)个字节)64位(位(8个字节)个字节)数据是否带符号数据是否带符号有符号型有符号型无符号型无符号型数据值是否会改变数据值是否会改变常量常量变量变量(必须先定义再使用必须先定义再使用)不同的数据集合上定义了不同的运算不同的数据集合上定义了不同的运算长度和精度的限制长度和精度的限制基本数据类型基本数据类型关键字关键字shortunsigned intintlongfloatdoublechar表示数据表示数据短整短整
13、型型无符号整型无符号整型整型整型长整型长整型实型实型单精单精度度实型实型双精度双精度字符字符占字节数占字节数244481取值范围取值范围常量常量整型常量整型常量120 -987 0634(八进制)(八进制)123L 65 0 x16(十六进制)(十六进制)实型常量实型常量-10.0 123.4f 9.0E-28 123.4(默认(默认double型)型)字符常量字符常量a A 65 (转义字符)(转义字符)字符串常量字符串常量“A”“1234”在程序运行过程中其值始终保持不变的量。在程序运行过程中其值始终保持不变的量。字符串常量字符串常量用双引号括起来的字符串,如用双引号括起来的字符串,如“W
14、hats your name?”,“”字符串在内存中占的空间为:字符串在内存中占的空间为:字符串长字符串长度度+1,因为字符串后面默认有,因为字符串后面默认有0问题问题为什么为什么10和和10.0不同?不同?123和和123L有什么不同?有什么不同?0634与与634有什么不同?有什么不同?0 x10是多少?是多少?“A”和和A的区别?的区别?“1234”和和1234的区别?的区别?符号常量符号常量程序代码中多处用到某个数据,且程序逻辑中为常量程序代码中多处用到某个数据,且程序逻辑中为常量针对问题变化,可能维护和修改。针对问题变化,可能维护和修改。可以把这种数据定义为符号常量,即用一个可以把这
15、种数据定义为符号常量,即用一个标识符标识符代代表一个常量。表一个常量。#define PRICE 100/*define是一条预处理命令作用是一条预处理命令作用是把标识符定义为后面的常量是把标识符定义为后面的常量*/int main(int argc,char*argv)int a,b;a=100;b=a*PRICE;printf(b=%dn,b);return 0;可懂度更好。可懂度更好。维护和修改程序方便。维护和修改程序方便。符号常量符号常量符号常量不可以修改符号常量不可以修改#define PRICE 100/*define是一条预处理命令作用是一条预处理命令作用是把标识符定义为后面的常
16、量是把标识符定义为后面的常量*/int main()int a,b;a=100;PRICE=10;/错误语句错误语句b=a*PRICE;printf(b=%dn,b);return 0;C预定义的转义字符序列(预定义的转义字符序列(P13)变量变量必须先定义,再使用必须先定义,再使用注意大小写敏感注意大小写敏感定义的格式定义的格式:,int num;char ch;float pay1,pay2;定义变量就是在内存中申请空间存放变量值定义变量就是在内存中申请空间存放变量值定义之后立即初始化是好的编程风格。不然你定义之后立即初始化是好的编程风格。不然你引用它时,可能是随机值,没有错误提示。引用它
17、时,可能是随机值,没有错误提示。例:例:int a;printf(%dn,a);/a值随机值随机int num;char ch;num5一个整型数大小一个整型数大小cha一个字符大小一个字符大小变量命名:变量命名:字母,数字,下划线字母,数字,下划线第第1个字符必须是字母或下划线个字符必须是字母或下划线区分大小写区分大小写取个好的名字取个好的名字变量赋初值变量赋初值定义时赋初值定义时赋初值int data1=0;int data2(0);赋值操作赋初值赋值操作赋初值 f=0.0;f=data1+1;键盘输入赋初值键盘输入赋初值取个对名字赋值号赋值号“=”是一个运算符,称为赋值运算符。是一个运算
18、符,称为赋值运算符。赋值表达式:赋值表达式:变量名变量名=表达式表达式;/右边的值赋给左右边的值赋给左边边说明:说明:(1)赋值号左边必须是一个代表某一存储单元的变量名。)赋值号左边必须是一个代表某一存储单元的变量名。(2)赋值号右边必须是)赋值号右边必须是C语言中合法的表达式。语言中合法的表达式。功能:功能:先求出右边表达式的值先求出右边表达式的值然后把此值赋给赋值号左边的变量。然后把此值赋给赋值号左边的变量。优先级与结合性优先级与结合性优先级:只高于逗号运算符,比任何其他运算符的优优先级:只高于逗号运算符,比任何其他运算符的优先级都低。先级都低。结合性:自右向左结合性:自右向左五、赋值运算
19、符和赋值表达式五、赋值运算符和赋值表达式例例x=2+7x=2+73;3;y=x;/y=x;/将将x x变量当前值赋给变量当前值赋给y y变量。变量。y=x+1 /yy=x+1 /y为为x+1x+1的值,的值,x x值不变。值不变。x=x+1;/x=x+1;/将将x x变量当前值加变量当前值加1 1再赋给再赋给x x变量。变量。x=x;/x=x;/*将将x x变量当前值赋给变量当前值赋给x x变量。合法的表达式,但无变量。合法的表达式,但无意义。意义。*/a=b=7+1;/a=b=7+1;/正确的表达式。正确的表达式。7+17+1的值的值8 8先赋给先赋给b b,再赋给,再赋给a a。a+ba+
20、b=c;/=c;/*错误的表达式。左边只能是变量名。错误的表达式。左边只能是变量名。*/x=1,y=2;x=1,y=2;复合赋值运算符复合赋值运算符+=+=例:例:n+=1;n+=1;等价于等价于:n=n+1;:n=n+1;-=-=例:例:n-=1;n-=1;等价于等价于:n=n-1;:n=n-1;*=例:例:n n*=1;=1;等价于等价于:n=n:n=n*1;1;=例:例:n/=1;n/=1;等价于等价于:n=n/1;:n=n/1;%=%=例:例:n%=1;n%=1;等价于等价于:n=n%1:n=n%1;注意:注意:两个符号之间不可以有空格两个符号之间不可以有空格优先级:优先级:与赋值运算
21、符相同;与赋值运算符相同;结合性:结合性:自右至左自右至左例:例:已有变量已有变量a a,其值为,其值为9 9,计算表达式,计算表达式a+=a-=a+=a-=a+aa+a;的值。的值。结果:结果:a a为为 -18-18六、基本的输入输出六、基本的输入输出标准的输入设备标准的输入设备-键盘键盘标准的输出设备标准的输出设备-显示器显示器标准的标准的输入输出函数输入输出函数实现实现数据流数据流的输入输出的输入输出需要包含头文件:需要包含头文件:stdio.h#include /多用于系统头文件多用于系统头文件#include “stdio.h”/另一写法另一写法非格式化输入输出非格式化输入输出ge
22、tchar()char ch;ch=getchar();putchar()putchar(ch);char ch;ch=getchar();putchar(ch);putchar(n);格式化输入输出格式化输入输出scanf(,)int x,y;float f1,f2;scanf(%d%d%f%f,&x,&y,&f1,&f2);printf(,)printf(%d%d%f%fn,x,y,f1,f2);printf(%d%fn,x+y,f1+f2);部分格式说明符部分格式说明符%c单个字符单个字符%d十进制数十进制数%e科学计数科学计数%f浮点十进制数浮点十进制数%s字符串字符串%显示百分号显示
23、百分号%0八进制数八进制数%x十六进制数十六进制数输出格式控制输出格式控制%m 场宽场宽 输出数据在屏幕上占的列数输出数据在屏幕上占的列数%m.n n为输出实型数时为小数点后位为输出实型数时为小数点后位数,输出整型数时为最少显示的位数。数,输出整型数时为最少显示的位数。控制对其齐方式:控制对其齐方式:%后加后加 -为左对齐,为左对齐,缺省为右对齐缺省为右对齐作业:作业:阅读阅读P25算术运算符:算术运算符:+-*/%23+90 8.8-7 a*2.7 4%4不同的数据类型上定义了不同的操作不同的数据类型上定义了不同的操作%只用于整型数。只用于整型数。当数据类型不同时如何运算,结果如何保存?当数
24、据类型不同时如何运算,结果如何保存?二进制位数少的数据类型自动转换为二进制二进制位数少的数据类型自动转换为二进制位数多的数据类型(即向精度到的数据类型位数多的数据类型(即向精度到的数据类型转换),再进行运算。转换),再进行运算。作业:阅读作业:阅读P26七、算术运算符和算术表达式七、算术运算符和算术表达式提问提问int i=5;float f=1.0;double d=1.0;char c=A;i+10结果是什么?结果是什么?i+f结果是什么?结果是什么?i+d结果是什么?结果是什么?printf(%cn,c+25);12/i结果是什么?结果是什么?12.0/i结果是什么?结果是什么?自学自学
25、P26,例,例1-8,P27,例,例1-9,上机,上机调试这两个程序。调试这两个程序。运算符学习总结运算符学习总结弄清的关键问题弄清的关键问题运算符的意义运算符的意义适用的数据集合适用的数据集合优先级优先级结合性结合性自加、自减运算符自加、自减运算符运算符运算符“+”和和“-”是单目运算符是单目运算符(1)后缀形式:)后缀形式:i+。i先参与运算,再自加。先参与运算,再自加。(2)前缀形式:)前缀形式:+i。i先自加,再参与运算。先自加,再参与运算。一种特殊的赋值运算,比赋值效率高。一种特殊的赋值运算,比赋值效率高。i+,相当于,相当于i=i+1;i-,相当于,相当于i=i-1。例例1:int
26、 a=5;a=a*(a+);/结果:结果:a 为为26 例例2:int a=5;a=a*(+a);/结果:结果:a 为为36注意:运算对象可以是整型、实型、字符型变量,不注意:运算对象可以是整型、实型、字符型变量,不可以是常量和其他的表达式。可以是常量和其他的表达式。例如,例如,3+、(i+j)+都是错误的。都是错误的。运算符的运算符的优先级优先级和和结合性结合性运算符运算符优先级优先级结合性结合性+-高高右结合(不同系右结合(不同系统可能不同)统可能不同)*/%次之次之左结合左结合+-低低左结合左结合圆括号()的优先级最高。圆括号()的优先级最高。+和和-的优先级和结合性的优先级和结合性优先
27、级:高于其他算术运算符。(多用圆括号)优先级:高于其他算术运算符。(多用圆括号)例例3:int a=5;a=a*a+;/结果:结果:a仍为仍为26 结合性:自右至左结合性:自右至左例例4:int x=1,y=2;printf(%dn,x+y);/结果:结果:3例例5:int x=1,y=2;printf(%dn,(x+)+y);/结果:结果:3例例6:int x=1,y=2;printf(%dn,x+(+y);/结果:结果:4八、数学标准函数八、数学标准函数系统有了的标准库函数系统有了的标准库函数用于数学运算的部分用于数学运算的部分函数原型在函数原型在math.h中,要包含它。中,要包含它。见
28、书见书P30作业:阅读作业:阅读P31,例,例1-10,上机调试。,上机调试。九、数据类型转换九、数据类型转换赋值运算中的数据类型转换赋值运算中的数据类型转换(1 1)“=”=”两边数据类型一致,赋值操作正确执行。两边数据类型一致,赋值操作正确执行。(2 2)“=”=”两边数据类型不一致,但系统可以将右侧两边数据类型不一致,但系统可以将右侧的数据类型自动或强制地转换为左边的数据类型,赋的数据类型自动或强制地转换为左边的数据类型,赋值操作可以执行,并称此赋值为值操作可以执行,并称此赋值为“赋值兼容赋值兼容”。(3 3)“=”=”两边数据类型不一致,但系统也不能将右两边数据类型不一致,但系统也不能
29、将右侧的数据类型转换为左边的数据类型,赋值操作不可侧的数据类型转换为左边的数据类型,赋值操作不可以执行,并称此赋值为以执行,并称此赋值为“赋值不兼容赋值不兼容”。注意:注意:当左边的数据范围与右边的不一致时,当左边的数据范围与右边的不一致时,虽然虽然符合赋值兼容规则,赋值可以执行,但有可能导致符合赋值兼容规则,赋值可以执行,但有可能导致数据有错误。数据有错误。强制类型转换强制类型转换强制运算符:是将一个表达式的值转换成指定的类强制运算符:是将一个表达式的值转换成指定的类型,这种转换是根据人为要求进行的。型,这种转换是根据人为要求进行的。强制类型转换表达式的形式如下:强制类型转换表达式的形式如下:(类型名类型名)(表达式表达式)例例1:(int)3.234 转换成整数转换成整数3例例2:(double)(103)把把103所得结果所得结果1转换成双转换成双精度数精度数1.0000000000000位运算位运算自学自学P31作业作业熟悉开发环境。熟悉开发环境。尝试调试程序。尝试调试程序。读书,读程序,越多越好。读书,读程序,越多越好。作业查看作业查看“教育在线教育在线”本课程网站。本课程网站。注意每周提交作业的截止时间。注意每周提交作业的截止时间。