C Primer Plus 第1章 初识C语言 笔记

article/2025/8/27 16:51:54

C语言的起源

1972年,贝尔实验室的丹尼斯·里奇(Dennis Ritch)和肯·汤普逊(Ken Thompson)在开发UNIX操作系统时设计了C语言。

选择C语言的理由

  1. 用C语言编写的程序更易懂、更可靠。
  2. C语言充分利用了当前计算机的优势,因此C程序相对更紧凑,而且运行速度很快。
  3. C程序稍作修改或不修改就能在其他系统运行 C语言功能强大且灵活
  4. C语言是为了满足程序员的需求而设计的,程序员利用C可以访问硬件、操控内存中的位

C语言的应用范围

早在20世纪80年代,C语言就已经成为小型计算机(UNIX系统)使用的主流语言。从那以后,C语言的应用范围扩展到微型机(个人计算机)和大型机(庞然大物)。许多软件公司都用C语言来开发文字处理程序、电子表格、编译器和其他产品,因为用C语言编写的程序紧凑而高效。更重要的是,C程序很方便修改,而且移植到新型号的计算机中也没什么问题。

计算机能做什么

现代的计算机由多种部件构成。中央处理单元(CPU)承担绝大部分的运算工作。随机存取内存(RAM)是存储程序和文件的工作区;而永久内存存储设备(过去一般指机械硬盘,现在还包括固态硬盘)即使在关闭计算机后,也不会丢失之前存储的程序和文件。另外,还有各种外围设备(如,键盘、鼠标、触摸屏、监视器)提供人与计算机之间的交互。

CPU的工作非常简单,至少从以下简短的描述中看是这样。它从内存中获取并执行一条指令,然后再从内存中获取并执行下一条指令,诸如此类(一个吉赫兹的CPU一秒钟能重复这样的操作大约十亿次,因此,CPU能以惊人的速度从事枯燥的工作)。CPU有自己的小工作区——由若干个寄存器组成,每个寄存器都可以存储一个数字。一个寄存器存储下一条指令的内存地址,CPU使用该地址来获取和更新下一条指令。在获取指令后,CPU在另一个寄存器中存储该指令,并更新第1个寄存器存储下一条指令的地址。CPU能理解的指令有限(这些指令的集合叫作指令集)。而且,这些指令相当具体,其中的许多指令都是用于请求计算机把一个数字从一个位置移动到另一个位置。

计算机的工作原理是:如果希望计算机做某些事,就必须为其提供特殊的指令列表(程序),确切地告诉计算机要做的事以及如何做。你必须用计算机能直接明白的语言(机器语言)创建程序。这是一项繁琐、乏味、费力的任务。计算机要完成诸如两数相加这样简单的事,就得分成类似以下几个步骤。
1.从内存位置2000上把一个数字拷贝到寄存器1。
2.从内存位置2004上把另一个数字拷贝到寄存器2。
3.把寄存器2中的内容与寄存器1中的内容相加,把结果存储在寄存器1中。
4.把寄存器1中的内容拷贝到内存位置2008。
而你要做的是,必须用数字码来表示以上的每个步骤!如果以这种方式编写程序很合你的意,那不得不说抱歉,因为用机器语言编程的黄金时代已一去不复返。但是,如果你对有趣的事情比较感兴趣,不妨试试高级编程语言。

高级计算机语言和编译器

高级编程语言(如,C)以多种方式简化了编程工作。首先,不必用数字码表示指令;其次,使用的指令更贴近你如何想这个问题,而不是类似计算机那样繁琐的步骤。使用高级编程语言,可以在更抽象的层面表达你的想法,不用考虑CPU在完成任务时具体需要哪些步骤。

编译器是把高级语言程序翻译成计算机能理解的机器语言指令集的程序。程序员进行高级思维活动,而编译器则负责处理冗长乏味的细节工作。

简而言之,高级语言(如C、Java、Pascal)以更抽象的方式描述行为,不受限于特定CPU或指令集。而且,高级语言简单易学,用高级语言编程比用机器语言编程容易得多。

语言标准

第1个ANSI/ISO C标准

美国国家标准协会(ANSI)于1983年组建了一个委员会(X3J11),开发了一套新标准,并于1989年正式公布。该标准(ANSI C)定义了C语言和C标准库。国际标准化组织于1990年采用了这套C标准(ISO C)。ISO C和ANSI C是完全相同的标准。ANSI/ISO标准的最终版本通常叫作C89(因为ANSI于1989年批准该标准)或C90(因为ISO于1990年批准该标准)。另外,由于ANSI先公布C标准,因此业界人士通常使用ANSI C。

C99标准

