Skip to content

第一部分:概述


一、 C 语言概述

1. 什么是程序设计语言

一台没有安装任何软件的计算机称为“裸机”,只有借助各种软件,计算机才能进行各项工作。软件由程序和程序的相关文档构成,程序是软件的核心部分,由具体的程序设计语言编写。

上世纪五十年代,早期的计算机使用汇编语言和机器码来编写程序,它们编写的语句很难记忆,而且非专业人员很难掌握。于是很多研究人员开始致力于高级语言的开发。经历过 Fortain(1957)、Basic(1964)等语言之后,美国贝尔实验室在1972 年设计出C 语言。在1973 年,研究人员用 C 语言编写了UNIX 系统 90%以上的部分,并发表了 UNIX 5 版本。1978 年以后,C 语言被广泛应用在各类计算机的程序设计上,并且还用来编写操作系统,成为当代最优秀的程序设计语言之一。

随着计算机的普及,出现了许多 C 语言的版本,由于没有统一的标准,使得众多种类的C 语言有了一些不一致的地方。为了改变这种现状,美国国家标准研究所(ANSI)制定了一套 C 语言的国际标准,成为现行的 C 语言标准。

2.C语言的特点

2.1.语言简介、紧凑、灵活

C语言有32个关键字,9种控制结构,程序书写灵活自由。

2.2.运算符丰富

C语言中有34种运算符,其中包括一些具有C语言特性的运算符,使C语言能更容易实现算法。

2.3.功能丰富

C语言有各种数据类型,能够实现各种复杂的数据结构。引入指针概念,配合位运算,可以直接访问物理地址,能对硬件直接进行操作,虽然C语言是一种高级语言,但同时也具备低级语言的大部分功能。

2.4.结构化程序设计语言

函数是C程序的基本模块,每个函数实现一个程序中的一个功能。一个程序分成多个函数模块,每个模块可以分开调用,也可以分模块对程序进行修改。C语言同时具有多种程序控制结构,使程序完全结构化。

2.5.可移植性强

C语言是一种可移植语言,在一个系统上编写的C程序可以在其他系统上运行。和其他高级语言相比,C语言在可移植性方面处于领先地位。

2.6.高效

C语言的运行效率在高级语言中仅次于汇编语言,在其他高级语言中运行效率非常出众。

3.程序设计初步

3.1.程序设计的一般步骤

一般人们会认为,程序设计就是编写代码到运行成功的过程。这是一个误区。程序设计大概由以下的步骤组成。

a.分析

在这一步骤中,要明确要解决的问题。通过对问题的分析,明确要写的程序具有什么样的功能。不需要考虑如何完成程序。这一阶段也成为需求分析。

b.程序设计

在设计阶段要考虑到程序界面、算法、操作、数据结构等的设计问题。当处理复杂的问题的时候,选择合适的数据结构会提高程序运行的效率。这个阶段是对程序整体的规划,不涉及代码。

c.编写代码

对程序进行分析和设计之后,就要把自己构思好的程序通过C语言知识编写成程序代码。存放程序代码的文件叫做源程序。

d.编译、连接、运行

编写好的源程序在编译器中进行编译,生成二进制代码(计算机唯一能识别的机器码),如果程序有错误,会在这个阶段生成提示信息,用户经过修改之后可以再次编译。编译通过之后会生成以.obj为后缀的二进制代码文件。将得到的二进制代码文件与系统标准模块(如C语言的标准函数库)经过连接处理之后,获得后缀名为.exe的可执行文件,才能够在计算机中运行。

e.测试与调试

某些情况下,运行成功的程序不一定有正确的运行结果,这是由于程序中会有某些逻辑错误(bug)。这个时候就需要对程序进行测试和调试。测试与调试的工作往往比编写程序更加花费时间。

3.2.编写第一个C语言程序

c
//第一个C语言程序
#include<stdio.h>
int main( )
{
    int  n;
    n = 1;
    printf("This is my NO.%d program" , n);
    return  0;
}

程序分析:

a.第1行位于两个斜线之后的字符成为注释,对程序有解释的功能。注释在小型程序中没有太大显著的作用,往往在更加大型的程序程序愈加显著。注释有两种形式,一种是以两个斜线“//”开头的行注释,在两个斜线之后的一行代码都会无效。另一种形式的注释是由“/”和“/”一对符号组成的块注释,从一个“/”开始,一直到下一个“/”出现之前的所有代码都会无效。

b.第2行为预编译指令,stdio.h文件中包含着C语言中有关于输入输出功能的预定义,在这里需要用到对应功能,所以要把这个文件包含进来。这个文件被称作“头文件”。

