1.简述Web应用和传统怎么样编辑计算机程序序(软件)的区别 2.有C语言程序代码如下(为描述方便,每一行前加了行号):

(window.slotbydup=window.slotbydup || []).push({
id: '2014386',
container: s,
size: '234,60',
display: 'inlay-fix'
&&|&&0次下载&&|&&总161页&&|
您的计算机尚未安装Flash,点击安装&
试读已结束,如果需要继续阅读或下载,请使用积分()
下载:50积分
本文档由合作伙伴提供
0人评价4页
0人评价41页
0人评价18页
0人评价7页
0人评价53页
此文档归属以下专题
6人评价150个文档
8人评价197个文档
所需积分:(友情提示:大部分文档均可免费预览!下载之前请务必先预览阅读,以免误下载造成积分浪费!)
(多个标签用逗号分隔)
文不对题,内容与标题介绍不符
广告内容或内容过于简单
文档乱码或无法正常显示
文档内容侵权
已存在相同文档
不属于经济管理类文档
源文档损坏或加密
若此文档涉嫌侵害了您的权利,请参照说明。
我要评价:
价格:50积分VIP价:40积分C语言程序设计(郑莉)课后习题答案_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C语言程序设计(郑莉)课后习题答案
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩89页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢1.简述Web应用和传统计算机程序(软件)的区别 2.有C语言程序代码如下(为描述方便,每一行前加了行号):_百度知道
1.简述Web应用和传统计算机程序(软件)的区别 2.有C语言程序代码如下(为描述方便,每一行前加了行号):
有C语言程序代码如下(为描述方便,每一行前加了行号):
(1)#include &stdio.h&
(2)void main(void)
int x,width=0;
scanf(&%d&,&x);
while (x&0)
我有更好的答案
——包含头文件stdio.h,其中有此代码后面所用的输出输入函数。(2)在第2行中,C没有定义这种形式的main函数,只是有不少编译器认可而已)。(3)第4行的功能。——声明x和width为有符号整型变量,并给width赋初值0。(4)设输入整数356,写出执行该程序的运行结果,main函数前面为什么有void?——说明这个main函数没有返回值。(不过这有点山寨(1)第1行的功能是什么
采纳率:75%
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。1.简述Web应用和传统计算机程序(软件)的区别 2.有C语言程序代码如下(为描述方便,每一行前加了行号): _ 压皮机
1.简述Web应用和传统计算机程序(软件)的区别 2.有C语言程序代码如下(为描述方便,每一行前加了行号):
你阅读完下面的文章就知道了 (一)“项目驱动”式教学 目前最著名、最有影响、应用最广泛的windows、linux和UNIX三个操作系统都是用C语言编写的。0S是计算机系统(由软硬件两个子系统构成)的核心和灵魂,它是软件中最庞大最复杂的系统软件。既然如此庞大复杂的0S都可以用c语言编写,从狭义而言,还有什么系统软件和应用软件不能用c语言编写呢?由此可以肯定的说,c语言是一门十分优秀而又重要的语言。 c语言程序设计是过程性程序设计语言,它的发展贯穿了计算机发展的历程,它蕴含了程序设计的基本思想,囊括了程序设计的基本概念,所以它是理工科高等院校的一门基础课程。 从市面上有关c语言的书籍和高等院校采用的教材来看,它们有一个共性,那就是:脱离了实际应用(全是小打小闹的小例子),纯粹的过程性程序设计,没有软件工程思想的体现,没有一定程序设计风格,仅仅是为了让大家明白什么是c语言而已。 高等院校开设c语言程序设计的目的是让学生对程序设计有个入门,有个直观的理解,同时为其他后续课程作铺垫。但是如果教学仅仅以此为目的,那么教学本身就效果而言是个大大的失败。 大家知道,在商业上讲究唯利是图,“利”是商业追求的目标,离开了“利”经商,则商无动力,其结果是必败无疑。在c语言程序设计教学当中,教师应该把“唯用是图”作为教学的首要目标。如果抛开了实际应用进行程序设计教学,就是纸上谈兵,就是“说明书”式的教学。印度的程序设计课程采用“事件驱动式”教学,我认为在中国的c语言程序设计教学中应该采用“项目驱动式”教学。“项目驱动式”教学就是以项目为目的,以c语言理论教学为过程,最终能用c语言设计项目,实现项目的要求。“项目驱动式”教学的关键在于培养学生“如何做什么”和“可以干什么”。一个项目就是一个工程,在“项目驱动式”教学中,首先应该让学生简单了解什么是软件工程思想,其次在c语言理论教学过程中,让学生懂得面向对象的程序设计的风格,最后引导他们来设计项目。 (二)“项目驱动”式教学应注意的问题 1.c语言程序设计教学要帮助学生树立面向工程的观点 在计算机行业中,软件是通过人们的智力活动、把知识与技术转化成信息的一种产品。软件的设计已经用工程的观念来进行管理。软件设计工作被当作一项系统工程来对待。软件的的生存周期一般可分为以下阶段:问题定义、可行性研究、需求分析、概要设计、详细设计、编码、测试、运行与维护。我们不难看出软件工程的复杂程度是很大的。理工科高等院校把c语言作为一门基础课程,也是为了给社会培养信息技术人才。众所周知,养成一个好的习惯是非常重要的,所以c语言程序设计作为大多数工科院校学生接触的第一门程序设计语言(有的院校讲pascal),就应该让学生树立正确的观点。那么当前的程序设计教学也必须以切合将来软件工程开发的实际需要为第一目标,使学生在学习程序设计的初级阶段就树立正确的软件工程观点。这样做不仅可以为学生将来从事计算机应用设计打下良好的基础,而且有利于培养学生分析问题的完备性,以及统筹全局,协调关系的基本素质。 2.理论教学应从单一的“结构化程序设计”向“结构化与面向对象并举”转变 “结构化程序设计”方法是程序设计的基础,必须让学生掌握得坚实可靠。结构化程序设计的过程是培养学生思维能力的过程,在教学中经常发现有些学生的思维混乱。这些都是缺乏思维训练的结果。结构化程序设计的训练不仅可以让学生养成良好的程序设计习惯,而且可以有效地培养学生思维的条理性和逻辑性。所以在授课过程中要注意讲解结构化程序设计的思想时应突出两点:(1)程序的质量首先取决于它的结构。(2)程序设计的基本方法是自顶向下地逐步求精和模块化。 在c程序教学过程中,越到后面的章节,学生越会产生设计程序逐渐变难的感觉,这是不符合逻辑的一种怪现象。按照常理,C语言学的越多,说明你的程序设计知识越多,设计起程序来应该更加得心应手,那么出现这种现象的原因何在呢?当然该问题的出现的原因是多方面的,但是其中最重要的一点就是长期以来程序设计的观念不是以如何处理好对象为出发点,而是以如何使用好语言为基本点。受这种思想的影响,我们的程序设计教学大多数不是以如何解决好问题为重点,而是以讲解语法规则和语句格式为重点,是“说明书”式的教学。这样做造成的结果就是见到一个程序后学生首先想到是该用哪条语句,而不是思考怎样合理的解析。要切实解决这个问题,首先应该改变程序设计的观念。“面向对象程序设计”思想是目前最为流行、极为实用的一种程序设计方法,但是让学生直接接触“面向对象程序设计”,肯定不能对程序设计打下牢固的基础。“结构化与面向对象并举”是现代计算机程序设计的发展趋势,应该认真探索研究,让学生有一个较为轻松的学习过程。程序设计的实质就是编写处理对象的过程,所以将c与c++有机的融为一体的教材应该是首选教材,在教学过程中,我们应该从社会发展的角度进行探索研究,将目前最为流行又极为实用“面向对象程序设计”思想融合到c语言教学中。 3.c语言教学应培养学生良好的程序设计风格 具有良好的设计风格应该是程序员所具备的基本素质,在实际的项目中程序员往往都有自己的一些编程风格。目前95%以上的程序设计书籍不注重程序设计风格问题,这导致了很多学生没有良好的程序设计风格,在他们刚刚毕业踏入社会时,如果周围的同事没有良好的编程风格,那么很难通过环境来使自己提高这方面的素质,即使有提高也不容易比较全面的提高。因此在学生接触的第一门程序设计语言教学中,就应该培养学生良好的程序设计风格,使他们一进工作环境就具备这个素质。 Pascal设计者N.Writh教授十分重视程序设计风格的养成,他坚信“教给学生们以表达他们思维的语言会深深地影响他们思维和创造发明的习惯,而正是这些语言本身的混乱直接影响着学生们的程序设计的风格”,他这里所指的“这些运用”是当时那些主要用于程序设计教学的计算机语言。对学生来讲,一开始就强调程序设计风格很有必要,良好的程序设计风格不仅有助于提高程序的可靠性、可理解性、可测试性、可维护性和可重用性,而且也能够促进技术的交流,改善软件的质量。所以培养良好的程序设计风格对于初学者来说非常重要。 程序设计风格,实际上是指的是编码风格。在教学过程中应从源程序文档化,数据说明的原则,输入/输出方法这三个方面培养学生的编码风格,进而从编码原则探讨提高程序的可读性、改善程序质量的方法。 (1)源程序文档化。编码的目的是产生程序,但是为了提高程序的可维护性。源代码是需要实现文档化的。源程序文档化包括选择标识符(变量和标号)的名字、安排注释以及标准的书写格式等。 ①选择标识符的命名规则。标识符包括模块名、变量名、常量名、标号名、子程序名等。这些名字应能反映它所代表的实际东西,应有一定实际意义,使其能顾名思义。另外在模块名、变量名、常量名、标号名、子程序名中使用下划线是一种风格。使用这一技术的一种广为人知的命名规则就是匈牙利命名法(变量类型由一个或两个字符表示,并且这些字符将作为变量名的前缀)。当然使用匈牙利命名法与否都没有错误,重要的是要保持一致性——在整个程序中使用相同的命名规则。这就是说,如果你在一个小组环境中编程,你和其他小组成员应该制定一种命名规则。并自始至终使用这种规则。如果有人使用了别的命名规则,那么集成的程序读起来将是很费劲的。此外,你还要与程序中用到的第三方库(如果有的话)所使用的风格保持一致。如果可能的话,你应该尽量使用与第三方库相同的命名规则,这将加强你的程序的可读性和一致性。 ②注释。程序中的注释是程序设计者与程序阅读者之间通信的重要手段。注释能够帮助读者理解程序,并为后续测试维护提供明确的指导信息。因此,注释是十分重要的,大多数程序设计语言提供了使用自然语言来写注释的环境,为程序阅读者带来很大的方便。注释分为功能性注释和序言性注释。 a.功能性注释。功能性注释在源程序中,用以描述其后的语句或程序段是在做什么工作,也就是解释下面要“做什么”,而不是解释下面怎么做。对于书写功能性注释,要注意以下几点:第一描述一段程序,而不是每一个语句。第二利用缩进和空行,使程序与注释容易区别。第三注释要准确无误。 b.序言性注释。序言性注释通常位于每个程序模块的开头部分,它给出程序的整体说明,对于理解程序具有引导作用。有些软件开发部门对序言性注释做了明确而严格的规定,要求程序编制者逐项列出。有关内容包括:程序标题;有关该模块功能和目的的说明;主要算法;接口说明:包括调用形式,参数描述,子程序清单;有关数据描述;模块位置(在哪一个源文件中,或隶属于哪一个软件包);开发简历:模块设计者、复审考、复审日期。 ③用标准的书写格式。源程序清单的书写建议采用以下几点: a.每行只写一条语句; b.用分层缩进的写法显示嵌套结构层次,这样可使程序的逻辑结构更加清晰,层次更加分明。 c.书写表达式时适当使用空格或圆括号作隔离符。 d.在注释段周围加上边框; e.注释段与程序段、以及不同的程序段之间插入字行; (2)数据说明采用的原则。在编写程序时,要注意数据说明的风格。 数据说明的次序如果规范,将有利于测试,排错和维护。首先说明的先后次序要固定,例如,按常量说明、简单变量类型说明、数组说明用数据块说明、所有的文件说明的顺序说明。当然在类型说明中还可进一步要求,例如按如下顺序排列:整型量说明、实型量说明、字符量说明、逻辑说明。 其次当用一个语句说明多个变量名时,应当对这些变量按字母的顺序排列。 最后对于复杂数据结构,应利用注释说明实现这个数据结构的特点。 (3)输入/输出方法。输入/输出的方式和格式应当尽量避免因设计不当给用户带来的麻烦。这就要求,源程序的输入/输出风格必须满足能否为用户接受这一原则。所以在设计程序时,应考虑以下原则:输入数据时,要使输入的步骤和操作尽可能简单,应允许使用自由格式输入;应允许缺省值;对输入的数据要进行检验,以保证每个数据的有效性。 (三)结束语 在教学过程中,我们让学生设计一个程序模拟体育彩票的销售与对奖的过程,取得了良好的效果。他不仅启发和诱导了学生独立思考、积极思维的主动性,而且充分调动了学生学习的自觉性和积极性,使学生融会贯通地掌握了所学知识,提高了分析问题和解决实际问题的能力。 搞好c程序设计的教学工作涉及的因素很多,如果以项目来驱动教学,首先让学生树立面向工程的思想,其次把教学从单一的“结构化程序设计”向“结构化与面向对象并举”转变,最后特别要培养学生养成良好的编码风格,从而使他们学会能够“干什么”,那么我们认为教学目的就达到了。
一、C语言是一种计算机程序设计语言,属高级语言范畴。它既具有高级语言的特点,又具有汇编语言的特点。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序,代码清晰精简,十分灵活。二、用处及意义:1、java、.net、c++这些高级语言的基础都跟c语言类似的 所以c语言是编程语言的基础。2、c语言用途非常广泛,大到卫星导弹,小到一个计算器,都可以用C语言来实现。 现在学的只是C语言的基本语法,要做真正有用的程序,还要学很多东西,比如windows api,学了之后就知道怎么用C语言调用Windows api画窗口、按钮、进度条等等,做出像QQ一样实用的程序。3、C语言只是一门计算机语言,说到底就是一种工具。它的用处就是可以用它编出能够运行的程序来,而这些程序可以实现某些人需要的功能。人通过学习c语言也可以更加深入的了解计算机,所以很多人都把c语言作为计算机入门的第一门语言来学习,因为学习起来相对简单一些。至于实际的意义,无非是多学会一门技能,更加深入对计算机的了解,为学习其他计算机语言打下好的基础。
你阅读完下面的文章就知道了 (一)“项目驱动”式教学 目前最著名、最有影响、应用最广泛的windows、linux和UNIX三个操作系统都是用C语言编写的。0S是计算机系统(由软硬件两个子系统构成)的核心和灵魂,它是软件中最庞大最复杂的系统软件。既然如...
C语言是计算机二级中的一项考试科目。现在计算机二级的全部考试科目有:C语言程序设计、VB语言程序设计、VFP数据库程序设计、Java语言程序设计、Access数据库程序设计、C++语言程序设计、MySQL数据库程序设计、Web程序设计、MS Office高级应用。...
《中华人民共和国计算机信息系统安全保护条例》中被明确定义,病毒指“编制或者在计算机程序中插入的破坏计算机功能或者破坏数据,影响计算机使用并且能够自我复制的一组计算机指令或者程序代码”。而在一般教科书及通用资料中被定义为:利用计算机...
#include#include#include//获取N个0~999的随机数,方便打印阅读int *getRandNum(int n){ int *p; p=(int *)malloc(sizeof(int)*n); srand(time(NULL)); for (i=0; i
c语言不属于任何软件! C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。 特有特点 C语言是一个有结构化程序设计、具...
返回主页:
本文网址:http://www.yapiji.cn/view-.html《C语言程序设计》教案
《(C)》教案
山东财经大学
计算机信息工程学院
第一章& C语言概述
§1.1&& C语言的历史和特点
一、C语言的历史
Algol 60 → BCPL → B → C → 旧标准C →& ANSI& C&& → C++ →Visual C++
&& ┆& &&&&┆&&&&&
┆&&&& ┆&& ┆&&&&&
┆&&& (新标准C)
&&&& && &&&&&
&&&&&&& &&&&&&&&&&&&&&&&&
& 1960&&& 1963&&& 1967&& 1970& 1972&& 1978&&&&& 1983
C语言的诞生与发展:在C语言诞生以前,系统软件主要是用汇编语言编写的。由于汇编语言程序依赖于计算机硬件,其可读性和可移植性都很差;但一般的高级语言又难以实现对计算机硬件的直接操作(这正是汇编语言的优势),于是人们盼望有一种兼有汇编语言和高级语言特性的新语言。C语言是贝尔实验室于70年代初研制出来的,后来又被多次改进,并出现了多种版本。80年代初,美国国家标准化协会(ANSI),根据C语言问世以来各种版本对C语言的发展和扩充,制定了ANSI C标准(1989年再次做了修订)。
&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&
& &&&&&&&&&&&&&&&&&&&&&&&&&&&
&p=1, i=2&&&&&&&&&&&&&&&&&
& i&=5&&&&&&&&&&&&&&
p=pi, i=i+1
p=pi, i=i+1&&&&&&&&&&&&&&
&& &&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&
. &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
第三章& 数据类型、运算符与表达式
§3.1& 数据类型
C的数据类型有:
1、基本类型:整型、字符型、实型(浮点型)、枚举型
2、构造类型:数组类型、结构体类型、共用体类型
3、指针类型
~&&&&&& ( 按位 ) 取反 → 单目运算符
&&&&&&&&&&
&& 、&&&&&& 左移 、右移
&&&&&&&&&&&&&
&&&&& &&&按位与&&&&&&&&&&&
&&&&&&&&&&&&
∧&&&&&&& 按位异或&&&&&&&&
双目运算符
&&& 低&&&&&&
与其它运算符的优先级别:P375~376
单目 算术 && && 关系& & ∧ | 逻辑 三目 赋值 逗号
•位运算的运算量(即操作数)为整型或字符型数据
1.按位与──&
&& (1)格式:x&y
&& (2)规则:对应位均为1时才为1,否则为0:3&9=1。
例如,3&9=1:&&&&&
&&&&&&&&&&&&&
&&&&&& 1001&&&
&&&&& &&&&&&&&&&&&
───&&&&
&&&&&&&&&&&&&&&&&&&&
(3)主要用途:取(或保留)1个数的某(些)位,其余各位置0。
2.按位或──|
&& (1)格式:x|y
&& (2)规则:对应位均为0时才为0,否则为1:3|9=11。
例如,3|9=11:&&&& 0011&
&&&&&&&&&&&&&&&&
|&& 1001&&&&
&&&&&&&&&&&&&&&&&
────&&&&&&& &&&
&&&&&&&&&&&
&&&&&&&&&1011& =11&
&& (3)主要用途:将1个数的某(些)位置1,其余各位不变。
3.按位异或──∧
(1)格式:x∧y
(2)规则:对应位相同时为0,不同时为1:3∧9=10。
(3)主要用途:使1个数的某(些)位翻转(即原来为1的位变为0,为0的变为1),其余各位不变。
4.按位取反── ~
(1)格式:~x
(2)规则:各位翻转,即原来为1的位变成0,原来为0的位变成1:
在IBM-PC机中,~0=0xffff,~9=0xfff6。
(3)主要用途:间接地构造一个数,以增强程序的可移植性。
5.按位左移──
(1)格式:x&&
(2)规则:使操作数的各位左移,低位补0,高位溢出:5&&2=20。
6.按位右移──&&
(1)格式:x&&位数
(2)规则:使操作数的各位右移,移出的低位舍弃;高位:
①对无符号数和有符号中的正数,补0;
②有符号数中的负数,取决于所使用的系统:补0的称为“逻辑右移”,补1的称为“算术右移”。例如,20 && 2=5。
(1)x、y和“位数”等操作数,都只能是整型或字符型数据。除按位取反为单目运算符外,其余均为双目运算符。
(2)参与运算时,操作数x和y,都必须首先转换成二进制形式,然后再执行相应的按位运算。
例如,5&&2=20:0101 → 10100,20
&& 2=5:10100 → 00101。
(3)实现&、|、∧运算主要用途的方法
&&& ①构造1个整数:该数在要取(或保留)的位、或要置1的位、或要翻转的位上为1,其余均为0。
&&& ②进行按位与、或按位或、或按位异或操作。
(4)实现按位取反主要用途的方法
①求~0,间接地构造一个全1的数;
&& ②按需要进行左移或右移操作,构造出所需要的数。
例如,直接构造一个全1的数,在IBM-PC机中为0xffff(2字节),而在VAX-11/780上,却是0xffffffff(4字节)。如果用~0来构造,系统可以自动适应。
(5).复合赋值运算符
除按位取反运算外,其余5个位运算符均可与赋值运算符一起,构成复合赋值运算符: &=、|+、^=、&&=、&&=
(6)不同长度数据间的位运算──低字节对齐,短数的高字节按最高位补位:
①对无符号数和有符号中的正数,补0;
②有符号数中的负数,补1。
二、应用举例
例、从键盘上输入1个正整数给int变量num,输出由8~11位构成的数(从低位、0号开始编号)。
基本思路:(1)使变量num右移8位,将8~11位移到低4位上。
(2)构造1个低4位为1、其余各位为0的整数。
(3)与num进行按位与运算。
{ int num,
printf(&Input a integer number: &);
scanf(&%d&,&num);
&&&&&& num
&&= 8; /*右移8位,将8~11位移到低4位上*/
&&&&&& mask = ~(~0 && 4);
& & /*间接构造1个低4位为1、其余各位为0的整数*/
printf(&result=0x%x\n&, num & mask);
程序运行情况:
Input a integer number:1000 ←┘
result=0x3
程序说明:~(~0 && 4)
按位取0的反,为全1;左移4位后,其低4位为0,其余各位为1;再按位取反,则其低4位为1,其余各位为0。这个整数正是我们所需要的。
三、位段简介
有时,存储1个信息不必占用1个字节,只需二进制的1个(或多个)位就够用。如果仍然使用结构类型,则造成内存空间的浪费。为此,C语言引入了位段类型。
&1. 位段的概念与定义
&&& 所谓位段类型,是一种特殊的结构类型,其所有成员均以二进制位为单位定义长度,并称成员为位段。
例如,CPU的状态寄存器,按位段类型定义如下:
struct status
{ unsigned sign: 1;& & /*符号标志*/
&&&&&& unsigned
/*零标志*/
&&&&&& unsigned
carry: 1;& &&& /*进位标志*/
&&&&&& unsigned
parity: 1;& && /*奇偶/溢出标志*/
&&&&&& unsigned
half_carry: 1; /*半进位标志*/
&&&&&& unsigned
negative: 1;&
/*减标志*/
显然,对CPU的状态寄存器而言,使用位段类型(仅需1个字节),比使用结构类型(需要6个字节)节省了5个字节。
(1)因为位段类型是一种结构类型,所以位段类型和位段变量的定义,以及对位段(即位段类型中的成员)的引用,均与结构类型和结构变量一样。
(2)对位段赋值时,要注意取置范围。一般地说,长度为n的位段,其取值范围是:0~(2n-1)。
(3)使用长度为0的无名位段,可使其后续位段从下1个字节开始存储。
struct status
{& unsigned sign: 1;&
/*符号标志*/
unsigned zero: 1;& &&& /*零标志*/
unsigned carry: 1;& && /*进位标志*/
unsigned : 0;&
/*长度为0的无名位段*/
&&&&&&& unsigned
parity: 1; /*奇偶/溢出标志*/
unsigned half_carry: 1;/*半进位标志*/
&& unsigned
negative: 1;& & /*减标志*/
原本6个标志位是连续存储在1个字节中的。由于加入了1个长度为0的无名位段,所以其后的3个位段,从下1个字节开始存储,一共占用2个字节。
(4)1个位段必须存储在1个存储单元(通常为1字节)中,不能跨2个。如果本单元不够容纳某位段,则从下1个单元开始存储该位段。
(5)可以用%d、%x、%u和%o等格式字符,以整数形式输出位段。
(6)在数值表达式中引用位段时,系统自动将位段转换为整型数。
第十三章& 文件
在程序运行时,程序本身和数据一般都存放在内存中。当程序运行结束后,存放在内存中的数据被释放。如果需要长期保存程序运行所需的原始数据,或程序运行产生的结果,就必须以文件形式存储到外部存储介质上。
•OS以文件为单位对数据进行存储管理。
•流与文件
&流:C提供的一个 I/O统一接口, 与具体的被访问设备无关。把 I/O工作抽象成从源到目地的流, 所有的 I/O 通过流来进行, 所有流都具有相同的行为。
&文件: 指具体的实际设备(一切具有 I/O能力的外部设备)。
∵各设备有不同的功能, ∴文件并不都一样,
&&&& ∵C的 I/O系统把来自设备的信息转换到流,再流到对应设备,
∴编程者不必考虑具体的物理设备。
•C把文件看作一个字符(字节)序列, 即由一个个字符数据顺序组成的数据流(无任何定界符, 对文件的存取以字节位单位)。这种文件也称为流式文件。
•流式文件根据数据组织形式分为,
&&&& ①ASCII文件(即文本文件)&&& &&&&&&文字流
&&&& ②二进制文件&&&&&&&&&&&&&&&&&&&
•Turbo C所遵循的ANSI(美国国家标准学会)标准定义了一组完整的 I/O操作函数, 叫“缓冲文件系统”;
但旧的UNIX系统下使用的C还定义了另一组, 叫“非缓冲文件系统”。
&缓冲文件系统:系统自动地在内存为每一个打开的文件分配一个缓冲区。
&非缓冲文件系统:由编程者自己在程序中为每个打开的文件设定缓冲区。
如何获得对文件的使用&&&&&&&&&&
打开 / 关闭文件
↓ &&&&&&&&&&&&&&&&
如何了解“被使用文件”的信息&&&&& 通过文件指针
&&&&& ↓&&&&&&&&&
如何操作文件&&&&&&&&&&
文件读 / 写、文件定位、文件状态
二、文件的打开与关闭
1.文件类型FILE
系统给每个打开的文件都在内存中开辟一个区域,用于存放文件的有关信息(如文件名、文件位置等)。这些信息保存在一个结构类型变量中,该结构类型由系统定义、取名为FILE。
注意:结构类型名“FILE”必须大写。
2. 打开文件──fopen( )函数
对文件进行操作之前,必须先打开该文件;使用结束后,应立即关闭,以免数据丢失。
C语言规定了标准输入输出函数库,用fopen()函数打开一个文件,用fclose()函数关闭一个文件。
用法: FILE& *fopen(&文件名&,&操作方式&);
功能:返回一个指向指定文件的指针。
函数原型:stdio.h 。
注:对文件操作的库函数,函数原型均在头文件stdio.h中。后续函数不再赘述。
(1)“文件名”是指要打开(或创建)的文件名。如果使用字符数组(或字符指针),则不使用双引号。
(2)“操作方式”如P312 表13.1 所示。
“w”、“wb”、“w+”、“wb+” : 该文件已存在,原有内容全部清除,准备接收新内容 (对“w+”、“wb+”若不写先读 → 读出内容为空内容);该文件不存在,建立该文件,准备接收新内容。
“a”、“ab”、“a+”、“ab+” :该文件已存在,末尾追加数据;不存在,建立该文件, 准备接收新内容。
“r”、“rb” : 该文件必须已经存在, 且只能读文件
“r+”、“rb+”:该文件必须已经存在,不写先读→读出原内容;先写后读→覆盖原内容。 例、原内容为aaaaaa,写入内容为cccc,则文件内容为ccccaa。
例如,FILE&
*& fp=fopen(&data.99&,&r&);
(3)如果不能实现打开指定文件的操作,则fopen(
)函数返回一个空指针NULL (其值在头文件stdio.h中被定义为0)。
为增强程序的可靠性,常用下面的方法打开一个文件:
&&&& if((fp=fopen(&文件名&,&操作方式&))==NULL)
&&&& { printf(&can not
open this file\n&);
(4)使用文本文件向计算机系统输入数据时,系统自动将回车换行符转换成一个换行符;在输出时,将换行符转换成回车和换行两个字符。
使用二进制文件时,内存中的数据形式与数据文件中的形式完全一样,就不再进行转换。
(5)有些C编译系统,可能并不完全提供上述对文件的操作方式,或采用的表示符号不同,请注意所使用系统的规定。
(6)在程序开始运行时,系统自动打开三个标准文件,并分别定义了文件指针:
①标准输入文件——stdin:指向终端输入(一般为键盘)。如果程序中指定要从stdin所指的文件输入数据,就是从终端键盘上输入数据。
②标准输出文件——stdout:指向终端输出(一般为显示器)。
③标准错误文件——stderr:指向终端标准错误输出(一般为显示器)。
3.文件的关闭──fcolse( )函数
(1)用法: int& fclose(FILE& *文件指针);
(2)功能:关闭“文件指针”所指向的文件。如果正常关闭了文件,则函数返回值为0;否则,返回值为非0。
例如,fclose(fp);/*关闭fp所指向的文件*/
三、文件的读写
1& 读/写一个字符
⑴ 写一个字符fputc( ):
fputc(字符数据,文件指针);
其中“字符数据”,既可以是字符常量,也可以是字符变量。
功能:将字符数据输出到“文件指针”所指向的文件中去,同时将读写位置指针向前移动1个字节(即指向下一个写入位置)。
如果输出成功,则函数返回值就是输出的字符数据;否则,返回一个符号常量EOF(其值在头文件stdio.h中,被定义为-1)。
①关于符号常量EOF
&在对ASCII码文件执行读入操作时,如果遇到文件尾,则读操作函数返回一个文件结束标志EOF(其值在头文件stdio.h中被定义为-1)。
在对二进制文件执行读入操作时,必须使用库函数feof()来判断是否遇到文件尾。
②库函数feof( ):
&&&&&&&&&&&&&
int& feof(文件指针);
&&& 功能:在执行读文件操作时,如果遇到文件尾,则函数返回逻辑真(1);否则,则返回逻辑假(0)。feof()函数同时适用于ASCII码文件和二进制文件。
例如,!feof(input))表示源文件(用于输入)未结束,循环继续。
⑵ 读一个字符fgetc( )
&&&&&&&&&&&&&
int& fgetc(文件指针);
功能:从“文件指针”所指向的文件中,读入一个字符,同时将读写位置指针向前移动1个字节(即指向下一个字符)。该函数无出错返回值。
例如,fgetc(fp)表达式,从文件fp中读一个字符,同时将fp的读写位置指针向前移动到下一个字符。
例、从键盘输入字符(‘#’符号结束)写到磁盘文件并输出。
main( int& argc, char& *argv[ ] )
{ FILE& *&& char&
&& if (argc!=2) /*文件名aa.c→aa.exe, 则执行D&aa& x.txt*/
printf(&You forgot& to enter
the filename.\n&);
& && &&exit(0);& }
&& if ((fp=fopen(argv[1],
&w&))==NULL )
&&&&&&&&&&
/* 文件使用方式也可为wb、w+、wb+& */
printf(&Cannot open file.\n&); exit(0); }
&& do& { ch=getchar( ); & &fputc(ch,
&& while (ch!=‘#’);
&& fclose(fp);
if ((fp=fopen(argv[1], “r”))==NULL
{ printf(“Cannot open file.\n”);
exit(0); }
ch=fgetc(fp);
while(ch!=EOF)& putchar(ch),
ch=fgetc(fp);
printf(“\n”);&&
fclose(fp);
2、读/写一个字符串
⑴向指定文件输出一个字符串fputs( )
fputs(字符串,文件指针);
其中“字符串”可以是一个字符串常量,或字符数组名,或字符指针变量名。
功能:向指定文件输出一个字符串,同时将读写位置指针向前移动strlength(字符串长度)个字节。如果输出成功,则函数返回值为0;否则,为非0值。
⑵从文件中读一个字符串fgets( )
*fgets(指针,串长度+1,文件指针);
功能:从指定文件中读入一个字符串,存入“字符数组/指针”中,并在尾端自动加一个结束标志'\0';同时,将读写位置指针向前移动strlength(字符串长度)个字节。
如果在读入规定长度之前遇到文件尾EOF或换行符,读入即结束。
例、将键盘上输入的一个长度不超过80的字符串,以ASCII码形式存储到一个磁盘文件中;然后再输出到屏幕上。
#include &stdio.h&
main(int argc, char *argv[])/*参数:可执行文件名& 要创建的磁盘文件名*/
&&&&&& char
string[81]; /*字符数组用于暂存输入输出的字符串*/
if(argc&2)&&&&&&&&&&&
/*参数太多,提示
{& printf(&Too many
parameters…\n\n&);
&& &&&&&&&&&&
printf(&Usage: 可执行文件名&
filename\n&);
&&&&&&&&&&&&
if(argc==1)&&&&&& && /*缺磁盘文件名,提示输入*/
printf(&Input the filename: &);
gets(string);&&&&& /*借用string暂存输入的文件名*/
argv[1]=(char *)malloc(strlen(string)+1);/*给文件名参数申请内存空间*/
strcpy(argv[1],string);/*复制文件名到形参中*/
((fp=fopen(argv[1],&w&))==NULL)&& & /*打开文件失败*/
&&&&& {& printf(&can not open this
&& &&&&& exit(0);
&&&&& /*从键盘上输入字符串,并存储到指定文件中*/
printf(&Input a string: &); gets(string); /*从键盘上输入字符串*/
fputs(string, fp);&& /*存储到指定文件*/
fclose(fp);
/*重新打开文件,读出其中的字符串,并输出到屏幕上*/
((fp=fopen(argv[1],&r&))==NULL)&& & /*打开文件失败*/
&&&&& {& printf(&can not open this
&&&&& fgets(string,
strlen(string)+1, fp);&& /*从文件中读一个字符串*/
printf(&Output the string: &); puts(string);& /*将字符串输出到屏幕上*/
&&&&& fclose(fp);
为增强程序的可靠性,程序中对参数过多的情况,提示出错、并终止程序运行;而遗漏文件名时,提示用户输入。
同时,为增强程序的人机交互性,凡是需要用户输入数据的地方,都设置提示输入的信息;凡是输出数据的地方,都设置输出说明信息。
3& 读/写一个数据块
实际应用中,常常要求1次读/写1个数据块。为此,ANSI& C 标准设置了 fread( ) 和fwrite( )函数。
fread(void *buffer,int size,int
count,FILE *fp);
fwrite(void *buffer,int size,int
count,FILE *fp);
fread( )──从fp所指向文件的当前位置开始,一次读入size个字节,重复count次,并将读入的数据存放到从buffer开始的内存中;同时,将读写位置指针向前移动size* count个字节。其中,buffer是存放读入数据的起始地址(即存放何处)。
fwrite( )──从buffer开始,一次输出size个字节,重复count次, 并将输出的数据存放到fp所指向的文件中;同时,将读写位置指针向前移动size* count个字节。其中,buffer是要输出数据在内存中的起始地址(即从何处开始输出)。
如果调用fread( )或fwrite( )成功,则函数返回值等于count。fread( )和fwrite(
)函数,一般用于二进制文件的处理。
例、对文件输入输出实型数组。
#include&&
{ FILE& *&& float& a[10], b[10];&& int& i;
((fp=fopen(&test.txt&,&w+&))==NULL)
{& printf(&Cannot open
file.\n&);
&& printf(&请输入十个实型数:\n&);
&& for(i=0; i&10; i++)&& scanf(&%f&, &a[i]);
&& fwrite( a, sizeof(a), 1, fp
&& rewind(fp);/* rewind( ) P324 */
&& fread( b, sizeof(b), 1, fp);
&& for(i=0; i&10; i++)&& printf(&%8g&, b[i]);
&& printf(&\n&);
&& fclose(fp);
&}&&&&&&&&&&&&&&&&&&&&
4& 对文件进行格式化读/写
与scanf()和printf()函数的功能相似,区别在于:fscanf()和fprintf()函数的操作对象是指定文件,而scanf()和printf()函数的操作对象是标准输入(stdin)输出(stdout)文件。
int& fscanf(文件指针,&格式符&,输入变量首地址表);
int& fprintf(文件指针,&格式符&,输出参量表);
例如, int i=3; float f=9.80;
fprintf(fp,&%2d,%6.2f&,
fprintf( )函数的作用是,将变量i按%2d格式、变量f按%6.2f格式,以逗号作分隔符,输出到fp所指向的文件中:□3,□□9.80(□表示1个空格)。
例、 #include& &stdio.h&
{ long& a;&& short& b;
&&&&&&&&&&
fscanf(stdin, “%ld,%*5d,%2hd”, &a, &b);
&&&&&&&&&&
fprintf(stdout, “%ld, %hd\n”, a, b);
}&& &&&&&&&&&&&&&&&&
或& #include
& { FILE& *&& long& a,&& short& b,
&&&& if ((fp=fopen(“aw.txt”,“wb+”))==NULL)
{ printf(“文件打开出错.”);&
&&&& scanf
(&%ld,%*5d,%2hd&, &a, &b);
&&&& fprintf
(fp,&%ld,%ld,%hd&, a, 99L,
&&&& rewind(fp);
fscanf(fp,&%ld,%*ld,%2hd&, &c, &d);
printf(&%ld, %hd\n&, c, d);
&&&& sleep(2);
& }& &&&&&&&&&&&&&&&&&
四、文件的定位
文件中有一个读写位置指针,指向当前的读写位置。每次读写1个(或1组)数据后,系统自动将位置指针移动到下一个读写位置上。
&&&&&& 如果想改变系统这种读写规律,可使用有关文件定位的函数。
1、位置指针复位函数rewind()
rewind(文件指针);
功能:使文件的位置指针返回到文件头。
2、随机读写与fseek()函数
对于流式文件,既可以顺序读写,也可随机读写,关键在于控制文件的位置指针。所谓顺序读写是指读写完当前数据后,系统自动将文件的位置指针移动到下一个读写位置上。所谓随机读写是指读写完当前数据后,可通过调用fseek()函数,将位置指针移动到文件中任何一个地方。
int& fseek(文件指针,位移量,参照点);
功能:将指定文件的位置指针,从参照点开始,移动指定的字节数。
(1)参照点:用0(文件头)、1(当前位置)和2(文件尾)表示。
在ANSI C标准中,还规定了下面的名字:
SEEK_SET──文件头,
SEEK_CUR──当前位置,
SEEK_END──文件尾
(2)位移量:以参照点为起点,向前(当位移量&0时)或后(当位移量&0时)移动的字节数。在ANSI C标准中,要求位移量为long int型数据。
fseek()函数一般用于二进制文件。
五、返回文件当前位置的函数ftell( )
由于文件的位置指针可以任意移动,也经常移动,往往容易迷失当前位置,ftell( )就可以解决这个问题。
long& ftell(文件指针);
功能:返回文件位置指针的当前位置(用相对于文件头的位移量表示)。如果返回值为-1L,则表明调用出错。例如:
offset=ftell(fp);
if(offset= =-1L)printf(“ftell( )
error\n”);
六、出错检测
1、ferror( )函数
在调用输入输出库函数时,如果出错,除了函数返回值有所反映外,也可利用ferror()函数来检测。
&&&&&&&&&&&
int& ferror(文件指针);
功能:如果函数返回值为0,表示未出错;如果返回一个非0值,表示出错。
&&& (1)对同一文件,每次调用输入输出函数均产生一个新的ferror( )函数值。因此在调用了输入输出函数后,应立即检测,否则出错信息会丢失。
(2)在执行fopen( )函数时,系统将ferror( )的值自动置为0。
2、clearerr( )函数
void& clearerr(文件指针);
功能:将文件错误标志(即ferror( )函数的值)和文件结束标志(即feof( )函数的值)置为0。对同一文件,只要出错就一直保留,直至遇到clearerr( )函数或rewind( )函数,或其它任何一个输入输出库函数。

我要回帖

更多关于 计算机程序语言 的文章

 

随机推荐