(5)C语言:是在B语言基础上增加数据类型而设计出的一种语言。 C语言取BCPL的第二个字母。C语言诞生后,Unx很快用C语言改写, 并被移植到其它计算机系统。 (6)标准C、 ANSI C、ISOC:C语言的标准化 注:最初Unⅸx操作系统是采用汇编语言编写的,B语言版本的Unⅸ是 第一个用高级语言编写的Unⅸx。在C语言诞生后,Unⅸx很快用C语言改写, C语言良好的可移植性很快使Unⅸx从PDP计算机移植到其它计算机平台, 随着Unix的广泛应用,C语言也得到推广。从此C语言和Unⅸx像一对孪 生兄弟,在发展中相辅相成,Unix和C很快风靡全球。 从C语言的发展历史可以看出,C语言是一种既具有一般高级语言特 性( ALGOL60带来的高级语言特性),又具有低级语言特性(BCPL带来 的接近硬件的低级语言特性)的程序设计语言。C语言从一开始就是用于编 写大型、复杂系统软件的,当然C语言也可以用来编写一般的应用程序。 也就是说:C语言是程序员的语言! IBM PC微机DOS、 Windows平台上常见的C语言版本有 今 Borland公司: Turbo C, Turbo C++, Borland C++, C++ Builder(Windows HA) 今 Microsoft公司: Microsoft c, isual C++( Windows版本) 182C语言的特点 C语言具有下面的特点(其中1-6属于高级语言特性,7-8属于低级语 言特性) 1.C语言的语言成分简洁、紧凑、书写形式自由 2.C语言拥有丰富的数据类型 C语言具有整型、实型、字符型、数组类型、指针类型、结构体类型 共用体类型等数据类型。能方便地构造更加复杂的数据结构(如:使用指针 构造链表、栈、树、图等) 3.C语言的运算符丰富、功能更强大。 例如 (1)C语言具有复合的赋值运算符“+=、-=、*、/=、%=”(加、减 乘、除、取余),“>>=、<=”(右移、左移),“&=、F、~=”(与、或、非) 如x+=5等价于x=x+5。 (2)C语言有条件运算符“?”可代替简单的 if/else语句 “如果ⅹ小于或等于0,y为0,否则y为1”可以写成下面的条件表达 式:y=x<=0:1 如果用if语句需要写成下面的形式:
31 (5)C 语言:是在 B 语言基础上增加数据类型而设计出的一种语言。 C 语言取 BCPL 的第二个字母。C 语言诞生后,Unix 很快用 C 语言改写, 并被移植到其它计算机系统。 (6)标准 C、ANSI C、ISO C:C 语言的标准化。 注:最初 Unix 操作系统是采用汇编语言编写的,B 语言版本的 Unix 是 第一个用高级语言编写的 Unix。在 C 语言诞生后,Unix 很快用 C 语言改写, C 语言良好的可移植性很快使 Unix 从 PDP 计算机移植到其它计算机平台, 随着 Unix 的广泛应用,C 语言也得到推广。从此 C 语言和 Unix 像一对孪 生兄弟,在发展中相辅相成,Unix 和 C 很快风靡全球。 从 C 语言的发展历史可以看出,C 语言是一种既具有一般高级语言特 性(ALGOL 60 带来的高级语言特性),又具有低级语言特性(BCPL 带来 的接近硬件的低级语言特性)的程序设计语言。C 语言从一开始就是用于编 写大型、复杂系统软件的,当然 C 语言也可以用来编写一般的应用程序。 也就是说:C 语言是程序员的语言! IBM PC 微机 DOS、Windows 平台上常见的 C 语言版本有: Borland 公司: Turbo C,Turbo C++,Borland C++,C++ Builder(Windows 版本) Microsoft 公司: Microsoft C,Visual C++(Windows 版本) 1.8.2 C 语言的特点 C 语言具有下面的特点(其中 1-6 属于高级语言特性,7-8 属于低级语 言特性): 1. C 语言的语言成分简洁、紧凑、书写形式自由。 2. C 语言拥有丰富的数据类型。 C 语言具有整型、实型、字符型、数组类型、指针类型、结构体类型、 共用体类型等数据类型。能方便地构造更加复杂的数据结构(如:使用指针 构造链表、栈、树、图等)。 3. C 语言的运算符丰富、功能更强大。 例如: ⑴ C 语言具有复合的赋值运算符“+=、-=、*=、/=、%=”(加、减、 乘、除、取余),“>>=、<<=”(右移、左移),“&=、|=、~=”(与、或、非)。 如 x+=5 等价于 x=x+5。 ⑵ C 语言有条件运算符“?:”可代替简单的 if/else 语句。 “如果 x 小于或等于 0,y 为 0,否则 y 为 1”可以写成下面的条件表达 式:y=x<=0?0:1; 如果用 if 语句需要写成下面的形式:
else y=l C语言避免了一切可能的罗嗦。 (3)C语言中连赋值这种操作都定义为运算符,也就是说赋值操作本身 可以作为表达式的一部分参与运算。如 if((=malloc(sizeof(int)))==NULL) i printf("Error! ") exit(1);; 如果改写为一般形式: p=malloc(sizeof(int)); if (p==NULL printf("Error!"), exit(1);i 又如下面的算式是正确的 如果改写为一般形式:z=6,y=6;x=6 4C语言是结构化程序设计语言。 (1)C语言具有结构化的控制语句,如: if/else、 switch/case、for、 while do. while等。 (2)函数是C语言程序的模块单位。 5.C语言对语法限制不严格,程序设计灵活 C语言不检査数组下标越界、不限制对各种数据的转换(编译系统可能 对不合适的转换进行警告,但不限制)、不限制指针的使用,而程序的正确 性由程序员来保证。 实践中,C语言程序编译时会提示:“警告”、“严重错误”。警告表示所 使用的语法可能有问题,但是有时可以忽略,程序仍然可以完成编译工作 然后运行(但是一般情况下,警告往往意味着程序真的有问题,还是应该认 真地检査)。“严重错误”是不能忽略的,编译系统发现严重错误,就不会产 生目标代码 灵活和安全是一对矛盾,对语法限制的不严格可能也是C语言的一个 缺点,比如:黑客可能使用越界的数组攻击计算机系统。JAVA语言是优秀 的网络应用程序开发语言,它必须保证安全性,它绝对不允许数组越界。此 外JAVA不使用指针,不能直接操作客户计算机上的文件,语法检查相当严 格,程序正确性容易保证,但是JAVA在编程时却缺乏灵活 6.C语言编写的程序具有良好的可移植性。 C语言编写的程序基本上不需要修改或只需要少量修改就可以移植到 其它的计算机系统或其它的操作系统 7C语言可以实现汇编语言的大部分功能 (1)可以直接操作计算机硬件,如寄存器和各种外设IO端口等 (2)可以通过指针直接访问内存物理地址
32 if (x<=0) y=0; else y=1; C 语言避免了一切可能的罗嗦。 ⑶ C 语言中连赋值这种操作都定义为运算符,也就是说赋值操作本身 可以作为表达式的一部分参与运算。如: if ((p=malloc(sizeof(int)))= =NULL) { printf("Error!"); exit(1); } 如果改写为一般形式: p=malloc(sizeof(int)); if (p= =NULL) { printf("Error!"); exit(1); } 又如下面的算式是正确的: x=y=z=6; 如果改写为一般形式:z=6; y=6; x=6; 4. C 语言是结构化程序设计语言。 ⑴ C 语言具有结构化的控制语句,如:if/else、switch/case、for、while、 do…while 等。 ⑵ 函数是 C 语言程序的模块单位。 5. C 语言对语法限制不严格,程序设计灵活。 C 语言不检查数组下标越界、不限制对各种数据的转换(编译系统可能 对不合适的转换进行警告,但不限制)、不限制指针的使用,而程序的正确 性由程序员来保证。 实践中,C 语言程序编译时会提示:“警告”、“严重错误”。警告表示所 使用的语法可能有问题,但是有时可以忽略,程序仍然可以完成编译工作, 然后运行(但是一般情况下,警告往往意味着程序真的有问题,还是应该认 真地检查)。“严重错误”是不能忽略的,编译系统发现严重错误,就不会产 生目标代码。 灵活和安全是一对矛盾,对语法限制的不严格可能也是 C 语言的一个 缺点,比如:黑客可能使用越界的数组攻击计算机系统。JAVA 语言是优秀 的网络应用程序开发语言,它必须保证安全性,它绝对不允许数组越界。此 外 JAVA 不使用指针,不能直接操作客户计算机上的文件,语法检查相当严 格,程序正确性容易保证,但是 JAVA 在编程时却缺乏灵活。 6. C 语言编写的程序具有良好的可移植性。 C 语言编写的程序基本上不需要修改或只需要少量修改就可以移植到 其它的计算机系统或其它的操作系统。 7. C 语言可以实现汇编语言的大部分功能: ⑴ 可以直接操作计算机硬件,如寄存器和各种外设 I/O 端口等。 ⑵ 可以通过指针直接访问内存物理地址
(3)类似汇编语言的位操作可以方便地检査系统硬件的状态。 因此,C语言适合编写系统软件 8.C语言编译后生成的目标代码小,质量高,程序的执行效率高。有资 料显示只比汇编代码效率低10%-20%。 习题一 选择题 1.一个C语言程序总是从 A.主过程开始执行B.主函数开始执行 C.子程序开始执行D.主程序开始执行 2.若已定义x和y为 double类型,则表达式x=1y=x+32的值是 A.1B.2 C.2.0 D.2.5 3.若有以下程序段 int cl=l c2=2. c3 c3=1.0/c2*cl; 则执行后,c3中的值是 A.0 B.0.5C.1 4.下面四个选项中,均是合法的标识符是 a 4d student B. 12-a a b ab5.x C A 4d student xyz abc if D abc b union scan 5.下列数据中,不合法的C语言实型数据的是 A)0.123B)123e3C)2.le3.5D)789.0 6.以下不正确的叙述是 A)在C程序中,逗号运算符的优先级最低 B)在C程序中,APH和aph是两个不同的变量 C)若a和b类型相同,在计算了赋值表达式a=b后,b中的值将放入a 中,而b中的值不变 D)当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型 变量只能输入实型数值 7.若有程序段 a=1234 float b=123. 456 double c=12345.5432 printf ("%2d, %2. 1f, %2.1f, a, b, c) 其输出结果正确的是: A)无输出 B)12,123.5,12345.5 C)1234,123.5,2345.5D)1234,123.4,1234.5
33 ⑶ 类似汇编语言的位操作可以方便地检查系统硬件的状态。 因此,C 语言适合编写系统软件。 8. C 语言编译后生成的目标代码小,质量高,程序的执行效率高。有资 料显示只比汇编代码效率低 10%-20%。 习题 一 一.选择题 1.一个 C 语言程序总是从______ A.主过程开始执行 B.主函数开始执行 C.子程序开始执行 D.主程序开始执行 2.若已定义 x 和 y 为 double 类型,则表达式:x=1,y=x+3/2 的值是_______. A.1 B.2 C.2.0 D.2.5 3.若有以下程序段, int c1=1,c2=2,c3; c3=1.0/c2*c1; 则执行后,c3 中的值是______ A.0 B.0.5 C.1 D.2 4.下面四个选项中,均是合法的标识符是_____ A.abc A_4d _student xyz_abc B.auto 12-a a_b ab5.x C.A_4d _student xyz_abc if D.abc a_b union scan 5.下列数据中,不合法的 C 语言实型数据的是 A)0.123 B)123e3 C)2.1e3.5 D)789.0 6.以下不正确的叙述是 A)在 C 程序中,逗号运算符的优先级最低 B)在 C 程序中,APH 和 aph 是两个不同的变量 C)若 a 和 b 类型相同,在计算了赋值表达式 a=b 后,b 中的值将放入 a 中,而 b 中的值不变 D)当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型 变量只能输入实型数值 7.若有程序段 int a=1234; float b=123.456; double c=12345.54321; printf("%2d,%2.1f,%2.1f",a,b,c); 其输出结果正确的是: A)无输出 B)12,123.5,12345.5 C)1234,123.5,12345.5 D)1234,123.4,1234.5
8.设变量a是irt型,f是foat型,i是 double型,则表达式10+a+i*f 值的数据类型为 A)intB) float C) double D)不确定 9.若变量a是nt类型,并执行了语句:a=′A+1.6:;,则正确的叙述是 A)a的值是字符C B)a的值是浮点型 C)不允许字符型和浮点型相加 D)a的值是字符A′的ASCI值加上1 10.设x和y均为int型变量,则以下语句: X+=y; y-x-y, X-=y; 的功能是 A把x、y按从小到大排序 B把x、y按从大到小排序 C.无确定结果 D交换x、y中的值 填空题 1.若有程序 main( fint i,; scanf("i=%d, j =%d", &i, &j); printf("i=%d j=%d\n",ij) 若要求i赋10,j赋20,那么我们应该从键盘上输入 2.若有说明 int ij, k则表达式i=10j=20k=30,k*=计j的值为 t int i=3,j=4; printf(“%d,%dn”,计++,j+); printf((“%d,%dn”,++i,++j) 运行结果: 4. print("%5.3frn"12345612345);输出为 5.用 scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=^A 问在键盘上如何输入 maino int a, b: float x, y; char clc2: canf (a=%d b=%d", &a, &b) scanf ("x=%f y=%e", &x, &y) scanf (" c1=%c c2=%c", &cl, &c2): 简答题
34 8.设变量 a 是 int 型,f 是 float 型,i 是 double 型,则表达式 10+ˊaˊ+i*f 值的数据类型为 A)int B)float C)double D)不确定 9.若变量 a 是 int 类型,并执行了语句:a=ˊAˊ+1.6;,则正确的叙述是 A)a 的值是字符 C B)a 的值是浮点型 C)不允许字符型和浮点型相加 D)a 的值是字符ˊAˊ的 ASCII 值加上 1 10.设 x 和 y 均为 int 型变量,则以下语句: x+=y;y=x-y;x-=y; 的功能是_____ A.把 x、y 按从小到大排序 B.把 x、y 按从大到小排序 C.无确定结果 D.交换 x、y 中的值 二.填空题 1.若有程序 main() {int i,j; scanf("i=%d,j=%d",&i,&j); printf("i=%d,j=%d\n",i,j); } 若要求 i 赋 10,j 赋 20,那么我们应该从键盘上输入______ 2 . 若 有 说 明 int i,j,k; 则 表 达 式 i=10,j=20,k=30,k*=i+j 的 值 为 _______________。 3.main( ) { int i=3,j=4; printf(“%d,%d\n”,i++,j++); printf(“%d,%d\n”,++i,++j); } 运行结果:_______________。 4.printf("%5.3f\n",123456.12345);输出为_____________。 5.用 scanf 函数输入数据,使 a=3,b=7,x=8.5,y=71.82, c1=ˊAˊ, c2=ˊaˊ,问在键盘上如何输入? main() { int a,b;float x,y;char c1c2; scanf("a=%d_b=%d",&a,&b); scanf("_x=%f_y=%e",&x,&y); scanf("_c1=%c_c2=%c",&c1,&c2); } 三.简答题
1.C语言程序的总体结构是怎样的。 2.C语言程序的基本单位是什么?它的结构又如何? 3.主函数 maino在程序中的地位如何。程序总是从哪个函数开始执 行,到哪个函数执行完后结束? 4.C语言的语句分为哪几类 5.执行一个C语言程序的一般过程是什么? 四.编程题 1.若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765 cl=‘a',c2=“b’。想得到以下输出格式和结果,请写出程序(包括定义变 量类型和设计输出)。 a=口3口口b=口4口口c=口5 x=1.200000,y=2.400000,=-3.600000 x+y=口3.600口口y+z=-1.20口口z+x=-2.40 cl=′a口or口97( ASCII) 2=b□or口98( ASCII) (口表示空格,下同) 2.设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆 球体积、圆柱体积。用 scanf输入数据,输出计算结果,输出时要求文字说 明,取小数点后两位数字。请编程序。 3.输入一个华氏温度,要求输出摄氏温度。公式为c=5(F-32)/9,输 出要求有文字说明,取2位小数。 4.已知三角形的三边长,求其面积。 假设输入的三边能构成三角形,三角形的面积公式为 Area=s(s-as-bXs-c) 其中S=(a+b+c)/2
35 1.C 语言程序的总体结构是怎样的。 2.C 语言程序的基本单位是什么?它的结构又如何? 3.主函数 main()在程序中的地位如何。程序总是从哪个函数开始执 行,到哪个函数执行完后结束? 4.C 语言的语句分为哪几类? 5.执行一个 C 语言程序的一般过程是什么? 四.编程题 1.若 a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765, c1=‘a’,c2=‘b’。想得到以下输出格式和结果,请写出程序(包括定义变 量类型和设计输出)。 a=□3□□b=□4□□c=□5 x=1.200000,y=2.400000,z=-3.600000 x+y=□3.600□□y+z=-1.20□□z+x=-2.40 c1=ˊaˊ□or□97(ASCII) c2=ˊbˊ□or□98(ASCII) (□表示空格,下同) 2.设圆半径 r=1.5,圆柱高 h=3,求圆周长、圆面积、圆球表面积、圆 球体积、圆柱体积。用 scanf 输入数据,输出计算结果,输出时要求文字说 明,取小数点后两位数字。请编程序。 3.输入一个华氏温度,要求输出摄氏温度。公式为 c=5(F-32)/9,输 出要求有文字说明,取 2 位小数。 4.已知三角形的三边长,求其面积。 假设输入的三边能构成三角形,三角形的面积公式为: Area= s(s − a)(s −b)(s − c) 其中 S=(a+b+c)/2