第2章C语言与MATLAB基础
2.1 C语言概述
2.1.1 C语言简介
C语言是当今最为重要的计算机程序设计语言,它几乎适用于任何一种工业、商业应用领域。它的编程效率高于一般的计算机程序设计语言,在不同种类的计算机上具有很好的移植性,是C++、Visual C++、Java等语言的基础。
20世纪50~60年代,出现了很多优秀的计算机语言,但这些语言都不适合用于编写操作系统、编译程序等系统软件,系统软件的设计主要还依赖于汇编语言,因此,研制编写系统软件的高级语言势在必行。1969年,Martin Richards研制了BCPL(Basic Combined Programming Language),后来Ken Thompson在BCPL的基础上推出了B语言,并用B语言编写了第一个UNIX操作系统。1973年,D. M. Ritchie在B语言的基础上研制开发出了一种更新的语言,并用它重新编写了UNIX操作系统,这种语言被称为C语言。
目前最著名、最有影响、应用最广泛的Windows、Linux和UNIX三个操作系统都是用C语言编写的。
1983年,美国国家标准协会(ANSI)在各种版本的基础上制定了一个C语言标准草案(83 ANSI C)。1987年ANSI又推出了87ANSI C标准,这些标准对于C语言的统一、推广和普及起了很大的作用,尽管C语言的版本很多,但它们都参照了这一标准。C语言以其目标代码质量高、数据类型丰富、使用灵活,特别是便于同机器硬件打交道而备受用户的青睐,因而很快就成为一种在系统软件开发、科学计算、自动控制等领域最为重要的语言。
2.1.2 C语言程序结构
C语言之所以成为目前最受欢迎的语言之一,这主要取决于它良好的语言特点,现简述如下。
(1)C语言非常紧凑、简洁,使用方便、灵活,有32个关键字,有9种流程控制语句。
(2)C语言运算符丰富,共有45 个标准运算符,具有很强的表达式功能,同一功能表达式往往可以采用多种形式来实现。
(3)数据类型丰富。C语言的数据类型有整型、实型、字符型、数组类型、结构类型、共用类型和指针类型,而且还可以用它们来组成更复杂的数据结构,加之C语言提供了功能强大的控制结构,因而使用C语言能非常方便地进行结构化和模块化程序设计,适合于大型程序的编写、调试。
(4)用C语言可直接访问物理地址,能进行二进制位运算等操作,即可直接同机器硬件打交道。它具有“高级语言”和“低级语言”的双重特征,既能用于系统软件程序设计,又能用于应用软件程序设计。
(5)C语言生成的目标代码质量高、程序执行速度快。一般只比用汇编语言生成的目标代码的效率低20%左右。
(6)可移植性好。
(7)C语言语法松散,程序设计自由度大。例如,C语言运算符的优先级和结合性比较复杂;对数组下标越界不做检查;对变量的类型使用也比较灵活,整型、字符型、逻辑型数据可以通用,表达式形式多样等。但同时,这些都增加了初学者犯错误的机会和学习的难度。
【例2.1】 通过一个简单的C语言程序pro02_01.c,分析理解C程序的结构。
【源程序】
/*pro02_01.c*/ #include <stdio.h> int main(void) //一个简单的C程序 { int num1,num2; //定义num1,num2两个变量 num1=1;num2=2; //为num1,num2赋值 printf("num1+num2=%d",num1+num2);//输出num1与num2的和 }
运行结果:
num1+num2=3
一个完整的C语言程序,是由头文件、一个名称为main()的主函数和若干个其他函数构成的,简单的程序可以仅由一个main()函数构成。下面仔细阅读这个程序。
(1)头文件
#include语句是预处理指令,并不是C语言的可执行语句,它只是指定了程序引用的头文件。头文件的作用是:通过头文件来调用库功能。头文件是C语言中使用的标准库函数文件的计算机目标码,例如,输入函数printf()需要使用I/O库函数文件stdio.h,三角函数sin()需要使用数学库函数文件math.h等。头文件由#include预处理指令指定后,在链接时被嵌入到程序的目标码中。
(2)主函数
源程序中包括一个名为main()的函数。int表示main()返回一个整数,void表示main()不接受任何参数。这是美国国家标准化协会(ANSI)制定的ANSI C标准中规定的格式。
函数是C语言程序的基本单位。main()函数是程序执行的入口和结构主体,可以理解成一篇文章的标题索引,在主函数中给出程序的各工作环节,具体的做法由其他子函数描述,可以把子函数的作用看成相当于文章的各章节,具体叙述工作的方法。
一个C语言程序必须要有一个主函数。程序一定是从main()函数开始执行的,无论主函数在程序中的何种位置,当主函数执行完毕时,程序即执行完毕。习惯上,将主函数main()放在最前面。
(3)函数结构
任何函数,包括主函数main(),都是由函数说明和函数体两部分组成的。其一般结构如下:
函数类型 函数名(参数表) { 函数体(执行语句) }
花括弧“{”表示函数开始,花括弧“}”表示函数结束,括弧中间包含的C语言语句称为函数体。函数体一般由若干条可执行的C语句构成。一个程序按任务分解,可以由若干个函数构成,每个函数完成一个特定的功能。
读解程序需要一些必要的辅助信息。符号“//”之后是程序的注释信息,这是为了便于读程序,它仅在一行内有效。另一种注释方法是用符号对“/∗”和“∗/”,其中,“/∗”表示注释开始,“∗/”表示注释结束,它能跨越多行对程序进行注释,但是必须配对应用,否则编译出错。
2.1.3 C语言编译系统
(1)Turbo C:DOS时代C语言开发的经典工具,目前适合两类人使用:C语言的初学者和具有怀旧情节的专业开发人员。
(2)WIN-TC:WIN-TC是一个TC2 Windows平台开发工具,该软件使用TC2为内核,提供Windows平台的开发界面,它实际上是对TC2.0的一个封装。
(3)Visual C++ 6.0:Microsoft的经典之作,稳定而强大的集成开发环境(IDE),具有丰富的调试功能,定制宏的功能也是其一大特色。附带的一些工具也很不错,比如Spy++等。但编译器较之同类对C ++标准的支持程度不够好。
(4)Borland C++ Builder:是可以与Visual C++匹敌的另一个功能强大的IDE,相比之下速度和稳定性稍逊,但对C ++标准支持的程度较好。
(5)GCC:GCC(GNU Compiler Collection,GNU编译器集合)是一套由GNU工程开发的支持多种编程语言的编译器。GCC是自由软件发展过程中的著名例子,由自由软件基金会以GPL协议发布。GCC是大多数类Unix操作系统(如Linux、BSD、Mac OS X等)的标准的编译器,GCC同样适用于微软的Windows。
(6)Dev-C++:是在Windows平台下一个类似Visual C++、Borland C++ Builder的C++ IDE开发环境,属于共享软件。该软件界面较为友好,编译器基于GCC,完全支持STL,但是对于规模较大的软件项目难以胜任。
(7)Intel C++ Compiler:Intel C++ Compiler(也称为icc或icl)是美国Intel公司开发的C/C++ 编译器,适用于Linux、Microsoft Windows和Mac OS X操作系统,是在Intel平台上效率最好的C、C++编译器。