当前位置:文档之家› 第三章-编程语言简介

第三章-编程语言简介

第三章编程语言简介

讲授:胡朝浩

桂林电子科技大学

2013.09本章主要内容

●Fortran程序设计初步

Fortran语言基本特点,程序组成,输入输出控制,程序结构设计,程序示例,……

●C及C++语言介绍

C语言基本特点,程序组成,输入输出控制,程序结构设计,程序示例,C++基本特点,……

●其他编程语言简介

MATLAB,Python,Perl,……

●程序编译介绍

Fortran程序设计初步

与其它语言如C语言、Matlab等比较,Fortran具有以下特点:

?Fortran语言悠久的历史是一笔宝贵的财富。从它诞生至今

的半个世纪里,在科学研究的各个领域积累了大量正确的、可靠的Fortran程序。

?Fortran语言书写和语法要求严格,更适合严谨的科学研究

领域的计算。

?Fortran语言可以对复数和数组进行直接运算。相对于其他

语言编程显得更加方便。

?Fortran语言在并行计算方面具有不可替代的优势,而并行

计算大大提高了计算机的运算能力,是复杂的工程计算成

为可能。

?Fortran语言是一种编译语言,运行速度较Matlab要快。

?Fortran语言是一种在不断发展的语言,几次的修订增加了

符合需要的现代特征,顺应了时代的潮流。Fortran程序设计初步

一个Fortran程序简例(Fortran77 vs. F90格式):输入两个数,求算数平均和几何平均值

C------求两种平均値----

PROGRAM Example_1_1

REAL a, b, av1, av2

READ (*,*) a, b

av1 = (a + b)/2

av2 = sqrt(a*b)

WRITE(*,*) av1, av2

END

PROGRAM Example_1_1 ! 求平均

REAL :: a, b, av1, av2

READ *, a, b

av1 = (a + b)/2; av2 = (a*b)**0.5

PRINT *, av1, av2

END

程序説明:程序中第1行是注释行,对程序起说明作用。F77注释行是以“C”或“!”作为该行第一个字符的,F90可在任意一行末以“!”开始作为注释符。第2行是主程序名,第3行是变量类型定义,第4行是输入语句,第5-6行是赋值部分,第7行是打印输出语句,最后是程序结束。注意F77的固定书写格式和F90的自由格式。F90中用“;”将两行并为一行。

Fortran程序设计初步Fortran77固定格式示例:Fortran程序设计初步

Fortran77固定格式说明:

标号区:第l—5列

可以写l至5位整数。也可以没有标号。标号区中的空格不起作用。如lOO与100 或1

0 0作用相同。标号应是无符号整数(无正负号或小数点)。标号大小顺序没有任何要

求。假如第二行的标号为1000,第三行的标号可以是10,也可以是99999。标号区内不得出现标号以外的内容,但注释行例外。注释行的内容可以写在标号区内,一行中第一列为C或*的,该行即被认为注释行,编译时对该行内容不作翻译,对程序运行不产生任何影响。如果在第一列上出现的不是数字、空格或C和*的字符,编译时按出错处理。

续行区:第6列

如果在一行的第6列上写一个非空格和非零的字符,则该行作为其上一行的续行。

注意在某些系统中,这个字符可以不限于上面所列的,如@ } ] ~ 等字符均可使用。F77允许一个语句有19个续行(即一个语句最多可以写成20行)。有的程序中第6列上用“l”,“2”,…表示该行是第1个或第2个续行,但用数字字符容易与第7列的数字形成连续的数字串而引起错觉,故最好使用固定的特殊字符。

Fortran程序设计初步

Fortran77固定格式说明:

语句区:第7—72列

不要求一定从第7列开始写语句,可以从第7列以后(72列以前)的任何一列开始写,但一行只能写一个语句。如果写满了72列,一旦在终端上修改程序时在该行又插入了一些字符,就会使本行最后几个字符超出语句区而引起意料不到的错误。特别注意到语句最后的空格将可能溢出72列,在某些计算机系统上将导致难以查出的错误。应注意,引号内的字符串中所包括的空格是有效的,不能忽略。

注释区:第73—80列

在卡片输入法时代,程序员一般利用此8列为程序行编序号以便查找。注释区只对程序员提供辨别信息,不是语句的一部分,在编译时不对72—80列作处理。Fortran程序设计初步Fortran90自由格式示例:

Fortran程序设计初步

Fortran90自由格式说明:

行:一行为132列。可以有复数条程序语句,语句间用分号“;”分开。语句没有位置规定。

注释行:起始用注释符“!”号,此行其后的所有字符均作为注释(字符串中的!号除外,如print *,’help!!!!’)。

续行:当一个语句非常长以至于132列都书写不下时,允许有39个续行。在语句行最后加上续行符“&”号。

空格:在语句名和变量名中间不能有空格。需要空格的地方必须有一个以上空格(GOTO和GO TO,ELSEIF和ELSE IF,END构造名(构造名有:DO,

PROGRAM, FUNCTION, MODULE, SUBROUTINE)等有两种写法的除外),如关系运算符==,<= 不能写成= =,< =。这与F77有很大不同之处,因为F77的设计中将编译源程序的空格忽略

分号:在自由格式中,一行允许写多个语句,语句之间用分号“;”分隔,最后语句之后不能有分号“;”。一个语句最长不能超过2640个字符。Fortran程序设计初步

Fortran程序基本特点:

一个Fortran程序由一个或若干个程序单位组成。主程序和辅程序分别是一个独立的程序单位。主程序单元起整体控制作用,各辅程序单元完成总问题中的一个子问题。

每一个程序单位都是以END语句结束的。END既是一个程序单位的结束标志,又是一个独立的语句(结束语句)。主程序中的END语句的作用是使程序“停止运行”。辅程序中的END语句是“使流程返回调用程序”。

Fortran程序中的语句可以有标号。一个语句有否标号是根据需要而定,其作用是标志一个语句以便被其它语句引用。在同一个程序单元中不能有两个相同标号的语句。

