[C语言基础] 第1章 程序设计与C语言

1.1 什么是计算机程序

程序 = 算法 + 数据结构

程序就是一组计算机能识别和执行的指令。每一条指令使计算机执行特定的操作。

1.2 什么是计算机语言

计算机语言:计算机和人都能识别的语言

经历了以下发展阶段:机器语言,汇编语言,高级语言

1.2.1 计算机语言的发展

高级语言的发展经历以下阶段:非结构化语言,结构化语言,面向对象的语言

1.2.2 计算机语言的特点

机器语言的特点:

  • 机器语言是用二进制代码表示的语言,是计算机唯一可以直接识别和执行的语言。

  • 它具有计算机可以直接执行、简洁、运算速度快等优点,

  • 它直观性差,非常容易出错,程序的检查和调试都比较困难,此外对机器的依赖型也很强。

汇编语言的特点:

  • 汇编语言是面向机器的程序设计语言,它是为了解决机器语言难以理解和记忆的缺点,用易于理解和记忆的名称和符号表示机器指令中的操作码。

  • 使用汇编语言编写的程序,机器不能直接识别 ,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序把汇编语言翻译成机器语言的过程称为汇编。

高级语言的特点:

  • 高级语言的数据结构要比汇编和机器语言丰富

  • 与具体机器结构的关联没有汇编以及机器语言密切

  • 更接近自然语言更容易掌握

  • 编写的程序要经过编译或解释计算机才能执行

1.3 C语言的发展及其特点

1.3.1 C语言的发展

1972年,美国贝尔实验室的D.M.Ritchie在B语言的基础上设计出了C语言。最初的C语言只是为描述和实现UNIX操作系统提供一种工作语言而设计的。

1973年,KenThompson和 D.M. Ritchie合作把UNIX的90%以上用C语言改写,即 UNIX第5版。随着UNIX的日益广泛使用,C语言也迅速得到推广。

1978年以后,C语言先后移植到大、中、小和微型计算机上。C语言便很快风靡全世界,成为世界上应用最广泛的程序设计高级语言之一。 以UNIX第7版中的C语言编译程序为基础,1978年,Brian W.Kernighan和 DennisM.Ritchie合著了影响深远的名著The C Programming Language,这本书中介绍的C语言成为后来广泛使用的C语言版本的基础,它是实际上第一个C语言标准。