c.第3行为程序的主函数。一个C程序有且只能有一个主函数,C程序从主函数里的第一行开始运行。主函数规定的返回值在不同教材中规则不一,在这里统一规定主函数的返回值是整形。并且在主函数的最后一行中要让main函数返回0(第8行)。有关于返回值的相关内容将在函数一章学习,在这里可以大致理解为返回值就是函数值。

d.第5行定义了一个整形变量n,第6行给n赋值为1,第七行输出一行字:

sh
This is my NO.1 program.

3.3.编程环境

C语言常用的编程环境有Visual C++ 6.0和Turbo C。用来编写程序的软件称为编译器。后来新兴起的编译器层出不穷,例如“啊哈C”、“C-Free”等。除此之外,还有一些在线的编译器可以使用。对初学者来说,选择编译器要根据自己的使用习惯。编译器只是一个编写程序的工具,能善于使用、借助一个自己使用舒服的编译器来编写出出色的程序,才是终极目标。

3.4.如何学习C语言

a.锻炼分析解决问题的能力

学习程序设计,解决问题过程中更多的应该是对程序的思考。解决实际问题,就是对实际问题进行具体分析,建立相应的数学模型,确定一个实施方案。最后将实施方案转化成程序代码。如果具备了这种分析解决问题的能力,编写代码会变得非常简单。要提高这种能力,要在解决问题的过程中锻炼自己的“编程思想”。(相关资料可以查询《数学(必修3)》(人民教育出版社)“程序框图”部分)

b.多实践,提高动手能力

“纸上得来终觉浅”,既然程序设计是一门实践性的课程,所有的学习不能只在纸面上进行,应该多加实践,经常给自己找一些数学问题来做练习,提高动手能力。

c.多阅读他人编写的程序

不要一味地埋头苦干,偶尔抬起头来看看别人写的代码,对比自己的程序,思考自己有哪些不足,取长补短,会使自己的代码越来越出色。

d.养成良好的程序设计风格

请参阅《C语言代码编写规范》,熟悉代码的编写格式。虽然代码规范与否并不影响程序的运行,但是依照代码的标准格式编写出的代码清晰明了,让人一看就能明白编写者的目的。通常一个团体、公司、机构会有一套自己独有的代码规范格式,用于内部编写代码使用。

二、算法

1.什么是算法

所谓算法,是解决一类问题的方法。做任何事情都要有一定的步骤,广义地说,为解决一个问题而采取的方法和步骤就称之为“算法”。对同一个问题可以有多种算法。 为了有效地解决问题,不仅要保证算法正确,还要考虑到算法的质量,选择合适的算法。算法通常分为数值运算算法与非数值运算算法,对于数值运算算法很简单,找到对应的数学模型,选择对应的算法,从而解决问题;对于非数值运算,种类繁多,要求各异,很难做到全部问题都有相应的答案。这个时候解题者需要参考已有的类似的算法,重新设计解决特定问题的专门算法。在解决这类问题的时候要学会举一反三,同时在脑中积累典型算法,搭建自己的“算法库”。

2.算法的特性

2.1.有穷性

一个算法应该包含有限的操作步骤,而不能让程序进入无休止的工作。

2.2.确定性

算法中的每一个步骤都应当是确定的,也就是说,算法的含义应当是唯一的,而不应当产生歧义。

2.3.有效性

算法中的每一个步骤都应当有效地执行,并得到确定的结果。例如当b = 0,a / b则不能有效执行。

2.4.可以没输入,但要有输出

一个算法可以有零个或多个输入,一个或多个输出。输出很重要,是一个算法进行下来的结果。如果没有输出,算法就失去了意义。

3.表示一个算法

3.1.用自然语言

即用我们日常交流用的语言来表示解决问题的方法。由于这种方式通俗易懂,但文字冗长,意义不严格,往往在除了表示那些很简单的算法以外,通常不使用自然语言来表示一个算法。

3.2.用流程图

相关内容可以参考《数学(必修3)》(人民教育出版社)“程序框图”部分。

3.3.用伪代码

伪代码书写格式自由,只是为了表达设计者的思想。例如求5!

begin
1 -> t
2 -> i
while  i ≤ 5
    { 
     t*i -> t
     i+1 -> i
    }
   print  t
end

用伪代码书写算法形式上很宽松,容易书写,也容易看懂,但是没有办法放入编译器中生成真正的计算机程序,只能用来表示设计过程。因此,书写一个算法,最终还是要用到计算机语言。

3.4.用计算机语言

例:将3.3的算法(求5!)用C语言表示

c
#include<stdio.h>
int main( )
{
    int  i , t;
    t = 1;
    i = 2;
    while(i <=5)
   {
        t = t * i;
        i = i + 1;
    }
    printf(“%d\n” , t);
    return  0;
}

© thebestxt.cc
辽ICP备16009524号-8
本站所有文章版权所有,转载请注明出处