1.1引例
编写程序,输出两个整数中的最大值
1.2程序与程序设计语言
1.2.1程序设计语言的发展
1.机器语言
机器语言属于第一代计算机语言,计算机内部运算采用的是二进制,也就是说计算机只能识别和接受由0和1组成的指令。
特点:难学、难写、难记、难修改。
2.汇编语言
为了减轻使用机器语言编程的困难,人们采用助记符来代替机器指令的二进制窜,如用ADD表示加法,SUB表示减法,MOV表示传送数据,这样就能使运算指令使用符号而不再使用二进制表示。其特点容易被人读懂,程序修改与维护也很改变,运行效率仅次于机器语言。缺点十分依赖机器硬件,可移植性不好。
**
3.高级语言**
接近与数学语言或人的自然语言(英语),同时又不依赖于计算机硬件,编制的程序能在所有的机器上通用。其特点易学、易用、易维护,人们可以更有效、更方便地用它来编制各种用途的计算机程序。
(1)非结构化的语言
程序员往往只追求程序的执行效率,而不顾及程序的结构,使程序变的难以阅读和维护。早期FORTRAN、ALGOL、和BASIC都属于非结构化的语言。
(2)结构化的语言
程序必须由具有良好特性的基本结构(顺序结构、分支结构、循环结构)构成,程序中的流程不允许随意跳转,程序总是由上而下顺序执行各个基本结构。采用结构化的语言所编制的程序结构清晰,易于阅读和维护QBASIC、Pascal和 C 都属于结构化的语言。
(3)面向对象的语言
对象是数据以及对数据所进行的操作的封装体,所以采用面向对象的程序设计方法开发应用程序变得更序设计方法的语言。容易,耗时更少,效率更高。C++、C#、Visual Basic和JAVA 等语言均是支持面向对象程序设计方法的语言。
1.2.2程序设计语言功能
1.数据表达以表达实际问题中存在的复杂的数据结构。
2.流程控制程序设计语言除了具备良好的数据表达能力之外,还必须提供对不同类型的数据进行处理的手段。
(1)顺序控制结构
一条语句执行完后,按自然顺序执行下一条语句。
(2)分支控制结构
又称选择结构。计算机在执行程序时,常常需要根据不同的条件选择执行不同的语句。
(3)循环控制结构
计算机需要重复执行相同的语句。重复执行一般有条件的,在条件满足时,重复执行,不满足时,则不会重复执行。
共同特点
①只有单一的入口和单一的出口;
②结构中的每个部分都有被执行的可能;
③结构内不应出现永不终止的死循环。
1.2.3 程序的算法表示软件的主体是程序,程序的核心是算法。算法就是解决问题的方法与步骤。
算法的特性
①确定性。算法的每条指令必须有明确的含义,不能有二义性。队友相同的输入必须得出相同的执行结果。
②有穷性。一个算法应包含有限个操作步骤。在执行若干个操作步骤之后,算法将结束,而且每一步都在合理的时间内完成。
③可行性。算法中指定的操作都可以通过已经实现的基本运算执行有限次后实现。
④有零个或多个输入。算法是用来处理数据对象的,在大多数情况下,这些数据对象需要通过输入来得到。
⑤有一个或多个输出。算法的目的是为了求“解”,“解”只有通过输出才能得到。
1 用文字描述算法【算法 2】随机输入 10 个两位的正整数,找出其中最大的数,写出其算法。
①输人第一个数,放入 max 中;
②用i 统计比较的次数,其初值置为 1;
③若≤9,转第④步,否则转第⑧步;
④再输人一个数,放在 x 中;
⑤比较x和 max 中的数,若 x>max,则将 x的值赋给 max;否则 max 的值不变;
⑥ i 增加 1;
⑦返回到第③;
⑧输出 max 中的数,此时 max 中的数即为 10 个数中最大数。
2.用流程图描述算法
3 伪代码表示
{
输人第 1 个数赋给 max;
for(i=1;i<=9;i++)
{ 输入第 i+1 个数赋给 x;
if(x>max)
max=x;
}
输出 max;
伪代码结构清晰,代码简单,可读性好,并且类似自然语言,可以很容易用一种程序设计语言(如 C 语言)来实现。
4 程序设计语言来表示
#include<stdio. h>
int main()
{ int a,b,t; /定义所用的变量/
a=3;b=5; /给变量赋值/
t=a; /变量 a 的值存人变量 t中/
a=b; /*变量 b 的值赋予变量 a */
b=t; /*变量t的值赋予变量 b */
printf("%d %d",a,b);/输出交换后的变量的值/
return 0;
采用程序设计语言描述一个算法,也会有很多不便。因为按照程序设计语言的语法规定,往往要编写很多与算法无关而又十分繁琐的语句,如变量定义、输人输出格式描述等。因此,很多情况下,若要专注于算法设计的话,经常会采用伪代码来描述算法。
1.3 C语言程序设计的特点
1.3.1 C语言的发展历史
1963年英国剑桥大学推出了CPL(Combined Programming Language)语言。
1967年剑桥大学的Martin Richards对CPL语言进行了简化,推出了BCPL(Basic Combined Programming Language)语言。
1970年美国贝尔实验室的Ken Thompson对BCPL语言又做了进一步简化,设计出了更接近硬件的B语言。
1972年工作于美国贝尔实验室的Dennis Ritchie在B语言的基础上设计出C语言。
1973年,Dennis Ritchie和Ken Thompson对UNIX操作系统进行了重写,其中90%以上的代码采用的是C语言,很大程度上提高了UNIX操作系统的可移植性和可读性。
1983年,美国国家标准协会(American National Standards Institute,简称ANSI)制定了一套C语言标准,称为ANSI C。
目前使用的如Microsoft C、Turbo C等版本均以ANSI C为标准,同时各自分别进行了一些扩充。本书使用的主要是Turbo C编译系统。
1.3.2 C语言的特点
优点:
①C语言语句简洁紧凑,使用方便灵活
②运算符丰富,表达能力强
③C语言程序可移植性好
④生成的目标代码质量高,运行效率高
⑤语言处理能力强
⑥C语言是一种结构化语言
缺点:C语言对语法检查不严格,许多时候需要程序员自己保证程序的正确,而这对初学者是很难做到的。
例如,数据类型检查不严格,表达式运算会出现二义性;对数组下标越界不检查,导致程序出错。除此之外,由于C语言运算符较多,初学者很难掌握其运算的优先级与结合性。
1.3.3 C语言的约定
(1)标识符
①C语言的标识符由字母、数字和下划线组成,其中第一个字符必须是字母或下划线。
例如,_00、print、FOR均是合法的标识符,而&a、-123、a b均是不合法的标识符。
②在C语言中,标识符中英文字母的大小写是有区别的。
例如,name与Name是不同的标识符。
③标识符的命名最好做到“见名知义”,增加程序的可读性。
例如,用sno表示学号,sname表示姓名
标识符的有效长度为1~255个字符。
(2)关键字
关键字(又称保留字)是 C语言规定的,赋予特定含叉和有专门用途的标识符。
例如,例 1. 1 中的 int,return 均是关键字。C语言中共有 32 个关键字。
注意:C语言的关键字都用小写字母书写,不能用大写字母书写。如关键字int 不能写成INT。
**(3)**用户自定义标识符:
程序中定义的变量名、数据类型名、函数名和符号常量名
**(4)**预定义标识符头文件和库函数中定义的一些标识符(例如scanf、printf等)
**(5)**分隔符:
逗号:分隔变量名 空格:分隔各单词
2 .C语言的语法成分
(1)常量常量是有数据类型的。
例如,整型常量2、实型常量2.0、字符型常量’2’ 、字符串常量”C Programming.”等。
(2)变量变量定义的一般形式是:1类型名 变量名。
例如,例1.1中的 int a,b,c; 定义了三个整型变量。
(3)运算符
算术运算符+(加)、-(减)、(乘)、/(除)、%(求余);
关系运算符>(大于)、>=(大于等于)、==(等于)、<(小于)、<=(小于等于)等等。参与运算时只要求有一个数据对象的称为单目运算符,有两个数据对象的称为双目运算符,有三个数据对象的称为三目运算符。
(4)表达式
运算符有优先级。
例如,表达式 bb-4ac>0 中,由于算术运算优先于关系运算,所以先计算 bb-4a*c ,再做关系比较运算 > 。
(5)语句
在C语言中,语句是程序最基本的执行单位,以分号结尾。
(6) 函数定义与调用
函数十完成特定功能的小模块,是C语言中唯一的种子程序。
(7)输入与输出
C语言没有提供用于数据输入及输出的语句,所有的输入与输出都是通过系统提供的有关函数(如scanf()和printf()函数)来实现的。
1.4 C程序的编辑、编译、链接、运行
1.4.1程序设计的任务
(1)分析问题
(2)设计算法
(3)程序设计
(4)运行并调试程序
(5)分析程序运行结果
(6)编写程序文档