




已阅读5页,还剩82页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章 预处理、输入/输出和文件操作,C语言的预处理功能由C编译的预处理程序实现,负责分析和处理行首以“#”号开头的控制行。这些控制行包括宏替换、文件包含和条件编译等。 C语言中并没有专门用于输入/输出的语句。为了给出方便的程序接口,C语言中提供了“标准I/O库”,它是一组函数,可提供一系列I/O服务。,10.1 预处理功能 10.2 文 件 包 含 10.3 条 件 编 译 10.4 其他预处理功能 10.5 库函数使用方式 10.6 常用标准输入/输出函数 10.7 文件及有关操作 10.8 其他一些常用的函数(宏),10.1 预处理功能,10.1.1 简单宏定义和宏替换 简单宏定义的一般形式是: #define 标识符 字符序列 其中,标识符称作宏名,一般用大写字母。例如: #define PI 3.1415926,对于像PI这样的宏在进行使用和处理时分为3个步骤: 在函数之外(往往在程序开头)使用#define控制行定义宏名; 在程序中使用已定义的宏名; 在程序进行编译时,由预处理程序对宏名进行宏替换,恢复被宏名所代替的字符序列的原貌。例如: #define N 50 #define PI 3.1415926 int aN; double r,l; l 2*PI*r; ,经过宏替换之后,上述代码实际上就变成: int a50; double r,l; l2*3.1415926*r; ,有关宏的定义和使用要注意以下几点: 宏定义在源程序中要单独占用一行,通常“#”号出现在一行的第一个字符的位置,允许在#号的前面有若干空格或制表符,但不允许有其他字符。 宏名用大、小写字母标识都行,为醒目起见,往往用大写字母表示。 用双引号括起来的标识符不做宏替换。例如: #define TRUE 1 则打印语句 printf(“TRUE“); 会打印出TRUE,而不是1。, 宏定义可以嵌套。例如: #define PI 3.1415926 #define TWOPI ( 2*PI ) 在预处理后,语句 c1TWOPI * r; 便替换成 c1( 2 * 3.1415926 ) * r; 宏替换只是按原来的定义“机械地”进行替换,不管替换后的结果是对还是错。例如: #define A 32 那么 5/A 被替换成 5/32,又如: #define PI 3.l4l5q /* 有错:4的前面是字母l,5的后面是字母q */ area PI * r * r; 照样进行宏替换: area 3.l4l5q * r * r; 为了避免出现上述第一种情况造成的误解,应当把字符序列用括号括起来。 #define A (32), 如果宏定义中的字符序列过长,在一行中放不下,可在该行末尾加续行符“”,后随一个换行符。 #define LONG_STRING this is a very long string that is used as an example 可以用宏定义来表示数据类型。 #define MAX 100 #define ENTRY struct entrytype 在程序中可用ENTRY定义变量: ENTRY tableMAX,* p;, 如果宏名出现在#号之后,则不对它进行替换。例如: #define DEF define #DEF N 10 宏名的有效范围是从定义它的地方开始到其所在文件末尾或者用 #undef指令消除该宏定义为止。宏名不受分程序结构的影响,在其有效范围内遵循宏替换的规则。,10.1.2 带参数的宏定义 1带参数宏定义的一般格式 带参数的宏定义的一般形式是: #define 宏名(参数表) 字符序列 例如,定义一个计算圆面积的宏: #define PI 3.1415926536 #define area(r) (PI * r * r),例10-2:下面的程序中使用了带参数的宏,它计算并输出给定半径的圆的面积。 #define PI 3.1415926536 #define area(r) (PI*r*r) void main() printf(“fn“,area(6.18); ,2几点使用说明 使用宏定义时所带的实参可以是常量、已被赋值的变量名或者表达式。 例10-3:将例10-2的程序改写为交互式输入半径值的方式。 #define PI 3.1415926536 #define area(r) (PI*r*r) void main() float r; printf(“Input:r?n“); scanf(“f“,&r); printf(“Areafn“,area(r); , 带参数的宏替换与简单的宏替换在替换规则上是一致的,都是机械地进行替换,而不去理解用户的想法。 例10-4:本例说明宏替换可能存在副作用。 #define PI 3.1415926536 #define area(r) (PI*r*r) void main() printf(“fn“,area(46); ,为了避免出现与常规理解上的不一致,建议对宏定义中字符序列的整体和各个参数都用圆括号括起来。例如, #define area(r) (PI*(r)*(r) 那么, area(46)将被替换为: (3.1415926536*(46)*(46) 一个宏定义所带的参数可以多于一个,每个参数在宏替换中可以出现多次。 #define AVG5(a,b,c,d,e) (a)(b)(c)(d)(e)/5), 使用带参数的宏编写程序时,应注意:在宏定义中宏名和左圆括号之间没有空格。我们看一下如下宏定义: #define area (r) (PI *(r)*(r) 在area和“(”之间有空格。 例如, x area(5.6); 替换后的结果为: x (r) (3.1415926536 * (r) * (r)(5.6);,3带参数的宏和函数之间的比较 带参数的宏定义与函数是不同的,不要把二者混淆起来。二者主要的区别有: 宏定义中不存在参数类型问题,不仅宏名无类型,而且宏定义中的参数也无类型。宏名和它的参数都只是一个符号代表,预处理时进行宏扩展。 而带参数的宏在预处理阶段进行宏扩展。宏扩展只是简单地进行字符替换,并不对参数做任何计算、加工工作。 始终应该记住:C预处理程序并不去理解用户编写的C程序,它只是机械地按照宏替换的定义把程序中的宏调用扩展为相应的字符序列,而不去“领会”其含义。,4、运算符和宏替换嵌套 在标准C语言中提供了两个仅用于宏替换的运算符:连串运算符#和连结运算符# #。 在带参数的宏定义中,如果字符序列中的一个形参前面有“#”,那么在进行宏替换时,对应的实参就转换成用双引号括起来的字符串。,例如: #define PR(x) printf(#x) PR(data undefined!); 将替换成 printf(“data undefine!“);,又如: #define str(s) #s pstr(hello world); 将替换成: p“hello world“;,通常在实参中出现的转义字符在进行宏替换时,#运算符就在它的前面插入一个反斜线字符()。 如果调用形式如下: PR(“Hello World“); 则预处理时将它扩展为: printf(“Hello World“); 连结运算符#可以出现在上述两种形式的宏定义中。当进行宏替换时,在替换字符序列中(不是在实参中)出现的#被删除,在#前面和后面出现的两个形参被相应的实参所替换,并且把它们合成一个单词。如果连结的结果构成宏名,则进一步执行宏替换处理。,例如: #define debug(s,t) printf(“x“#s“d,x“#t“s“,x#s,x#t) debug(1,2); 经预处理后,被替换成: printf(“x“1“d,x“2“s“,x1,x2); 在字符串字面量联接之后,就成为下面形式: printf(“x1d,x2s”,x1,x2); 带参数的宏替换也可以嵌套定义。,例10-8:下面的程序展示宏的嵌套定义和替换,以及运算符的应用。 #include stdio.h #define PI (3.1415926536) #define FUN(k) (k)*PI #define PR(format,value) printf(#value“#format“t“,(value) #define NL putchar(n) #define PRINT1(f,x1) PR(f,x1);NL #define PRINT2(f,x1,x2) PR(f,x1);PRINT1(f,x2),void main() int i99; float area; areaPI*6.8*6.8; PRINT1(d,i); PRINT2(f,FUN(2)*6.8,area); 程序运行结果如下: i99 (2)*(3.1415926536)*6.842.725660 area145.267242,10.2 文 件 包 含,文件包含是C预处理程序的一种功能,它把指定文件的全部内容都包含到本文件之中。文件包含控制行的形式是: #include “文件名“ 例如: #include “defs. h“,在#include行中出现的文件名往往带有后缀.h,这种文件通常称为前导文件(或头部文件,header)。前导文件中除了可以包括宏定义外,也可以包括类型定义、全程变量和函数说明等。 文件包含控制行还有另外的形式,即把双引号改为尖括号: #include ,这两种形式都可以使用,但还是有区别的:使用尖括号表明应在系统规定的“标准”目录中寻找指定的文件,如UNIX系统中就在/usr/include目录中去找,而不要在源文件所在的目录中查找;使用双引号表明应首先在正处理的源文件目录中搜索指定文件;如未找到,则沿着提供给预处理程序的任选项(如 -ls)所指示的查找路径搜索;如仍未找到,最后查找系统规定的“标准”目录。 文件包含控制行可出现在源文件的任何地方, 多数都放在靠近文件开头的地方。并且一个#include命令只能包含一个文件。 文件包含是可以嵌套的。 要注意,前导文件不能单独进行编译,它要附属于某个C源文件一起编译。,10.3 条 件 编 译,条件编译控制行(又称条件蕴含)用来根据外部定义的条件去编译不同的程序部分。 条件编译控制行有以下形式: #if 常量表达式 #ifdef 标识符 #ifndef 标识符 #else #elif 常量表达式 #endif #undef 标识符,10.4 其他预处理功能,(1)行控制 #line 常数 “文件名” (2)诊断控制 #error 字符序列 (3)#pragma 字符序列,10.5 库函数使用方式,在调用库函数前,还要包含相应的前导文件,使用户程序和库函数能同时编译和连接。 #include int printf(const char *format,); #include double pow(double x,double y); 标准C语言中提供了15个前导文件,表10-1列出它们的名称和作用。,10.6 常用标准输入/输出函数,标准I/O函数 文件I/O函数 标准I/O按其功能大致可分为字符I/O函数、字符串I/O函数和格式化I/O函数。,10.6.1 getchar( )和putchar( ) getchar( )函数的语法格式是: #include int getchar(void); 它不需要参数,其返回值是用户从终端上输入的一个ASCII字符的值.。,putchar( )函数的语法格式是: #include int putchar(int c); 它的功能是发送一个字符(c中的字符)到标准输出(缺省说明情况下,就是用户终端)。,例10-11:下面是使用getchar( )和putchar( )函数的简单示例。 /*echo input to output*/ #include void main() int c; for(;) cgetchar(); if(c ! !) putchar(c); else break; ,10.6.2 gets( ) 和puts( ) gets( )接受来自标准输入的一个字符串,puts( )则发送一个字符串到标准输出。具有下述函数原型: char * gets(char * s); int puts(const char * s);,例10-12:读入用户输入的字符串,并显示出各个字符相应的十进制编码值。当输入空串(同时按下Ctrl键和z键)时,程序终止。 #include void main() char string80,*sp; printf(“When prompted,type a line.n“);,do putchar(:); /*This is the prompt char*/ spgets(string); do printf(“cdn“,*sp,*sp); while(*sp ! 0); /*Halt on null*/ while(*sp ! 0); /*Halt on null*/ ,10.6.3 printf( )和scanf( ) 1printf( )函数 printf( )的功能是按照指定的格式控制把相应参数值在标准输出上显示出来。其函数说明格式是: #include int printf(const char *format,arg1,arg2,);,format是指向字符串的指针,该字符串被称为转换控制字符串。转换控制串中包含两类字符:一类是普通字符,它们没有别的含义,只是照原样在屏幕(stdout文件)上输出。如: printf( “Input:n ? n“); 另一类字符是构成转换说明的字符,用来控制后面的参数进行转换,按要求的格式输出数据。如: printf(“ d,f,fn“,a,val,rad); 转换说明是由“”开头,其后可顺序出现下列成分:0个或多个标志、域宽说明、精度说明、长度修正符和转换类型字符。 标志字符共有5个,它们的表示和含义如表10-2所示。, 域宽说明是十进制数字串,用来指示相应参数至少应使用多少个字符的宽度。当相应参数实际占位超过指定域宽时,就按实际宽度印出。当参数值未填满指定的区域时,就向右对齐,左边用空格补充;如果有左对齐标志“”,就向左对齐,右边用空格补充。, 精度说明由小数点“.”和后面跟随的一个十进制数字串组成。对于整数形式(转换类型字符为d、i、o、u、x和X),它表示至少出现的数字个数;对于小数形式(转换类型字符为e、E和f),表示小数点后面数字的个数(小数点前面至少有一个数字);对于字符串形式(转换类型字符为s),表示最多印出的字符个数;对于g和G,表示有效数字的上限。如果精度说明只有小数点,则精度为0。当精度说明和域宽说明有矛盾时,以精度说明为准。 长度修正符h和l用于有符号或无符号的整数形式,分别表示短型量和长型量,而L用于小数形式,表示long double。 转换类型字符共十六个,用来说明对应参数的类型及输出格式,如表10-3所示。,例10-14:printf( )函数中有关精度说明的应用示例。 #include void main() char cA; char name“Liu hua“; int i1234; float x-123.456789; printf(“|10.2f|10.2e|n“,x,x); printf(“|10.0f|10.0e|n“,x,x); printf(“|13.26f|n“,x);,printf(“|40.32f|n“,x); printf(“|6.1c|10.1d|n“,c,i); printf(“|8.20s|8.3s|8.1s|8.0s|n“,name,name,name,name); 运行结果如下: | 123.46| 1.23e02| | 123| 1e02| |123.45678710937500000000000000| | 123.45678710937500000000000000000000| | A| 1234| | Liu hua| Liu| L| |,2scanf( )函数 scanf( )函数的说明格式是: #include int scanf(const char *format,argp1,argp2,); 其中转换控制串format由三类字符组成: 空白字符(空格、制表符、换行符)。此时继续读输入,直至读到下面的非空白字符(它不被读入)或者没有可读入的字符为止。 除“”以外的普通字符。仅当输入字符流中出现与它们都匹配的字符串时,输入才能成功;否则,只要有一个字符不匹配,输入就失败。 以“”开头的转换说明。,在转换说明中除开头的外,其后可顺序出现如下成分: 可选的赋值抑制符“*”,表示跳过下面对应的输入域,不对该域内的数据进行转换和赋值。 可选的域宽说明,它是十进制整数,规定了输入对象的最大域宽。 可选的长度修正符h、l或 L,用于指定接收对象的大小。 转换类型字符。它是不可缺少的,而上面的3种成分均是任选的。 scanf( )的转换类型字符共14个,它们的含义如表10-4所示。,10.7 文件及有关操作,10.7.1 流和文件的概念 C语言中支持两种形式的数据流,即:文本数据流和二进制数据流。 文本数据流是字符的有序序列,它由字符组成行,每一行由0个或多个字符再加上最后的换行符组成。 二进制数据流抽象成一个线性字节序列。 图10-2给出两种数据流从内存输出到磁盘文件上的差别。,一般来说,文件是被命名的数据的集合体。操作系统是以文件为单位对数据进行管理的。 终端文件中有3个文件是特殊的,每个程序都要用到。这3个文件是:标准输入文件(stdin)对应终端键盘、标准输出文件(stdout)对应终端屏幕和标准出错信息文件(stderr)也对应终端屏幕。这3个文件对所有运行的程序来说,都是自动设置并且自动打开的。 普通的磁盘文件又分为文本文件和二进制文件。文本文件又称为ASCII文件。一般文本文件与文本数据流相对应,二进制文件与二进制数据流相对应。 每个磁盘文件都有一个名字。文件名是作为字符串存放的。,10.7.2 文件的打开与关闭 1打开文件 所有文件(除3个标准文件以外)在进行读写等操作之前都必须显式地打开,使用完之后应注意关闭。 为了打开一个文件,要使用fopen()库函数。该函数的原型是: FILE *fopen(const char * filename,const char * mode); 实参mode指明打开文件的模式。mode控制该文件被打开后是用于读、写还是又读又写。 mode可用的值如表10-5所示。,fopen( )的返回值是一个指向FILE结构的指针,以后对相应打开文件的操作就全部利用这个指针进行,而不再用文件名。 FILE是系统定义的结构类型名,用来记录控制一个数据流所需的各种信息,包括文件读写指针、缓冲区位置、出错标志和文件结束标志等。 typedef struct _iobuf char *_ptr; /*next character position*/ int _cnt; /*number of character left*/ char *_base; /*location of buffer*/ int _flag; /*mode of file access*/ int _fd; /*file descriptor*/ FILE;,2关闭文件 函数fclose( )关闭已打开的文件,切断文件指针fp与相应文件的联系。fclose( )的函数原型是: int fclose(FILE *fp);,例10-16:这个程序说明利用fopen( )函数和不同的模式来打开指定的文件。 #include #include int main() FILE *fp; char ch,filename40,mode5;,while(1) printf(“Enter a filename:“); fgets(filename,40,stdin); filenamestrlen(filename)10; printf(“Enter a mode(max 3 characters):“); fgets(mode,5,stdin); modestrlen(mode)-10; if(fpfopen(filename,mode)!NULL) printf(“Successful opening s in mode sn“,filename,mode);,fclose(fp); puts(“Enter x to exit,any other to continue.“); if(chgetc(stdin)x) break; else continue; else fprintf(stderr,“Error opening file s in mode sn“, filename,mode);,perror(filename); puts(“Enter x to exit,any other to try again.“); if(chgetc(stdin) x) break; else continue; return 0; ,10.7.3 文件的读写 写文件可以有三种方式: 使用格式化输出函数把文本数据保存到文件上。 使用字符输出函数把单个字符或整行字符保存到文件上。 使用直接输出函数把内存区中的内容直接保存到磁盘文件中。 同样,从文件中读取数据也有三种方式:格式化输入、字符输入和直接输入。,1格式化文件输出和输入 (1)fprintf( )函数 它把输出数据发送到指定的文件中。其函数原型为: int fprintf(FILE *fp,char *fmt,); (2)格式化文件输入 利用fscanf( )库函数可以从指定的文件中(而不是键盘上)读取指定格式的数据。fscanf()函数的原型是: int fscanf(FILE *fp,const char *fmt,);,例10-18:利用fscanf( )从文件中读取格式化的数据。 #include #include void main() FILE *fp; float value5; char filename20; printf(“Input the filename .n“); scanf(“s“,filename);,if(fpfopen(filename,“r“)NULL) fprintf(stderr,“Error opening file.n“); exit(1); fscanf(fp,“f f f f f“,(value),(value1),(value2),(value3),(value4); printf(“The values are f,f,f,f,fn“,value0,value1,value2,value3, value4); fclose(fp); ,2字符输入/输出 (1)字符输入 实现字符输入的函数有3个,它们是getc( )、fgetc( )和fgets( )。前两个函数用来输入单个字符,第三个函数用来输入字符行。它们的函数原型如下: int getc(FILE *fp); int fgetc(FILE *fp); char *fgets(char *str,int n,FILE *fp);,(2)字符输出 用于字符输出的函数有两个:putc( )和 fputs( )。 putc( )函数把单个字符写到指定的文件中。其函数原型是: int putc(int ch,FILE *fp); fputs( )函数把一行字符写到文件中 。fputs()的函数原型是: int fputs(const char *str,FILE *fp);,3直接文件输入/输出 直接文件输入/输出的函数是fread( )和fwrite( )。它们用来向二进制数据流(文件)进行成批的输入/输出。 fread( )的函数原型是: int fread(void *ptr,int size,int count,FILE *fp); fwrite( )的函数原型是: int fwrite(const void *ptr,int size,int count,FILE *fp);,10.7.4 文件定位和出错检测 1文件定位 每个打开的文件都有一个文件位置指针,它指示对相应文件进行读写操作的具体位置,所以也称作文件读写指针。读写位置总是表示距文件开头的字节数。 fseek( )函数可以按照需要把读写指针设置为文件中的任意位置,从而实现对文件的随机存取。fseek( )的函数原型是: int fseek(FILE *fp,long int offset,int whence );,对于二进制文件,新的文件位置是从whence所指示的基点开始加上offset个字符。whence可以取以下三个值中的一个: SEEK_SET: 从文件头开始计算,可用数字0代表。 SEEK_CUR: 从文件当前位置开始计算,可用1代表。 SEEK_END:从文件尾开始计算,可用2代表。 对于文本文件,whence应该是SEEK_SET,offset应是0或者是先前调用ftell( )函数时返回的值。,fseek(fp,19000L,SEEK_SET); fseek(fp,50L,SEEK_CUR); fseek(fp,100L,SEEK_END); ftell( )函数用来给出流式文件中读写指针的当前值。其函数原型为: long int ftell(FILE *fp);, rewind( )函数的功能是把文件的读写指针重新设置为该文件的开头。它的原型是: void rewind(FILE *fp); 其作用等价于: (void)fseek(fp,0L,SEEK_SET),2文件操作出错检测 ferror( )函数用来确定文件操作中是否出错。它的函数原型为: int ferror(FILE *fp); clearerr( )函数的作用是清除文件结束标志和文件出错标志(置为0)。其函数原型为: void clearerr(FILE *fp); feof( )函数用来检测指定文件是否读写到文件末尾。仅当文件结束标志被设置了,函数feof( )才返回一个非0值。它的函数原型是: int feof(FILE *fp);,10.8 其他一些常用的函数(宏),(1)ctype.h文件中字符测试的函数(宏) 下列函数(宏)使用之前要在程序开头写上文件包含行:#include ctype.h int isalpha(int c); 测试c是否为az或AZ间的字母,若成功,返回非0值。 int isupper(int c); 测试c是否为大写字母(即AZ),若成功,返回非0值。,int islower(int c); 测试c是否为小写字母(az),若成功,返回非0值。 int isdigit(int c); 测试c是否为数字:09,若成功,返回非0值。 int isxdigit(int c); 测试c是否为十六进制数字:09和af或AF,若成功,返回非0值。 int isalnum(int c); 测试c是否为字母或数字,若成功,返回非0值。,int isspace(int c); 测试c是否为空白符、制表符、换行符、垂直制表符、换页符、回车符,若成功,返回非0值。 int ispunct(int c); 测试c是否为标点符号,即:除字母、数字、空格以外的可打印字符,若成功,返回非0值。 int isprint(int c); 测试c是否为可印出字符,即任何图形字符,若成功,返回非0值。 int iscntrl(int c); 测试c是否为控制字符,即:0c040 | c 0177 。 若成功,返回非0值。,(2)exit( )和system( ) exit( )和system( )函数都包含在stdlib.h文件中,所以,在使用它们之前应在程序开头写上: # include stdlib.h exit( )的函数原型是: void exit ( int status ); system( )的函数原型是: int system(const char *string); 它的作用是把string所指向的字符串传给用户当前使用的命令处理程序,由该命令处理程序执行参数所指出的命令,并等待它的完成。如在UNIX环境下执行语句: system(“cat test.c“);,(3)几个最常用的函数 在string.h中有许多对字符串进行比较、复制、加工的函数,下面是几个最常用的函数。 strcat( )的功能是连接两个字符串。 strcat( )的函数原型是: char * strcat(char * string1,const char * string2); strcmp( )的功能是比较两个字符串。 它的函数原型是: int strcmp(const char * string1,const char * string2);, strcpy( )的功能是把一个字符串复制到另一个字符数组中。C语言并没有提供字符串赋值的操作符,但是,可利用函数strcpy( )来实现这一功能。strcpy( )的函数原型是: char * strcpy(char * string1,const char * string2); strlen( )的功能是统计一个字符串的长度。其函数原型为: int strlen(const char * string); 其返回值是参数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 昌吉市2024-2025学年八年级下学期语文月考模拟试卷
- 昌吉回族自治州2024-2025学年八年级上学期语文期末模拟试卷
- 滨州市2025-2026学年七年级下学期语文期中模拟试卷
- 彬州市2025-2026学年九年级上学期语文期末模拟试卷
- 彬州市2024-2025学年八年级下学期语文月考模拟试卷
- 2025至2030中国基础、结构和建筑外部承包商行业发展研究与产业战略规划分析评估报告
- 基因编辑光诱导-洞察及研究
- 汽车自动化控制系统创新创业项目商业计划书
- 虚拟现实游戏体验创新创业项目商业计划书
- 烹饪模拟游戏与食谱创作挑战创新创业项目商业计划书
- 2025年内江市总工会公开招聘工会社会工作者(14人)笔试模拟试题及答案解析
- 2025云南辅警笔试题目及答案
- 2025四川内江市总工会招聘工会社会工作者14人笔试备考试题及答案解析
- 2025年三支扶陕西试题及答案
- 2025年行政执法证考试必刷题库与答案
- 基孔肯雅热防控知识考试试题含答案
- GB/T 14486-2008塑料模塑件尺寸公差
- 第三单元名著导读《朝花夕拾-二十四孝图》课件(15张PPT) 部编版语文七年级上册
- 口部运动功能评估分级标准
- 《汉服发展史》PPT课件
- 新编物理基础学王少杰(上、(下册))课后习题答案
评论
0/150
提交评论