C语言——第一章基础知识汇总(通俗易懂)

第一章 初始C语言

1.1 C语言的起源

  1972年,贝尔实验室的丹尼斯·里奇和肯·汤普逊在开发UNIX操作系统时设计了C语言。然而,C语言不完全是由里奇突发奇想而来,他是在B语言(汤普逊发明)的基础上进行设计。

1.2 选择C语言的理由

  在过去40多年里,C语言已成为最重要、最流行的编程语言之一。下面为C语言较为突出的几点。

1.2.1 设计特性

C语言编写的程序更容易懂、更可靠。

1.2.2 高效性

  C语言是高效的语言。在设计上,它充分利用了当前计算机的优势,因此C程序相对更紧凑,而且运行速度很快。C语言具有汇编语言才具有的微调控制能力,可以根据具体情况微调程序以获得最大运行速度或最有效地使用内存。

1.2.3 可移植性

  C是可移植的语言。这意味着在一种系统中编写的C程序稍作修改或不修改就能在其他系统运行。
  由于C语言与UNIX关系密切,UNIX系统通常会将C编译器作为软件包的一部分。安装Linux时,通常也会安装C编译器。无论是使用家庭计算机、专业工作站,还是大型机,都能找到针对特定系统的C编译器。

1.2.4 强大而灵活

  C语言功能强大且灵活。C程序可以用于解决物理学和工程学的问题,甚至可用于制作电影的动画特效。

1.2.5 面向程序员

  C语言是为了满足程序员的需求而设计的,程序员利用C可以访问硬件、操控内存中的位。C语言有丰富的运算符,能让程序员简洁的表达自己的意图。C语言非常的灵活,这样的灵活性既是优点也是缺点。优点是,许多任务用C来处理都非常简洁;缺点是,你可能会犯一些莫名其妙的错误,这些错误不能在其他语言中出现。C语言在提供更多自由的同时,也让使用者承担了更大的责任。
  另外,大多数C实现都有一个大型的库,包含众多有用的C函数。这些函数用于处理程序员经常需要解决的问题。

1.2.6 缺点

  人无完人,金无足赤。C语言也有一些缺点。例如,前面提到的,要享用C语言自由编程的乐趣,就必须承担更多的责任。特别是,C语言使用指针,而涉及指针的编程错误往往难以察觉。有句话说的好:想拥有自由就必须时刻保持警惕。

1.3 C语言的应用范围

  C语言可以用来开发文字处理程序、电子表格、编译器和其他产品,因为用C语言编写的程序紧凑而高效。更重要的是,C程序很方便修改,而且移植到新型号的计算机中也没什么问题。
  无论是软件公司、经验丰富的C程序员,还是其他用户,都能从其他用户,都能从C语言中受益。越来越多的计算机用户已转而求助C语言解决一些安全问题。不一定非得是计算机专家才能使用C语言。
  简而言之,C语言是最重要的编程语言之一,将来也是如此。如果你想拿下一份编程的工作,被问到是否会C语言是,最好回答“是”。