1994年,ANSI/ISO联合委员会(C9X委员会)开始修订C标准,最终发布了C99标准。该委员会遵循了最初C90标准的原则,包括保持语言的精练简单。委员会的用意不是在C语言中添加新特性,而是为了达到新的目标。第1个目标是,支持国际化编程。例如,提供多种方法处理国际字符集。第2个目标是,“调整现有实践致力于解决明显的缺陷”。因此,在遇到需要将C移至64位处理器时,委员会根据现实生活中处理问题的经验来添加标准。第3个目标是,为适应科学和工程项目中的关键数值计算,提高C的适应性,让C比FORTRAN更有竞争力。

C11标准

标准委员会在2007年承诺C标准的下一个版本是C1X,2011年终于发布了C11标准。此次,委员会提出了一些新的指导原则。出于对当前编程安全的担忧,不那么强调“信任程序员”目标了。而且,供应商并未像对C90那样很好地接受和支持C99。这使得C99的一些特性成为C11的可选项。因为委员会认为,不应要求服务小型机市场的供应商支持其目标环境中用不到的特性。另外需要强调的是,修订标准的原因不是因为原标准不能用,而是需要跟进新的技术。

使用C语言的7个步骤

  1. 定义程序的目标
  2. 设计程序
  3. 编写代码
  4. 编译
  5. 运行程序
  6. 测试和调试程序
  7. 维护和修改代码

编程机制

用C语言编写程序时,编写的内容被存储在文本文件中,该文件被称为源代码文件(source code file)。大部分C系统,包括之前提到的,都要求文件名以.c结尾(如,wordcount.c和budget.c)。在文件名中,点号(.)前面的部分称为基本名(basename),点号后面的部分称为扩展名(extension)。
因此,budget是基本名,c是扩展名。基本名与扩展名的组合(budget.c)就是文件名。文件名应该满足特定计算机操作系统的特殊要求。

目标代码文件、可执行文件和库

典型的C实现通过编译和链接两个步骤来完成这一过程。

编译器把源代码转换成中间代码,链接器把中间代码和其他代码合并,生成可执行文件。

C使用这种分而治之的方法方便对程序进行模块化,可以独立编译单独的模块,稍后再用链接器合并已编译的模块。
通过这种方式,如果只更改某个模块,不必因此重新编译其他模块。另外,链接器还将你编写的程序和预编译的库代码合并。

链接器的作用是,把你编写的目标代码、系统的标准启动代码和库代码这3部分合并成一个文件,即可执行文件。
在这里插入图片描述简而言之,目标文件和可执行文件都由机器语言指令组成的。然而,目标文件中只包含编译器为你编写的代码翻译的机器语言代码,可执行文件中还包含你编写的程序中使用的库函数和启动代码的机器代码。


http://chatgpt.dhexx.cn/article/IUalSqF9.shtml

相关文章

C语言 基于结构体的程序设计(PTA)

一、实验目的 1.掌握C语言中结构体类型的定义和结构体变量的定义和引用。 2.掌握用结构指针传递结构数据的方法。 二、实验内容 1、 计算职工工资 给定N个职员的信息,包括姓名、基本工资、浮动工资和支出,要求编写程序顺序输…

C语言学习笔记(kk-zkx)

前言 流行的编程语言编程语言的大致发展历程编程语言应用数据在内存中的储存程序载入内存ASCII编码GB2312和GBKUnicode字符集(统一码,万国码)就业坑,当心 编程语言:用来控制计算机,让计算机为我们做事情的语…

C语言简介--学前必备知识

关键字 32个关键字: C和C的关系 C 主要在C语言的基础上增加了面向对象和泛型的机制,提高了开发效率,以适用于大中型软件的编写。C支持面向过程编程、面向对象编程和泛型编程,而C语言仅支持面向过程编程。就面向过程编程而言&a…

C语言入门篇——文件操作篇

目录 1、为什么使用文件 2、什么是文件 2.1程序文件 2.2数据文件 2.3文件名 3、文件的打开和关闭 3.1文件指针 3.2文件的打开和关闭 4、文件的顺序读写 5、文件的随机读写 5.1fseek 5.2ftell 5.3rewind 6、文本文件和二进制文件 7、文件读取结束的判定 8、文件…

C语言基础之13:文件输入/输出

Tips1: 函数:fopen()、getc()、putc()、exit()、fclose() fprintf()、fscanf()、fgets()、fputs() rewind()、fseek()、ftell()、fflush() fgetpos()、fsetpos()、feof()、ferror() ungetc()、setvbuf()、fread()、fwrite() 如何使用C标准I/O系列的函数…

01是c语言,01-C语言-简介

一、C语言的起源 1972年,由贝尔实验室的丹尼斯.里奇和肯.汤普逊在开发UNIX系时设计C语言。C语言是在B语言基础上进行设计的。C 语言设计的初衷是将其作为程序员使用的 一种编程工具,因此,其主要目标是成为有用的语言。 二、C语言的特性 设计特…

