1、自己的讲稿 高级语言程序设计 第一讲授课内容:1、 什么是高级语言2、 C语言基本介绍3、 C语言课程设计任务书4、 本讲作业1. 计算机语言定义:1. 计算机语言是人与计算机之间传递信息的媒介,采用数字、字符和语法规则组成各种指令,以控制计算机。程序是计算机要执行的指令的集合。机器语言和汇编语言又称作低级语言,都是直接对硬件操作,只不过汇编语言的指令采用了英文缩写的标识符,更容易识别和记忆。它同样需要编程者将每一步具体的操作用命令的形式写出来。优点:源程序经汇编生成的可执行文件比较小,执行速度很快;缺点:冗长、复杂、容易出错、需要更多的计算机专业知识。高级语言是目前绝大多数编程者的选择。和汇
2、编语言相比,它不但将许多相关的机器指令合成为单条指令并且去掉了与具体操作有关但与完成工作无关的细节,例如使用堆栈、寄存器等,这样就大大简化了程序中的指令。由于省略了很多细节,所以编程者也不需要具备太多的专业知识。高级语言并不是特指的某一种具体的语言,而是括很多编程语言,如目前流行的c, c+, pascal, python, lisp, prolog, Delphi等等,这些语言的语法、命令格式都不相同。优点:与计算机的硬件结构及指令系统无关,它有更强的表达能力,可方便地表示数据的运算和程序的控制结构,能更好的描述各种算法,而且容易学习掌握缺点:编译生成的程序代码一般比用汇编程序语言设计的程序
3、代码要长,执行的速度也慢。2. 为什么以C语言作为高级语言程序设计的教学范例原因如下:A. C是结构式语言。结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C 语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。B. C语言功能齐全。具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。另外C语言也具有强大的图形功能,支持多种显示器和驱动器。而且计算功能、逻辑判断功能也比较强大,可以实现决策目的的游戏。C. C语言适用范围大。适合于多
4、种操作系统,如Windows、DOS、UNIX等等;也适用于多种机型。C语言对编写需要硬件进行操作的场合,明显优于其它解释型高级语言,有一些大型应用软件也是用C语言编写的。C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画。它是数值计算的高级语言。D. C很接近硬件层次, 可直接控制大部份的外围硬件。C 有pointer (指针), 可以存取任意内存地址, 许多CPU采用memory mapping I/O, 所以可以用C来控制I/O,写硬件控制程序. 可以说C把高级语言的基本结构和语句与低级语言的实用性结合了起来。3. C语言的基本使用步骤
5、(见PPT)4. C 程序集成开发环境熟悉常用的C语言IDE(集成开发环境)有Microsoft Visual C+,Dev-C+,Code:Blocks,Borland C+,Watcom C+ ,Borland C+ Builder,GNU DJGPP C+ ,Lccwin32 C Compiler 3.1,High C,Turbo C,C-Free,win-tc 等等。对于一个初学者,Microsoft Visual C+是一个比较好的软件。界面友好,功能强大,调试也很方便。然后依据如下步骤打开VC+ 6.01进入可视化的C+ 6.0 集成开发环境启动计算机,进入窗口环境操作界面。鼠标依
6、次点击“开始”“程序”“Microsoft Visual Studio 6.0”“Microsoft Visual C+ 6.0” 启动VC6.0 集成开发环境。选择“文件”(File)菜单中的“新建”(New)命令, 在新建对话框中,选择“文件”选项卡,再选择“C+ Source File”类型,按图示操作后单击对话框中的“确定”按钮。(见图1) 接着就会出现如图2 所示的VC 界面。 图1 图2 在编辑窗口中,输入如下内容:/* =什么也不做的程序.= */int main()return 0; /* 传回0 */点击“编译”按钮,编译程序my_c1.cpp,并在出现的对话框中选择“是(Y
7、)”,结果如图3所示。 图3(6) 点击“构建”按钮,构建可执行程序my_c1.exe, 在点击“执行”按钮,运行my_c1.exe程序,在出现的对话框中选择“是(Y)”,结果屏幕如图4所示。 图4这个程序什么也不做. C 标准规定 main() 函数 是程序的开始, 即主程序的意思。一个 C 写的软件或程序只有一个 main() 函数, 不管你写多少程序,一开始执行一定是由 main() 开始.数学的函数规定一定要传回一个值, 但 C 的函数(function)可以不用传回任何东西。在这里为了告诉 compiler : main() 这个 function 传回一个整数, 所以我们在 mai
8、n()前面加上 int . 意思就是 main() 这个 function 传回(return)一个整数的数值, 执行这个程序在结束时, 会将这个整数的数值传回给操作系统。在这个程序中, 一进入 main 什么也不做就传回 0 给操作系统结束了程序.C 的一个 block 由大括号组成, main() 这个函数的 body (本体)就是:return 0; /* 传回 0 */大括号的左括号是这个 main() 函数的开始, 右括号是结束, 你也可以写成: /* =什么也不做的程序.= */int main() return 0; /* 传回0 */ 只要括号有对齐, 一对一, 几个左括号就对
9、应几个右括号就可以了, 但为了视觉美观与程序阅读的便利性, 我们不建议上面的写法.另外, C 是大小写敏感的程序语言,例如 main() 与 MAIN() 与 Main() 是完全不同的, 若你学过 BASIC 或 PASCAL, 这一点请牢记.5. C 的 comment (批注)./* 传回 0 */上面这行是批注( comment ), 这一行不会被 compiler 处理, /* 跟 */ 包起来的文字就称批注, 所以程序的最前面也是一段批注:/* =什么也不做的程序.= */通常我们会在程序中加一些批注, 方便我们在日后维护程序时理解, 当程序共写了几千行到几万行时, 适当的加一些批
10、注可以便于我们了解整个程序是在做什么事,在正式的程序开发中, 加入适当或详细的批注已经是一个程序设计员的基本要求.底下列出一些常见的批注风格:/* 什么也不做的程序.*/或/* - 什么也不做的程序. - */若是一份正式的程序, 可能还会加上一些程序的文件名称, 开发日期, 作者, 最后修改日.,例如:/* =file name: c1.c功能: 什么也不做的程序.环境: DOS, Windows, UNIX.etc.作者: J.S Liu.开始日期: 2000/1/1.最后日期: 2000/12/31.= */要注意的是, C 不能用巢状批注, 譬如:/* 这是外层批注 /* 内层批注 *
11、/ */6. 使用 C 的标准输出函数程序中:#include 这一行是把 stdio.h 包进来一起 compile, 这个档案是 ANSI(American National Standards Institute,美国国家标准协会) 标准, 里面放了许多C 标准 I/O (输出输入) 函数 (functions) 的定义(definition), 写这一行的目的简单讲是因为在程序中使用了printf 这个函数输出字符串到屏幕上, 这个函数的定义放在stdio.h 中. C 规定你用到的函数或变量必需要有定义.C 的每一段叙述结束要用 (分号) .例如:你可以在一行里面写好几个 print
12、f(Hello World), 都用分号隔开, 就像底下这段程序:/* =Say Hello World! Bye Bye.= */#include int main()/* 印出Hello World! Bye Bye */printf(Hello World! ); printf(Bye ); printf(Bye);return 0;为了程序阅读方便并不建议你写成上面这样, 最好是一个叙述一行, 如下./* =Say Hello World! Bye Bye.= */#include int main()/* 印出Hello World! Bye Bye */printf(Hello W
13、orld! );printf(Bye );printf(Bye);return 0;上面的程序看起来就容易理解多了, 软件或程序的开发注重容易理解与方便沟通,良好的程序风格与适当的批注是一个好程序的基本要素.7. C的常见数据类型 (见ppt)例如:/* =变量宣告的例子= */int main()/* 变量宣告*/int a;int A;int b, c;a = 1;A = 8;b = 2;c = A - a + b; /* 先计算A - a + b, 将结果传会给c */printf( %d, c ); /* 以 printf 印出c 这个整数型态的变量*/return 0;%d :以10
14、进制打印一个整数先设 a = 1, A = 8, b = 2, 把 A - a + b 算出来之后存到 c 这个变量, 再以 printf 函数输出 c 这个整数型态的变量至屏幕上.程序执行结果: 9另一方面,C 允许 programmer 在宣告一个变量时, 就给定常数(constant)值, 所以你也可以写成:/* =变量宣告的例子3.= */#include int main()int a = 1;int A = 8;int b = 2, c;c = A - a + b;/* 输出a, A, b, c 到屏幕*/printf( a = %d, A = %d, b = %d, c = %d
15、 , a, A, b, c );return 0;程序执行结果: a =1, A = 8, b =2, c = 9若宣告时只写 long, 而未加 int 或 double, 则一律视为 long int.若只写 short 而未加 int, 则一律视为 short int.C的浮点计算,例如#include void main()float a = 0.5;double b = 1.2;int c = 3;b = b + a + c;/* 输出a, b, c 到屏幕*/printf( a = %3.1f, b = %3.1f, c = %d , a ,b, c );%3.1f 指定该浮点型变
16、量,总长度为3,注意包括小数点。其中.后的1是指定小数位数为1.程序执行结果:a = 0.5, b = 4.7, c = 3我们宣告了 a, b, c, 3 个变量, 并分别给予的型态是 float, double, int. 也分别给了初值. 把 b + a + c 计算之后的结果再存到 b.你在一些编译器上编译这个程序时, 可能会出现一些警告(warring)的讯息, 内容大概是: “type mismatched” 之类的讯息.因为在这一行里面, 出现了不同型态(type)的变量进行运算, 虽然 C compiler 会帮你转型(casting)进行运算, 但建议你最好自己转型,转型的写
17、法是:b = b + (double)a + (double)c ;你把运算结果存放的变量是哪一种型态 (type), 就在后面的变量或运算子前加上( type ). 这种转型只是暂时性的, 为了在运算过程中让所有的运算子变量型态都保持一致.C 的字符,例如:/* =字符范例 1= */#include int main()char x, y;x = a;y = (char)97;/* 输出x, y, x, 最后一个是以ASCII 值显示y */printf( x = %c, y = %c, ASCII of y = %d, x, y, y );return 0;在 PC 上任一种 O.S 的
18、执行结果:x = a, y = a, ASCII of y = 97字符型态的变量以 char 宣告, 在 C 中, 字符是用单引号 括起来, 如下几个例子:b /* 字符 b */C /* 字符 C */= /* 字符 = */& /* 字符 & */你也可以直接设定一个整数值给字符型态的变量, 在上面的程序中, 我们写了:y = (char)97;你可以查一下 ASCII 中, 字符 97 是什么字, y 就会是那个字.97 的前面加上 (char) 是为了转型所需。初学者最大的疑惑就是为何查 ASCII 的字符集的 97 , 且为何会输出一个 a, 这与机器及环境有关, 有些机器上, 9
19、7 可能是 X 或是其它字符.例如一些 IBM 大型主机(mainframe)上是用 EBDIC 字符集而不是常见的 ASCII 字符集, 环境的不同将造成程序在不同平台开发及被执行时有所不同.常数数字表示法/* =digital - 1= */#include int main()int a = 64;int b = 0x40;long c = 64L;printf(“%d,%d,%d”, a, b, c );return 0;执行结果:64, 64, 64程序中 0x40 代表的是一个 16 进位的数字, 也就是每 16 进一, 与一般常用的 10 进位不同. 0x40 与 10 进位的
20、64 值相同.64L 代表的是 64 这个数值的 type (型态)是 long. 不加 L 则表示是 integer (整数型态)。基本数据类型的大小常常有许多人会把 int 当16-bit, 可以表示 (216)/2-1到-(216)/2.这是错误的说法, 因为在 32-bit 的 C compiler 上, int 通常是 32-bit.再提到 long (长整数), 在 WATCOM C/C+ 386 版的 long 跟 int 一样是32 bit,但在 Symantec C/C+ 6.X 与 Borland C/C+ 4.X 的 386 compiler 中 long 是 64 bi
21、t.K&R 及 ANSI 没规定上面这些基本型态的长度, 因为规定这些型态的大小之后会产生另一些问题, 譬如某些系统是16-bit,但规定了32-bit 长的 int, 在运算时会因转换而变慢一些. 某些系统是 32-bit, 但 int 只有 16-bit, 程序又没办法有效利用32-bit 的运算效能, 等于还是拿 32-bit计算机在跑 16-bit 的程序.一些 8-bit 时代开发的 C 程序甚至有部份 code 还继续用在 16-bit 甚至 32-bit 的平台上, 若是定义了基本型态的大小, 当初 8-bit 时的 int 是 8-bit 长, 到了 16-bit 平台上势必会
22、变慢, 因为每次整数运算都要转换成 8-bit 之后再运算.这些例子说明是让初学者知道当初 C 的设计者为什么不定义这些基本型别的大小.不规定这些基本型态的长度并不会影响 C 的可移植性,因为可以利用 C 的 macro (宏) 来解决这些问题, 在以后我们会谈到如何使用 C的宏及前置处理器 (C Pre-Processor, 简称 CPP) 来解决可移植性的问题.C 的输出与输入的函数简介本节中介绍两个 C 的函数, 一个是 printf, 另一个是 scanf.printf() 是一个功能强大的函数, printf 是 ANSI C 制定在标准的 C 链接库中的一个函数. C 是一个很小的
23、程序语言, 早期的 C 没有这些函数可以用, 每个程序设计人员都要自己写自己的输出与输入基本函数给自己用, 后来ANSI 制定了标准, 在标准中规范了这些函数, 所以你不需要写自己的打印函数, 因为这些东西已经有标准的函数了.任何一家公司推出的 C compiler 如果宣称符合 ANSI C 标准, 那么她一定会提供这些链接库与函数, 只要你写的程序只用这些标准函数, 没用到特殊的函数, 那么你的程序将具有良好的可移植性, 也就是你的程序可以在不同的 C compiler 上编译(compile)通过, 不会受限在某一种品牌的 C compiler 上.举个例子, 早期使用 Turbo C
24、的 programmer, 用了 gotoxy, putpixel, putimage.,这些函数, 结果程序拿到 MS C 或 Visual C 上就出现一堆错误讯息, 因为这些函数不是标准函数, 是当时 Borland 为了吸引 programmer 购买, 所以附了这些函数在产品中, 你用了这些不是 ANSI 标准的函数, 就代表你写的程序将会无法在其它的 C compiler 上编译使用, 因为其它的 C compiler 并不一定提供这些函数.现在要介绍 printf 这个函数的一些其它功能, 更详细的介绍请自行查阅C 标准链接库的书籍文件.打印整数, 以十进制方式印出:printf
25、( c is %d, c ); /* 用 %d */打印整数, 以十六进制方式印出:printf( c is %x, c ) /* 用 %x */打印浮点数:printf( a is %f, a ); /* 用 %f */打印浮点数, 正整数印 5 位数, 小数点后印 2 位数.printf( b is %5.2f, b ); /* 用 %5.2, 印 5 位正整数, 2 位小数 */打印一个字符.printf( x is %c, x ); /* 用 %c 印出一个字符 */打印一个字符串.printf( s is %s, s ); /* 用 %s 印出一个字符串 */换行. 换行可用 n.p
26、rintf( 换行n);输出一个 tab. 用 tprintf( t );输出一个双引号 . 用 printf( );输出倒斜线. 用 .printf( ) ;printf 可接受不定数目的参数, 意思是这个函数没有规定只能放多少参数, 例如:printf( a is %d, b is %f, c is %f, a, b, c );若要从键盘输入数据则可以使用 scanf 这个函数, 以下是个简单的例子:/* =输入一个字符= */#include int main()char ch;printf(Input a char:);scanf( %c, &ch ); /* ch 前面加个&(地址操
27、作数) */return 0;scanf 与 printf 类似, 差别是 printf 是输出, scanf 是输入, 但 scanf 的参数是给地址,不是直接传值, 因此我们在变量 ch 前加上地址运算为 &ch。再举一个例子:/* =输入一个整数= */#include int main()int i;printf(Input an integer:);scanf( %d, &i ); /* ch 前面加个&(地址操作数) */printf( the number is %d, i );return 0;程序执行结果:Input an integer:16the number is 1616 是输入的整数值, 输入之后将会存放到变量 i , 接着再用 printf 输出 i.8. C 语言基本运算符例1:/* =基本运算范例.= */#includeint main()int a,b;a = 10; b = 3;printf( %d n, a * b );printf( %d n, a / b );printf( %d n, a + b );printf( %d n, a - b );printf( %d n, a % b );return 0;执行结果:3031371例2:/* =关系操作数的范例.= */#include
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1