标号不影响语句的执行顺序。但在F90中因为提倡结构化程序设计,一般不使用标号。

F77源程序必须按固定格式书写,即源程序中哪些内容应写在一行中的哪一列(或哪几列上)有严格的规定。而F90可采用自由格式。

一个程序单位中各类语句的位置是有一定规定的。例如PROGRAM语句应是主程序的第一个语句。FUNCTION语句是函数子程序的第一个语句,END语句只能是程序单位中最后一行。程序中语句执行的顺序一般依照它们在程序中的先后位置而定。

一个程序单位包括若干行。

F77行分为下面两类。F77规定,一行只能写一个语句,一行中不能写几个语句。如果一个语句太长,一行内写不下的话,可以写在继续行(要用“续行标志”)。

F90行不分类。注释可以写在任一行末尾,而且一行不限语句数,可以将几个F77行合并写入一行。极大地简化了程序写法,使得程序可以编写得更为清晰明了。

Fortran程序设计初步

Fortran程序基本组成:程序总体构造

Fortran90程序是一种分块形式的程序,整个程序由若干个程序模块组成。各模块都有相似的语句组织形式,其中主程序起整体控制作用,各辅程序模块各自完成问题中的一个算法。

在解决一个比较复杂的问题时,先把求解的问题分解为若干相对独立的子算法,每一个子算法编为一个辅程序,然后按搭积木一样将各有关程序模块组成一个程序。主程序依次调用各辅程序模块,控制各子算法的实施,通过主程序对子程序的调用,形成程序的整体运行,完成问题的解。

若某一子程序算法仍复杂,可再把它分解为若干更小的算法,分别编写为更低一层次的辅程序,由其他辅程序分别去调用。

这种情况可以类推到其它子程序或更低一层次。在最简情况下, Fortran程序只由一个主程序构成而没有辅程序,所有算法都由主程序自身完成。按现代要求,即使功能比较简单的问题,也最好写成主程序调用辅程序的形式,以便于维护。Fortran程序设计初步

Fortran程序基本组成:程序单位

主程序[PROGRAM 程序名] ←语句可省略

.....

END [PROGRAM [程序名]] ←END必须有

辅程序(过程)

SUBROUTINE 子程序

FUNCTION 函数BLOCK DATA 块数据

MODULE 模块(F90)

内部过程CONTAINS (F90)

程序单位包括主程序、辅程序、块数据单元和内部过程。辅程序可以是函

数辅程序或子程序辅程序。模块中包含可由其他程序单位访问的各种实体。块数据单元用来对有名公用块的数据对象规定初始值。一个执行程序总是

由一个主程序单位和任意个(可以为零)其他类型的程序单位组成,任何程序单位都不能调用主程序。MODULE过程在主程序中通过USE语句与之相联系。模块用于组装若干功能(如过程、类型定义、语义扩展等)为一集团,是F90

中极具柔软性的程序单位,它取代了F77中的某些不安全的特性。BLOCK DATA辅程序的用处是定义全局常数或全局初始化,在F90中是不推荐使用的,其功能已被MODULE和USE取代。

Fortran程序设计初步

Fortran程序基本组成:程序体和语句顺序

Fortran要求严格的语句顺序。在每个程序单位中,根据语句种类按如下的次序排列。

F77中的顺序可简单归纳为:

PROGRAM,FUNCTION,SUBROUTINE,BLOCK DATA等程序单位开始语句

变量类型和语句函数等定义语句(说明部分)

执行语句,DATA语句,FORMAT语句(执行部分)

END语句

在F90中将新增加的语句功能综合后,其顺序为:Fortran程序设计初步

常量和变量类型:

●常量是指其值始终不变的一些量。整型、实型、双精度和复型常量是算数型常量,也为常数。

●五种内部数据类型常量:

?整型常量:整数。

?实型常量:实数。如,3.8,1.2345E1

?复型常量:复数。如,(12.5,23.4)‐>12.5+23.4i

?字符串常量:字符串。如,’I'm a boy.’(“I'm a boy.”,F90)

?数组型

?逻辑型常量:逻辑值。其值只能为:.TRUE.(真)和.FALSE.(假)。

●变量是指在程序运行期间其值是可以变化的量。系统为程序中的每一个变量开辟一个存储单元,用来存放变量的值。变量也相应地区分为整型变量INTEGER、实型变量REAL、双精度变量DOUBLE PRECISION、复型变量COMPLEX、逻辑型变量LOGICAL、字符型变量CHARACTER。在程序中应当说明哪些变量是整型变量,哪些变量是实型变量。

Fortran程序设计初步

Fortran变量声明与使用:

隐含约定:Fortran规定,凡以字母I,J,K,L,M,N六个字母开头的变量名,如无另外说明则为整型变量。以其它字母开头的变量为实型变量。可以将这个隐含约定称为“I—N规则”,表示用I到N之间的字母开头的变量为整型。例如:I,J,IMAX,NUMBER,LINE,JOB,Kl为整型变量,而A,Bl,COUNT,AMOUNT,TOTAL,BOOK为实型变量。

类型指定:如果想改变“I—N规则”对变量类型的约束,可以用类型说明语句专门指定某些变量的类型。Fortran中有六个类型说明语句:

(1)INTEGER语句(整型说明语句)

(2)REAL语句(实型说明语句)

(3)DOUBLE PRECISION语句(双精度说明语句)

(4)COMPLEX语句(复型说明语句)

(5)LOGICAL语句(逻辑型说明语句)

(6)CHARACTER语句(字符型说明语句)Fortran程序设计初步

Fortran变量声明与使用:

隐含约定:Fortran规定,凡以字母I,J,K,L,M,N六个字母开头的变量名,如无另外说明则为整型变量。以其它字母开头的变量为实型变量。可以将这个隐含约定称为“I—N规则”,表示用I到N之间的字母开头的变量为整型。例如:I,J,IMAX,NUMBER,LINE,JOB,Kl为整型变量,而A,Bl,COUNT,AMOUNT,TOTAL,BOOK为实型变量。

