C语言程序设计基本知识点解答_第1页
C语言程序设计基本知识点解答_第2页
C语言程序设计基本知识点解答_第3页
C语言程序设计基本知识点解答_第4页
C语言程序设计基本知识点解答_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言程序设计根本学问点解答(一)

第。章计算机根底学问

Q001>计算机的根本原理是什么?(计算机的根本原理)

A001>计算机的根本原理有两个:

1.二进制:是指计算机中全部的信息都是以二进制形式的数据来表示、存储、传递和运算的。

2.存储程序限制:是指在利用计算机解决问题时,首先需要人找出解决方法,然后将这个方法用

某种计算机语言转换成计算机程序(包含了原始数据和处理指令),再送入计算机中存储,最终由

人发出嘱咐,计算机开场依据程序中的指令和流程执行这个程序(即对数据进展加工处理)。

Q002>为什么计算机内部运用二进制?(二进制)

A002>运用二进制的主要缘由是:

1.物理上很简洁实现两种相对立的稳定的能量状态(如晶体管的导通与不导通、高电平与低电平、

磁性材料中剩磁的顺时针或逆时针方向等)

2.二进制数据的运算规则数量少而且简洁,操作实现简便

Q003>计算机硬件的根本构造是什么?(硬件)

A003>r运算器

,中央处理器CPU[_lsa

I控制器

主机V

I内存储器]

硬件

•存储器

系统

r外存储器

外设V

I输入输出设备(I/O)

Q004>计算机硬件系统的核心部件有哪些?它们的作用是什么?(硬件)

A004>计算机硬件系统的四大核心部件是限制器、运算器、存储器和输入输出设备。其中:

限制器是计算机的指挥限制中心。其主要功能是识别翻译指令代码并向计算机各部分发出适当的限

制信号,以便执行机器指令。

运算器是对数据进展加工、运算的部件。其主要功能是对二进制数据进展算术运算和逻辑运算。

存储器是存放数据和程序的部件。其主要功能是依据要求向指定的位置存进或取出信息。

输入设备的功能是将数据和程序送入到计算机的存储器中。常见的输入设备有键盘、鼠标等。

输出设备的功能是将计算机产生的结果送出计算机外。常见的输出设备有显示器、打印机等。

Q005>计算机的根本工作过程是怎样的?(硬件)(工作过程)

A005>

控制器

I/O运算

计算程序命令指存取命令

原始数据令盔■令

t

输出存数

计算_I

结果.....控制流

-----数据流

Q006>内存储器和外存储器有哪些区分?(存储器)(内存)

A006>主要区分如下表所示:

内存储器(主存储器)外存储器(扶植存储器)

属于硬件系统的主机部分,位于主机板的属于硬件系统的外设部分,与运算器和限

构造插槽上,与运算器和限制器干脆联络进展制器必需通过确定的硬件接口相联络进

数据交换展数据交换

电介质:半导体集成电路磁介质:磁盘或磁带

物理组成

计算机断电会使内存数据丧失磁介质损伤或消磁会使数据丧失

存放计算机系统运行期间正在执行的各存放系统程序、各种应用程序和数据文件

作用

种程序和数据等当前不参加运行的大量信息

Q007>什么叫存储单元的“位”和“字节”?(内存)(字节)(位)

A007>“位”(bit):是最小的电子线路单元,只能保存一位二进制数即一个0或一个1。因此一

个“位”单元可以保存的最大的十进制数是lo

“字节”(byte):是由若干个“位”组成的逻辑单元。微机中,1字节=8位。字节是最根本的数

据存储单元,即数据在内存中的存储是以“字节”为根本单位的。任何数据总是占据整数个“字节”

单元。

Q008>什么叫存储单元的地址和内容?(内存)

A008>存储器从第一个字节开场到最终一个字节为止,每一个字节单元在了逻辑上依次有一个“编

号”,这个编号就叫内存单元的地址。而有这个地址所指向的内存单元中存放的数据就叫该内存

单元的内容。

Q009>计算机是如何在内存单元中找到需要的数据的?(内存)

A009>计算机总是首先找到所需数据所在字节单元的地址(编号),再到该地址所指向的内存单元

去读取内存单元的内容(数据的值)。

Q010>什么是“机器语言”?(语言)

A010>计算机能干脆执行的用于表示机器指令的二进制数字代码称为“机器语言”,也就是机器

指令集合。典型的机器语言程序如下:

10101111

00110111

01110110

……等等几百个指令

很明显,这样的语言写的程序不易记忆和理解,运用、修改和维护都很费时费劲,而且不易推广。

Q011>什么是“汇编语言”?(语言)

A011>运用一些符号来代表指令、存放器、存储单元等机器指令中的要素,然后用这些符号来写

程序。运用这些助记符代码的语言,叫做“汇编语言”。典型的汇编语言源程序如下:

MOVA,47翻译之后就是10101111

ADDA,B00110111

HALT01110110

……等等几百个指令

优点:比机器语言易理解、记忆和运用,速度与机器语言相仿。大量用于实时限制。

不能独立于机器。汇编语言源程序必需经过“汇编程序”的汇编后才能执行。

Q012>什么是“高级语言”?(语言)

