数据库课件L1-2.ppt
《数据库课件L1-2.ppt》由会员分享,可在线阅读,更多相关《数据库课件L1-2.ppt(36页珍藏版)》请在冰豆网上搜索。
第二讲:
程序设计基础
(2)林梦香林梦香北京航空航天大学北京航空航天大学20082008年年1010月月计算机软件技术基础计算机软件技术基础(11)数据在计算机中如何表示?
如何存储?
)数据在计算机中如何表示?
如何存储?
(22)对数据实施哪些操作?
如何控制?
)对数据实施哪些操作?
如何控制?
(33)数据如何输入到计算机?
)数据如何输入到计算机?
(44)计算结果(数据)如何输出和保存?
)计算结果(数据)如何输出和保存?
程序设计需要确定:
程序设计需要确定:
输入设备输入设备(鼠标、(鼠标、键盘等)键盘等)输出设备输出设备(显示器、(显示器、打印机等)打印机等)磁盘磁盘网络网络I/OI/OI/OI/O总线总线总线总线主存储器主存储器主存储器主存储器程序计程序计数器数器(PCPC)算术逻算术逻辑单元辑单元(ALUALU)寄存寄存器堆器堆CPUCPU存储器总线存储器总线存储器总线存储器总线I/OI/OI/OI/O设备设备设备设备计算机通过计算机通过I/OI/O设备进行数据的输入输出设备进行数据的输入输出计算机的外部设备计算机的外部设备输入设备输入设备:
输入命令和数据;输入命令和数据;输出设备:
输出设备:
显示程序的运行结果;显示程序的运行结果;磁盘设备:
磁盘设备:
长期存放程序文件和数据文件;长期存放程序文件和数据文件;文件n输入输入/输出设备和外部存储设备输出设备和外部存储设备的物理特征完全不同!
的物理特征完全不同!
nCC语言中把所有的语言中把所有的I/OI/O设备都看作设备都看作“文件文件”,用同一批函数对它们,用同一批函数对它们进行输入进行输入/输出操作。
输出操作。
输入设备输入设备文件输入设备输入设备文件输入设备输入设备文件输入设备输入设备文件输出设备输出设备文件输出设备输出设备文件输出设备输出设备文件输出设备输出设备文件外部存储设备程序文件、数据文件外部存储设备程序文件、数据文件外部存储设备程序文件、数据文件外部存储设备程序文件、数据文件流nCC语言通过一个称为语言通过一个称为“流流”的的逻辑设逻辑设备备间接操作文件;间接操作文件;n流流实际是一个实际是一个FILE类型的变量,类型的变量,FILE类型是一个结构类型,定义在类型是一个结构类型,定义在stdio.h中。
中。
n程序需要与文件交换数据时:
程序需要与文件交换数据时:
n先在程序与文件之间建立一个流(用先在程序与文件之间建立一个流(用fopen函数);函数);n用标准输入用标准输入/输出函数,通过流读输出函数,通过流读/写文件;写文件;n数据交换结束后,撤销流(用数据交换结束后,撤销流(用fclose函数)。
函数)。
文件操作打开/关闭文件的打开文件的打开(建立流建立流):
FILE*FILE*fpfp;fpfp=fopenfopen(char*filename,char*(char*filename,char*modemode);文件的关闭(撤销流)文件的关闭(撤销流):
intintfclosefclose(FILE*(FILE*fpfp);文件操作读/写函数字符的输入输出函数字符的输入输出函数字符的输入输出函数字符的输入输出函数intgetcintgetc(FILE*(FILE*fpfp);intputcintputc(intintc,FILE*c,FILE*fpfp);字符串的输入输出函数:
字符串的输入输出函数:
字符串的输入输出函数:
字符串的输入输出函数:
charcharfgetsfgets(char*s,(char*s,intintn,FILE*n,FILE*fpfp);intfputsintfputs(char*s,FILE*(char*s,FILE*fpfp);格式化输入格式化输入格式化输入格式化输入/输出函数:
输出函数:
输出函数:
输出函数:
fscanffscanf(FILE*(FILE*fpfp,”,”输入格式输入格式输入格式输入格式”,输入项,输入项,输入项,输入项);fprintffprintf(FILE*(FILE*fpfp,”输出格式输出格式输出格式输出格式”,输出项,输出项,输出项,输出项);CC程序运行时自动建立程序运行时自动建立33个流:
个流:
11、stdin,与键盘联系与键盘联系;22、stdout,与显示屏幕联系;,与显示屏幕联系;33、stderr,与显示屏幕联系。
与显示屏幕联系。
特点:
特点:
这些流由系统自动将其打开、关闭,程序不这些流由系统自动将其打开、关闭,程序不需管。
需管。
标准设备文件标准设备文件的读/写字符输入输出函数:
字符输入输出函数:
getchar(),putchar()字符串的输入输出函数:
字符串的输入输出函数:
gets(),puts()格式化输入格式化输入/输出函数:
输出函数:
scanf(),printf()要求:
要求:
从键盘输入从键盘输入1010个数字,将这个数字,将这1010个数个数字及其平均值保存到磁盘文件字及其平均值保存到磁盘文件data.txt中。
中。
文件操作:
例一#includeintmain(void)FILE*fp;intvar,i,sum=0;floataverage;fp=fopen(“data.txt”,“w”);for(i=0;i10;i+)printf(“inputnumber:
&d”,i+1);scanf(“%d”,&var);sum=sum+var;fprintf(fp,“%dn”,var);average=(float)sum/10.0;fprintf(fp,“Theaverageis%6.2f”,average);fclose(fp);要求:
要求:
从键盘输入一些字符,逐个把它们保从键盘输入一些字符,逐个把它们保存到磁盘文件中,输入结束标志为存到磁盘文件中,输入结束标志为#。
文件操作:
例二文件操作:
例二#includeintmain(void)FILE*fp;charch,filename10;scanf(%s,filename);if(fp=fopen(filename,w)=NULL)printf(cannotopenfilen);exit(0);ch=getchar();ch=getchar();while(ch!
=#)fputc(ch,fp);ch=getchar();fclose(fp);程序设计要点
(二):
程序设计要点
(二):
化复杂为简单化复杂为简单例:
例:
设计一程序,要求能够查询学生的成绩、设计一程序,要求能够查询学生的成绩、计算平均成绩和总学分、按照总学分排序。
计算平均成绩和总学分、按照总学分排序。
分析:
分析:
程序的基本功能:
程序的基本功能:
11、成绩的输入(存入文件);、成绩的输入(存入文件);22、成绩的查询(按学号);、成绩的查询(按学号);33、计算平均成绩和总学分;、计算平均成绩和总学分;44、按总学分排序;、按总学分排序;55、查询结果的输出。
、查询结果的输出。
模块化程序设计思想:
模块化程序设计思想:
逐步分解、分而治之逐步分解、分而治之优点:
优点:
每个模块可以独立设计和实现,利每个模块可以独立设计和实现,利于提高效率、隔离错误和维护于提高效率、隔离错误和维护模块化程序设计模块化程序设计程序组织CC语言中用语言中用函数函数组织程序,一个组织程序,一个CC程序由一程序由一个主函数和若干个函数构成。
个主函数和若干个函数构成。
主函数(主函数(main)是程序开始执行的入口;是程序开始执行的入口;CC函数是一个独立完成某个功能的语句块;函数是一个独立完成某个功能的语句块;函数与函数之间通过输入参数和返回值函数与函数之间通过输入参数和返回值(输出)来联系;(输出)来联系;函数的定义n函数函数定义定义的格式为:
的格式为:
返回类型返回类型函数名函数名(参数表)参数表)函数体;函数体;n用户自定义函数用户自定义函数,则必须在源代码中说明函数原,则必须在源代码中说明函数原型,函数原型可以只包含参数的类型;型,函数原型可以只包含参数的类型;n标准库函数标准库函数的函数原型都在头文件中提供,程序的函数原型都在头文件中提供,程序可以用可以用#include指令包含这些原型文件;指令包含这些原型文件;注意:
注意:
CC不允许函数定义嵌套,即在函数定不允许函数定义嵌套,即在函数定义中再定义一个函数是非法的。
义中再定义一个函数是非法的。
函数声明和调用CC语言中,一个函数必须在语言中,一个函数必须在函数声明函数声明(函函数原型数原型)后才能被调用,函数声明的作用后才能被调用,函数声明的作用是告知编译器:
函数值类型、参数个数是告知编译器:
函数值类型、参数个数及类型,以便编译器对函数调用进行正及类型,以便编译器对函数调用进行正确性检查。
确性检查。
函数调用:
函数调用:
函数名(函数名(实参实参11,实参,实参22,)函数定义、声明和调用intplus(int,int);intmain(void)inta,b,c;a=4;b=5;c=plus(a,b);printf(“a+b=%d”,c);intplus(intx,inty)intz;z=x+y;return(z);问题一:
问题一:
函数间的参数传递函数间的参数传递11、使用全局变量、使用全局变量22、使用参数(形参、使用参数(形参-实参)实参)按值传递按值传递实参将数据复制到形参;实参将数据复制到形参;每次只传递一个数据每次只传递一个数据按地址传递按地址传递将实参的存储地址传递到形参(指针变量);将实参的存储地址传递到形参(指针变量);每次可传递多个数据。
每次可传递多个数据。
全局变量的例子全局变量的例子intadd1,add2;intmain(void)intc;add1=4;add2=5;c=plus();printf(“add1+add2=%d”,c);intplus()intz;z=add1+add2;return(z);传递值的例子传递值的例子intplus(int,int);intmain(void)inta,b,c;a=4;b=5;c=plus(a,b);printf(“1.a+b=%d”,c);printf(“2.a+b=%d”,a+b);intplus(intx,inty)intz;z=x+y;x=8;y=10;return(z);传递地址的例子传递地址的例子intplus(int*,int*);intmain(void)inta,b,c;a=4;b=5;c=plus(&a,&b);printf(“1.a+b=%d”,c);printf(“2.a+b=%d”,a+b);intplus(int*px,int*py)intz;z=*px+*py;*px=8;*py=10;return(z);问题二:
问题二:
变量生存期和作用域变量生存期和作用域运行时,程序在内存中分为运行时,程序在内存中分为44个部分:
个部分:
代码区、代码区、全局数据区、全局数据区、堆区、堆区、栈区。
栈区。
变量的存储类型:
变量的存储类型:
static:
全局数据区全局数据区auto:
栈区栈区register:
通用寄存器通用寄存器变量生存期:
程序运行期间变量存在的时变量生存期:
程序运行期间变量存在的时间。
与间。
与变量存储类型和声明位置变量存储类型和声明位置有关:
有关:
11、静态生命期:
变量被分配在全局数据区。
、静态生命期:
变量被分配在全局数据区。
其生存期与程序的运行期相同。
如全局变其生存期与程序的运行期相同。
如全局变量、静态全局变量、静态局部变量。
量、静态全局变量、静态局部变量。
22、局部生命期:
变量分配在栈区。
其生存、局部生命期:
变量分配在栈区。
其生存期与函数运行期相同。
期与函数运行期相同。
33、动态生命期:
变量分配在堆区。
其生存、动态生命期:
变量分配在堆区。
其生存期由程序中特定的函数调用来调用和释放。
期由程序中特定的函数调用来调用和释放。
变量的生存期变量的生存期变量的作用域变量的作用域变量在源程序中的有效