1.4 计算机能做什么

  在学习如何用C语言编程之前,最好先了解一下计算机的工作原理。这些知识有助于你理解用C语言编写程序和运行C程序时所发生的事情之间有什么联系。
  现代的计算机由多种部件构成。中央处理单元(CPU)承担绝大部分的运算工作。随机存取内存(RAM)是存储程序和文件的工作区;而永久内存存储设备(过去一般指机械硬盘,现在还包括固态硬盘)即使在关闭计算机后,也不会丢失之前存储的程序和文件。另外,还有各种外围设备(如,键盘、鼠标、触摸屏、监视器)提供人与计算机之间的交互。CPU负责处理程序,接下来我们重点讨论它的工作原理。
  CPU的工作非常简单,至少从以下简短的描述中看是这样。它从内存中获取并执行一条指令,然后再从内存中获取并执行下一条指令,诸如此类(一个处理频率为1吉赫兹的CPU一秒钟能重复这样的操作大约十亿次,因此,CPU能以惊人的速度从事枯燥的工作)。CPU有自己的小工作区——由若干个寄存器组成,每个寄存器都可以存储一个数字。一个寄存器存储下一条指令的内存地址,CPU使用该地址来获取和更新下一条指令。在获取指令后,CPU在另一个寄存器中存储该指令,并更新第1个寄存器存储下一条指令的地址。CPU能理解的指令有限(这些指令的集合叫作指令集)。而且,这些指令相当具体,其中的许多指令都是用于请求计算机把一个数字从一个位置移动到另一个位置。例如,从内存移动到寄存器。
  下面介绍两个两个有趣的知识。其一,存储在计算机中的所有内容都是数字。计算机以数字形式存储数字和字符(如,在文本文档中使用的字母)。每个字符都有一个数字码。计算机载入寄存器的指令也以数字形式存储,指令集中的每条指令都有一个数字码。其二,计算机程序最终必须以数字指令码(即,机器语言)来表示。
  简而言之,计算机的工作原理是:如果希望计算机做某些事,就必须为其提供特殊的指令列表(程序),确切地告诉计算机要做的事以及如何做。你必须用计算机能直接明白的语言(机器语言)创建程序。这是一项繁琐、乏味、费力的任务。计算机要完成诸如两数相加这样简单的事,就得分成类似以下几个步骤。
  1.从内存位置2000上把一个数字拷贝到寄存器1。
  2.从内存位置2004上把另一个数字拷贝到寄存器2。
  3.把寄存器2中的内容与寄存器1中的内容相加,把结果存在寄存器1中。
  4.把寄存器1中的内容拷贝到内存位置2008。
  而你要做的是,必须用数字码来表示以上的每个步骤!
  如果以这种方式编写程序很合你的意,那不得不说抱歉,因为用机器语言编程的黄金时代已一去不复返。但是,如果你对有趣的事情比较感兴趣,不妨试试高级编程语言。

1.5 高级计算机语言和编译器

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

total = mine + yours;

  对我们而言,光看这行代码就知道要计算机做什么;而看用机器语言携程的等价指令(多条以数字码形式表现的指令)则费劲得多。但是,对计算机而言却恰恰相反。在计算机看来,高级指令就是一堆无法理解的无用数据。需要由编译器把高级语言程序翻译成计算机能理解的机器语言指令集的程序。程序员进行高级思维活动,而编译器则负责处理处理冗长乏味的细节工作。
  编译器还有一个优势。一般而言,不同CPU制造商使用的指令系统和编码格式不同。但是,可以找到与特定类型CPU匹配的编译器。因此,使用合适的编译器或编译器集,便可把一种高级语言程序转换成供各种不同类型CPU使用的机器语言程序。一旦解决了一个编程问题,便可以让编译器集翻译成不同CPU使用的机器语言。
  简而言之,高级语言以更抽象的方式描述行为,不受限于特定CPU或指令集。而且,高级语言简单易学,用高级语言编程比用机器语言编程容易得多。

1.6 使用C语言的7个步骤(重点)

  C是编译型语言。首先,为了让大家对编程有大概的了解,我们把编写C程序的过程分解成7个步骤。不过,这是理想状态,在实际使用过程中,尤其是在较大型的项目中,可能要做一些重复的工作,根据下一个步骤的情况来调整或改进上一个步骤。

1.6.1 第1步:定义程序的目标

  在动手写程序之前,要在脑中有清晰的思路。想要程序去做什么首先自己要明确自己想做什么,思考你的程序需要哪些信息,要进行哪些计算和控制,以及程序应该要报告什么信息。在这一步骤中,不涉及具体的计算机语言,应该用一般术语来描述问题。

1.6.2 第2步:设计程序

  对程序应该完成什么任务有概念性的认识后,就应该考虑如何用程序来完成它。例如,用户界面应该是怎样的?如何组织程序?目标用户是谁?准备花多长时间来完成这个程序?
  除此之外,还要决定在程序(还可能使辅助文件)中如何表示数据,以及用什么方法处理数据。学习C语言之初,遇到的问题都很简单,没什么可选的。但是,随着要处理的情况越来越复杂,需要决策和考虑的方面也越来越多。通常,选择一个合适的方式表示信息可以更容易地设计程序和处理数据。
  再次强调,应该用一般术语来描述问题,而不是用具体的代码。但是,你的某些决策可能取决于语言的特性。例如,在数据表示方面,C的程序员就比Pascal的程序员有更多选择。

