版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第1章 C语言概述,计算机科学:信息在计算机内使用数据来表示, 计算机科学研 究信息表示和信息处理。,数据:是用以描述客观事物的数值、字符,以及一切可以输入到 计算机中并由计算机程序加以处理的符号的集合。 数据的基本单位称为数据元素 数据的最小单位称为数据项,问题 数学模型 算法 程序 测试 计算,计算机解题过程, 程序设计语言,第一代:机器语言=是一种CPU机器语言。由数字0、1组合而成。 优点:机器可直接执行,速度快。 缺点:程序长,难记,难理解,不易查错。,第二代:汇编语言= =用助记符描述的指令系统。 如:Mov Ax,bp+4 push d1, 优点:比机器语言较易理解,执行速度快。
2、 缺点:难度大,非专业人士难以掌握。,第四代:非过程化的高级语言=是一种面向对象的设计 语言,如:C+,Java 等等。 优点:灵活、易于理解、维护、修改、扩充。 缺点:掌握难度较大。,第五代:可视化多媒体程序设计工具。具有面向对象的思想,如:Visual C+,Visual Basic,Delphe等等。,第三代:面向过程的高级语言= =或称算法语言。如: Fortran,Basic,Pascal,C 等等。 优点:灵活,易于理解,容易查错。 缺点:对大型程序而言维护性较差,对“拟定”好的 程序难以扩充,修改(所谓牵一而动百)。, 高级语言程序调试过程,语言的诞生与发展 (1)在C语言诞生以
3、前,系统软件主要是用汇编语言编写的。由于汇编语言程序依赖于计算机硬件,其可读性和可移植性都很差;但一般的高级语言又难以实现对计算机硬件的直接操作(这正是汇编语言的优势),于是人们盼望有一种兼有汇编语言和高级语言特性的新语言。 (2)语言是贝尔实验室于70年代初研制出来的,后来又被多次改进,并出现了多种版本。80年代初,美国国家标准化协会(ANSI),根据语言问世以来各种版本对语言的发展和扩充,制定了ANSI C标准(1989年再次做了修订)。 本课以ANSI C 标准来介绍。,一、C语言发展过程, 1. 1960年出现了Algol60语言,但该语言主要面向问题,与硬件较远,故英国剑桥大学推出了
4、CPL(Combined Programming Language), 2. 1967年,Matin Richards对CPL进行改进、简化、推出了BCPL (Basic Combined Programming Language), 3. 1970年,美国贝尔实验室Ken Thomson 以BCPL为基础,再次简化推出了B语言,并写了第一个UNIX系统。, 4. 1972年美国贝尔实验室D.M. Ritchie 在B语言基础上设计出了C语言,并用其将UNIX系统全部改写并实现。, 5. 经进一步改进,至1977年出现了与具体机器无关的C编译文本,从而使C语言广泛应用,各种机器皆可使用。, 6
5、. 1978年,美国Brain W.Kernighan与 Dennis. M. Ritchie 联合出版一书The C Programming Language成为 ANSI C之基础。, 7. 1983年,美国标准化协会(ANSI) 制定了ANSI C。,C语言特点 1、语言简洁、紧凑,使用方便灵活 2、运算符丰富 3、数据结构丰富,具有现代化语言的各总数据结构 4、具有结构化的控制语句 5、语法限制不太严格,程序设计自由度大 6、C语言允许直接访问物理地址,能进行位操作 可实现汇编语言的大部分功能 7、生成目标代码的质量高,程序执行效率高 8、程序可以执行好,注:以ANSI C 为基础:
6、不同机器有不同版本,尤其是函数均应参考 相应的版本。,特别说明: C语言的编译环境有多种 如:Turbo C, Borland C, Microsoft C 等,1.2.1 语言程序的总体结构 一个完整的语言程序,是由一个main()函数(又称主函数)和若干个其它函数结合而成的,或仅由一个main()函数构成。 案例1.1 仅由main()函数构成的语言程序。 /*案例代码文件名:AL1_1.C*/ /*功能:仅由main()函数构成的语言程序示例*/ main() printf(“This is a C program.n”); 程序运行结果: This is a C program.,案例
7、1.2 由main()函数和1个其它函数max()构成的语言程序。 /*案例代码文件名:AL1_2.C*/ /*功能:由main()函数和1个其它函数max()构成的语言程序示例*/ int max(int x, int y) return( xy ? x : y ); main() int num1,num2; printf(“Input the first integer number: ”); scanf(“%d”, 程序运行情况: Input the first integer number:6 Input the second integer number:9 max=9,C语言程序
8、结构 C程序是由函数构成的。一个C源程序至少包含一个主函数(main或主程序)和若干个其它函数(子函数或子程序) 一个函数由两部分程序组成:说明部分和函数体 一个C程序总是从main函数开始执行,不论main函数放在程序中的什么位置。程序的流程是通过主函数main调用其它子函数,或子函数间的相互调用 C程序书写格式自由,一行内可以写多条语句,但每一语句必须用分号(“;”)结束 C语言本身没有输入/输出语句,而是用函数完成相应操作 可以用/* */在程序的任何部分做注释,算法(Algorithm) 是对特定问题求解步骤的一种描述,它是指令(规则)的 有限序列,其中每一条指令表示一个或多个操作。,
9、“好”的算法的标准 正确性,算法能满足具体问题的需求 可读性,首先方便阅读与交流,其次才是机器执行 健壮性,输入错误时,能作出反应,避免异常出错 效率与低存储量要求,算法的特征 有穷性、确定性、输入、输出、有效性,第2章 算法 Algorithm,对算法“正确性”的要求 不含语法错误; 对于几组输入数据能得到满足要求的结果; 对精心选择苛刻并带有刁难的数据能得到满足要求的结果; 对于一切合法的输入均得到满足要求的结果;,算法描述 自然语言;程序设计语言;类语言*; 流程图,N.Wirth: Programming = Algorithm + Data Structure 程序设计 = 算法 +
10、 数据结构,问题总是先于算法,程序设计的四个里程碑 子程序、高级语言、结构程序设计、面向对象(OOP),结构程序设计 限制使用GO TO语句(基于三种基本结构) 逐步求精的设计方法 自顶向下的设计、编码与调试 主程序员组的组织形式,开始 / 结束,输入 / 输出,条件,处理,流程线,连接点,注释,算法流程图描述符号,三种基本结构,顺序结构,选择结构,循环结构, N-S 流程图,顺序结构,选择结构,循环结构,【例1】求解一元二次方程 ax2+bx+c=0,流程图一,yes,no,流程图二,yes,no,流程图三,【例2】 输入一个年份,判断该年是否闰年。,常量,整型常量,实型常量,字符型常量,字
11、符串常量,符号常量,#define PRICE 30 #define MAX 1000 #define PI 3.14 #define dot . #define CHN “China”, Total = num*PRICE ; Area = PI*R*R ; Int xMAX ; ,第3章 数据类型、运算符与表达式,变量,变量名,变量的类型,原则:先定义,后使用,变量的定义,类型说明符 变量名1 ,变量名2,变量名n ,数据类型:变量的取值范围和所允许的操作,数据类型,注意:每种类型数据的取值范围 Int :-2bits-1 (2bits-1-1) Unsigned :0 (2bits-1)
12、 Float :10-38 1038 Double :10-308 10308,整型变量(int%d),实型变量(float%f),字符型变量(char%c),转义字符 ,代码值,main( ) char c1,c2; c1=97;c2=98; printf(%c %c,c1,c2); ,变量赋初值,程序中常需要对一些变量预先设置初值。 C规定,可以在定义变量时同时使变量初始化。如: int a=3; 指定a为整型变量,初值为3 float f=3.56; 指定f为实型变量,初值为356 char c=a; 指定c为字符变量,初值为a 也可以使被定义的变量的一部分赋初值。如: int a,b,
13、c=5 表示a、b、c为整型变量,只有c初始化,值为5。 如果对几个变量赋以同一个初值,不能写成: int abc=3; 而应写成: int a3,b3,c=3;,int a=3; 相当于: int a; *指定a为整型变量*/ a=3; /*赋值语句,将3赋予a* 又如 int a,b, c=5; 相当于: int a,b, c; *指定a、b、c为整型变量* c5; *将5赋给c */,各类数值型数据间的混合运算,int m , n ; float x , y ;,分析:,m = 1 / 2 ; n = 1.0 / 2 ; x = 1 / 2 ; y = 1.0 / 2 ;,设:,计算:1
14、0十ai*f-d/e 运算次序为: 进行10a的运算,先将a转换成整数97,运算结果为107。 进行i*f的运算。先将i与f都转成double型,运算结果为dOuble型。整数107与i*f的积相加。先将整数107转换成双精度数(小数点后 加若干个0,即10700000),结果为double型。 将变量e化成double型,d/e结果为double型。 将10十ai*f的结果与”d/e结果为double型。 上述的类型转换是由系统自动进行的。,运算符,1算术运算符 (+ - * / % + - += -= *= /= %=) 2关系运算符 ( = | i=(int)x; printf(“xf,
15、i=d”x,i); 运行结果如下: x=3.600000,i=3 x类型仍为float型,值仍等于36。 有两种类型转换: 一种是在运算时不必用户指定,系统自动进行类型转换,如3+6.5。 第二种是强制类型转换,当自动类型转换不能实现目的时,可以用强制类型转换。,四、自增、自减运算符 作用是使变量的值增1或减1,如: i,-i (在使用i之前,先使i的值加(减)1) i,i- (在使用i之后,使i的值加(减)l) 粗略地看,i和i十十的作用相当于ii+1。但十十i和i十十不同之处在于十十i是先执行i=i+1后,再使用i的值;而i十十是先使用i的值后,再执行i=i+1。如果i的原值等于3,则:
16、ji; j的值为4 j=i十十; j的值为3,然后i变为4 又如: i=3; printf (”d”,十十i); 输出“4”。若改为 printf(”d”,i十十); 则输出“3”。,注意: (1)自增运算符(),自减运算符(-),只能用于变量,而不能用于常量或表达式,如5或(ab)都是不合法的。 (2)十十和-的结合方向是“自右至左”。算术运算符的结合方向为“自左而右”。 如果有-i,i的左面是负号运算符,右面是自加运算符。如果i的原值等于3,若按左结合性,相当于(-i)十十,而(-i)是不合法的。对表达式不能进行自加自减运算。负号运算符和“”运算符同优先级,而结合方向为“自右至左”(右结合
17、性),即它相当于-(i),如果有printf(”d”,-i),则先取出i的值使用,输出-i的值-3,然后使i增值为4。注意(i)是先用i的原值进行运算以后,再对i加1,不要认为先加完1后再加负号,输出-4,这是不对的。,五、有关表达式使用中的问题说明 C运算符和表达式使用灵活,利用这一点可以巧妙地处理许多在其它语言中难以处理的问题。但另一方面,有时会出现一些令人容易搞混的问题,因此务必要小心谨慎。 1在表达式中包含自加或自减运算时,很容易出错。 i或i一一什么时候进行自加或自减呢?如果有以下赋值语句,若i原值等于3, ki; 显然先将i的原值赋给以k(k的值等于3),然后i进行自加,执行完此语
18、句后,i的值等于4。如果有以下表达式: k =(i十十)十(i十十)十(i十十) 表达式的值是多少呢?,k(十十i)十(十十i)十(十十i) ? 2C语言中有的运算符为一个字符,有的运算符由两个字符组成,在表达式中如何组合呢? 如ij,是理解为(i)j呢?还是i+(+j) ? C编译在处理时尽可能多地(自左而右)将若干个字符组成一个运算符(在处理标识符、关键字时也按同一原则处理),如ij,将解释为(i)j,而不是i+(j)。,3C语言中类似上述这样的问题还有一些。例如,在调用函数时,实参数的求值顺序,C标准并无统一规定。如i的初值为3如果有下面的函数调用: printf (“d,d”,i,i)
19、 在有的系统中,从左至右求值,输出“3,3”。在多数系统中对函数参数的求值顺序是自右而左,上面printf函数中要输出两个表达式的值(i和i分别是两个表达式),先计算出i的值再计算i的值,输出i十十,是先输出i的值3然后使i加1变为4,这个4就成了printf函数中第一个参数i的值,因此上面printf函数输出的是“4,3”。,赋值运算符和赋值表达式 一、赋值符号“”就是赋值运算符,它的作用是将一个数据赋给一个变量。如“a3”的作用是执行一次赋值操作(或称赋值运算)。把常量3赋给变量a,也可以将一个表达式的值赋给一个变量。 二、如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时要
20、进行类型转换。 1将实型数据(包括单、双精度)赋给整型变量时,舍弃实数的小数部分。如i为整型变量,执行“i=356”的结果是使i的值为3。 2将整型数据赋给单、双精度变量时,数值下变,但以浮点数形式存储到变量中,如将23赋给float变量f,即f=23,先将23转换成2300000,再存储在f中。如将23赋给double型变量d, 即d23,则将23补足有效位数字为2300000000000000,然后以双精度浮点数形式存储到d中。,三、复合的赋值运算符 在赋值符“=”之前加上其它运算符,可以构成复合的运算符。如果在“=”前加一个“十”运算符就成了复合运算符“十 =”。例如,可以有: a+=3
21、 等价于 a=a3 x*y+8 等价于 x=x*(y+8) x=3 等价于 x=x3 以“a+=3”为例来说明,它相当于使a进行一次自加(3)的操作。即先使a加3,再赋给a。同样,“x*y8”的作用是使x乘以 (y8),再赋给x。 为便于记忆,可以这样理解: a十b (其中a为变量,b为表达式) a十 =b (将有下划线的“a十”移到“=”右侧) a=a+b (在“=”左侧补上变量名),注意,a=a+b 如果b是包含若干项的表达式,则相当于它有括号。如: x=y3 x=(y3) x=x%(y3) (不要写成x=xy3) 凡是二元(二目)运算符,都可以与赋值符一起组合成复合赋值符。C语言规定可以
22、使用10种复合赋值运算符。即: +=,-=,*=,/=,%=,=,=,=,|=,四、由赋值运算符将一个变量和一个表达式连接起来的式子称为“赋值表达式”。 它的一般形式为 (变量)(赋值运算符)(表达式) 例: a=(b5),a=b=c=5 (赋值表达式值为5,a b c值均为5) a=5(c=6) (表达式值为11,a值为11,c的值为6) a=(b=4)(c=6)表达式值为10, a值为10,b等于4,c等于6) a=(b10)/(c=2)(表达式值为5,a等于5,b等于10,c等于2) 赋值表达式也可以包含复合的赋值运算符。如 a+=a-=a*a 也是一个赋值表达式。如果a的初值为12,此
23、赋值表达式的求解步骤如下: 先进行“a-=a*a”的运算,它相当于a=a一a*a=12一144=一132。 再进行“a十一132”的运算,相当于a=a十(一132)=一132一132一264。 。,算术运算符和算术表达式-小结,1、算术运算符:+ - * / %,2、算术表达式和运算符的优先级与结合性 优先级:高低 结合性(结合方向):“自左至右”,尽可能多的字符组合,3、强制类型转换 (类型名)(表达式),4、自增、自减运算符 i+, i- +i, -i,赋值运算符和赋值表达式-小结,1、赋值运算符:= 赋值号,2、类型转换,3、复合的赋值运算符 +=,-= ,*=,/=,%=,4、赋值表达
24、式 基本形式: 表达式的值为的值 赋值语句: 赋值表达式 ;,例如: a += a -= a * a a=(b=4)+(c=6) printf(“%d”, a=b ) a=(b=10)/(c=2),讨论: a=b=4+c=6 ?,分析:, x=(a=3, 6*3 ) x=a=3,6*a,?, printf ( “%d,%d,%d”, (a,b,c),b,c),a+=a a-=2 a*=2+3 a/=a+a a%=(n%=2) a+=a-=a*=a,设:int a=12, n=5, 下列表达式运算后a的值是多少?,逗号运算符和逗号表达式 C语言提供一种特殊的运算符逗号运算符。用它将两个表达式连接
25、起来。如 3十5,6十8 称为逗号表达式。逗号表达式的一般形式为 表达式1,表达式2 逗号表达式的求解过程是:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。例如,上面的逗号表达式“35,68”的值为14。又如,逗号表达式 a=3*5,a*4 先求解a=3*5,得a的值为15,然后求解a*4得60,整个逗号表达式的值为60。 一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式,如 (a3*5,a*4), a5 先使a的值等于15,再进行a*4(但a值未变),再进行a5得20,即整个表达式的值为20。,逗号表达式的一般形式可以扩展为 表达式1,表达式2,表达式3,表达式n
26、 它的值为表达式n的值。 从附录可知,逗号运算符是所有运算符中级别最低的。因此,下面两个表达式的作用是不同的: x(a3,6*3) x=a=3,6*a 第个是一个赋值表达式,将一个逗号表达式的值赋给x,x的值等于18。 第个是逗号表达式,它包括一个赋值表达式和一个算术表达式,x的值为3。 其实,逗号表达式无非是把若干个表达式“串联”起来。在许多情况下,使用逗号表达式的目的只是想分别得到各个表达式的值,而井非一定需要得到和使用整个逗号表达式的值,逗号表达式最常用于循环语句(for语句)中,详见第五章。 逗号运算符又称为“顺序求值运算符”。,请注意并不是任何地方出现的逗号都是作为逗号运算符。例如函
27、数参数也是用逗号来间隔的。如 printf(“d,d,d,”a,b,c); 上一行中的“a,b,c,”并不是一个逗号表达式,它是printf函数的三个参数,参数间用逗号间隔。有关函数的详细叙述请见第七章。如果改写为 printf (”d,d,d,”,(a,b,c),b,c); 则“(a,b,c,)”是一个逗号表达式,它的值等于c的值。括弧内作为一个表达式,括弧内的逗号不是参数间的分隔符而是逗号运算符。 C语言表达能力强,其中一个重要方面就在于它的表达式类型丰富,运算符功能强,因而C使用灵活,适应性强。在后面几章中将会看到这一点。,逗号表达式的特点,逗号表达式可以嵌套。 逗号表达式可以作为赋值运
28、算中的表达式。 逗号运算符的结合方向是从左到右。 逗号运算符是所有运算符中级别最低的。,逗号运算符和逗号表达式-小结,逗号运算符:,,逗号表达式: 表达式1,表达式2,表达式n,逗号表达式的值为表达式n的值,第4章 最简单的C程序设计顺序程序设计,C语句,1、控制语句 if() else for() while() dowhile() continue break switch goto return,2、函数调用,3、表达式语句,4、空语句,5、复合语句,赋值语句,输入 / 输出(I/O),Printf(“Format”,表达式1,表达式2,),Scanf(“Format”, putchar( chr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年天津职业大学单招职业倾向性考试题库含答案详解(轻巧夺冠)
- 医疗应急能力培训项目试题及答案
- 商场员工客户服务技巧培训课件
- 电子商务法规培训教材
- 2026年安庆职业技术学院单招综合素质考试题库及一套答案详解
- 2026年天津财经大学珠江学院单招职业倾向性考试题库附答案详解ab卷
- 2026年安徽国防科技职业学院单招职业适应性测试题库及答案详解(网校专用)
- 2026年安徽工业经济职业技术学院单招职业倾向性考试题库附答案详解(精练)
- 2026年天津艺术职业学院单招职业技能测试题库含答案详解(巩固)
- 2026年四川邮电职业技术学院单招职业适应性测试题库附答案详解(综合卷)
- 徐州工业职业技术学院单招职业技能测试参考试题库(含答案)
- 秦皇岛地质考察报告
- 抖音取消实名认证申请函(个人)-抖音取消实名认证申请函
- 0~3岁婴幼儿营养与喂养(高职)全套教学课件
- 新闻写作的真实性原则
- 产业经济学-王俊豪主编
- 海岸工程海岸防护概论
- 静态与动态分析指标
- 《铁路技术管理规程》普速铁路部分
- YS/T 690-2009天花吊顶用铝及铝合金板、带材
- GB/T 4937.3-2012半导体器件机械和气候试验方法第3部分:外部目检
评论
0/150
提交评论