用C语言实现CLI界面的魔塔游戏

简介 本着开源的精神,我分享下我做的数据结构大作业,我当时选择的是游戏设计题目,由于魔塔基础的机制不太复杂,所以就借着大作业设计了个简易的魔塔游戏。 这是游戏界面: 以下是我当时大作业内容: 我把…

C语言入门(什么是C语言,C语言的编程机制以及一些基础计算机概念)

目录 一.什么是C语言 1.面向对象: 2.面向过程: 二.C语言特点 三.C语言开发时间 四.环境搭建 1.代码编辑器 2.C编译器 五.C语言标准 六.计算机补充知识 1.计算机构成 2.CPU工作 3.编译器 七.编写程序步骤 八.源文件,目标文件&a…

C语言 09.文件

读写文件与printf、scanf关联 printf – 屏幕 – 标准输出 scanf – 键盘 – 标准输入 perror – 屏幕 – 标准错误 系统文件:(打开和关闭由系统自动执行) 标准输入 – stdin – 0 一旦关闭了,scanf就不可以使用 标准输出 – s…

C语言完整知识体系总结

C语言的知识体系总结 这里写目录标题 C语言的知识体系总结序言:C语言的概述历史、特点、标准)1、嵌入式开发为什么选择C语言?(面试题!)2、为什么内核开发选择C语言?3、C语言的缺点:a…

【C语言篇】初识C语言

友情链接:C/C系列系统学习目录 知识总结顺序参考C Primer Plus(第六版)和谭浩强老师的C程序设计(第五版)等,内容以书中为标准,同时参考其它各类书籍以及优质文章,以至减少知识点上的…

C语言学习笔记 1

中央处理器(CPU): 包括运算器、控制器、寄存器 Enum: Enum: 枚举类型 System函数: 执行系统命令。如pause、cmd、calc、mspaint、notepad..... System(“pause”);//暂停 System(“calc”);//打开计算机 System(“cls”);//…

C语言:文件操作

标题 文件什么是文件: 文件指针文件缓冲区操作文件1.文件的打开与关闭函数2.文本行输入输出函数3.格式化输入输出函数(有格式的数据输入到文件中)4.二进制输入输出调整文件指针位置6.ftell与rewind7.文件结束的判定 程序退出,内存…

c语言字节写入文件,C语言文件操作

所谓文件(file)一般指存储在外部介质上数据的集合,比如我们经常使用的mp3、mp4、txt、bmp、jpg、exe、rmvb等等。这些文件各有各的用途,我们通常将它们存放在磁盘或者可移动盘等介质中。那么,为什么这里面又有这么多种格式的文件呢?原因很简单,它们各有各的用途,区分就在…

C语言之编程基础

学自C语言中文网 编程基础 一.编程语言二. C语言的地位三.C语言是菜鸟和大神的分水岭三.C语言和C的关系四.数据在内存中的存储五.载入内存,让程序运行起来六.虚拟内存七. ASCII编码 一.编程语言 通过使用某种“语言”的固定格式和固定词汇来控制计算机的行为, 而这…

matlab中的graythresh函数的实例

一个图足以说明所有问题,代码实例加输出结果,说明一个问题,graythresh()函数还是很不错的! 如果还想跟精确,就在该阈值的周围在试几组数组,找到自己觉得最优的阈值

基于MATLAB的数字图像分割的研究与实现

1 绪论 1.1 图像分割的研究背景 在一幅目标图像下,人们往往只是关注其中的一个或者几个目标,而这些目标必然会占据一定的区域,并且与周围其他目标或背景在一些特征上会有相应的差别。但是,很多时候这些差别会非常的细微&#xff0…

一天一个小技巧(4)——利用Python和MATLAB进行图片二值化

转载请注明作者和出处:https://blog.csdn.net/qq_28810395 Python版本: Python3.x 运行平台: Windows 10 IDE: Pycharm profession 2019 Matlab2010a 一、前言 由于在一些软件和处理上都仅要求是黑白图片,那么掌握一种…

matlab nlfilter 填充方式,MatLab实验步骤(超杰版)

图像变换--灰度调整、滤波增强---二值化(阈值分割)--形态学处理--特征提取 一:色彩变换,从颜色上控制思考怎样应用灰度的变换、滤波变换减少地物 直方图均衡化histeq自适应均衡化adapthisteq灰度调节(灰度映射)imadjust【直接变换、非线性变换、灰度映射…

基于Matlab车牌自动识别

灰度变换 灰度图是指将黑色和白色以对数的关系分为256阶的图像。灰度化处理就是将彩色图片通过处理转化为灰度图的过程。彩色图像一般由三个独立色组成,R、G、B三个分量分别显示出红、绿、蓝。灰度化处理就是使R、G、B三个分量相等。灰度值为255的点就是白色&#x…