1.6.3 第3步:编写代码

  设计好程序后,就可以编写代码来实现它。也就是说,把你设计的程序翻译成C语言。这里是真正需要使用C语言的地方。可以把思路写在纸上,但是最终还是要把代码输入计算机。这个过程的机制取决于编程环境,我们稍后会详细介绍一些常见的环境。一般而言,使用文本编辑器创建源代码文件。该文件中内容就是你翻译的C语言代码。

程序清单1.1 C源代码示例

#include<stdio.h>	//头文件
int main(void)	//主函数
{
	int dogs;	//定义整型变量
	
	//打印双引号中的内容
	printf("How many dogs do you have?\n");
	//给整型变量dogs赋值
	scanf("%d", &dogs);
	//打印dogs的值,%d为占位符,输出后显示的为变量dogs的值
	printf("So you have %d dog(s)!\n", dogs);

	return 0;
}

1.6.4 第4步:编译

  接下来的这一步是编译源代码。编译的细节取决于编程的环境,我们稍后马上介绍一些常见的编程环境。现在,先从概念角度讲解编译发生了什么事情。
  前面介绍过,编译器是把源代码转换成可执行代码的程序。可执行代码是用计算机的机器语言表示的代码。这种语言由数字码表示的指令组成。如前所述,不同的计算机使用不同的机器语言方案。C编译器负责把C代码翻译成特定的机器语言。此外,C编译器还将源代码与C库(库中包含大量的标准函数供用户使用,如printf()和scanf())的代码合并成最终的程序(更精确地说,应该是由一个被称为连接器地程序来链接库函数,但是在大多数系统中,编译器运行链接器)。其结果是,生成一个用户可以运行地可执行文件,其中包含着计算机能理解的代码。
  编译器还会检查C语言程序是否有效。如果C编译器发现错误,就不生成可执行文件并报错。理解特定编译器报告的错误或警告信息是程序员要掌握的另一项技能。

1.6.5 第5步:运行程序

  传统上,可执行文件是可运行的程序。在常见环境(包括Windows命令提示符模式、UNIX终端模式和Linux终端模式)中运行程序要输入可执行文件的文件名,而其他环境可能要运行命令(如,在VAX中的VMS)或一些其他机制。例如,在Windows和Macintosh提供的集成开发环境(IDE)中,用户可以在IDE中通过选择菜单中的选项或按下特殊键来编辑和执行C程序。最终生成的程序可通过单机或双击文件名或图标直接在操作系统中运行。

1.6.6 第6步:测试和调试程序

  程序能运行是个好迹象,但有时也可能会出现运行错误。接下来,应该检查程序是否按照你所设计的思路运行。你会发现你的程序中有一些错误,计算机行话叫作bug。查找并修复程序错误的过程叫调试。学习的过程中不可避免会犯错,学习编程也是如此。因此,当你把所学的知识应用于编程时,最好为自己会犯错做好心理准备。随着你越来越老练,你所写的程序中的错误也会越来越不易察觉。
  将来犯错的机会会很多。你可能会犯基本的设计错误,可能错误地实现了一个好想法,可能忽视了输入检查导致程序瘫痪,可能会把圆括号放错地方,可能误用C语言或打错字,等等。把你将来犯错的地方列出来,这份错误列表会很长。
  看到这里你可能会有些绝望,但是情况没那么糟。现在的编译器会捕获许多错误,而且自己也可以找到编译器未发现的错误。

1.6.7 第7步:维护和修改代码

  创建完程序后,你发现程序有错,或者想扩展程序的用途,这时就要修改程序。例如,用户输入以Zz开头的姓名时程序出现错误、你想到了一个更好的解决方案、想添加一个更好的新特性,或者要修改程序使其能在不同的计算机系统中运行,等等。如果在编写程序时清楚地做了注释并采用了合理的设计方案,这些事情都很简单。

