1、2.1 数表的计算机处理,2.1.1 数表的程序化 2.1.2 数表的文件化,数表的分类,数据彼此间存在函数关系的表格。例如,普通V带传动的包角系数表。,常数数表,列表函数,数据彼此间没有函数关系的表格。例如普通V带传动的弯曲影响系数表和链轮轴孔最大直径表。,公式化处理,数组赋值法,按 数 据 间 有 无 函 数 关 系 分,按 数 表 的 维 数 分,所要检索的数据只与一个变量有关。例如普通V带传动的弯曲影响系数表。,一维数表,所要检索的数据与两个变量有关。例如链轮轴孔最大直径表。,二维数表,多维数表,所要检索的数据与两个以上的变量有关。例如单根带许用功率值表。(教材57页),数表的分类,几
2、维数表就用几维数组,2.1.1数表的程序化,常数数表程序化的主要内容是数表的输入和简单检索。即将数表的数据存储到数组中,再用循环和判断语句将已知参数和数组的元素值进行比较,找到相对应的数组元素的下标,即可获得正确的查询结果。一维数表用一维数组存储,二维数表用二维数组存储,依次类推。如果常数数表的数据量较大,或需要共享的数表,则用存入数据文件或数据库的方法。,例1、计算机处理V带传动的弯曲影响系数表。,写成语句如下:,用i=0-7代表带型,kb7用来存储表中的数值。在程序中,若前面计算已得带型为B,则相应的i=3,弯曲影响系数为kbi即kb3=2.65e-3 mm。,带型,例2、将V带型号及断面
3、尺寸表程序化。,检索V型带的C语言程序,#include main() int i;float a7=10.0,13.0,17.0,22.0,32.0,38.0,50.0;float h7=6.0,8.0,10.5,13.5,19.0,23.5,30.0;float a07=8.5,11.0,14.0,19.0,27.0,32.0,42.0;float y07=2.1,2.3,4.1,4.8,6.9,8.3,11.0;while(1) scanf(“请输入V带型号(0,1,2,3,4,5,6):%d”,else printf(“您所输入的V带型号不对,请重新输入!”); ,说明 i 表示V带型
4、号; a7存储V带的顶宽; h7存储V带的断面高; a07存储V带的节宽; y07存储V带的节高.,double sk(double i) int n;double si5=1.0,1.04,1.19,1.49,2.95;double ski5=1.0,1.03,1.08,1.12,1.14;if (isi4)return(ski4);else for(n=0;n5;n+)if(i=sin+1)Return(skin); ,例3、对下表所示传动系数表程序化,该表程序化时要先判断。,2.1.2 数表的文件化,数表文件化即将数据按指定的文件名以一定的格式存放在外存中,需要时,指出文件名,用命令语句
5、将所需的信息从外存中取出,送入内存,供程序使用,若数据用毕,还可将它们送回外存,不再占用内存。适用于数表很大,数据需要共享,以及表中数据可能发生变化的情况。数表文件化处理,可使程序简练,使数表和应用程序分离,实现数表的共享。早期的CAD系统多采用数据文件来存储数据。,例:为 数表建立数据文件*,#include #definge num 14 Struct key_gbFloat d1,d2,b,h,t,t1; key; Main( ) int i;FILE *fP;If(fp=fopen(“key.dat”,”w”)=NULL printf(“cant open the file”);Exi
6、t ( ) ;For(i=0;inum;i+) printf(“record%d:d1,d2,b,h ,t,t1=“,i); Scanf(“%f,%f,%f,%f ,%f,%f”, ,将该程序编译、连接,然后运行,逐行输入各记录数据项,便在磁盘上建立了名 为“key.dat”的数据文件。,例:检索数表的程序,#include #definge num 14 Struct key_gbFloat d1,d2,b,h,t,t1; key; Main( ) int i;FILE *fP;while(1)printf(“input the shaft diameter d=”);scanf(“%f”,
7、If(fp=fopen(“key.dat”,”r”)=NULL printf(“cant open the file”);Exit ( ) ;For(i=0;ikey.d1 ,平键和键槽尺寸,V带弯曲影响系数kb,kb0 kb1 kb2 kb3 kb4 kb5 kb6,假设前面设计已选定B型带,则后续程序中将kb3编入相应的语句。,在程序中,只要给定普通V带型号的代码即数组元素的下标,即可通过数组元素检索到相应的弯曲影响系数,并参与运算。,链轮轴孔最大直径dmax表,普通V带传动的包角影响系数表,随机读写与fseek()函数,所谓随机读写是指,读写完当前数据后,可通过调用fseek()函数,将
8、位置指针移动到文件中任何一个地方。1用法:int fseek(文件指针,位移量,参照点);2功能:将指定文件的位置指针,从参照点开始,移动指定的字节数。 (1)参照点:用0(文件头)、1(当前位置)和(文件尾)表示。 (2)位移量:以参照点为起点,向前(当位移量时)或后(当位移量时)移动的字节数。在ANSI C标准中,要求位移量为long int型数据。,读写数据块函数,fread()和fwrite()函数,一般用于二进制文件的处理。 int fread(void *buffer,int size,int count,FILE *fp); int fwrite(void *buffer,int
9、 size,int count,FILE *fp); fread()从fp所指向文件的当前位置开始,一次读入size个字节,重复count次,并将读入的数据存放到从buffer开始的内存中;同时,将读写位置指针向前移动size* count个字节。 其中,buffer是存放读入数据的起始地址(即存放何处)。fwrite()从buffer开始,一次输出size个字节,重复count次, 并将输出的数据存放到fp所指向的文件中;同时,将读写位置指针向前移动size* count个字节。,文件的打开fopen()函数,1用法: FILE *fopen(“文件名“,“操作方式“); 2功能:返回一个指
10、向指定文件的指针。 3函数原型:stdio.h 。“文件名”是指要打开(或创建)的文件名。如果使用字符数组(或字符指针),则不使用双引号。“操作方式”:r为读打开一个文件;w为写打开一个文件。A向文件尾添加数据。r+、w+、 a+为读写打开一个文件。如果不能实现打开指定文件的操作,则fopen()函数返回一个空指针NULL。,文件的关闭fcolse()函数,1用法: int fclose(FILE *文件指针); 2功能:关闭“文件指针”所指向的文件。如果正常关闭了文件,则函数返回值为;否则,返回值为非。 例如,fclose(fp);/*关闭fp所指向的文件*/,例2、计算机处理链轮轴孔最大直径dmax表。写成语句如下:int i,j;float dmax128=10,13,16,20,25,28,31,34,11,15,20,24,29,33,37,42,18,22,28,34,41,47,51,57 ;用i=0-11代表不同的节距,j=0-7代表不同齿数,dmax 128用来存储表中的数值。在程序中,若前面计算已得p=12.70、z=19,则相应的i=2、j=4,链轮轴孔最大直径为dij即d24=41mm。,节距,齿数,