程序设计基础知识(选读)_第1页
程序设计基础知识(选读)_第2页
程序设计基础知识(选读)_第3页
程序设计基础知识(选读)_第4页
程序设计基础知识(选读)_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

1、第二讲:程序设计基础(2)林梦香北京航空航天大学2010年9月计算机软件技术基础(1)数据在计算机中如何表示?如何存储?(2)对数据实施哪些操作?如何控制?(3)数据如何输入到计算机?(4)计算结果(数据)如何输出和保存?程序设计需要确定:输入设备(鼠标、键盘等) 输出设备(显示器、打印机等)磁盘 网络I/O总线主存储器程序计数器(PC)算术逻辑单元(ALU)寄存器堆CPU存储器总线I/O设备计算机通过I/O设备进行数据的输入输出计算机的外部设备 输入设备: 输入命令和数据; 输出设备: 显示程序的运行结果; 磁盘设备: 长期存放程序文件和数据文件; 文件输入/输出设备和外部存储设备的物理特征

2、完全不同!C语言中把所有的I/O设备都看作“文件”,用同一批函数对它们进行输入/输出操作。 输入设备输入设备文件 输出设备输出设备文件 外部存储设备程序文件、数据文件流C语言通过一个称为“流”的逻辑设备间接操作文件;流实际是一个FILE类型的变量, FILE类型是一个结构类型,定义在stdio.h中。程序需要与文件交换数据时:先在程序与文件之间建立一个流(用fopen函数);用标准输入/输出函数,通过流读/写文件;数据交换结束后,撤销流(用fclose函数)。文件操作打开/关闭文件的打开(建立流): FILE *fp; fp= fopen(char * filename,char * mode

3、);文件的关闭(撤销流): int fclose(FILE *fp);文件操作读/写函数字符的输入输出函数 int getc(FILE *fp); int putc(int c,FILE *fp);字符串的输入输出函数: char fgets(char *s,int n,FILE *fp) ; int fputs(char *s,FILE *fp);格式化输入/输出函数: fscanf(FILE *fp,”输入格式”,输入项) ; fprintf(FILE *fp, ”输出格式”,输出项);C程序运行时自动建立3个流:1、 stdin,与键盘联系;2、 stdout,与显示屏幕联系;3、 st

4、derr,与显示屏幕联系。特点: 这些流由系统自动将其打开、关闭,程序不需管。标准设备文件标准设备文件的读/写字符输入输出函数: getchar(), putchar()字符串的输入输出函数: gets(), puts()格式化输入/输出函数: scanf(), printf() 要求: 从键盘输入10个数字,将这10个数字及其平均值保存到磁盘文件data.txt中。文件操作:例一#include int main(void) FILE *fp; int var,i,sum=0; float average; fp=fopen(“data.txt”, “ w”); for(i=0;i10;i+

5、) printf(“input number :&d”,i+1); scanf(“%d”,&var); sum=sum+var; fprintf(fp, “ %dn”,var); average=(float)sum/10.0; fprintf(fp, “ The average is %6.2f”,average); fclose(fp);要求: 从键盘输入一些字符,逐个把它们保存到磁盘文件中,输入结束标志为#。文件操作:例二#include int main(void) FILE *fp; char ch,filename10; scanf(%s,filename); if(fp=fope