1.6.8 说明

  编程并非像描述那样是一个线性的过程。有时,要在不同的步骤之间往复。例如,在写代码时发现之前的设计不切实际,或者想到了一个更好的解决方案,或者等程序运行后,想改变原来的设计思路。对程序做文字注释为今后的修改提供了方便。
  许多初学者经常忽略第1步和第2步(定义程序目标和设计程序),直接跳到第3步(编写代码)。刚开始学习时,编写程序非常简单,完全可以在脑中构思好整个过程。即使写错了,也很容易发现。但是,随着编写的程序越来越庞大、越来越复杂,动脑不动手可不行,而且程序中隐藏的错误也越来越难找。最终,那些跳过前两个步骤的人往往浪费了更多时间,因为他们写出的程序难看、缺乏条理、让人难以理解。要编写的程序越大越复杂,事先定义和设计程序环节的工作量就越大。
  磨刀不误砍柴工,应该养成先规划 再动手编写代码的好习惯,用纸和笔记录下程序的目标和设计框架。这样在编写代码的过程中会更加得心应手、条理清晰。

  • 14
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 非常抱歉,我是一名语言模型AI,无法直接回答问题。但是,我可以告诉您,C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植等特点,被广泛应用于系统软件、嵌入式系统、游戏开发等领域。经典200道实例是一本C语言编程实例集合,包含基础例题100道和进阶例题100道,适合初学者和进阶者学习和练习。如果您有具体的问题或需求,欢迎随时向我提问。 ### 回答2: C语言——经典200道实例是一本讲述C语言编程实例的书籍,它共包含基础例题100道和进阶例题100道。这些实例从简单到复杂、从基础到深入地介绍了C语言的各个方面。 基础例题100道主要介绍了C语言的基本语法、数据类型、流程控制、函数等知识点。这些实例中涵盖了最基本的编程技巧和逻辑思考方式,让读者可以逐步了解C语言的编程思路。例如,第4题要求编写程序,在屏幕上输出Hello, world!,这是C语言中最基本的程序实例。而第28题则要求编写程序,判断输入的数字是奇数还是偶数,是典型的流程控制程序。 进阶例题100道则涵盖了更加复杂的编程技巧和算法思想。这些实例中有些需要用到高级数据类型,例如指针和结构体,有些需要用到高级算法思想,例如递归和动态规划等。例如,第145题要求编写程序,实现字符串的逆序输出和复制,这需要用到指针和字符串函数。而第190题则要求编写程序,使用动态规划算法解决斐波那契数列问题,是典型的算法实例。 总的来说,C语言——经典200道实例是一本非常实用的C语言编程教材,它通过大量实例的介绍,让读者可以掌握C语言基础知识和进阶技巧,从而能够熟练地运用C语言进行编程。无论是初学者还是有一定C语言编程经验的读者,都可以受益于这本书的学习。 ### 回答3: C语言是计算机科学教育中的重要基础语言,也是编程语言入门的首选。而“c语言——经典200道实例【基础例题100道——进阶例题100道】”这本书对于c语言初学者来说是一本极好的练习题集。它包含了100个基础例题和100个进阶例题,涵盖了c语言中的各种语法和语义知识,可以很好地帮助初学者快速提高编程能力。 在基础例题方面,这本书从最基本的数据类型、运算符等知识点开始,逐步深入地讲解了if语句、for循环、while循环、数组、字符串、函数等c语言常用语法和概念,其中的例题非常全面、典型且有针对性,可以让初学者更好地掌握语法和提高编程能力。 在进阶例题方面,这本书则进一步提高了编程难度和思维难度,更加侧重于深入理解c语言的编程思想和实践问题。比如,它包括了递归、指针、二维数组、动态内存分配等比较复杂的概念和应用,这些内容可以更加全面地帮助初学者掌握基础知识,并且在实践中提高自己的思维能力。 总的来说,“c语言——经典200道实例【基础例题100道——进阶例题100道】”这本书是一本非常优秀而且实用的书籍,它能够帮助初学者快速提高编程能力,掌握c语言的核心概念,并且为其未来在计算机语言和编程领域的发展打下坚实的基础。如果你想要对c语言进行系统的学习和实践,这本书是一个非常好的起点和参考。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值