类型指定:如果想改变“I—N规则”对变量类型的约束,可以用类型说明语句专门指定某些变量的类型。Fortran中有六个类型说明语句:(1)INTEGER语句(整型说明语句);(2)REAL语句(实型说明语句);(3)DOUBLE PRECISION语句(双精度说明语句);

(4)COMPLEX语句(复型说明语句);(5)LOGICAL语句(逻辑型说明语句);

(6)CHARACTER语句(字符型说明语句)。

IMPLICIT语句(隐含说明语句)指定:可以用IMPLICIT语句将某一字母开头的全部变量指定为所需的类型,还可以用一个IMPLICIT语句同时指定几种类型。例如:

IMPLICIT INTEGER (A, C, T‐V)

IMPLICIT REAL (I, J)

IMPLICIT INTEGER (A, B), REAL(I,K), INTEGER (X‐Z)

Fortran程序设计初步

Fortran内部函数:

Fortran解题往往要用到一些专门运算。如求三角函数sinx,cosx,开根,绝对值,对数,指数,求一组数中最大数和最小数等。Fortran提供了一些系统内部函数来完成这些运算。常用的Fortran77函数如下表所示:Fortran程序设计初步

Fortran算术表达式:

FORTRAN规定可以使用五种算术运算符号:

+表示“加”(或正号)

‐表示“减”(或负号)

*表示“乘”

/表示“除”

**表示“乘方”

注意:乘号用“*”表示,不能写成“×”,以免与字母“X”混淆,也不能用“.”代替乘号。除号不能用“÷”号。两个运算符不能紧邻,如A*‐B是不合法的,应写成A*(‐B)。同时应注意运算顺序和数据类型的转换。

例:5/2的值是2而不等于2.5,5**(1./3.)而非5**(1/3)。

例:1/2*1.0等于0,而1./2*1对于0.5。

Fortran程序设计初步

输入输出语句控制:

FORTRAN用READ语句实现数据输入,方式有3种:

(1)自由格式输入,即表控格式输入。

READ*,X,Y,Z

READ(*,*)X,Y,Z

(2)数据按用户规定的格式输入。

READ(*,‘(I3,2I4)’)I,J,K

READ(*,10)A,B

10FORMAT(F7.2,F6.1)

READ(UNIT=5,FMT=900,END=100)I,A,B

900FORMAT(1X,I5,2F10.2)

(3)无格式输入,即以二进制形式输入,只适用从磁盘或磁带输入。Fortran程序设计初步

输入输出语句控制:

FORTRAN用PRINT语句和WRITE语句实现表控输出:PRINT*,X

PRINT*,“Y=“,Y,“Z=“,Z

WRITE(*,*)X,Y

FORTRAN的格式输出用WRITE语句实现:

WRITE(*,10)K,L

10FORMAT(1X,I5,I4)

WRITE(line,‘(a,i2,a,f8.2,a)’)&

‘Takings for day‘,day,‘are‘,cash,‘dollars’

Fortran程序设计初步

选择结构程序设计:关系运算符与逻辑运算符关系运算符:

逻辑运算符:Fortran程序设计初步

选择结构程序设计:块IF选择结构

PROGRAM EXAMPLE1

REAL G

READ *, G

IF (G .LT. 60) THEN

PRINT *, “不及格”

ELSE IF(G .GE. 60 .AND. G .LT. 90) THEN

PRINT *, “通过”

ELSE

PRINT *, “优秀”

ENDIF

END

Fortran程序设计初步

选择结构程序设计:块CASE选择结构

INTEGER G

READ *, G

SELECT CASE(G)

CASE(0:59)

PRINT *, “不及格”

CASE(60:69)

PRINT *, “及格”

CASE(70:79)

PRINT *, “中”

CASE(80:89)

PRINT *, “良”

CASE(90:100)

PRINT *, “优”

CASE DEFAULT

PRINT *, “成绩输入错误,请重新输入!”

END SELECT

END Fortran程序设计初步

循环结构程序设计:DO循环语句

REAL SCORE

INTEGER :: NUM1=0, NUM2=0, NUM3=0, I

DO I=1, 30

READ *, SCORE

IF (SCORE >=85) THEN

NUM1=NUM1+1

ELSE IF(SCORE>=60) THEN

NUM2=NUM2+1

ELSE

NUM3=NUM3+1

END IF

END DO

PRINT *, “85~100分”, NUM1

PRINT *, “60~85分”, NUM2

PRINT *, “60分以下”, NUM3

END

Fortran 程序设计初步

循环结构程序设计:DO WHILE 循环语句

IMPLICIT NONE INTEGER M, I, J READ *, M I=2

J=SQRT(REAL(M))

DO WHILE(I<=J .AND. MOD(M,I)/=0)

I=I+1END DO

IF (I>J .AND. M>1) THEN

PRINT *, M, “ is a prime number”ELSE

PRINT *, M, “ is not a prime number”END IF END

IMPLICIT NONE INTEGER M, I, J READ *, M

J=SQRT(REAL(M))DO I=2, J

IF (MOD(M,J)==0) EXIT END DO

IF (I>J .AND. M>1) THEN

PRINT *, M, “ is a prime number”ELSE

PRINT *, M, “ is not a prime number”END IF END

C 及C++语言介绍

C 语言的基本应用

C语言的应用非常广,也非常多,在此仅列出其中的一些应用:

?C语言可以用来开发许多系统软件和大型应用软件。如UNIX,LINUX等操作系统。

?在软件需要对硬件进行操作的场合,用C语言明显优于其它高级语言。例如,各种硬件设备的驱动程序(象显卡驱动程序、打印机驱动程序等)一般都是用C语言编写的。

?在图形、图像及动画处理方面,C语言具有绝对优势,特别是游戏软件的开发主要就是使用C语言。