6、n(filename,w)=NULL) printf(cannot open filen); exit(0); ch=getchar(); ch=getchar(); while(ch!=#) fputc(ch,fp); ch=getchar(); fclose(fp);程序设计要点(二): 化复杂为简单例: 设计一程序,要求能够查询学生的成绩、计算平均成绩和总学分、按照总学分排序。分析: 程序的基本功能: 1、成绩的输入(存入文件); 2、成绩的查询(按学号); 3、计算平均成绩和总学分; 4、按总学分排序; 5、查询结果的输出。模块化程序设计思想: 逐步分解、分而治之 优点: 每个模块可以

7、独立设计和实现,利于提高效率、隔离错误和维护模块化程序设计程序组织C语言中用函数组织程序,一个C程序由一个主函数和若干个函数构成。主函数(main)是程序开始执行的入口;C函数是一个独立完成某个功能的语句块;函数与函数之间通过输入参数和返回值(输出)来联系;函数的定义函数定义的格式为: 返回类型 函数名(参数表) 函数体;用户自定义函数,则必须在源代码中说明函数原型,函数原型可以只包含参数的类型;标准库函数的函数原型都在头文件中提供,程序可以用#include指令包含这些原型文件;注意:C不允许函数定义嵌套,即在函数定义中再定义一个函数是非法的。函数声明和调用C语言中,一个函数必须在函数声明(

8、函数原型)后才能被调用,函数声明的作用是告知编译器:函数值类型、参数个数及类型,以便编译器对函数调用进行正确性检查。函数调用: 函数名(实参1,实参2,)函数定义、声明和调用int plus(int,int);int main(void) int a,b,c; a=4; b=5; c=plus(a,b); printf(“a+b=%d”,c); int plus(int x,int y) int z; z=x+y; return(z); 问题一:函数间的参数传递1、使用全局变量2、使用参数(形参-实参) 按值传递 实参将数据复制到形参; 每次只传递一个数据按地址传递 将实参的存储地址传递到形参

9、(指针变量); 每次可传递多个数据。全局变量的例子int add1,add2;int main(void) int c; add1=4; add2=5; c=plus(); printf(“add1+add2=%d”,c);int plus() int z; z=add1+add2; return(z);传递值的例子int plus(int, int);int main(void) int a,b,c; a=4; b=5; c=plus(a,b); printf(“1. a+b=%d”,c); printf(“2. a+b=%d”,a+b); int plus(int x,int y) int

10、 z; z=x+y; x=8; y=10; return(z); 传递地址的例子int plus(int *, int *);int main(void) int a,b,c; a=4; b=5; c=plus(&a,&b); printf(“1. a+b=%d”,c); printf(“2. a+b=%d”,a+b); int plus(int *px,int *py) int z; z=*px+*py; *px=8; *py=10; return(z); 问题二:变量生存期和作用域程序运行时,内存被分为4个部分:代码区、 全局数据区、 堆区、 栈区。变量的存储类型: static: 全局数

11、据区 auto : 栈区 register: 通用寄存器变量生存期:程序运行期间变量存在的时间。与变量存储类型和声明位置有关: 1、静态生命期:变量被分配在全局数据区。其生存期与程序的运行期相同。如全局变量、静态全局变量、静态局部变量。 2、局部生命期:变量分配在栈区。其生存期与函数运行期相同。 3、动态生命期:变量分配在堆区。其生存期由程序中特定的函数调用来调用和释放。变量的生存期变量的作用域变量在源程序中的有效范围,与变量声明的位置有关。全局变量:在函数之外声明的变量称为全局变量,可以为本文件中其它函数所共用。全局变量存放在全局数据区。在声明全局变量时,若未专门初始化,则编译器将其初始化为

12、0。局部变量:在一个函数内部声明的变量是局部变量,它只在本函数范围内是可见的。局部变量存放在栈区。如果局部变量不被显式初始化,则其内容是不可预料的。int plus(void);int add1,add2;int main(void) int c; add1=4; add2=5; c=plus(); printf(“add1+add2=%d”,c);int plus() int z; z=add1+add2; return(z);小 结程序(计算)的本质: 数据的输入、操作、输出 程序(函数)的结构 (输入/输出、数据处理)变量是程序的核心变量的本质;变量的数据类型(普通变量(基础类型 变量、聚合类型变量)、指针变量);程序运行结束后,变量中保存的数据随之丢失;需长期保存的数据应保存在文件中,存储在外部存储设备(磁盘等)。

温馨提示

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

评论

0/150

提交评论