1983年,美国国家标准协会(ANSI) ,根据C语言问世以来各种版本对C语言的发展和扩充,制定了第一个C语言标准草案('83 ANSI C)。

1989年,ANSI公布了一个完整的C语言标准:ANSI X3.159---1989(常称为 ANSI C 或 C 89)。

1990年,国际标准化组织ISO(International Standard Organization)接受C 89作为国际标准ISO/IEC 9899:1990,它和ANSI的C 89基本上是相同的。 1999年,ISO又对C语言标准进行了修订,在基本保留原来的C语言特征的基础上,针对应用的需要,增加了一些功能,尤其是C+中的一些功能,并在2001年和2004年先后进行了两次技术修正,它被称为C 99,C 99是C 89的扩充。

1.3.2 C语言的特点

C语言是一种用途广泛、功能强大、使用灵活的过程性(procedural)编程语言,既可用于编写应用软件,又可用于编写系统软件。

C语言有以下一些主要特点:

  • 语言简洁、紧凑,使用方便、灵活

    一共只有37个关键字,9种控制语句,主要用小写字母表示。

    C是一个很小的内核语言,只包括极少的与硬件有关的成分,C语言不直接提供输入和输出语句、有关文件操作的语句和动态内存管理的语句等(这些操作是由编译系统所提供的库函数来实现的),C的编译系统相当简洁。

  • 运算符丰富。

    共有34种运算符,把括号、赋值和强制类型转换等都作为运算符处理。

  • 数据类型丰富。

    C语言提供的数据类型包括整型、浮点型、字符型、数组类型、指针类型、结构体类型和共用体类型等,C 99又扩充了复数浮点类型、超长整型(long long)和布尔类型(bool)等。

  • 具有结构化的控制语句

    (如 if...else语句, while语句,do...while语句, switch语句和for语句)。

    用函数作为程序的模块单位,便于实现程序的模块化。C语言是完全模块化和结构化的语言。

  • 语法限制不太严格,程序设计自由度大

    例如,对数组下标越界不进行检查。对变量的类型使用比较灵活。例如,整型量与字符型数据以及逻辑型数据可以通用。

  • C语言允许直接访问物理地址,能进行位(bit)操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。

    因此,C语言既具有高级语言的功能,又具有低级语言的许多功能,可用来编写系统软件。

    C语言的这种双重性,使它既是成功的系统描述语言,又是通用的程序设计语言。

  • 用C语言编写的程序可移植性好。

    由于C的编译系统相当简洁,因此很容易移植到新的系统。而且C编译系统在新的系统上运行时,可以直接编译"标准链接库"中的大部分功能,不需要修改源代码,因为标准链接库是用可移植的C语言写的。因此,几乎在所有的计算机系统中都可以使用C语言。

  • 生成目标代码质量高,程序执行效率高。

    目前C的主要用途之一是编写嵌入式系统程序。由于具有上述优点,使C语言应用面十分广泛,许多应用软件也用C语言编写。

1.4 C语言程序

1.4.1 C语言程序的构成

一个C语言程序由一个或多个源程序文件组成。

一个C语言程序不论由多少个源文件组成,都有一个且只能有一个main函数,即主函数。

函数是C程序的基本单位。

在一个源程序文件中可以包括3个部分:

  • 预处理指令,如#include <stdio.h>

    • 所有的#开头的行,都代表预编译指令,预编译指令行结尾是没有分号的
  • 全局声明

  • 函数定义

1.4.2 C语言程序的结构特点

C语言程序的结构具有以下特点:

  • 一个程序由一个或多个源程序文件构成。

    在一个源程序文件中可以包括3个部分:

    • 预处理指令,如#include <stdio.h>

    • 全局声明

    • 函数定义

  • 函数是C程序的主要组成部分

    一个C语言程序是由一个或多个函数组成的,其中必须包含一个main函数(且只能有一个main 函数)。

    为了便于调试和管理,可以使一个程序包含若干个源程序文件,每个源程序文件又包含若干个函数。一个源程序文件就是一个程序模块,即将一个程序分成若干个程序模块。 在进行编译时是以源程序文件为对象进行的。在分别对各源程序文件进行编译并得到相应的目标程序后,再将这些目标程序连接成为一个统一的二进制的可执行程序。 C语言的这种特点使得容易实现程序的模块化。

  • 一个函数包括两个部分

    • 函数首部。即函数的第1行,包括函数类型、函数名、函数参数(函数参数类型、参数名)。

    • 一个函数名后面必须跟一对圆括号,括号内写函数的参数名及其类型。

    • 如果函数没有参数,可以在括号中写void,也可以是空括号,如:int main(void) 或 int main()

    • 函数体。即函数首部下面的花括号内的部分。

      如果在一个函数中包括有多层花括号,则最外层的一对花括号是函数体的范围。 函数体一般包括以下两部分: (1)声明部分。声明部分包括:定义在本函数中所用到的变量,对本函数所调用函数进行声明。 (2)执行部分。由若干个语句组成,指定在函数中所进行的操作。 在某些情况下也可以没有声明部分,甚至可以既无声明部分也无执行部分。也就是空函数,是合法的。

  • 程序总是从 main函数开始执行的,在main函数结束

    main函数是程序的入口

    不论main函数在整个程序中的位置如何(main函数可以放在程序最前头,也可以放在程序最后,或在一些函数之前、另一些函数之后)。

  • 程序中要求计算机的操作是由函数中的C语句完成的

    如赋值、输入输出数据的操作都是由相应的C语句实现的。

    C程序书写格式是比较自由的。一行内可以写几个语句,一个语句可以分写在多行上。

    但为清晰起见,习惯上每行只写一个语句

  • 在每个数据声明和语句的最后必须有一个分号

    分号是C语句的必要组成部分。

    语句最后加分号,标志这条语句的结束。

  • C语言本身不提供输入输出语句

    输入和输出的操作是由库函数scanf和 printf等函数来完成的。C语言对输入输出实行"函数化"。

  • 程序应当包含注释

    一个好的、有使用价值的源程序都应当加上必要的注释,以增加程序的可读性。

1.4.3 典型的源程序书写格式

  • 头文件:#include <stdio.h>,它包含了输入输出相关的函数

  • 主函数(main函数)

  • 必要的注释

cpp 复制代码
/*最简单的C语言程序*/
# include <stdio.h>
int main(){
 
    /*第一个C语言程序*/
    printf("Hello,world! \n");
    return 0;
 
} 

1.4.4 C语言的注释

C语言支持两种注释方式:

  • 单行注释

    从//开始,以换行符结束,不可跨行。

    注释内容可以单占一行,也可以在一行代码的右侧。

    cpp 复制代码
    //我是一个单行注释
  • 多行注释

    以/*开始,以*/结束的块注释,可以跨行。

    cpp 复制代码
    /* 我是一个可以
    跨行的注释 */

1.4.5 头文件

C语言中的头文件是扩展名为.h的文件,包含了C函数声明和宏定义,被多个源文件中引用共享。

有两种类型的头文件:程序员编写的头文件和编译器自带的头文件。

在程序中要使用头文件,需要使用C预处理指令#include来引用它

头文件的作用是为了方便管理和重用代码,它可以被多个源文件共享,从而实现代码的重用和模块化。

#include< > 与 #include ""的区别:

  • < > 编译系统从存放C编译系统的子目录中去找所要包含的文件。表示系统直接按系统指定的目录检索,这种是标准方式

  • "" 表示系统先在 "" 指定的路径(没写路径代表当前路径)查找头文件,如果找不到,再按系统指定的目录检索

常用的头文件:

cpp 复制代码
#include <assert.h>     //设定插入点
#include <ctype.h>      //字符处理
#include <errno.h>      //定义错误码
#include <float.h>      //浮点数处理
#include <fstream.h>    //文件输入/输出
#include <iomanip.h>    //参数化输入/输出
#include <iostream.h>   //数据流输入/输出
#include <limits.h>     //定义各种数据类型最值常量
#include <locale.h>     //定义本地化函数
#include <math.h>       //定义数学函数
#include <stdio.h>      //定义输入/输出函数
#include <stdlib.h>     //定义杂项函数及内存分配函数
#include <string.h>     //字符串处理
#include <strstrea.h>   //基于数组的输入/输出
#include <time.h>       //定义关于时间的函数
#include <wchar.h>      //宽字符处理及输入/输出
#include <wctype.h>     //宽字符分类

1.5 C语言程序的运行

1.6 程序设计的任务

  • 问题分析

  • 设计算法:一般使用流程图

  • 编写程序

  • 对源程序进行编辑、编译和连接,得到可执行文件

  • 运行程序,分析结果

    对程序进行测试。通过设计多组测试数据,检查程序对不同数据的运行情况,从中尽可能发现程序中存在的漏洞,并修改程序,使之能适用于各种情况。

  • 编写程序文档

    提供给用户使用的程序,必须向用户提供程序说明书(也称为用户文档)。内容应包括程序名称,程序功能、运行环境、程序的装入和启动、需要输入的数据,以及使用注意事项等。 程序文档是软件的一个重要组成部分,软件是计算机程序和程序文档的总称。

1.7 程序 = 算法+数据结构

一个程序主要包括以下两个方面的信息:

  • 对数据的描述。在程序中要指定用到哪些数据,以及这些数据的类型和数据的组织形式。这就是数据结构(data structure)。

  • **对操作的描述。**要求计算机进行操作的步骤,也就是算法(algorithm)。

数据是操作的对象,操作的目的是对数据进行加工处理,以得到期望的结果。

作为程序设计人员,必须认真考虑和设计数据结构和操作步骤(即算法)。

著名计算机科学家沃思(Nikiklaus Wirth)提出一个公式:程序 = 算法 + 数据结构

实际上,一个过程化的程序除了以上两个主要要素之外,还应当采用结构化程序设计方法进行程序设计,并且用某一种计算机语言表示

因此算法﹑数据结构、程序设计方法和语言工具4个方面是一个程序设计人员所应具备的知识。在这4个方面中,算法是灵魂,数据结构是加工对象,语言是工具,编程需要采用合适的方法。

算法是解决"做什么"和"怎么做"的问题。程序中的操作语句,实际上就是算法的体现。

相关推荐
傻啦嘿哟37 分钟前
Python 数据分析与可视化实战:从数据清洗到图表呈现
大数据·数据库·人工智能
cookqq1 小时前
mongodb源码分析session异步接受asyncSourceMessage()客户端流变Message对象
数据库·sql·mongodb·nosql
呼拉拉呼拉1 小时前
Redis故障转移
数据库·redis·缓存·高可用架构
什么都想学的阿超1 小时前
【Redis系列 04】Redis高可用架构实战:主从复制与哨兵模式从零到生产
数据库·redis·架构
pp-周子晗(努力赶上课程进度版)2 小时前
【MySQL】视图、用户管理、MySQL使用C\C++连接
数据库·mysql
斯特凡今天也很帅2 小时前
clickhouse常用语句汇总——持续更新中
数据库·sql·clickhouse
超级小忍3 小时前
如何配置 MySQL 允许远程连接
数据库·mysql·adb
吹牛不交税3 小时前
sqlsugar WhereIF条件的大于等于和等于查出来的坑
数据库·mysql
hshpy4 小时前
setting up Activiti BPMN Workflow Engine with Spring Boot
数据库·spring boot·后端
文牧之5 小时前
Oracle 审计参数:AUDIT_TRAIL 和 AUDIT_SYS_OPERATIONS
运维·数据库·oracle