?随着计算机网络飞速发展,特别是Internet的出现,计算机通信就显得尤其重要,而通信程序的编制首选就是C语言。?C语言适用于多种操作系统,象WINDOWS、UNIX、LINUX等绝大多数操作系统都支持C语言,其它高级语言未必能得到支持,所以在某个特定操作系统下运行的软件用C语言编制是最佳选择。

C 及C++语言介绍

C 语言的基本结构

了解了C语言的基本特性及其应用以后,接下来就来看看C

语言程序是什么样子。一个C语言程序可以是非常简单的,也可以是特别复杂的,这取决于程序所要实现的功能。我们

先来认识一个最为简单的C程序。【例1】最简单的C程序。

/* This is the first C program */#include void main ( ){printf (“The is a C program!\n");}

注释信息

预处理命令无返回值无参数、无返回值的主函数主函数名函数开始

内部函数名参数

回车换行符

函数调用函数体语句结束标志函数结束

运行结果:The is a C program !

在C程序中,注释由“/*”开始,由“*/”结束,可以实现多行注释。在C++程序中也可使用“//”进行单

行注释。例如:// 注释信息C语言的预处理命令都是以“#”号开头。stdio.h是一个头文件C程序中允许插入若干行空行,它不影响程序的功能,同注释一样。为了程序的易读性,

在编写C程序时,根据需要可插入一定的空行

main是主函数名,一个C语言程序有且仅有

一个main函数。C程序执行时就是从main函数开始,具体讲就是从“{”开始,到“}”结

束。printf是C语言的内部函数名,因为它后面跟着( ),其功

能是将“The is a C program!\n ”显示在计算机的屏幕上(双引号和\n不显示)C语言规定:语句以分号结束C 及C++语言介绍

C 语言的基本结构

【例2】计算输入的两个整数的和。/* This is the second C program */#include

void main ( )

{

int x, y, z;

scanf ("%d%d", &x, &y );

z = x + y;

printf ("the sum of two integer is %d\n", z);}

数据类型名

定义的变量名,以“,”分隔调用内部函数,接受键盘输入数据

带有三个参数,以“,”分隔。&表

示取变量的地址。

调用内部函数,输出计算的和数

求和的值给Z

假设输入:10 20↙运行结果:the sum of two integer is 30

C及C++语言介绍C语言的基本结构【例3】计算输入的两个整数的最大值。

/* This is the third C program */ #include

int max (int a, int b);

void main ( )

{

int x, y, z;

scanf ("%d%d", &x, &y);

z = max (x, y);

printf ("max = %d\n", z);

}int max (int a, int b) {

int c;

if (a > b)

c = a;

else

c = b;

return (c);

}

自定义函数声明自定义函数调用

自定义函数max

带两个形参返回a、b中最大值c

返回值为整型数

假设输入:10 20↙运行结果:max = 20C及C++语言介绍编辑C程序基本步骤编辑

程序代码的录

入,生成源程

序*.c或*.cpp

编译

语法分析查错,

翻译生成目标程

序*.obj

链接

与其它目标程

序或库链接装

配,生成可执

行程序*.exe

运行

开始

编辑

编译

有错?

链接

执行

结果正确?

结束

源程序file.c

目标程序

file.obj

库函数和其

它目标程序

可执行程

序file.exe

不正确

正确

调试C程序的流程

编写C程序的步骤

源程序目标程序可执行程序

内容程序设计语言机器语言机器语言

可执行不可以不可以可以

文件名后缀.c或.cpp.obj.exe

C及C++语言介绍C语言数据类型

C 数据类型基本类型

构造类型

指针类型

空类型void

定义类型typedef

字符类型char

整型

实型

单精度型float

双精度型double

数组

结构体struct

共用体union

短整型short

长整型long

整型int

枚举类型enum

无符号整型unsigned

C及C++语言介绍C语言运算符

变量用来存放数据,运算符则用来处理数据。用运算符

将变量和常量连接起来的符合C语法规则的式子被称为表达

式。

运算符的分类:

单目运算符:只带一个操作数的运算符。如:++、--运算符。

双目运算符:带两个操作数的运算符。如:+、-运算符。

三目运算符:带三个操作数的运算符。如:?运算符。

学习运算符时应注意:

?运算符的功能:该运算符主要用于做什么运算。

?与运算量关系:要求运算量的个数及运算量的类型。

?运算符的优先级:表达式中包含多个不同运算符时运算符运算的先

后次序。

?运算符的结合性:同级别运算符的运算顺序(指左结合性还是右结

合性)。

?运算结果的类型:表达式运算后最终所得到的值的类型。

C

算术运算符:(+ -* / % ++ --)

关系运算符:(< <= == > >= !=)

