




已阅读5页,还剩159页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程序设计基础(C语言)上,东北大学高级语言程序设计课程组,程序设计基础(C语言),文件,3,1.文件概念,什么是文件? 文件是存储在外部介质上(介质:磁盘和磁带等外存储器)的数据或信息的集合 例如 程序文件中保存着源程序 数据文件中保存着数据 声音文件中保存着声音数据 磁盘上的每个文件都有唯一的名字,进行标识,依据文件名找到相应的文件 为什么要使用文件 文件的改动不能引起程序的改动,即程序与数据分离 不同的程序可以访问同一数据文件中的数据,即数据共享 能够长期保存程序运行的中间数据或结果数据,4,1.文件概念,C语言实现文件操作 通过操作系统完成对文件的输入输出操作 通过由C语言的编译系统提供的一套用于文件操作的库函数,也称为“标准输入输出库” 文件的特点 文件是一个有序的数据序列 保存的所有数据有着严格的排列次序(类似于数组) 要访问文件中的数据,必须按照它们的排列顺序,依次进行访问,5,1.文件概念,文件的分类 数据的组织形式 ASCII码文件 ASCII码文件是将要存储的数据采用ASCII码的形式进行存储 数据按顺序组成一个一个的字符序列 每一个字符用一个ASCII码来表示,占用1个字节 ASCII码形式的文件在文本编辑器下可以直接阅读 保存在内存中的所有数据在存入文件的时候都要先转换为等价的字符形式 当要从文件中读取数据时,在将字符串转换为浮点数 例如:123.45(浮点数) 将123.45转换为字符串“123.45” 再存放,6,1.文件概念,文件的分类 数据的组织形式 二进制文件 将数据按其在内存中的存储方式(二进制方式)原样输出到文件中存放的 内存中的数据存入磁盘的时候不需要进行数据转换 磁盘上保存的数据采用语言规定的与内存数据一致的表示形式进行存储 例如:123.45存放字二进制文件中将会占用4个字节(浮点数),7,1.文件概念,文件的分类 数据的组织形式 区别 ASCII码文件较为直观、可读性好 方便人们的阅读和理解 可以直接在Windows下的记事本等工具直接观察 占用存储空间较多而且在数据输入输出时必须进行二进制代码和ASCII码之间的转换 二进制文件存储空间的利用效率高 输入输出时不需要进行转换,因而速度较快,可以节省磁盘空间和转换时间 二进制文件不能直接识别内存中的表示形式,不方便人们的阅读和理解,可读性差,8,1.文件概念,文件的分类 文件的处理方式 数据写入文件或从文件中读出数据的过程,9,1.文件概念,文件的分类 文件的处理方式 “写文件” 将保存在内存中的数据写入磁盘 首先要建立一个“输出文件缓冲区” 通过该缓冲区可将内存中的数据存入磁盘,以文件的形式保存 “读文件” 将保存在文件中的数据装入内存 首先要建立一个“输入文件缓冲区”,将文件中的数据装入缓冲区 然后再由缓冲区存入程序可以操作的内存数据区,10,1.文件概念,文件的分类 文件的处理方式 C语言系统对“缓冲区“的处理方式不同产生了两种不同的文件处理方式 缓冲文件系统 对每个正在使用的文件,系统自动地在内存中为其开辟一个缓冲区 非缓冲文件系统 指系统不会自动开辟缓冲区,而要由程序自行设置文件的缓冲区 提示 在ANSI C83标准中取消了非缓冲文件系统 对文本文件和二进制文件均统一采用缓冲文件系统进行处理,11,1.文件概念,文件的分类 文件的处理方式 缓冲文件的特点 缓冲区是一个连接计算机内存数据与外存文件的桥梁 在内存开辟一个“缓冲区”,为程序中的每一个文件使用 执行读文件的操作时,从磁盘文件将数据先读如内存“缓冲区”,装满后再从内存“缓冲区”依此读入进接收的变量 执行写文件的操作时,先将数据写入内存“缓冲区”,待内存“缓冲区”写满后再写入文件 由此可见,内存“缓冲区”的大小,影响着实际操作外存的次数,内存“缓冲区”越大,操作外存的次数越少,执行速度就越快、效率就越高 一般来说:文件的“缓冲区”的大小随机器而定,12,2.文件的操作,语言中文件的操作主要是由语言库函数实现 了解和掌握语言提供的与文件有关的操作和规定 文件的定义 文件的状态 访问文件的基本操作 文件操作的函数属于语言标准输入输出库中的函数 应在程序函数的前面使用预处理命令“#include“ #include ,13,2.文件的操作,文件指针 每个正在使用的文件都要说明一个FILE类型的结构变量 该类型就是文件读写所需要分配的内存区域的类型 利用一个结构体类型的变量存放 该结构变量用于存放文件的有关信息 文件的名字、文件的性质、文件的当前状态等 FILE 类型由系统定义 它包含的成员即FILE的各个分量由操作系统自动定义 在头文件stdio.h中定义 通过文件结构的数据集合进行输入输出处理 文件结构在打开文件时由操作系统自动建立,14,2.文件的操作,文件指针 在头文件stdio.h中定义的结构FILE,typedef struct short level; /*文件的缓冲区级别(满或空的程度)*/ unsigned flag; /*文件状态标志*/ char fd; /*文件号*/ int cleft; /*缓冲区的剩余字符(剩余空间)*/ int mode; /*文件的操作模式*/ short size; /*缓冲区大小*/ char *buffer; /*文件缓冲区的地址(位置)*/ char *curp; /*当前地址指针(下一个字符的位置)*/ short token; /*有效性检查控制单元*/ FILE;,15,2.文件的操作,文件声明 定义文件类型之后才能用其声明若干个FILE类型的变量 存放文件的信息 在程序中,凡是要对已打开文件进行操作,都要通过指向该文件结构的指针 定义FILE型(文件型)的指针变量 通过文件指针变量找到与它相关的文件 如果需要同时处理n个文件,一般需要说明n个指针变量使它们分别指向n个不同的文件,以实现对文件的访问我们只需要定义文件类型的指针 通过这个指针,程序与操作系统之间交流信息,使用文件,16,2.文件的操作,文件声明 格式 说明 FILE是文件结构的类型名,标识结构类型 文件型指针是指向文件结构的指针 例如:FILE *p; /*p是一指向文件结构的指针变量*/ 提示 语言中标准设备文件是由系统控制的 它们由系统自动打开和关闭 用户在程序中可以直接使用,无需再进行说明 语言中提供了三个标准设备文件的指针 stdin 标准输入文件(键盘) stdout 标准输出文件(显示器) stderr 标准错误输出文件(显示器),FILE * 文件型指针名;,17,2.文件的操作,文件的操作过程 打开文件 建立用户程序与文件的联系 系统为文件开辟文件缓冲区 操作文件 对文件的读、写、追加和定位操作 读操作:从文件中读出数据 写操作:向文件中写入数据 其他操作 关闭文件 切断文件与程序的联系,将文件缓冲区的内容写入磁盘,并释放文件缓冲区,18,2.文件的操作,打开文件 操作系统分配一块内存区域 可以在这个区域上对文件进行读写操作 将该文件的基本状态信息装入内存的该区域 为了在后面对文件内容读写是能够找到这个内存区域,需要将这个内存区域的起始指针赋值给定义的FILE类型指针变量 通过库函数fopen调用实现 目的 在程序与操作系统之间建立一种关联 通过打开文件,程序把所要操作文件的要求:如要打开的文件名、文件的操作方式(读/写)等通知操作系统,19,2.文件的操作,打开文件 fopen函数的调用形式 说明 FILE是前面介绍的文件类型 fp是一个指向FILE类型的指针变量 指向被打开的文件 filename文件名 所要打开的文件名称 mode文件使用方式 用具有特定含义的符号表示,FILE* fp; fp=fopen(char *filename,char *mode),20,2.文件的操作,打开文件 fopen函数的功能 以mode方式打开由文件名filename指定的文件 该函数的返回值为指针类型 若文件打开成功 返回一个指向该文件的指针 若文件打开失败 返回一个空指针NULL,21,例:打开文件的正确方法是 #include“stdio.h” FILE *fp; fp=fopen(“stu.dat”,“w”); /*以写方式打开当前目录下的stu.dat文件 并将返回的指向stu.dat文件的文件指针 赋给文件类型指针变量fp*/ if(fp=NULL) printf(“cannot open filen” ); exit(0);,2.文件的操作,22,【例】以写方式打开一个readme.txt文件。 #include “stdio.h” void main() FILE *fp; fp=fopen(“readme.txt”,“w”); if(fp=NULL) printf(“file not found!”); fclose(fp); else printf(“file opened ok!”); ,可以在fopen打开文件时 检查函数的返回值是否 为NULL以确定文件是否 真正打开,若文件打开 失败,还使用读写函数 对文件进行读写操作将 会出现错误。,2.文件的操作,23,也可以写成下面这种方式: #include “stdio.h” void main() FILE *fp; fp=fopen(“readme.txt”,“w”); if (fp=NULL) printf(“file not found!”); exit(0); else printf(“file opened ok!”); ,exit(0)也是一个库 函数,定义在“stdio.h” 中,它起的作用是: (1)关闭所有文件; (2)程序正常退出; (3)返回操作系统; (4)将(0)返回操作 系统。 一般情况下:exit(0) 表示在程序设计者控制 的范围内正常退出; exit(!0)则表示程序 非正常退出。,2.文件的操作,24,2.文件的操作,文件的关闭 当对文件操作结束后,程序要通知操作系统文件使用完毕 关闭该文件 意味着释放文件指针以供别的程序使用 可以避免文件中数据的丢失 否则容易导致对文件的误操作 尤其是刚对文件进行写操作,如不关闭文件,可能会丢失刚刚写入的数据 关闭文件采用 C库函数fclose,25,2.文件的操作,文件的关闭 fclose函数的调用形式 说明 文件指针是通过fopen打开的文件 fclose函数关闭fopen打开的文件 fclose函数返回值 返回值为整型 正常关闭时返回为0,否则返回为非0数,表示关闭出错 函数的功能 关闭由文件指针指定的文件 切断缓冲区与该文件的联系 释放文件指针,fclose (文件指针);,26,例:以读方式打开一个文本文件readme.txt然后关闭该文件。 #include “stdio.h” void main() FILE *fp; fp=fopen(“readme.txt”,“r”); if (fp=NULL) printf(“file not found!n”); else printf(“file opened ok!n”); fclose(fp); printf(“file closed!n”); ,2.文件的操作,27,文件的读写是整个文件操作的核心,也是最灵活多变的部分。,针对文本文件和二进制文件的不同性质进行分类操作,对文本文件可按字符读写或按字符串读写;对二进制文件可按成块读写或格式化读写。各种C语言编译系统都提供了丰富的文件读写函数,有一些库函数事实上已成为标准。,读写字符 C提供fgetc和fputc函数对文本文件进行字符的读写。,函数定义格式: fgetc和fputc,fgetc函数从输入流的当前位置返回一个字 符,并将文件指针指示器移到下一个字符 处,如果已经到文件尾部,函数返回EOF, 此时表示本次操作结束。fputc函数完成将 字符的值写入所指定的流文件的当前位置 处,并将文件指针后移一位。该函数的返 回值是所写入字符的值,出错时返回EOF。,2.文件的操作,28,例:从键盘输入字符存储在磁盘文件test.txt中。 #include “stdio.h“ main() FILE *fp; char c; fp = fopen(“test.txt“,“w“); /*以写的方式打开文件*/ if(fp = NULL) printf(“File doesnt existn“); exit(0); while (c= fgetchar() != n); /*只要输入字符为非空格符*/ fputc(c,fp); /* 写入文件一个字符 */ fclose(fp); ,29,读写字符串 fgets()函数从文件中读取至多num-1个字符,并将其放入 str指向的数组中。函数形式为: char *fgets(char *str,int num,FILE *STREAM),fputs()函数将str指向的字符串写入文件,操作成功时,函数返回值为0值,失败时返回非0值。函数形式为: int fputs(char *str,FIILE *stream),【例】从一个文本文件中test1.txt中读出字符串,再写入另一个文 件test2.txt中。 #include #include,计算机及程序设计概述,计算机和计算机程序,31,计算机的基本工作原理,32,计算机硬件和计算机软件,计算机硬件 主机 外部设备 计算机软件 裸机 要使计算机解决各种实际问题,必须有软件的支持,计算机软件着重研究如何管理计算机和使用计算机的问题 ,没有软件支持的计算机就是一堆废铁,33,指令与程序,指令 指令就是计算机执行某种操作的命令,是硬件能理解并能执行的语言,是机器语言的一个语句,是程序员进行程序设计的最小语言单位。 指令的组成 指令由操作码和操作数构成 Mov 3,reg1 Mov 5,reg2 Add reg1,reg2 End,34,指令与程序,程序 程序(program)是为实现特定目标或解决特定问题而用计算机语言编写的、可以连续执行并能够完成一定任务的指令序列的集合。 程序的开发 描述问题(算法) 程序设计语言 计算机软件,35,程序设计语言,机器语言 二进制指令 与计算机硬件的设计密切相关 汇编语言 汇编语言与机器语言的指令具有一一对应的关系,指令的操作码和操作数地址全部用指定的符号表示 汇编语言依然依赖于计算机系统结构,只能为特定的机器所识别,是面向机器的语言,36,程序设计语言,高级语言 与具体的计算机指令系统无关的计算机语言 高级语言的分类 面向过程的语言 C、Pascal 面向对象的语言 C+、Java、.Net 面向特定应用的语言 SQL,37,为什么学习c语言?,C语言是目前实际程序设计工作中使用最广泛的语言之一 它包含了程序设计需要理解和使用的基本程序机理和主要机制 掌握这些机制就可以理解程序与程序设计的主要问题。 目前有许多软件系统是用C编写的,或基本上是用C编写的 学习程序设计的同时也能掌握一种实用的程序设计工具 C语言是一种很灵活的语言 既可以在较高层次上做,也可以在较低级的层次上做 很多新型的语言都是衍生自C语言 有些本身就是C语言的扩充和发展 程序设计是计算机领域的基础课程 C语言适合作为计算机领域许多后续课程的教学语言,38,授课重点,侧重学习一个具体问题的算法化的过程 学习应该掌握的基本编程技巧以及C编程的风格和艺术 讨论 怎样编写出一个好的程序? 简单、实用的原则,39,本课程的组织,算法概念、编程原理、编程风格、 基本数据类型定义、算术运算符及 表达式,顺序结构、选择结构、循环结构、 数组的定义及应用、程序设计过程,函数、变量的存储类别、指针、结 构体与共用体、文件,40,程序设计,什么是程序设计? 使用某种程序语言编写程序的过程,就是用计算机语言对所要解决的问题中的数据以及处理问题的方法和步骤所做的完整而准确的描述的过程 怎样进行程序设计? 分析问题 确定算法 编制程序 调试程序,41,程序设计,一个完整的程序 数据结构、算法、编程语言和程序设计方法 对数据的描述(数据流) 指定数据的类型和数据的结构 对操作的描述(控制流) 指定操作的步骤,既算法 程序=数据结构+算法,42,算法,什么是算法(Algorithm)? 就是为了解决一个特定的问题而采取的确定的、有限的、按照一定次序进行的、缺一不可的执行步骤 注意 为了有效地利用计算机解决实际问题,在设计算法时不仅要保证计算机执行算法的正确性,还要考虑算法的质量,选择适合于具体问题的算法,43,算法,通常计算机算法分为两大类:数值运算算法和非数值运算算法 数值运算是指对问题求数值解 有确定的数学模型 非数值运算是指事务处理过程 种类繁多,很难提供统一规范的算法 更多的是需要用户设计其算法的,44,算法,例1:猴子吃桃问题。有一堆桃子不知数目,猴子第一天吃掉一半,又多吃了一个,第二天照此方法,吃掉剩下桃子的一半又多一个,天天如此,到第11天早上,猴子发现只剩一只桃子了,问这堆桃子原来有多少个?,数学模型:ai=2*(ai+1+1) i=9,8,7,1;,Step1:peach1=1;i=10; Step2:peach0=2*(peach1+1); Step3:peach1=peach0; Step4:i=i-1; Step5:若i=1,继续循环执行Step2; Step6:输出peach0的值。,45,算法,输入三个数,然后输出最大的数 算法的两个要素 基本功能操作 数据运算和传输 控制结构 顺序、选择和循环三种基本控制流程,算法可以写成: (1)输入A,B,C; (2)若AB,则A-MAX;若AMAX。 (3)若CMAX,则C-MAX。 (4)输出MAX,MAX是最大数。,46,算法的特性,有穷性 应含有有限的操作步骤,不能是无限的。有穷性指在 “合理的限度之内” 唯一性 每一个步骤都是确定的,只有一个涵义,不可以为二义性 有零个或多个输入 在执行算法时需要从外界获取必要的信息 有一个或多个输出 算法执行的目的就是为了求解,“解”就是输出的信息 没有输出的算法是没有意义的 正确性 每一个步骤应当被有效的执行,并得到确定的结果,47,算法的表示,流程图,48,算法的表示,流程图,49,算法的表示,N-S图 是适合结构化程序设计方法的图形工具 N-S流程图无法表示非结构化的程序,50,算法的表示,UML 面向对象的分析与设计工具 适合于描述复杂系统元素之间的关系,不关注具体算法,51,程序设计基本步骤,确定数学模型 实际问题的准确描述 算法描述 解决问题的具体步骤 编写程序 将已设计好的算法表达出来 程序测试 保证程序的正确性,52,结构化的程序设计方法,程序的三种基本结构 问题的提出 结构化程序设计必须采用的结构 顺序结构、选择结构和循环结构 被称为程序设计的三种基本结构 算法的实现过程是由一系列操作组成的,这些操作之间的执行次序就是程序的控制结构 总体结构流程都是自上而下顺序执行的。,53,结构化的程序设计方法,程序的三种基本结构 顺序结构,顺序结构表示程序中的各操作是按照它们出现的先后顺序执行的 选择结构,表示程序的处理出现了分支,它需要根据某一特定的条件选择其中的一个分支执行 循环结构,程序反复执行某个或某些操作,直到某条件为假(或为真)时才可终止循环,54,结构化的程序设计方法,结构化程序设计方法 公认的面向过程编程应遵循的基本方法和原则 结构化程序设计特征 采用模块化结构 自顶而下的设计方法 便于对问题的分解和模块的划分 程序由三种基本控制结构组成 有限制地使用转移语句 采用结构化程序设计语言书写程序 结构化程序设计语言书写程序 注意书写风格,55,其他程序设计方法,面向对象程序设计方法 结构化程序设计方法作为一种面向过程的程序设计方法,将解决问题的重点放在了描述实现过程的细节上,尽量保证程序的客观性,避免人对于程序设计的干扰。 面向对象方法的基本原则是尽可能地模拟现实世界中人类的思维方式,使开发软件的方法和过程尽可能地接近人类解决问题的方法和过程。 并行程序设计 基于组件的程序设计,56,什么是C语言?,1973年由美国贝尔实验室设计发布的 目前是计算机程序设计语言的主流语种 是世界上最为广泛使用的语言之一 C语言的流行归功于两个主要因素 使用正确的C语言指令几乎可以完成任何任务 是可移植的C编译系统的广泛采用 C语言是一种能够让软件工程师与计算机进行有效对话的介于汇编语言和高级语言之间的编程语言,57,什么是C语言?,C语言标准 1978年,正式出版的The C Programming Language书中介绍的c语言,称为标准c语言 1983年,美国国家标准化协会(ANSI)根据各种c语言版本对c的扩充和发展,颁布了c语言的新标准ANSI c ANSI c比标准c有了很大的扩充和发展 1987年,美国国家标准化协会又颁布新标准,称为87 ANSI C 1990年,国际标准化组织ISO接受了87 ANSI C作为ISO C的标准 目前功能最完善、性能最优良的新版本 目前流行的C编译系统都是以它为基础的,58,什么是C语言?,C语言的特点 适合开发系统软件 结构化的程序设计语言 丰富的数据类型和数据结构 运算符多样化 可移植性好 语句简洁紧凑 编程风格灵活,语法限制少,使用灵活 具有预处理功能 面向对象程序设计的基础,59,编写一个加法运算程序,#includestdio.h main() int a,b;/*定义两个整形变量*/ a=1;b=5;/*给两个变量赋值*/ printf(“%d+%d=%dn”,a,b,a+b); /*打印a和b之和*/ ,C语言严格区分大、小写 英文字母。,C语言程序习惯上使用小写英文字母,而大写英文字母通常作为常量的宏定义和其他特殊的用途。,什么是C语言?,60,#includestdio.h main() int a,b;/*定义两个整形变量*/ a=1;b=5;/*给两个变量赋值*/ printf(“%d+%d=%dn”,a,b,a+b); /*打印a和b之和*/ ,C语言严格区分大、小写 英文字母。,什么是C语言?, C语言程序是由一个个的 语句组成。,每个语句都具有规定的语法格式和特定的功能。,编写一个加法运算程序,61,#includestdio.h main() int a,b;/*定义两个整形变量*/ a=1;b=5;/*给两个变量赋值*/ printf(“%d+%d=%dn”,a,b,a+b); /*打印a和b之和*/ ,C语言严格区分大、小写 英文字母。,什么是C语言?, C语言程序是由一个个的 语句组成。, C语言程序使用“;”作为 语句的终止符和分隔符。,可以任意书写,即一行中可以书写多个语句,一个语句也可以占用任意多行,语句之间必须用“;”分隔。初学时建议在一行内书写一条语句。,编写一个加法运算程序,62,#includestdio.h main() int a,b;/*定义两个整形变量*/ a=1;b=5;/*给两个变量赋值*/ printf(“%d+%d=%dn”,a,b,a+b); /*打印a和b之和*/ ,C语言严格区分大、小写 英文字母。,什么是C语言?, C语言程序是由一个个的 语句组成。, C语言程序使用“;”作为 语句的终止符和分隔符。, C语言程序中用大括号对 “ ”表示程序的结构层 次范围。,一个完整的程序模块要用一对花括号括起来,用以表示模块的范围。为了清晰地表现出程序的结构,建议使用右缩进锯齿型程序书写格式。,编写一个加法运算程序,63,#includestdio.h main() int a,b;/*定义两个整形变量*/ a=1;b=5;/*给两个变量赋值*/ printf(“%d+%d=%dn”,a,b,a+b); /*打印a和b之和*/ ,C语言严格区分大、小写 英文字母。,什么是C语言?, C语言程序是由一个个的 语句组成。, C语言程序使用“;”作为 语句的终止符和分隔符。, C语言程序中用大括号对 “ ”表示程序的结构层 次范围。,语言程序可以使用注释。,注释部分的格式是: 注释内容注释部分不参与程序的执行,对程序的运行结果没有影响,只是用来提示或助记。,编写一个加法运算程序,64,什么是C语言?,C程序结构组成 C程序为函数模块结构,整个程序都是由一个或多个函数组成 函数是由函数说明和函数体两部分组成 一个C程序总是从main()函数开始执行 被调用的函数可以是系统提供的库函数,也可以是用户根据需要自己编制设计的函数(用户自定义函数) 一个C 程序可以由一个文件组成,也可以由若干个文件组成,分析下面程序: #include main () int a=1,b=5,c; c=add(a,b); printf(“c=%dn”,c); int add(int x,int y) return(x+y); ,65,C程序结构组成,什么是C语言?,66,什么是C语言?,“标识符“ 每种程序语言都规定了在程序里描述名字的规则 这些名字包括:变量名、常数名、数组名、函数名、文件名、类型名等,被统称为“标识符“ C语言标识符 C语言的标识符是满足如下条件的字符序列 只能由英文字母、数字和下划线组成 必须以英文字母或下划线开头 注意 C语言对大、小写字母严格区分 根据ANSI标准,只有前31个字符是有意义,但一般系统使用的标识符,其有效长度不超过8个字符 标识符不要与关键字同名,67,什么是C语言?,关键字 具有特定含义的,用作专用的标识符 语言中关键字绝大多数是由小写字母构成的字符序列 注意: 这些特定的关键字不允许用户作为自定义的标识符使用,例:指出合法的标识符与关键字 “ABA” S05 file.c Abc 10page printf yellow_red ab -113 _ACG,68,什么是C语言?,语句 语句是组成程序的基本单位 它能完成特定操作 所有程序设计语言都提供了满足编写程序要求的一系列语句 有确定的形式和功能 C语言中的语句,69,C语言的开发与运行,开发一个C程序,一般过程,编辑:使用一个文本编辑器将编写好的C程序输入计算机,并以 文本文件的形式保存C语言源程序,其文件扩展名为“.C”,编译:使用一个C语言编译系统(如TurboC 2.0)对C语言源程序 进行语法检查和翻译,生成同名的“.OBJ”目标文件,链接:将目标文件和系统提供的标准库函数等连接在一起,生成 一个同名的“.EXE”可执行文件,执行:脱离C语言编译系统,可在操作系统下键入文件名直接运行,70,C语言的开发与运行示例,使用 Visual C+ 6.0 编写两个数相加的程序,计算机及程序设计概述,基本数据类型、常量及变量,72,数据 数据是程序设计中所要涉及和描述的主要内容 数据是程序加工、处理的对象 数据同样是加工的结果 数据在计算机中的存储 数值型数据的存储 文字型数据的存储,信息编码与存储,73,标识符和关键字,标识符 C语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线 关键字 关键字是由语言规定的具有特定含义的字符串(英文单词),又称为保留字。,74,数据类型 数据类型的概念 数据类型是一类数据的抽象表示,这类数据具有相同的形式,遵从相同的运算规则 程序处理的基本数据按性质划分 属于同一类的各个数据都具有同样的性质 同样的操作 同样的编码方式 把程序语言中具有这样性质的数据集合称为数据类型。,什么是数据和数据类型,75,C语言的数据类型,数据类型的分类,数据类型,空类型,指针类型,构造类型,基本类型,指针类型 用于存放地址(指针),用来解决动态数据的建立、删除和使用 空类型 用于数据类型的转换,基本类型 构造简单,已由系统定义好 构造类型 由其它数据类型按一定规则构造而成。,76,C语言的数据类型,数据类型的分类 每个数据类型都有固定的表示方式 这个表示方式确定了可能表示的数据范围以及数据在内存中的存放形式 C程序中所出现的所有数据都必须明确指定其数据类型 数据类型的体现 常量和变量是在计算机中数据类型的表现形式 存放的是实在的数据,这些数据符合对数据类型的规定 常量和变量之间的区别在于程序执行过程中的变化情况 常量是一成不变的 变量则可以不断改变,77,C语言的数据类型,数据类型的长度 在计算机中,由于软硬件的各种原因,数据类型必须有一个长度的限制 这个长度是指数据存储在计算机中需要占用多少个字节数 不同类型的数据在内存中占用的字节数是不同的 溢出处理 不同的数据类型规定了不同的机内表示长度,也决定了对应数据量的变化范围,当某一数据超出该数据类型所规定的范围时,计算机会拒绝接受,而将之转换成范围内的另外某个数,这种情况称之为溢出处理。,78,常量,常量 在程序运行过程中其值不能被改变的量值 例1: 1,200 3.1,-4.0 A,b “abc”,“ABn” 在程序中使用常量时,一般不需要具体指出它属于哪一种类型C语言编译系统会自动根据常量的数据大小和直观形式来确定它的数据类型 例2: 3,3.0,3,“3”,79,常量,语言提供的常量 数值常量 整型 实型 字符常量 字符常量 字符串常量 这些类型决定了各种常量所占存储空间的大小和数的表示范围 特殊形式常量 符号常量,80,常量,整型常量 一个整数 常用的整数类型整型(VC中) 4字节 长整型 8字节 无符号整型 4字节 无符号长整型 8字节,81,常量,整型常量 三种形式 十进制,有效的十进制数字串 例:100,32767,-120 八进制,以数字“0”开头的八进制数字串 例:0100,0123,-012 十六进制,以数字0x或0X开头的十六进制字符串 例:0x123 ,0x100,-0x12 长整型常量 可表示为:十进制、八进制、十六进制 在常数之后加上字母“或“,82,常量,实型常量 实数,又称浮点数 类型 单精度型 4字节: 10-38 1038 双精度型 8字节: 10-30810308 长双精度型 16字节: 10-4931 104932,83,常量,实型常量 有效位数 单精度有效数字位数为十进制数的67位 双精度有效数字位数为十进制数的1516位 长双精度型有效数字位数为十进制数的1819位 两种形式 小数形式 由正负符号、整数部分、小数点及小数部分组成 例:3.0,5.123,-120.1,0.0 指数形式 由尾数、字母e或E及指数部分组成 例: 123.0E-1,-1.23e3 标准的指数形式是:小数点的左侧只有一位数字,84,常量,实型常量 提示 在语言中,实型常量一般都作为双精度来处理 注意指数必须是不超过数据表示范围的正负整数,并且在e或E前必须有数字 对于超过有效数字位的数位,系统存储时自动舍去,85,常量,字符常量 包括可以全部在计算机上显示的符号 ASCII码表上的全部字符 一个字符的存储占用一个字节 表示方法 用单引号 括起来的一个字符 A,1 用单引号 括起来的以 字符开始的字符 n,t,86,常量,字符常量 C语言中字符型数据和整型数据可以通用 字符型数据在计算机中存储的是字符的ASCII码 ASCII码形式上就是0 到255之间的整数 例如 字符“A“的ASCII码值用是65 A+32; /*执行结果65+32=97,是a的ASCII码值*/,87,常量,字符串常量 是用一对双引号括起来的字符序列 双引号仅做定界符使用,本身不算入字符串常量 例如 “ABC”,“ ”(有空格),“a” , “Happy new Year”, “abcn” ,“”(无空格)等 C语言规定字符串的最后必须以空字符0结尾 编译程序总是自动地在字符串的结尾加上一个转义字符0 ASCII码是0,所对应的字符是空 空字符并不计算在字符串的长度里,但是存储时, 空字符将会额外的占用一个字节空间,88,常量,字符串常量 字符串常量与字符常量的区别 形式 字符常量是用单引号括起的单个字符 字符串常量是用双引号括起的一串字符 存储方式 字符常量在内存中占一个字节 字符串常量除了每个字符各占一个字节外,其字符串结束符0也要占一个字节 例如 字符常量a占一个字节 字符串常量“a“ 占2个字节,a ,“a” ,97,97,0,89,常量,符号常量 在C语言中允许程序中的常量定义为一个标识符,这个标识符称为符号常量 带有名字的常量 定义格式 #define 例如: #define AGE 35 #define M 1.9734067e9 提示 简化书写格式、减少出错率 定义符号常量可以提高程序的可读性,便于程序的调试和修改 符号常量不同于变量,在其作用域内不能被改变和重新赋值 习惯上人们把符号常量名用大写字母表示,90,变量,变量 在程序运行过程中其值发生改变(可以被改变)的量值 C语言规定所有用到的变量都必须在程序中指定其数据类型,必须“先定义后使用” 一个变量应该有一个名字(标识符) 定义变量时要给其命名 一个变量应该有一种数据类型 编译系统根据定义变量的数据类型为其分配存储单元并在该存储单元中存放变量的值,91,变量,变量的命名 每个变量都由一个变量名来标识 在C语言中,变量名作为变量的标识,其命名规则符合标识符的所有规定 语言规定标识符只能由字母、数字和下划线组成且第一个 字符必须是字母或下划线 提示 大、小写字母被认为是不同的变量名 例:Sun、sun、SUN是三个不同的变量 尽量取与变量含义接近的名称,92,变量,变量的定义 变量定义的目的 定义变量名 定义变量的数据类型 变量的类型决定变量的存贮结构,使C语言的编译程序为所定义的变量分配存储空间 变量的定义说明了变量叫什么以及用来做什么 定义一个变量的过程,实际上就是向内存申请一个变量的数据类型大小的空间的过程 变量实质上就是内存某一单元的标识符号,对这个符号的引用就是对相应的内存单元的存取操作,93,变量,变量的定义 用类型说明语句对变量进行定义 定义格式 type namelist; 变量表namelist的形式是:变量1,变量2,变量名n,用逗号分隔的变量名的集合 例 int a,b23,C_123; float sum; char max_ch; 变量的基本数据类型 整型、实型、字符型,94,变量,整型变量 不同类型的差别在于占用不同的存储空间 采用不同位数的二进制编码方式 计算机内部总是采用二进制补码形式表示一个数值型数据 例如: 整型的最高位为符号位:“1”表示负数,“0”表示正数,其余15位表示数值 无符号整型数全部16位表示数值,95,变量,整型变量 整型类型的基本标志是int 基本型(int) 短整型(short int 、short) 长整型(long int 、long ) 无符号整型(unsigned int、unsigned long 、unsigned short) 例 int a;long b; unsigned int c; 提示 使用某种类型的变量时,一定要注意该类型变量的取值范围,96,变量,实型变量 存储实型数据 ANSI C允许的定义三种实型变量 float 单精度型 Double 双精度型 long double 长双精度型 例 float a,b; double x; long double y; 提示 运用实数运算时要合理使用不同的类型,尽可能减少误差,97,变量,字符变量 用来存放一个字符常量 即一个字节存放一个字符 标示:char 例:char c1,a2; 提示 不能将一个字符串常量赋给一个字符变量 例:char c1,c2; c1=a ; c2=b ;合法 c1=“a” ; c2=“b”;非法,98,变量,变量赋值 初始化赋值方式(声明语句) C语言允许在定义一个变量的同时对变量进行初始化 例: int i=0;/*表示定义一个整型变量i的同时将i赋值为0*/ int i,j,k=10;/*表示i,j,k为整型,只有k被赋值为10 */ 提示 如果对几个变量同时赋一个初始值,则可以写成 float a=3.0,b=3.0,c=3.0;表示a、b、c的初始值均为3.0,但并不表示整个程序中三个变量值一直不变或一直相等,99,变量,变量赋值 先说明后赋值方式(赋值语句) 在程序运行过程中用赋值语句给变量赋一个值 例如 a=10; const修饰符 表示将变量声明为“只读”,即程序可以访问const型变量的值,但不能修改它。,100,变量,变量在使用中应注意的问题 变量要先定义后使用 常量与变量的类型要匹配 变量的数值存储范围,101,其它语言的基本数据类型,与C概念相同,略有差异 整型 实型 字符型 新增类型 字符串类型 布尔型,102,例题和习题,变量的赋值及变量的溢出,计算机及程序设计概述,运算符与表达式,104,运算符,C语言用于描述对数据进行运算的特殊符号 语言具有丰富而繁多的运算符 由运算符构成了各种表达式 分类 语言的运算符按其在表达式中与运算对象的关系 单目运算 一个运算符连接一个运算对象 双目运算 一个运算符连接两个运算对象 三目运算 一个运算符连接三个运算对象,105,运算符,分类 算术(自增/自减)运算符:(+,*,/,%、+、-) 关系运算符:(,=,、|、) 赋值运算符:(=) 条件运算符:(?:) 逗号运算符:(,) 指针运算符:(*,) 强制类型转换运算符:(type) 分量运算符:(和 ) 下标运算符:( ) 函数调用运算符:(( )),106,运算符,对运算符的掌握应从三个方面着手 和操作符相关的数据类型(包括操作数和操作结果的数据类型) 运算符的优先级 运算符的结合次序,107,表达式,用运算符将运算对象连接而成的符合语言规则的算式 特别地:一个常量、一个变量、一个函数都可以看成是一个表达式 表达式的分类 按照运算符与运算对象的关系 单目表达式 双目表达式 三目表达式,108,表达式,表达式的分类 按照运算符在表达式中的作用 算术表达式,例:3+4*5 赋值表达式,例:a=3 关系表达式,例:5b 逻辑表达式,例:35a=b 条件表达式,例:ab?a:b 逗号表达式,例:a=3,b=4,c=5 指针表达式,例:p-2,a,109,表达式的求值过程,C语言规定了运算符的优先级和结合性 优先级 指同一个表达式中不同运算符进行计算时的先后次序 结合性 结合性是指同一个表达式中相同优先级的多个运算应遵循的运算顺序 语言规定:单目运算符是自右向左结合,双目运算符是自左向右结合,110,表达式的求值过程,表达式的求值过程按C规定的原则求值 表达式代表了一个具体的值 实际上是一个数据加工的过程 在表达式求值时,先按运算符的优先级级别的高低次序执行 如果运算符两侧的优先级级别相同,则按规定的“结合方向”处理 提示 运算符的优先级制约着表达式的计算次序 可以通过括号()来改变表达式求值的顺序 表达式求值过程中存在某种类型数据的类型转换,111,算术表达式,由算术运算符连接数值型运算对象构成 其结果可以是整数、单精度实数和双精度实数 例:int a=2; float b=4.5;表达式 2*a+b 的结果为8.5 优先给与结合性 提示 两个整数相除其结果仍为整数(即舍去小数部分) 例如:13/10的结果为1 “%”为求余运算符,参与运算的两个数均为整数 例如:10%31 -10%3-1 除以0在计算机系统中是没有意义的 用括号可以改变表达式的运算顺序,112,算术表达式,算术表达式 例1: 设 int b=7;float a=2.5,c=4.7; 表达式a+(int)(b/3*(int)(a+c)/2)%4的值? 例2:,113,自增/自减,“+”与“-”的作用是使变量的值增1或减1 C语言提供两种形式的 +/-运算符 +a,-a(前缀运算:先进行增量运算后使用) a+, a-(后缀运算:先使用后进行增量运算) 提示: 增和自减只能作用于变量,不允许对常量、表达式或其它进行操作 当自增/自减变量值本身就单独构成一条语句时,前缀和后缀的效果是一样的 对于“+”和“-”的使用要避免二义性,114,自增/自减,计算过程 例1:设x=5 y=+x;/*先计算x=x+1,再执行y=x,结果x=5 ,y=6*/ y=x+;/*先执行y=x,再计算x=x+1,结果y=5,x=6*/ 问题:如何理解A+B ? C规定:自左向右取尽可能多的符号组成运算符,115,自增/自减,例2:设x=5 y=x+*x+;/*先取x的值进行“*”运算,再进行两次 x+。 y=25,x=7*/ y=+x*+x;/*先进行两次x自增,使x的值为7,再进行相乘运算。y=49,x=7*/,116,赋值表达式,由赋值运算符“=”连接表达式(右侧)和变量(左侧) 形式:变量名表达式 赋值运算符完成两类操作 计算 赋值 例 int a=2,float b=5.2,c; c=a*b; 赋值运算符具有右结合性 例如:a=b=3*5;/*先计算3*5,后将15赋给b,再将b的值15赋给a*/,117,赋值表达式,组合赋值表达式 组合赋值运算符将一个变量和一个表达式连接起来的式子称为组合赋值表达式 形式:变量名 表达式 例: x%=y/3;/*x=x%(y/3)*/ a*=b+c /* a=a*(b+c)*/ 注意:“a*=b+c”与“a=a*b+c”是不等价的 提示 “=”不是数学中的“等号”,它表示一个动作,右侧的值送与左侧的变量中(左侧只允许是变量,不能是表达式或其他) 赋值运算符两侧的类型要求一致,否则要进行类型转换 赋值运算符=,相等运算符= =,和一般习惯有所不同,118,关系表达式,关系运算符中的“关系”二字的含义是指一个值与另一个值之间的关系 关系由关系运算符(,=, OP 表达式可以是常量、变量和表达式 结果为整型值 0:逻辑假 1:逻辑真 优先级:(,=,=)高于(!=,=) 结合方向:自左向右,119,关系表达式,例: int a=2; float b=3.4; ab、a+bb,abb的结果分别是多少?(0、1、0) 提示 进行关系运算时,先计算表达式的值,然后再进行关系比较运算 例如:int a=1,b=2,c=3; (1)a+b3*c 的结果为0 /*39关系不成立*/ (2)(a+=b)(b*=11%c)结果值为1 /*34关系成立 */,120,关系表达式,在表达式中连续
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国银行2025巴音郭楞蒙古自治州秋招笔试英语题专练及答案
- 邮储银行2025来宾市半结构化面试15问及话术
- 交通银行2025娄底市秋招结构化面试经典题及参考答案
- 建设银行2025鄂尔多斯市笔试英文行测高频题含答案
- 2025年3D打印的伦理争议
- 交通银行2025荆州市秋招笔试专业知识题专练及答案
- 2025行业市场规模增长动力分析
- 农业银行2025贺州市数据分析师笔试题及答案
- 农业银行2025清远市半结构化面试15问及话术
- 邮储银行2025兰州市半结构化面试15问及话术
- 肝性脑病(课件)
- 【名校】《三思而后行》 完整版课件
- 公司内部程序文件(格式模版)
- 泛光施工招标文件
- 旅游策划实务整套课件完整版电子教案课件汇总(最新)
- DB23∕T 2661-2020 地热能供暖系统技术规程
- 人工挖孔桩施工监测监控措施
- 国家职业技能标准 (2021年版) 6-18-01-07 多工序数控机床操作调整工
- 办公楼加层改造施工组织设计(100页)
- 渗透检测培训教材(1)
- 空调专业常用英文词汇
评论
0/150
提交评论