A012>运用与人类的自然语言和数学语言相近的符号和运算符构成的语言,叫做“高级语言”。

典型的C语言源程序如下:

voidmain()

inta=l,b=2,c;

c=a+b;

printf("c=%d\n”,c);

优点:独立于机器,通用性和可移植性强;简洁理解、记忆和学习,运用便利,源程序较短。

缺点:不行以干脆执行,源程序必需经过''编译程序”的编译或“说明程序”的说明后形成目的程

序才行。执行速度慢,系统开销大。

Q013>计算机中表示数据的根本原则是什么?(数据)

A013>计算机中表示数据的根本原则是:

一个数据总要占据确定数目的字节单元(整数个字节、有限个字节)。

不同类型的数据占据不同数目的字节单元(比方,PC机DOS环境下一个整数占2个字节,一个实

数占4个字节)。

全部数据都是以二进制数的补码形式表示的。

当要表示一个数据的正负号时,总是用该数据所占字节单元的全部位中最高一位表示数的符号(0

表示正,1表示负)。

Q014>什么叫“定点数”和“浮点数”?(数据)(定点数)(浮点数)

A014>在计算机中,小数点位置固定的数被称为定点数。定点数有定点整数和定点小数两种。

定点整数:小数点默认为在一个二进制数最低位的后面。如图所示:

定点小数:小数点默认为在一个二进制数最高位(符号位)的后面。

在计算机中,既有整数部分又有小数部分的数被称为浮点数。

第一章C语言根底学问

Q015>什么是“C"?(C)

A015>在现代社会中,组织处理信息的实力是胜利的关键。设计计算机的目的就是为了快速而有

效地处理大量信息。但是除非有人告知计算机该干什么和怎么干,否则它什么事情也不能做。这就

是计算机编程语言诞生的缘由,而C语言就属于一种计算机编程语言。它是一种可以让软件工程师

与计算机之间进展有效对话的介于汇编语言和高级语言之间的编程语言。C语言特别灵敏而且适应

性强。自1970年诞生之日起,它始终被用来开发各种各样的程序,包括用于微限制器的固化软件、

操作系统、应用程序和图形程序。

Q016>什么是“C++”?(C++)

A016>C++是C语言改良之后的产物。这种语言最初被称为“带类的C"(Cwithclass)。它增加

了一些特性,其中最重要的特性就是引入了“类“类”是依据面对对象的程序设计(OOD)思想

来创立的,它能使代码便于重复运用。C++语言完全兼容C语言,学好C有助于C++的学习。

Q017>如何学习“C”?(C)

A017>学习和驾驭一门编程语言的最终途径是用这门语言编写程序。事实上,在编写程序之前和

之后也有许多很重要的工作要做。总的来说,遵循这样一个过程是必有收获的,即:读别人写的程

序一自己动手写程序一调试这个程序直到胜利。这就犹如下围棋:打棋谱一亲自下棋一复盘。

Q018>什么是计算机程序?(程序)

A018>计算机程序主要由两部分组成:数据与指令。在一个计算机程序当中,数据和指令总是在

满意语法规则的前提下,由程序员依据某种组织形式支配好它们,从而来描绘对某个具体问题的已

经预先制定出来的解决方法和步骤。

程序员运用数据来描绘他要操作的信息,运用指令来描绘操作的方法、过程和步骤。

Q019>什么叫“源程序”?(程序)

A019>源程序特指用汇编语言或高级语言编写出来的,计算机不行以干脆识别并执行的数据和代

码的集合。源程序必需经过某种“翻译”过程才能变成计算机可以识别的指令。这个“翻译”过程

对于汇编语言源程序叫做“汇编”,对于高级语言源程序有“编译”或“说明”两种翻译方法。C

语言源程序承受是“编译”的方法。

Q020>什么是“编译器”?(编译器)

A020>从根本上说,计算机不能干脆识别和执行有高级语言编写的“源程序”,因此必需运用一种

称之为“翻译程序”的程序,把“源程序”翻译成二进制形式的“目的程序”。而“编译器”就是

这些“翻译程序”当中的一种。C语言就是一种“编译”语言,即是说,用C语言写出的源程序

必需经过“C编译器”的编译才能变成二进制的代码。

QO21A我怎么能得到C的“编译器”?(编译器)

A021>世界上有许多厂商和团体开发了许多的“C编译器”,有商业版本的,也有完全免费的。比

拟知名的C编译器有MicrosoftC,TurboC,BorlandC,WatcomC,GNUC等等。商业版本的编

译器往往性能更好,所附带的函数库也更丰富,但是需要花钱购置。因此,假设主要目的是为了学

习C语言,那么完全可以运用免费的C编译器。比方TurboC和GNUC。你可以在有关公司的网站

上或者许多有关C语言的个人网站上下载这些免费的编译器。

另外一点,由于C++是完全兼容C的,所以你也可以运用C++编译器来编译你的C源程序。同样,

你也可以在互联网上下载到免费的C++编译器,比方Inprise公司(原Borland公司)的C++Builder

编译器。

Q022>C程序的根本构造和特点是什么?(C程序)(程序构造)

A022>1.一个C程序是由函数构成的。C语言又被称作“函数式语言”。函数可能是系统库函数

或用户自定义函数。运用函数构成程序可以简洁实现构造化程序设计方法。

2.一个C程序中必需有一个main函数,而且只能有一个。无论主函数位于程序的何处,程序都由

它开场执行。

3.一个函数由两部分组成:函数原型和函数体。函数原型确定函数名,形参数量和类型,函数的

返回值及其类型;而函数体包含在一对{}中,由若干语句组成以实现函数功能。

4.每个C语句必需以分号完毕。

5.可以用/**/(块注释符)在程序中任何地方作注释。注释的内容不会被编译。

6.C程序的书写格式很自由。

Q023>什么是“函数”?(函数)

A023>函数是依据确定语法规则被封装好了的,可以完成特定功能的一段代码模块。运用函数构

成程序可以简洁实现构造化程序设计方法。

Q024>什么是“系统库函数”和“用户自定义函数”?(函数)

A024>系统库函数是指伴同某个版本的C编译器一起发布的已经实现了的函数集合。用户往往不

能得到这些函数的源代码,但是可以在自己的程序里调用这些函数从而实现相应的功能。

不同公司、不同版本的C编译器所附带的库函数不尽一样,但是全部的C编译器都会附带一个被称

之为“标准库函数”的函数库。因此,在运用标准库函数编程时,可以不考虑编译器的版本问题,

因为全部的编译器都支持它们。另外也有一些独立软件供给商会供给第三方的需要单独购置的具有

特定功能的函数库。

而用户自定义函数是指用程序员自己编写的完成所需功能的函数。比方,每个C程序中都包含的

main函数就是一个用户自定义函数。

Q025AC语言有哪些“系统库函数”?(函数)

A025>每个版本的编译器都会发送对所附带的库函数的分类列表和字母依次列表以及具体说明手

册。另外,也可以查找编译器所附带的在线扶植系统来寻求信息。还可以购置有关专家编写的函数

运用手册。假设是标准库函数的话,你可以在互联网上找到它们的运用说明。

QO26A什么是main函数?(main函数)(主函数)

AO26A在C程序当中,main函数是一个具有特定名称和特别地位的用户自定义函数。无论主函数

位于源程序的何处,程序都从它的第一个语句开场执行,到执行完最终一个语句完毕。在main函

数的函数体中,通过调用系统库函数或其它的用户自定义函数来完成整体的功能。而其它的自定义

函数是不能调用main函数的。

Q027>C程序中,如何定义一个函数?(函数)

A027A定义一个函数包括定义函数头和定义函数体。格式如下:

函数值类型函数名(函数形参列表)

函数体

函数头指示了该函数与其它函数不同的唯一的函数名,执行该函数时所必需供给的输入信息,以及

函数执行完毕后得到的值的类型。

函数体包含若干个语句来具体实现该函数的功能。

Q028>C程序中,函数体为什么要包含在大括号而不是其它的括号当中?(函数)

A028>函数体总要包含在一对特定的符号中以形成封装的模块。其它的高级语言可能运用的是其

它的符号,而C语言中就是运用的大括号。这是规定。

Q029>什么叫“语句”和“语句完毕符”?(语句)(语句完毕符)

A029>一个语句就是一条嘱咐。一个语句在编译后会变成许多条机器指令,告知计算机做什么事

情。语句可以很简洁,也可以很困难。为了区分程序中的若干个语句,每种语言都必需指定一个符

号来标示语句的完毕,这个符号就叫语句完毕符。C语言中的语句完毕符是分号。又是规定。

Q030>什么叫“注释”?(注释)

A030>注释是指在源程序中,对代码本身以及代码所设计的相关信息进展说明和注解的字符序列。

为了区分源程序中的注释内容和正式的内容,必需用某种界定符号包围注释。

Q031>在编写计算机源程序中,为什么要添加“注释”?(注释)

A031>现代计算机的运行速度已经很快,所以对计算机程序的要求从原来的程序大小、算法效率、

编程的技巧性等等已经转变为程序的可读性和可维护性。而添加适当的注释是保证和增加程序可读

性和可维护性的最重要的手段之一。对大型的程序尤其如此。对没有注释或注释不科学的程序进展

维护和二次开发,其代价和本钱是无法估计阿。因此,对程序员来讲,一开场就养成给程序写注释

的习惯是至关重要的,这已经成为评价一个程序员程度凹凸的重要标准。

Q032>在C程序中,如何添加“注释”?(注释)

A032>C语言中,用成对出现的/*/来告知编译器,包含在/**/之间的全部内容都是注释。

编译器在对源程序进展编译时,将无视和跳过这些内容。

Q033>对于C程序的书写格式有何规定?(格式)

A033>C程序的书写格式是很自由的。你只要不把一个完好的符号或一个常量拆开,其它的都可

以随意支配。

Q034>在编写计算机源程序时,为什么要遵循确定的书写标准?(格式)

A034>缘由很简洁也很重要:保证和增加程序的可读性和可维护性。一幅美丽的书法会使人赏心

悦目,可一幅涂鸦则会使人雅兴大减。

Q035>关于良好的书写标准和编码习惯,有何建议?(格式)

A035>只是建议,并非规定,但事实上已经约定俗成:

1.适当的注释会大大增加程序的可读性和可维护性

2.一行尽量只写一个语句

3.运用有规则的缩进式代码排列方式

4.在需要的地方加上一些空行

5.起有意义和易于区分的符号名

QO37A什么是IDE?(IDE)(集成开发环境)

A037>是集成开发环境IntegratedDevelopEnvironment的缩写。IDE包含了编辑器Editor、编

译器Compiler、连接程序Linker、工程管理程序ProjectManager>调试器Debugger、在线扶植

系统OnlineHelpSystem和其它一些扶植开发工具OtherTools。用户的全部开发工作都可以在

一个IDE中完成。

Q038>怎么学习运用IDE?(IDE)(集成开发环境)

A038>最好的方法就是查看IDE自带的在线扶植系统。绝大多数的IDE都带有详尽的扶植系统,

对IDE本身的组成、功能和运用有具体的说明。除此之外,扶植系统中还包含对全部库函数和扶植

工具的运用说明。因此,确定要学会看扶植。当然,这对你的计算机英语程度有较高要求。

Q039>什么叫“预编译”?(预编译)

A039>在对源程序进展正式编译之前所做的一些处理工作叫做预编译。最常见的预编译工作就是

用include包含文件和用define进展符号交换。C源程序中,全部的预编译嘱咐都由#号开头。运

用预编译嘱咐,可以供给C语言本身不包含的一些扩大功能。

Q040>什么叫“编译”?(编译)

A040>将高级语言源程序翻译成二进制代码的目的程序的一种方法和过程。完成这个过程的是一

个特地的程序,叫“编译器”。

Q041>什么叫“连接"?(连接)

A041>将编译后的二进制目的程序和有关函数库进展连接并打包成可执行程序的过程叫做连接。

完成这个过程的是一个特地的程序,叫“连接器”。

Q042>什么叫“调试”?(调试)

A042>一个程序恒久不行能一次就完全写正确,总会存在这样那样的错误。有些错误属于简洁的

语法错误,有些错误属于困难的逻辑错误,有些错误直到程序运行时才有可能觉察。检查并解除全

部这些错误直到程序完全正确的过程就叫调试。编写一个大型的程序,往往有一半的时间用在了调

试工作上,因此,学习调试的方法,积累调试的阅历时一个程序员必需要阅历的过程。

Q043>用C语言只能写在DOS下运行的程序吗?(C)

A043>当然不是。不管是DOS和WINDOWS,还是Unix和Linux,或者其它的操作系统,你所需要

的就是属于那个操作系统的C或C++“编译器”,你就可以用C语言编写在那个操作系统下运行的

程序。当然,不同的操作系统下,由于程序运行的原理不一样,因此编程的原理睬有所不同。

Q044>除了C程序设计的书籍外,还有更多学习C语言的资源吗?(C)(学习)

A044A有,那就是INTERNET。你只要在某个搜寻引擎中输入诸如“C语言”、“C教程”、“C源码”

之类的关键字,就会搜寻到成百上千的网站和网页。国外关于c语言教程和C语言编程的网站就更

多了。学会运用并用好这些资源,你很快就会变成一个C语言高手。

第二章算法根底学问

Q045>什么叫“算法”?(算法)

A045>算法,简洁的说就是为解决一个问题而实行的方法和步骤。一个实际问题假设需要通过编

写计算机程序来解决的话,就必需首先制定出解决该问题的算法。对于同一个问题可能存在着不同

的解决方法和步骤,也就是说有不同的算法。所以确定算法时,在保证正确有效的前提下,应当尽

量进步算法的效率和质量。另外,我们更关切的是特地针对计算机编程而制定的算法,而不是一般

的一般意义上的算法。

Q046>能否举例说明什么是“计算机算法”?(算法)

AO46A例如编程序求1X2X3X4X5X…X10。对于这样一个具体问题,我们可以得到不止一个

的算法。

算法1:干脆写一个乘法表达式来计算,即

SI:prod=lX2X3X4X5X6X7X8X9X10

这个算法的结果虽然是正确的,但是这样的解决方法和步骤明显不是有效合理的。因为假设问题变

成了求1X2X3X4X5X…X100,或者变成了1X3X5X7X9X…X101,那么这种方法就不适用

了。

算法2:利用编程语言中“变量”的概念,每次计算一个乘法并把结果保存在该变量中,下次再用

这个变量去乘以下一个数,即

SI:prod=l

S2:prod=prodX2

S3:prod=prodX3

S4:prod=prodX4

S5:prod=prodX5

S10:prod=prodX10

这个算法的结果也是正确的,比算法1简洁一些,但是照旧不是有效合理的,同样的问题就在于算

法不通用。

算法3:利用“变量”的概念的同时,再利用“循环”的解决方法,可以实现真正的计算机算法

SI:prod=l

S2:n=l

S3:prod=prodXn

S4:n=n+l

S5:假设nWlO,则返回到S3;否则,完毕

这个算法具有通用性、灵敏性。因为只要是同样的类似的问题,那么这个算法是不需要作大的改动

的。而且全部计算机语言都有实现“循环”的限制语句,因此这个算法就是我们所说的有效的正确

的计算机算法。

Q047>一个计算机算法应当有什么样的特性?(算法)

A047>一个算法应具有以下特点:

(1)有穷性:一个算法的步骤必需是合理有限的

(2)确定性:算法中的每一个步骤应当是确定的,而不应当是模糊的、模棱两可的

(3)有零个或多个输入:执行算法是需从外界获得必要的信息

(4)有一个或多个输出:执行一个算法后应当有必要的结果

(5)有效性:算法中的每一个步骤都必需是能有效成立和有效执行,并得到确定结果的。

Q048>如何表示一个计算机算法?(算法)(算法的表示)

A048>一个算法制定好后,总要通过某种方式把它表示出来,以便自己和其别人阅读理解。通常,

可以通过“自然语言”、“流程图”、“伪代码”、“计算机语言”等方法来描绘一个计算机算法。

自然语言就是人们日常运用的语言,可以是英语、汉语或其它语言。用自然语言表示算法通俗易懂,

但文字冗长,含义不太严格,简洁出现“歧义性”。止匕外,用自然语言表示包含分支和循环的算法

也不便利。因此,最常见的计算机算法表示方法就是“流程图”。用“计算机语言”来描绘算法事

实上就是我们通常所说的编程序,即程序事实上就是对一个算法的描绘。“伪代码”是用介于自然

语言和计算机语言之间的文字和符号来描绘算法。它犹如一篇文章。自上而下地写下来。每一行(或

几行)表示一个根本操作。它不用图形符号。因此书写便利。格式紧凑,也比拟好懂,便于向计算

机语言算法(即程序)过渡。

Q049>如何用流程图表示一个计算机算法?(算法的表示)(流程图)

A049>流程图是用一些事先规定好的具有某种含义的图框和流程线来表示算法中的步骤和各种操

作。这是用传统流程图表示的求1X2X3X4X5X…X10的算法:

用流程图表示算法直观形象,逻辑清晰,但是占用篇幅较多,

尤其当算法比拟困难时,画流程图既费时又不便利,而且当算

法不断改动时,流程图的修改也特别费事,因此流程图宜用于

表示一个完成的最终算法。

流程图有许多种类型,最常见的是传统流程图和N-S流程图。

传统流程图中由于对流程线的运用没有严格限制,全部很简洁

造成流程图的混乱和无规律。

Q050>什么是根本程序构造?(程序构造)

A050>为了进步算法的质量,使算法设计和阅读便利,必需限制传统流程图当中流程线的滥用,

即不允许无规律的使流程转向,只能依次的进展下去。但是,一个算法当中难免会包含一些分支和

重复而不行能全部由一个一个步骤依次向下构成。为理解决这个问题,人们规定出几种根本程序构

造,然后由这些根本程序构造按确定规律组成一个算法构造,整个算法的描绘则是由上而下的将各

个根本构造依次排列起来而成的。根本程序构造有三种,分别是依次构造、分支构造和重复构造。

流程图如下。用这三种根本构造就可以表示任何困难的算法。

顺序结构选择结构循环结构

C语言程序设计根本学问点解答(二)

第三章数据类型、运算符和表达式

Q051>什么是“数据类型”?(数据类型)

A051>数据类型就是指数据在计算机中保存和运算时的组织和形式。实际问题当中原来就有若干

种不同类型的数据,因此用来解决这些实际问题的计算机编程语言中自然应当有对应的数据类型来

描绘这些数据。比方最根本的数据类型就是整数、实数,另外还有非数值型的数据类型,如字符串。

一个计算机程序中用到的全部数据都必需具有某种类型。

Q052>什么是“运算符”?(运算符)

A052>运算符是指一些具有规定运算功能的特定的符号。如+、-、*、/、%等等。这里的运算功能

可能是我们比拟熟识的运算比方算术运算(加减乘除)、逻辑运算(与或非)或比拟运算(大于小

于等于),也可能是其他一些在计算机语言当中特有的运算如加1减1运算、位运算等等。C语言

共有34种运算符。

Q053>什么是“表达式”?(表达式)(优先级)(结合性)

A053>表达式是依据运算符的性质,用运算符把数据连接起来以到达数据运算目的而构成的式子。

写表达式的最终目的是要进展计算它求出它的值。求解表达式的过程是由计算机完成的,因此,要

想得到正确的结果,就必需写出正确的表达式。而一个表达式中往往包含多个运算符,所以必需熟

识每一种运算符的性质(优先级别和结合性),才能写出有正确求解结果的表达式。

Q054>C语言有哪些数据类型?(数据类型)

A054AC语言中的所以数据类型如下图所示:

整型

'「单精度型

实型V

广基本类型<I双精度型

字符型

I枚举类型

c的数组类型

类构造类型J结构体类型

〔共用体类型

指针类型

L空类型

Q055>什么是“常量”?(常量)

A055>程序运行期间,值不能被变更的量称为常量。假设试图去变更常量的值,就确定会出错。

在C语言中,至少有两种方法表示一个常量,即“干脆常量”和“符号常量二

Q056>什么是“干脆常量”?(常量)

AO56A干脆常量也叫字面常量,就是一看就知道的、干脆具有具体的固定的值的量。比方1、2、

3;0.1、10.0;'a','1';"hello”等。常量也是有类型的。前面所列举的常量就分别是整型、实

型、字符型和字符串型的常量。

Q057>什么是“符号常量”?(常量)(符号常量)

A057>干脆常量的好处是一看就知道的它的值,但是缺点是读程序的人无法便利的知道这个值原

委代表什么含义,即这个值传达的信息是不完好不明确的。这样的数经常被称之为“幻数(Magic

Number)"o假设我们可以给这些数值起一个有意义有具体含义的名字就可以解决这个问题了。符号

常量的目的就在此。它是用一些符号来代替程序当中出现的常量。从而使得程序的可读性和可维护

性大大增加。

Q058>C语言中,如何实现“符号常量”?(常量)(符号常量)

AO58AC语言中,可以运用#define预处理嘱咐来实现符号常量。例如下面的程序:

#definePI3.14159

intmain()

(

floatr,c,s,v;r=2;

printfCPI=%f\n”,PI);

c=2*PI*r;printf("周长=%f\nz,,c);

s=PI*r*r;printf("面积=%f\n”,s);

v=4*PI*r*r*r/3;printf("体积=%f\n”,v);

return0;

第一步,程序第一行用#define预处理嘱咐定义了一个符号常量,其名字是PL代表的常量值是

3.14159。第二步,在本程序以下的代码中,但凡原来干脆出现3.14159的地方,全部换成符号PI。

这样修改后程序运行的结果和干脆运用字面常量是一样的。

Q059>用#define实现符号常量的原理是什么?(符号常量)(define)

A059>事实上是一个在预处理阶段的交换过程。在前述问题的程序中,第一行的含义就是定义了

一个符号名字叫做PI,它代替的一串字符是3.14159。然后,在对这个程序进展编译时,编译器首

先启动预编译器(preprocessor)对源程序进展预编译处理。当预编译器觉察程序中有诸如#define

这样的预编译嘱咐时,就对它们进展相应嘱咐指定的处理。比方,对于#define预编译嘱咐,预编

译器就扫描整个源程序代码,将其中全部出现的由#define定义的符号全部交换成在#define嘱咐

行定义的符号后出现的字符串。因此,上述程序在预编译处理后,就变成了

intmain()

floatr,c,s,v;r=2;

printfCPI=M\n”,3.14159);

c=2*3.14159*r;printf(“周长二研'、,c);

s=3.14159*r*r;printf("面积=财\11”,s);

v=4*3.14159*r*r*r/3;printf("体积=耻\4,v);

return0;

因此就犹如干脆运用字面常量一样了。

Q060>运用“符号常量”的好处是什么?(符号常量)

A060>两个主要的好处:

(1)从所起的符号名字中可以清晰地看出该常量的含义,从而做到“见名知意”,避开“幻数”。

比方上述程序中阅读此程序的人很简洁的由符号名PI知道这个常量的含义就是圆周率。当然要想

到达这样的效果,前提是所起符号名称必需和实际含义相符合。因为符号是可以随意命名的,你完

全可以用这样的#define嘱咐#definePRICE3.14159来定义一个符号PRICE代替3.14159,但

是这样作就失去符号常量的存在意义了。

(2)在需要修改常量的值时可以做到“一改全改”,削减工作量。假设一个常量的值发生了变更,

假设原来是用干脆常量实现的,那么很明显程序的修改工作量就很大,尤其是当这个常量出现次数

许多的时候。但是,假设用符号常量来实现的话,那么只需要改动一个地方,就是#define嘱咐这

个地方,而程序其它部分完全不需改动,因为在进展预编译时新的常量值会被正确的交换进去。

Q061>为什么在Q058的程序中,第5行的第一个PI没有被交换成3.14159?(符号常量)

A061>在预编译器对源程序代码当中出现的符号常量进展交换时,并不是但凡觉察有一样的符号

名就无条件交换。至少有两种状况下,这个交换不会发生:

第一:这个符号出如今双引号当中。双引号括起来的叫做字符串常量,要的就是其中包含的原义字

符,所以不会被交换;

第二:这个符号不是单独且完好出现的,而是另一个符号的一部分。比方,定义了符号常量PI,

那么代码中假设有另一个符号叫API,,那么交换不会发生,即不会变成A3.14159。

Q062>什么是“预编译”?(预编译)

A062>预编译也叫编译预处理:是指在对源程序进展正式编译之前所作的一些处理。这些处理是

由预处理嘱咐指定的。源程序经过预处理后,再由编译程序进展正式的编译。预处理嘱咐虽然用在

C程序中,但它并不是C语言本身的组成部分,不能用C编译器干脆对它进展编译,必需由预编译

器来处理。预处理嘱咐都是以符号开头的。

Q063>什么是“变量”?(变量)

A063>程序运行期间,值可以被变更的量称为变量。C程序允许把数值存放在变量中,每个变量

都由一个变量名来标识。每个变量都必需有一个变量类型。每个变量依据它的类型不同,在内存中

占据确定数目的字节单元,该变量的值就存放在这些内存单元中。

Q064>“变量”的本质是什么?(变量)

A064A变量的本质就是命名的内存单元,因此它的值可以被变更。所谓变更变量的值事实上是变

更变量所占内存单元中的内容,因为变量名和内存单元的地址、变量值和内存单元的内容是相对应

的。如图所示:

变量名prod实际内存单元

上是一个符号地址\Z的地址

prod

123是变量

123

prod的变量值V,

变量prod所占内存单元

据的内存单元的内容

Q065>变量的名字是否可以随意命名?(变量)

A065>当然不是。任何计算机编程语言中,关于标记符号的命名总是有规定的。变量名就属于标

记符的一种,其它的标记符还有符号常量名、数组名、函数名、构造类型名等等。C语言中,变量

(标识符)的命名规定是:

■只能由大小写字母、下划线和数字组成;

■开头的第一个字符只能是大小写字母或下划线;

■大小写是敏感的;

•不能与C语言中的关键字重复;

-名字在其作用范围内必需是唯一的;

■名字的长度不能超过系统的规定。具体的长度限制随系统不同而不同。

QO66A在A065中提到的“关键字”是什么?(关键字)

A066>关键字(Keyword),也叫保存字(Reserveword),是计算机语言当中具有预先固定的命名

的、能完成指定功能的符号。一种编程语言的很大一部分功能就是由关键字来完成的。C语言一共

有32个关键字。其中,部分是用于定义变量类型的,如int、long、float,char等,部分是用于

实现根本程序构造的,如if、switch,while,for等。可以这么说,关键字+运算符就等于一门

语言的绝大部分功能。

Q067>我听别人说过“好的变量名”,这是指什么?(变量名)

A067>理论上将,变量命名只要满意上述规定,任何名字都是可以的。但是,在给变量命名时,

除了规定之外,还有一个良好的命名习惯的问题。即是说,首先要起合法的名字,其次要起好的名

字。所谓好的变量名,最主要的要求就是要“见名知意二别人通过变量的名字就可知道这个变量

所保存信息的含义,这有助于增加程序的可读性。关于命名习惯,有如下建议:

-避开运用无意义的名字,应严格做到“见名知意”;

■尽量运用代表变量实际含义的英文单词或缩写作标识符名;

■当名字包含多个单词时,通常使每个单词的首字母大写;

■不运用以下划线开头的名字,因为这样的名字通常是系统内部保存的标识符名;

■在整个程序中尽量保持统一的命名方式。

Q068>在编译程序时,提示有错,错误为"Error:Undefinedsymbol?",这是什么缘由?

(变量)(定义变量)

A068>"Undefinedsymbol"的意思是“为定义的符号”,就是说程序当中存在着还没有定义就干

脆运用的变量。这是因为C语言语法上要求,任何一个变量在运用之前必需先定义它。所谓定义一

个变量,就是要在该变量被运用之前,告知编译器该变量的名字、类型和存储类别,这样编译器才

能正确编译

Q069>那么,如何定义变量?(定义变量)

A069>变量定义具有三个目的:⑴定义变量名;⑵定义变量类型;⑶向程序员描绘该变量。

变量定义的一般格式是:typename;Acomment*/

类型名字;/*注释*/

例如:

intage;/*theageofstudent*/

floatscore;/*thescoreofstudent*/

floataverage;/*theaverageofscore*/

longnumber;/*thenumberofstudent*/

doubledistance;/*betweenearth&moon*/

charUserSelection;/*keyuserhit*/

在程序运行时,系统将依据变量的定义为其支配相应大小的内存单元。

Q070>为什么在C语言中,整数017和17并不是一样的?(整型)

A070>这是因为在C语言中,17是十进制的整数,而017是八进制整数,相当于十进制的15。C

语言中对于同一个整型常量,可以有三种不同的形式来表示,即分别用十进制、八进制、十六进制

来表示同一个数。为了区分不同进制的整型常量,也为了和其它的标记符区分,C语言中规定,以

数字“0”开头的整型常量是八进制的,而以“Ox”开头的整型常量的整型是十六进制的。比方十

进制整数18,就等价与八进制整数022,也等价与十六进制整数0x12。

Q071>在C语言中,整型变量是如何分类的?(整型)

A071>在C语言中,整型变量分为两大类:有符号整型和无符号整型。而不管是有符号还是无符

号整型变量,又都分为根本整型、短整型和长整型三种。分类状况如下表所示:

占字节数目

类型关键字

(TurboC)

根本整型signedint2字节

signedshortint

有符号短整型2字节

signed(signedshort)

signedlongint

长整型4字节

(signedlong)

根本整型unsignedint2字节

无符号

unsignedshortint

unsigned短整型2字节

(unsignedshort)

unsignedlongint

长整型4字节

(unsignedlong)

其中,有符号整型变量中,关键字signed可以省略。

Q072>为什么C语言中,整型变量要分许多种?(整型)

A072>一方面是因为实际问题当中的数据原来就是具有不同的类型的,更主要的是因为这些数据

的变更范围是不同的。不同范围的数据所需要的内存存储单元也是不一样的。因此,必需依据数据

的范围来确定给它支配多大的存储空间,而不致发生空间不够或空间奢侈的问题。这就好比学校的

教学楼里,既有大教室,也有小教室,然后依据来上课的人数分协作适的教室。而不是全部都是大

教室,那样就会产生教室缺乏或教室奢侈的问题。C语言供给了多种整型数据类型,不同类型的整

型数据占有的字节单元数目是不同的,所以不同类型的整型数据可表示的数的范围也是不同的,这

样有助于依据实际数据的最大值来确定其最适宜的类型。

Q073>那么,原委每种整型变量能保存的数据范围是多少呢?(整型)

A073>由于每一种整型数据占有的字节单元数目都是有限的,所以每一种整型数据可表示的数的

范围也是有限的。ANSIC标准定义的整型类型的表示范围如下表所示:

类型字节数有效表示范围

[signed]int2字节-32768〜+32767

unsignedint2字节0〜+65535

[signed]short[int]2字节-32768〜+32767

unsignedshort[int]2字节0〜+65535

[signed]long[int]4字节-2147483648〜+2147483647

unsignedlong[int]4字节0〜+4294967295

Q074>有符号和无符号的区分是什么?(整型)

A074>有符号和无符号的区分关键在于变量所占字节单元中“最高位”的性质。

•对于有符号变量:把最高位作为符号位保存数据的符号(0为正,1为负),其余位保存具体数

值,因此可以用于正确保存限值范围内的正数或负数。比方有inta;那么a的有效数值保存

范围为-32768〜32767。

•对于无符号变量:最高位不作为符号位,全部的位都用来保存数据的数值,因此可以用于正确

保存限值范围内的正数。比方有unsignedintb;那么b的有效数值范围为0~65535。

Q075>为什么下面的程序中,输出的结果是over=32768,而不是期望的over=32768(整型)

voidmain()

(

intmax,over;

max=32767;over=max+1;

printf("over=%d”,over);

A075>因为发生了整型数据的“溢出”问题。前面已经说过,由于每一种整型数据占有的字节单

元数目都是有限的,所以每一种整型数据可表示的数的范围也是有限的。程序中,max是int有符

号根本整型的变量,所以其有效的数据保存范围就是-32768〜+32767o当max等于32767时,实

际其所占两个字节中的状况如图所示:

max是:32767

max+l后赋值给同样的int有符号根本整型的变量over,则over中实际其所占两个字节中的状况

如图所示,很明显已经变成了-32768的补码了。

max+1-over是:-32768

1000000000000000

所以用printf函数依据%d格式显示出来就是-32768。

Q076>那怎样才不会出现“整型数据溢出"的问题呢?(整型)

A076>解决的方法就是,在定义变量时确定要指定适宜的类型,保证它所保存的数据在整个程序

运行过程中不会超出其可以有效表示的范围。比方,上面的程序中,假设把over定义成unsigned

int或long型的变量就可以避开“溢出”的问题。

Q077>实型变量是如何分类的?(实型)

A077>实型变量的分类如下表所示:

类型单精度双精度

关键字floatdouble

字节数4字节8字节

有效数字位数6~7位15-16位

数值范围10"〜10*381O-M7-1O-308

很明显,由于不同的实型数据是用不同数目的有限字节单元保存的,所以它们能表示的数值范围是

不同的,能保存的有效数字位数也是不同而且是有限的。

Q078>实型数据在内存中是如何存储的?(实型)

A078>实型数据在内存中是以“尾数”和“阶码”的形式存放的。即在一个实型数据(浮点数)

所占字节单元中,一部分位用来保存阶码,一部分位用来保存尾数。如图所示:

±尾数部分±阶码部分

不同的编译系统位数支配不同。总之,尾数部分位数越多,可以表示的数的有效数字位数就越多,

精度就越高;阶码部分位数越多,可以表示的数的范围就越大。

Q079>什么是字符型常量?(字符型)

A079>C的字符常量是用单引号(')括起来的一个字符。比方:‘a'、’A'、’d'、’D'、‘‘、’对、

,$,、,2'、’4'等等。留意两点:第一,必需是单引号,第二,单引号里只能有一个字符。

Q080>为什么字符常量要用单引号括起来?(字符型)

A080>这是为了和程序中其它类型的数据区分开来。比方字符常量'A',假设不加单引号,只是一

个A,那么确定会被编译器认为成一个符号的名字比方变量名。又比方字符常量’1',假设不加单

引号,只是一个1,那么确定会被编译器认为成是一个整型常量1。因此,必需在所需要的字符四

周加上一些称之为“界定符”的字符把它们包围起来,才能和其它数据进展区分。

Q081>既然单引号里只能有一个字符,为什么有的程序中会出现‘\n','\101'这样的字符?

(字符型)

A081>这是因为除了前面提到的“单引号括起来的一个字符”形式的字符常量,C语言还存在另

一种形式的特别的字符常量,叫“转义字符常量”。它是用单引号括起来的以一个“\”字符开头的

规定的字符序列。比方问题当中提到的‘\n',在转义字符常量中,单引号里面确实是不止

一个字符,但事实上整个还是只代表一个字符,也是合法的字符常量。这也就是“转义”之含义。

起到转义作用的是单引号当中的“\",它被用来作为转义字符序列的起始字符。假设单引号中起

始字符不是“\”,又多于一个字符,那么就不是合法的字符常量了。比方,‘nn','101'就不是合

法的字符常量。

Q082>为什么要用到“转义字符常量”?(字符型)(转义字符常量)

A082>因为除了键盘上的全部字符外

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论