逻辑运算符:((!&& ||)

位运算符:(<< >> ~ | ^ &)

赋值运算符:(= 及其扩展)

条件运算符:(?:)

逗号运算符:(,)

指针运算符:(* &)

求字节数:(sizeof)

强制类型转换:(类型)

分量运算符:(. ->)

下标运算符:([])

其它:(( ) -)

C 及C++语言介绍

C 语言数据输出

C语言中没有用于输出的语句,只能通过标准库函数的调用来完成数据的输出任务。库函数的一般调用格式为:

函数名(参数1,参数2,……,参数n);

printf函数:

printf ("variable a =%d",a );

参数1(字符串常量)

函数名

参数2(变量)

逗号隔开

分号结束

例:printf ("How are you !");输出:How are you !例:int a = 100;printf ("variable a = %d",a );输出:variable a = 100

%d:用于显示有符号整型数据,如int、short型数据;%u:用于显示无符号整型数据,如unsigned int、unsigned short型数据;

%f:用于显示实型数据,如float型数据;%c:用于显示字符型数据,如char型数据;%s:用于显示字符串数据。格式控制符

C 及C++语言介绍

C 语言数据输出

scanf函数的格式控制符%[*] [width] [l | h] Type

●一般形式:

●说明:

?[ ]:表示可选项,可缺省。|表示互斥关系。

?width :指定输入数据的域宽,遇空格或不可转换字符则结束。

?Type :各种格式转换符(参照printf )。

?*:抑制符,输入的数据不会赋值给相应的变量。

?l :用于d 、u 、o 、x|X 前,指定输入为long 型整数;用于e|E 、f 前,指定输入为double 型实数。

?h :用于d 、u 、o 、x|X 前,指定输入为short 型整数。

C 及C++语言介绍

C 程序流程控制-选择结构

1. if 语句

简单if语句形式

if

(表达式)语句;

●格式:

●执行流程:

语句

表达式

T

F

例如:下面的程序段是输入两个整数,输出其中的大数。

int a, b, max;max = a;if (max < b) max = b;

printf("max = %d", max); if_else形式if (表达式)

语句1;else 语句2;●格式:●执行流程:表达式

语句1语句2T F 例如:下面的程序段同样是输出两个整数中的最大数。int a, b;printf ("input two numbers: ");

scanf ("%d%d", &a, &b);if (a > b)

printf ("max = %d\n", a);

else printf ("max = %d\n", b);

C 及C++语言介绍

C 程序流程控制-选择结构

if_else_if形式

if(表达式1) 语句1;else if (表达式2) 语句2;else if (表达式3) 语句3;……[else 语句n;]

●格式:

●执行流程:表达式1

语句1语句2F 表达式2

表达式3F

语句3语句n T F

T

T 例如:下面的程序段是判断输入字符的种类。char c;printf ("Enter a character: ");c = getchar ( );if (c < 0x20) printf ("The character is a control character\n");else if (c >= '0' && c <= '9')

printf ("The character is a digit\n");else if (c >= 'A' && c <= 'Z') printf ("The character is a capital letter\n");else if (c >= 'a' && c <= 'z') printf ("The character is a lower letter\n");else

printf ("The character is other character\n");

C 及C++语言介绍

C 程序流程控制-选择结构

if语句嵌套:●一般形式:if (expr1)

if (expr2) statement1

else statement2else

if (expr3) statement3else statement4

内嵌if

内嵌if if (expr1)if (expr2) statement1else

statement2内嵌if

if (expr1)if (expr2)

statement1else

statement3内嵌if

if (expr1)statement1else

if (expr3) statement3else

statement4

内嵌if

C 及C++语言介绍

C 程序流程控制-选择结构

2. switch语句(开关分支语句)

●一般形式:

switch ( 表达式){ case E 1:

语句组1;

break;case E 2:

语句组2;break;

…….

case E n :语句组n;break;[default:

语句组;break;]

}

●执行过程:switch

表达式语句组1语句组2语句组n 语句组

…...E 1 E 2E n default

case C 及C++语言介绍

C 程序流程控制-循环结构

1. while语句 一般形式:

while (表达式) 循环体语句;

执行流程:

F

T expr 循环体

while

其中:

●while后面的括号()不能省。●while后面的表达式可以是任意类型的表达式,但一般是条件表达式或逻辑表达式。

●表达式的值是是循环的控制条件。●语句部分称为循环体,当需要执行多条语句时,应使用复合语句。

特点:先判断表达式,再执行循环体

C 及C++语言介绍

C 程序流程控制-循环结构

【例】用while语句求1~100的累计和。

#include void main ( ){

int i = 1, sum = 0;

while ( i <= 100 ) { sum += i;i++;}

printf ("sum = %d\n", sum);}

循环初值

循环终值循环条件

循环体循环变量增值运行结果:sum =5050

C及C++语言介绍C程序流程控制-循环结构

2. do_while语句

一般形式:do

循环体语句;

while(表达式);

执行流程:

其中:

●while后面的括号()不能省。

●while最后面的分号;不能省。

●while后面的表达式可以是任意类型

的表达式,但一般是条件表达式或逻辑

表达式。

●表达式的值是是循环的控制条件。

●语句部分称为循环体,当需要执行多条语句时,应使用复合语句。

F

T

expr

循环体

do

while

特点:先执行循环体,再判断表达式C及C++语言介绍C程序流程控制-循环结构【例】用while语句求1~100的累计和。

#include

void main ( )

{

int i = 1, sum = 0;

do

{

sum += i;

i++;

} while ( i <= 100 );

printf ("sum = %d\n", sum);

}运行结果:

sum=5050

C及C++语言介绍C程序流程控制-循环结构

3. for语句

一般形式:for (表达式1;表达式2;表达式3)

循环体语句;

执行流程:

其中:

●for后面的括号()不能省。

●表达式1:一般为赋值表达式,给控制变量赋初值。

●表达式2:关系表达式或逻辑表达式,循环控制条件。

●表达式3:一般为赋值表达式,给控制变量增量或减量。

●表达式之间用分号分隔。

●语句部分称为循环体,当需要执行多条语句时,应使用复合语句。

F

T

expr2

循环体

for

expr1

expr3

C及C++语言介绍C程序流程控制-循环结构

【例】用while语句求1~100的累计和。

#include

void main ( )

{

int i , sum = 0;

for (i = 1; i <= 100; i++)

sum += i;

printf ("sum = %d\n", sum);

}

运行结果:

sum=5050

C 及C++语言介绍

C 程序流程控制-循环结构

三种循环可互相嵌套,层数不限

外层循环可包含两个以上内循环,但不能相互交叉 嵌套循环的执行流程

(1) while()

{ ……

while(){ ……}…...}

(2) do

{ ……

do

{ ……}while( );…...}while( );

(3) while()

{ ……

do

{ ……}while( );…….}

嵌套循环的跳转

禁止:

●从外层跳入内层●跳入同层的另一循环●向上跳转

4. 循环嵌套

(4) for( ; ;)

{ ……

do { ……}while();……while(){ ……}…...}

外循环内循环内循环C 及C++语言介绍

C 程序流程控制-循环结构

5. break 与continue 语句

break语句

功能:在循环语句和switch语句中,终止并跳出循环体或开关体说明:

(1) break不能用于循环语句和switch语句之外的任何其它语句之中。

(2) break只能终止并跳出最近一层的结构。

while (表达式1){

……

if (表达式2)break;……}

语句……

do {

……

if (表达式2)break;……

}while (表达式1);语句……

for (;表达式1;){

……

if (表达式2)break;……}

语句……

C 及C++语言介绍

C 程序流程控制-循环结构

5. goto 语句

一般形式:

goto 语句标号;……

语句标号:……

语句标号:……

……

goto 语句标号;

说明:

语句标号是按标识符规定书写的符号,放在某一语句行的前面,标号后加冒号(:)。语句标号起标识语句的作用,与goto 语句配合使用。 作用:

goto语句的作用是在不需要任何条件的情况下直接使程序跳转到该语句标号所标识的语句去执行。

C 及C++语言介绍

C 程序流程控制-循环结构

6. exit( )函数

功能:

说明:

参数status 为int 型,status 的值传给调用进程(一般为操作系统)。按照惯例,当status 的值为0或为宏常量EXIT_SUCCESS 时,表示程序正常退出;当status 的值为非0或为宏常量EXIT_FAILURE 时,表示程序出现某种错误后退出。

终止整个程序的执行,强制返回操作系统。 调用形式:

void exit( int status ); 头文件

C 及C++语言介绍

C 程序设计举例

【例】求1~100之间的所有素数

问题分析:

素数是指除了能被1和它本身整除外,不能被其它任何整数整除的数。例如,17就是一个素数,除了1和17之外,它不能被2~16之间的任何整数整除。根据素数的这个定义,可得到判断素数的方法:

把m作为被除数,把i = 2 ~(m-1)依次作为除数,判断被除数m与除数i相除的结果,若都除不尽,即余数都不为0,则说明m是素数,反之,只要有一次能除尽(余数为0),则说明m存在一个1和它本身以外的另一个因子,它不是素数。

事实上,根本用不着除那么多次,用数学的方法可以证明:只需用2~之间(取整数)数去除m,即可得到正确的判定结果。

这一思路的算法如下:

①从键盘输入一正整数m。②计算k = ③i从2变化到k,依次检查m % i是否为0。

④若m % i为0,则判定m不是素数,并终止对其余i值的检验;否则,

令i = i + 1;并继续对其余i值进行检验,直到全部检验完毕为止,这时判定m是素数。

m

m #include #include void main ( ){int m, i, k;printf ("input a number: “);scanf ("%d", &m); k = sqrt (m); i = 2;while (i <= k){ if (m % i == 0) break;i++; } if (i > k) printf ("yes\n");else printf ("no\n");}while 循环#include #include void main ( ){

int m, i, k;

printf ("input a number: “);scanf ("%d", &m); k = sqrt (m); for (i = 2; i <= k; i++) if (m % i == 0) break;if (i > k) printf ("yes\n");else printf ("no\n");}for 循环#include

#include void main ( ){int m, i, k;

printf ("input a number: “);scanf ("%d", &m); k = sqrt (m); i = 2;do { if (m % i == 0) break;i++; } while (i <= k);if (i > k) printf ("yes\n");

else

printf ("no\n");

}

do_while 循环

C 及C++语言介绍

C 语言缺陷与C++的引入

C 语言具有语言本身简洁、使用灵活方便、既有高级语言的特点,又具有汇编语言的特点、并且程序可移植性好等优点。但程序的语法结构不够严密,程序设计的自由度大。对于初学者来说,要能比较熟练运用C 语言来编写程序,并不是一件容易的事情。与其它高级语言相比而言,调试程序比较困难。随着C 语言应用的推广,C 语言存在的一些缺陷或不足也开始流露出来,并受到大家的关注。如:C 语言对数据类型检查的机制比较弱;缺少支持代码重用的结构;随着软件工程规模的扩大,难以适应开发特大型的程度等等。

为了克服C 语言本身存在的缺点,并保持C 语言简洁、高效,与汇编语言接近的特点,1980年,贝尔实验室的Bjarne Stroustrup 博士及其同事对C 语言进行了改进和扩充,并把Simula 67中类的概念引入到C 中。并在1983年由Rick Maseitti 提议正式命名为C++(C Plus Plus )。后来,又把运算符的重载、引用、虚函数等功能加入到C++中,使C++的功能日趋完善。

当前用得较为广泛的C++有:VC++ (Visual C Plus Plus )、BC++(Borland C Plus Plus )、AT&T C++等。

C 及C++语言介绍C++程序举例

一个简单的C++程序#include

void main(void )

{ cout<<“I am a student.\n”; //输出字符串}

主函数

函数体开始

函数体结束

输出流,在屏幕上打印引号内的字符串

分号,一条完整语句的结束符

本程序编译执行后,在DOS 屏幕上打印出I am a student.

包含文件

注释或说明

C及C++语言介绍C++程序举例求1+2+3+……+100

void main(void)

{ int i, sum;

for (i=1, sum=0; i<=100; i++) sum=sum+i;

cout<<“sum=”<

{ int i, sum;

i=1; sum=0;

while(i<=100)

{ sum=sum+i;

i=i+1;

}

cout<<“sum=”<

}

其他编程语言简介MATLAB介绍

MATLAB(矩阵实验室)是MATrix LABoratory的缩写,是

一款由美国The MathWorks 公司出品的商业数学软件。

MATLAB语言是当前国际上自动控制领域的首选计算机

语言,也是很多理工科专业最适合的计算机数学语言。

具有以下几方面的突出优势:

?编程简单,类似于其他语言,如C

?集成度更高,扩展性更好

?数学问题数值解能力强大

?在数学、工程领域有各种“工具箱”

?强大的系统仿真能力,Simulink建模

其他编程语言简介MATLAB介绍◆三大基本功能:数值计算、符号计算、图

形处理

◆程序设计与应用程序接口

◆MATLAB科学计算中的应用

—在数值分析中的应用

?多项式与插值、数据的曲线拟合

?数值微分与数值积分

?线性代数

?非线性方程求根

微分方程其他编程语言简介MATLAB介绍

—在最优化问题中的应用

—在概率统计中的应用

—在偏微分方程解法中的应用

—在复变函数中的应用

—数学问题的非传统解法

?模糊逻辑与模糊推理

?神经网络在数据拟合中的应用

?遗传算法在最优化求解中的应用

?……微分方程

—在建模仿真中的应用

—……

其他编程语言简介Other MATLAB ‐like Scilab 英文“Sci entific Lab oratory ”(科学实验室)的缩写。Scilab 是由INRIA (l'Institut national de recherche en informatique et en automatique ‐法国国立计算机及自动化研究院)和ENPC (l'école nationale des ponts et

chaussées ‐法国国立桥梁学院)开发的开放源码的科学计算自由软件。能处理包括信号处理、数据分析、图像增强、数值优化、动态系统仿真等方面的问题。

https://www.doczj.com/doc/da5659943.html,/其他编程语言简介Other MATLAB ‐like

Octave 是一个旨在提供与Matlab 语法相容的开放源码科学计算及数值分析的工具。Octave 与MatLab 的兼容性更高。Octave 遵循GPL 协议(GNU General Public License ),用户可以单独发行Octave 或者包含在其产品中发行。而Scilab 则不允许,你只能免费地使用它。Octave 没有图形界面,是命令交互的。具备以矩阵为基本数据类型,内置支持复数,有内置函数和外部函数库,用户自定义函数的可扩展性等特点。

https://www.doczj.com/doc/da5659943.html,/software/octave/

其他编程语言简介Python 介绍Python 是“一种解释型的、面向对象的、带有动态语义的高级程序设计语言”。它的语法简捷和清晰。尽管Python 可能不会像C 或者C++那样的编译型语言一样快,但是Python 可以大幅度节约编程时间,经常被当作脚本语言用于处理系统管理任务和网络程序编写,但它也非常适合完成各种高级任务。Python 支持命令式程序设计、面向对象程序设计、函数式编程、面向侧面程序设计、泛型编程多种编程范式。

https://www.doczj.com/doc/da5659943.html,/

其他编程语言简介Perl 介绍

Perl 是一族高级、通用、直译式、动态的程序语言。Perl 借用了C 、sed 、awk 、shell 脚本以及很多其他编程语言的特性。其中最重要的特性是Perl 内部集成了正则表达式的功能,以及巨大的第三方代码库CPAN 。Perl 语言的应用范围很广,除CGI 以外,Perl 被用于图形编程、系统管理、网络编程、金融、生物以及其他领域。由于其灵活性,Perl 被称为脚本语言中的瑞士军刀。Perl 具有较高灵活性和“过度”的冗余语法,但程序编写随意,难以阅读和维护。

https://www.doczj.com/doc/da5659943.html,/

程序编译介绍常用编译器

GNU编译器Intel编译器PGI编译器gcc C编译器

g++ C++编译器

g77 Fortran 77 编译器

gfortran Fortran 90 编译器

g95 Fortran 90 编译器

icc C编译器

icpc C++编译器

ifort Fortran 77, Fortran 90 编译器

pgcc C, C++编译器

pgf77 Fortran 77 编译器

pgf90 Fortran 90 编译器

程序编译介绍GCC介绍

目前Linux下最常用的C语言编译器是GCC(GNU

Compiler Collection),它是GNU项目中符合ANSI C标准

的编译系统,能够编译用C、C++和Object C等语言编写

的程序。GCC不仅功能非常强大,结构也异常灵活。

开放、自由和灵活是Linux的魅力所在,而这一点在GCC

上的体现就是程序员通过它能够更好地控制整个编译

过程。在使用GCC编译程序时,编译过程可以被细分为

四个阶段:

?预处理(Pre‐Processing)

?编译(Compiling )

?汇编(Assembling)

?链接(Linking)

程序编译介绍GCC介绍GCC常用选项:

‐c 只预处理、编译和汇编源程序,不进行连接。编译器对每一个源程序产生一个目标文件。

‐o file 确定输出文件为file。如果没有用‐o选项,缺省的可执行文件的输出是a.out。

‐Dmacro 定义指定的宏,使它能够通过源码中的#ifdef进行检验。

‐Idir 将dir目录加到搜寻头文件的目录列表中去,并优先于在gcc缺省的搜索目录。

‐O 对程序编译进行优化,编译程序试图减少被编译程序的长度和执行时间,但其编译速度比不做优化慢,而且要求较多的内存。

‐O2 允许比‐O更好的优化,编译速度较慢,但结果程序的执行速度较快。

‐g 产生一张用于调试和排错的扩展符号表。优化和调试通常不兼容,不要同时使用‐g和‐O(‐O2)选项。程序编译介绍GCC介绍GCC常用选项:

‐Ldir 将dir目录加到搜寻‐l选项指定的函数库文件的目录列表中去,并优先于gcc缺省的搜索目录。

‐lname 在连接时使用函数库libname.a,连接程序在‐Ldir选

项指定的目录下和/lib,/usr/lib目录下寻找该库文件。在没有使

用‐static选项时,如果发现共享函数库libname.so,则使用libname.so进行动态连接。

‐static 禁止与共享函数库连接。

‐shared 尽量与共享函数库连接。

‐Idir 将dir目录加到搜寻头文件的目录列表中去,并优先于

在gcc缺省的搜索目录。

‐Wall 在发生警报时取消编译操作,即将警报看作是错误。

‐Werror 在发生警报时取消编译操作,即把报警当作是错误。

‐w 禁止所有的报警。

gcc ‐o prog main.o subr.o ‐L../lib ‐lany ‐lm

程序编译介绍GCC介绍GCC基本命令:

(1)单个源文件的编译运行

gcc‐o hello hello.c

(2)多个源文件的编译运行

gcc‐o goodbye message.c main.c

(3)使用外部函数库

gcc ‐o trig ‐lm trig.c

(4)共享函数库与静态函数库

gcc‐shared ‐o libmessage.so message.o

gcc ‐o goodbye ‐lmessage ‐L. message.o 程序编译介绍Intel C++ Compiler Intel C++ Compiler, also known as icc or icl, is a group of C and C++ compilers from Intel Corporation available for Mac OS X, Linux and Microsoft Windows.

Windows Linux & Mac OS X Comment

/Od‐O0No optimization

/O1‐O1Optimize for size

/O2‐O2Optimize for speed and enable some optimization

/O3‐O3Enable all optimizations as O2, and intensive loop optimizations

/QxO‐xO

Enables SSE3, SSE2 and SSE instruction sets optimizations for non‐

Intel CPUs [9]

/fast‐fast

Shorthand. On Windows this equates to "/O3 /Qipo/QxHost/no‐

prec‐div"; on Linux"‐O3 ‐ipo‐static ‐xHOST‐no‐prec‐div". Note that

the processor specific optimization flag (‐xHOST) will optimize for

the processor compiled on—it is the only flag of ‐fast that may be

overridden.

/Qprof‐gen‐prof_gen Compile the program and instrument it for a profile generating run. /Qprof‐use‐prof_use

May only be used after running a program that was previously

compiled using prof_gen. Uses profile information during each step

of the compilation process.

程序编译介绍Intel Fortran Compiler Intel Fortran Compiler, also known as ifort, is a group of Fortran compilers from Intel Corporation. On Windows, it is known as Intel Visual Fortran. On Linux and OS X, it is known as Intel Fortran. Windows Linux & Mac OS X Comment

/Od‐O0No optimization

/O1‐O1Optimize for size

/O2‐O2Optimize for speed and enable some optimization

/O3‐O3Enable all optimizations as O2, and intensive loop optimizations

/QxO‐xO Enables SSE3, SSE2 and SSE instruction sets optimizations for non‐Intel CPUs [9]

/fast‐fast Shorthand. On Windows this equates to "/O3 /Qipo/QxHost/no‐prec‐div"; on Linux"‐O3 ‐ipo‐static ‐xHOST‐no‐prec‐div". Note that the processor specific optimization flag (‐xHOST) will optimize for the processor compiled on—it is the only flag of ‐fast that may be overridden.

/Qprof‐gen‐prof_gen Compile the program and instrument it for a profile generating run.

/Qprof‐use‐prof_use May only be used after running a program that was previously

compiled using prof_gen. Uses profile information during each step

of the compilation process.

程序编译介绍Makefile介绍

在开发大系统时,经常要将程序划分为许多模块。各

个模块之间存在着各种各样的依赖关系,在Linux中通

常使用Makefile来管理。

—由于各个模块间不可避免存在关联,所以当一个模块改动后,

其他模块也许会有所更新,当然对小系统来说,手工编译连

接是没问题,但是如果是一个大系统,存在很多个模块,那

么手工编译的方法就不适用了。

—在Linux系统中,专门提供了一个make命令来自动维护目标文

件。

—与手工编译和连接相比,make命令的优点在于他只更新修改

过的文件,而对没修改的文件则置之不理,并且make命令不

会漏掉一个需要更新的文件。

程序编译介绍Makefile 介绍Makefile 里有什么?Makefile 里主要包含了五个东西:显式规则、隐晦规则、变量定义、文件指示和注释。

1、显式规则。显式规则说明了如何生成一个或多的的目标文件。这是由Makefile 的书写者明显指出,要生成的文件,文件的依赖文件,生成的命令。

2、隐晦规则。由于make 有自动推导的功能,所以隐晦的规则可以让我们比较粗糙地简略地书写Makefile ,这是由make 所支持的。

3、变量的定义。在Makefile 中我们要定义一系列的变量,变量一般都是字符串。

4、文件指示。其包括了三个部分,一个是在一个Makefile 中引用另一个Makefile ,就像C 语言中的include 一样;另一个是指根据某些情况指定Makefile 中的有效部分,就像C 语言中的预编译#if 一样;还有就是定义一个多行的命令。

5、注释。Makefile 中只有行注释,用“#”字符表示。

注:在Makefile 中的命令,必须要以[Tab]键开始!

程序编译介绍

Makefile 介绍

一个简单例子:

extern void p(char *); main() {

p("hello world"); }

void p(char *str){

printf("%s\n",str);}

包含两个程序a.c 和b.c

Makefile 内容:

hello: a.c b.c

gcc a.c b.c ‐o hello

注意这里是一个Tab

执行make

gcc a.c b.c ‐o hello

产生一个叫hello 的可执行程序

程序编译介绍

Makefile 介绍Make 中的宏(Macro )

在make 中使用宏,要先定义,然后在Makefile 中引用。宏的定义格式为:

宏名= 宏的值(宏名一般习惯用大写字母)CC = gcc hello: a.ob.o

$(CC) a.ob.o ‐o hello a.o: a.c

$(CC) –c a.c b.o: b.c

$(CC) –c b.c

例:

程序编译介绍

Makefile 介绍

Make 中的宏(Macro )

还有一些设定好的内部变量,它们根据每一个规则内容定义。—$@ 当前规则的目的文件名;

—$< 依靠列表中的第一个依靠文件;

—$^ 整个依靠的列表(除掉了里面所有重复的文件名);—$? 依赖中所有新于目标的。

可以用变量做许多其它的事情,特别是当你把它们和函数混合使用的时候。如果需要更进一步的了解,请参考GNU Make 手册。('man make', 'man makefile')

程序编译介绍Makefile介绍修改后的Makefile

相关主题
文本预览
相关文档 最新文档