版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章
C51数据与运算
§3.1数据与数据类型数据——具有一定格式的数字或数值叫做数据数据类型——数据的不同格式叫做数据类型数据结构——数据按一定的数据类型进行的排列、组合、架构。C51编译器具体支持的数据类型:位型,无符号字符,有符号字符,无符号整型,有符号整型,无符号长型,有符号长型,浮点和指针类型等C51数据类型与标准C数据类型的最大不同之处:位型位型(bit)字符型(char)整型(int)长整型(long)浮点型(float)双精度浮点型(double)数组类型(array)结构体类型(struct)共用体(union)枚举(enum)基本类型构造类型指针类型空类型数据类型表3-1KEILC51的数据类型数据类型长度(bit)长度(byte)值域bit110,1unsignedchar810~255signedchar81–128~127unsignedint1620~65535signedint162–32768~32767unsignedlong3240~4294967295signedlong324–2147483648~2147483647float324±1.176E–38~±3.40E+38(6位数字)double648±1.176E–38~±3.40E+38(10位数字)一般指针243存储空间0~65535在C51语言程序中,有可能会出现在运算中数据类型不一致的情况。C51允许任何标准数据类型的隐式转换,隐式转换的优先级顺序如下:
bitcharintlongfloat
unsignedsigned也就是说,当char型与int型进行运算时,先自动对char型扩展为int型,然后与int型进行运算,运算结果为int型。C51除了支持隐式类型转换外,还可以通过强制类型转换符“()”对数据类型进行人为的强制转换。C5l编译器除了能支持以上这些基本数据类型之外,还能支持一些复杂的组合型数据类型,如数组类型、指针类型、结构类型、联合类型等这些复杂的数据类型。
常量是指在程序执行过程中其值不能改变的量。在C51中支持整型常量、浮点型常量、字符型常量和字符串型常量。一、整型常量整型常量也就是整型常数,根据其值范围在计算机中分配不同的字节数来存放。在C51中它可以表示成以下几种形式:十进制整数。如234、-56、0等。十六进制整数。以0x开头表示,如0x12表示十六进制数12H。长整数。在C51中当一个整数的值达到长整型的范围,则该数按长整型存放,在存储器中占四个字节,另外,如一个整数后面加一个字母L,这个数在存储器中也按长整型存放。如123L在存储器中占四个字节。§3.2常量与变量二.浮点型常量浮点型常量也就是实型常数。有十进制表示形式和指数表示形式。十进制表示形式又称定点表示形式,由数字和小数点组成。如0.123、34.645等都是十进制数表示形式的浮点型常量。指数表示形式为:[]数字[.数字]e[]数字例如:123.456e-3、-3.123e2等都是指数形式的浮点型常量。三.字符型常量字符型常量是用单引号引起的字符,如‘a’、‘1’、‘F’等。可以是可显示的ASCII字符,也可以是不可显示的控制字符。对不可显示的控制字符须在前面加上反斜杠“\”组成转义字符。利用它可以完成一些特殊功能和输出时的格式控制。常用的转义字符如下表所示。
转义字符含义ASCII码(十六进制数)\o空字符(null)00H\n换行符(LF)0AH\r回车符(CR)0DH\t水平制表符(HT)09H\b退格符(BS)08H\f换页符(FF)0CH\‘单引号27H\”双引号22H\\反斜杠5CH四.字符串型常量字符串型常量由双引号“”括起的字符组成。如“D”、“1234”、“ABCD”等。注意字符串常量与字符常量是不一样,一个字符常量在计算机内只用一个字节存放,而一个字符串常量在内存中存放时不仅双引号内的字符一个占一个字节,而且系统会自动的在后面加一个转义字符“\o”作为字符串结束符。因此不要将字符常量和字符串常量混淆,如字符常量‘A’和字符串常量“A”是不一样的。常量——在程序运行的过程中,其值不能改变的。变量——在程序运行中,其值可以改变的。一个变量由两部分组成:变量名和变量值。
习惯上,符号常量名用大写,变量用小写,以示区别。#defineCONST60main(){ intvariable,result; variable=20; result=variable*CONST; printf("result=%d\n",result);}只有bit和unsignedchar两种数据类型可以直接支持机器指令,必须慎重变量和数据类型的选择。
☆用C语言编写单片机应用程序与标准的C语言程序的区别:☆C语言编写单片机应用程序时,需根据单片机存储结构及内部资源定义相应的数据类型和变量,而标准的C语言程序不需要考虑这些问题C51包含的数据类型、变量存储模式、输入输出处理、函数等方面与标准的C语言有一定的区别。其它的语法规则、程序结构及程序设计方法等与标准的C语言程序设计相同。
C51的语法规定、程序结构及程序设计方法都与标准的C语言程序设计相同,但C51程序与标准的C程序在以下几个方面不一样:(1)C51中定义的库函数和标准C语言定义的库函数不同。标准的C语言定义的库函数是按通用微型计算机来定义的,而C51中的库函数是按8051单片机相应情况来定义的;(2)C51中的数据类型与标准C的数据类型也有一定的区别,在C51中还增加了几种针对8051单片机特有的数据类型;(3)C51变量的存储模式与标准C中变量的存储模式不一样,C51中变量的存储模式是与8051单片机的存储器紧密相关;(4)C51与标准C的输入输出处理不一样,C51中的输入输出是通过8051串行口来完成的,输入输出指令执行前必须要对串行口进行初始化;(5)C51与标准C在函数使用方面也有一定的区别,C51中有专门的中断函数。变量是在程序运行过程中其值可以改变的量。一个变量由两部分组成:变量名和变量值。在C51中,变量在使用前必须对变量进行定义,指出变量的数据类型和存储模式。以便编译系统为它分配相应的存储单元,定义的格式如下[存储种类]数据类型[存储器类型]变量名表存储种类存储种类是指变量在程序执行过程中的作用范围。C51变量的存储种类有四种,分别是自动(auto)、外部(extern)、静态(static)和寄存器(register)。1.auto:
使用auto定义的变量称为自动变量,其作用范围在定义它的函数体或复合语句内部,当定义它的函数体或复合语句执行时,C51才为该变量分配内存空间,结束时占用的内存空间释放。自动变量一般分配在内存的堆栈空间中。定义变量时,如果省略存储种类,则该变量默认为自动(auto)变量。2.extern:
使用extern定义的变量称为外部变量。在一个函数体内,要使用一个已在该函数体外或别的程序中定义过的外部变量时,该变量在该函数体内要用extern说明。外部变量被定义后分配固定的内存空间,在程序整个执行时间内都有效,直到程序结束才释放。3.static:
使用static定义的变量称为静态变量。它又分为内部静态变量和外部静态变量。在函数体内部定义的静态变量为内部静态变量,它在对应的函数体内有效,一直存在,但在函数体外不可见,这样不仅使变量在定义它的函数体外被保护,还可以实现当离开函数时值不被改变。外部静态变量上在函数外部定义的静态变量。它在程序中一直存在,但在定义的范围之外是不可见的。如在多文件或多模块处理中,外部静态变量只在文件内部或模块内部有效。4.register:
使用register定义的变量称为寄存器变量。它定义的变量存放在CPU内部的寄存器中,处理速度快,但数目少。C51编译器编译时能自动识别程序中使用频率最高的变量,并自动将其作为寄存器变量,用户可以无需专门声明。位变量(bit):与8051硬件特性操作有关的可以定义成位变量。位变量必须定位在8051单片机片内RAM的位寻址空间中。字符变量(char):字符变量的长度为1byte即8位。这很合适8051单片机,因为8051单片机每次可处理8位数据。对于无符号变量(unsignedchar)的值域范围是0~255。对于有符号字符变量(signedchar),最具有重要意义的位是最高位上的符号标志位(msb)。此位为1代表“负”,为0代表“正”。有符号字符变量和无符号字符变量在表示0~127的数值时,其含义是一样的,都是0~0x7F。负数一般用补码表示。整型变量(int):8051系列单片机将int型变量的高位字节数存放在低地址字节中,低位字节数存放在高地址字节中。有符号整型变量(signedint)也使用msb位作符号标志位,并使用二进制补码表示数值。可直接使用几种专用的机器指令来完成多字节的加、减、乘、除运算。图3.2整型数的存储结构…0x120x34…+0+1地址0x120x340x560x78….+0+1+2+3地址图3.3长整型变量的存储结构浮点型变量(float):浮点型变量为32位,占4个字节,许多复杂的数学表达式都采用浮点变量数据类型。应用符号位表示数的符号,用阶码和尾数表示数的大小。用它们进行任何数学运算都需要使用由编译器决定的各种不同效率等级的库函数。KEILC51的浮点变量数据类型的使用格式与IEEE-754标准有关,具有24位精度,尾数的高位始终为"1",因而不保存,位的分布如下:●1位符号位。●8位指数位。●23位尾数。符号位是最高位,尾数为低23位,内存中按字节存储顺序如下:地址+0+1+2+3内容SEEEEEEEEMMMMMMMMMMMMMMM其中,S为符号位,1表示负,0表示正;E为阶码;M为23位尾数,最高位为“1”。一个浮点数的数值范围是(-1)×2E-127×(1.M)浮点变量值-12.5的十进制为:0xC1480000,它按图3.4所示方式存于内存中。MMMMMMMM0xC10x480x000x00+0+1+2+3地址使用简化形式定义数据类型。其方法是在源程序开头使用#define语句自定义简化的类型标识符。例如:#defineucharunsignedchar#defineuintunsignedint这样,在编程中,就可以用uchar代替unsignedchar,用uint代替unsignedint来定义变量。8051系列机在物理上有四个存储空间
1)片内程序存储器空间
2)片外程序存储器空间
3)片内数据存储器空间
4)片外数据存储器空间§3.3Cx51数据的存储类型与8051存储结构
8051片内数据存储器可划分为两类: 00H~7FH为片内低128字节RAM区;
80H~0FFH为特殊功能寄存器区。
低字节RAM区又可以划分为3个区域:
1)通用寄存器区(00H~1FH)
每个寄存器可以用寄存器名寻址,也可直接用字节地址寻址。
2)可位寻址区
可以按字节寻址操作,也可按位地址操作。
3)用户RAM区程序存储器与数据存储器严格分开,特殊功能寄存器与片内数据存储器统一编址。
片内数据存储区是存放临时性传递变量或使用频率较高的变量的。
访问片内数据存储器速度较快,经常使用的变量置于片内数据存储器,而将不常用的置于片外数据存储器中。寻址方式可使用直接和间接寻址。表3.2C51存储器类型与8051存储空间的对应关系存储器类型与存储空间的对应关系data直接寻址片内数据存储区,访问速度快(128字节)bdata可位寻址片内数据存储区,允许位与字节混合访问(16字节)idata间接寻址片内数据存储区,可访问片内全部RAM地址空间(256字节)pdata分页寻址片外数据存储区(256字节)由MOV@Ri访问(i=0,1)xdata片外数据存储区(64KB)由MOVX@DPTR访问code程序存储器64KB空间,由MOVC@DPTR访问表3.3C51存储器类型及其数据长度和值域存储器类型长度(bit)长度(byte)值域范围data810~255idata810~255pdata810~255xdata1620~65535code1620~65535带存储类型的变量的定义的一般格式为:
[存储种类]数据类型[存储器类型]变量名带存储类型的变量定义举例:chardatavar1;bitbdataflags;floatidatax,y,z;unsignedintpdatavar2;unsignedcharvector[3][4];表3.4存储器模式说明存储器模式说明SMALLSMALL模式称为小编译模式,默认的存储类型是data,参数及局部变量放入可直接寻址片内RAM的用户区中(最大128字节)。另外所有对象(包括堆栈),都必须嵌入片内RAM。栈长很关键,因为实际栈长依赖于函数嵌套调用层数COMPACTCOMPACT模式称为紧凑编译模式,默认的存储类型是pdata,参数及局部变量放入分页的外部数据存储区,通过@R0或@R1间接访问,栈空间位于片内数据存储区中LARGELARGE模式称为大编译模式,默认的存储类型是xdata,参数及局部变量直接放入片外数据存储区,使用数据指针DPTR来进行寻址。用此数据指针进行访问效率较低,尤其对两个或多个字节的变量,这种数据类型的访问机制直接影响代码的长度§3.48051特殊功能寄存器(SFR)的C51定义8051单片机中,除了程序计数器PC和4组工作寄存器组外,其它所有的寄存器均为特殊功能寄存器(SFR),分散在片内RAM区的高128字节中,地址范围为80H~0FFH。SFR中有11个寄存器具有位寻址能力,它们的字节地址都能被8整除,即字节地址是以8或0为尾数的。为了能直接访问这些SFR,FranklinC51提供了一种自主形式的定义方法,这种定义方法与标准C语言不兼容,只适用于对8051系列单片机进行C语言编程。特殊功能寄存器C51定义的一般语法格式如下: sfrsfr_name=intconstant;"sfr"是定义语句的关键字,其后必须跟一个8051单片机真实存在的特殊功能寄存器名,"="后面必须是一个整型常数,不允许带有运算符的表达式,是特殊功能寄存器"sfr-name"的字节地址,这个常数值的范围必须在SFR地址范围内,位于0x80~0xFF。例如:sfrSCON=0x98; /*串口控制寄存器地址98H*/sfrTMOD=0x89; /*定时器/计数器方式控制寄存器地址89H*/8051系列单片机的特殊功能寄存器的数量与类型不尽相同,因此建议将所有特殊的"sfr"定义放入一个头文件中,该文件应包括8051单片机系列机型中的SFR定义。C51编译器的"reg51.h"头文件就是这样一个文件。在新的8051系列产品中,SFR在功能上经常组合为16位值,当SFR的高字节地址直接位于低字节之后时,对16位SFR的值可以直接进行访问。例如52子系列的定时器/计数器2就是这种情况。为了有效地访问这类SFR,可使用关键字"sfr16"来定义,其定义语句的语法格式与8位SFR相同,只是"="后面的地址必须用16位SFR的低字节地址,即低字节地址作为"sfr16"的定义地址。例如:sfr16T2=0xCC /*定时器/计数器2:T2低8位地址为0CCH,T2高8位地址为0CDH*/这种定义适用于所有新的16位SFR,但不能用于定时器/计数器0和1。对于位寻址的SFR中的位,C51的扩充功能支持特殊位的定义,像SFR一样不与标准C兼容,使用"sbit"来定义位寻址单元。第一种方法:sbitbit-name=sfr-name^intconstant;"sbit"是定义语句的关键字,后跟一个寻址位符号名(该位符号名必须是8051单片机中规定的位名称),"="后的"sfr-name"必须是已定义过的SFR的名字,"^"后的整常数是寻址位在特殊功能寄存器"sfr-name"中的位号,必须是0~7范围中的数。例如:sfrPSW=0xD0; /*定义PSW寄存器地址为D0H*/sbitOV=PSW^2; /*定义OV位为PSW.2,地址为D2H*/sbitCY=PSW^7; /*定义CY位为PSW.7,地址为D7H*/第二种方法:sbitbit-name=intconstant^intconstant;"="后的intconstant为寻址地址位所在的特殊功能寄存器的字节地址,"^"符号后的intconstant为寻址位在特殊功能寄存器中的位号。例如:sbitOV=0xD0^2; /*定义OV位地址是D0H字节 中的第2位*/sbitCY=0xD0^7; /*定义CY位地址是D0H字节中 的第7位*/第三种方法:sbitbit-name=intconstant;"="后的intconstant为寻址位的绝对位地址。例如:sbitOV=0xD2; /*定义OV位地址为D2H*/sbitCY=0xD7; /*定义CY位地址为D7H*/特殊功能位代表了一个独立的定义类,不能与其它位定义和位域互换。§3.58051并行接口及其Cx51定义8051系列单片机并行I/O接口除了芯片上的4个I/O口(P0~P3)外,还可以在片外扩展I/O口。8051单片机I/O口与数据存储器统一编址,即把一个I/O口当作数据存储器中的一个单元来看待。使用C51进行编程时,8051片内的I/O口与片外扩展的I/O可以统一在一个头文件中定义,也可以在程序中(一般在开始的位置)进行定义,其定义方法如下:对于8051片内I/O口按特殊功能寄存器方法定义。例如:sfrP0=0x80;/*定义P0口,地址为80H*/sfrP1=0x90;/*定义P1口,地址为90H*/对于片外扩展I/O口,则根据硬件译码地址,将其视作为片外数据存储器的一个单元,使用#define语句进行定义。例如#include<absacc.h>#definePORTAXBYTE[0xFFC0]absacc.h是C51中绝对地址访问函数的头文件,将PORTA定义为外部I/O口,地址为FFC0H,长度为8位。一旦在头文件或程序中对这些片外I/O口进行定义后,在程序中就可以自由使用变量名与其实际地址的联系,以便使程序员能用软件模拟8051的硬件操作。#include<reg51.h>#defineucharunsignedcharsbit DIPswitch=P1^4;sbit greenLED=P1^5;voidmain(void){ ucharinval; inval=0; while(1){ if(DIPswitch==1){ inval=P1&0x0f; greenLED=0; } else{ greenLED=1; } P3=(P3&0xf0)|inval; }}(1)位变量C51定义。使用C51编程时,定义了位变量后,就可以用定义了的变量来表示8051的位寻址单元。位变量的C51定义的一般语法格式如下:位类型标识符(bit)位变量名;例如:bitdirection_bit; /*把direction_bit定义为位变量*/bitlook_pointer; /*把look_pointer定义为位变量*/§3.6位变量的C51定义(2)函数可包含类型为"bit"的参数,也可以将其作为返回值。例如:
bitfunc(bitb0,bitb1) /*变量b0,b1作为函数的参数*/{return(b1); /*变量b1作为函数的返回值*/}注意,使用(#pragmadisable)或包含明确的寄存器组切换(usingn)的函数不能返回位值,否则编辑器将会给出一个错误信息。…(3)对位变量定义的限制。位变量不能定义成一个指针,如不能定义:bit*bit_pointer。不存在位数组,如不能定义:bitb_array[]。在位定义中,允许定义存储类型,位变量都被放入一个位段,此段总位于8051片内的RAM区中。因此,存储类型限制为data和idata,如果将位变量的存储类型定义成其它存储类型都将编译出错。例1先定义变量的数据类型和存储类型:bdataintibase; /*定义ibase为bdata整型变量*/bdatacharbary[4];/*bary[4]定义为bdata字符型数组*/然后可使用"sbit"定义可独立寻址访问的对象位:sbitmybit0=ibase^0; /*mybit0定义为ibase的第0位*/sbitmybit15=ibase^15; /*mybit0定义为ibase的第15位*/sbitAry07=bary[0]^7; /*Ary07定义为abry[0]的第7位*/sbitAry37=bary[3]^7; /*Ary37定义为abry[3]的第7位*/§3.7.1Cx51算术运算符及其运算符
赋值运算符赋值运算符“=”,在C51中,它的功能是将一个数据的值赋给一个变量,如x=10。利用赋值运算符将一个变量与一个表达式连接起来的式子称为赋值表达式,在赋值表达式的后面加一个分号“;”就构成了赋值语句,一个赋值语句的格式如下:
变量=表达式;执行时先计算出右边表达式的值,然后赋给左边的变量。例如:x=8+9;/*将8+9的值赋绐变量x*/x=y=5;/*将常数5同时赋给变量x和y*/在C51中,允许在一个语句中同时给多个变量赋值,赋值顺序自右向左。§3.7Cx51运算符、表达式及其规则C51中支持的算术运算符有: +加或取正值运算符 -减或取负值运算符*乘运算符 /除运算符%取余运算符加、减、乘运算相对比较简单,而对于除运算,如相除的两个数为浮点数,则运算的结果也为浮点数,如相除的两个数为整数,则运算的结果也为整数,即为整除。如25.0/20.0结果为1.25,而25/20结果为1。对于取余运算,则要求参加运算的两个数必须为整数,运算结果为它们的余数。例如:x=5%3,结果x的值为2。2、算术表达式、优先级与结合性
算术表达式:用算术运算符和括号将运算对象连接起来的式子,运算对象包括常量、变量、函数、数组和结构等。如:a*b/c-2.5+d
优先级——指当运算对象两侧都有运算符时,执行运算的先后次序。结合性——指当一个运算对象两侧的运算符的优先级别相同的运算顺序。算术运算符的优先级规定为:先乘除模,后加减,括号最优先。运算符执行的先后取决与运算符的优先级,当优先级相同时,在看看结合性。如:a-b*c等价于a-(b*c)a*b/c等价于(a*b)/c图中“”表示必定转换。既使是同一种类型也按""转换。即当遇到char、short时,系统一律将其转换为int参与运算,如‘a’+‘b’,先转换为int,结果为int。而当遇到float时,一律转换为double参与运算。转换方法:doublefloat高低longunsignedintchar,short+数据类型转换1.自动(缺省)类型转换
可根据自己的意愿利用强制类型转换运算符将一个算术表达式转换为所需类型强制类型转换格式:(类型名)(表达式)例如:(double)a将a转换为double(int)(x+y)将x+y转换为int(float)(5%3)将5%3转换为float2.强制类型转换运算符“()”§3.7.2、Cx51关系运算符、表达式及优先级<小于>大于<=小于或等于>=大于或等于==测试等于!=测试不等于前4种关系运算符(<、>、<=、>=)优先级相同,后两种也相同;前4种优先级高于后两种2.关系运算符的优先级关系运算符优先级如右图:算术运算符赋值运算符关系运算符高低举例:c>a+bc>(a+b)a>b!=c(a>b)!=ca==b<ca==(b<c)a=b>ca=(b>c)关系运算符的结合性为左结合关系表达式:用关系运算符连接起来的表达式格式:<表达式><关系运算符><表达式>说明:关系表达式的结果只有两种即“真”和“假”,其中“真”用“1”表示、“假”用“0”表示。判断一个量是否为真时,等于0表示假,非0都是真。3.7.3、Cx51逻辑运算符、表达式及优先级&&逻辑“与”(AND)||逻辑“或”(OR)!逻辑“非”(NOR)“&&”和“||”是双目运算符,要求有两个运算对象;而“!”是单目运算符,只要求有一个运算对象。逻辑表达式的结合性为自左向右
逻辑表达式:用逻辑运算符关系运算符或逻辑量连接起来的式子称为逻辑表达式。
逻辑表达式的值应该是一个逻辑量真或假逻辑表达式的值与关系表达式的值相同,以0代表假,以1代表真。例如:若a=8,b=3,c=0,则!a为假,a&&b为真,b&&c为假§3.7.4、Cx51位操作及其表达式&按位与 |按位或^按位异或 ~按位取反<<位左移 >>位右移除了按位取反运算符“~”以外,以上位操作运算符都是两目运算符,即要求运算符两侧各有一个运算对象。位运算只能是整型或字符型数,不能为实型数据“&”:参加运算的两个运算对象,若两者相应的位都为1,则该位结果值为1,否则为0。“|”:参加运算的两个对象,若两者相应的位中有一个为1,则该位结果为1“^”:参加运算的两个对象,若两者相应的位值相同,则结果为0;若两者相应的位值相异,则结果为1。“~”是一个单目运算符,用来对一个二进制数按位进行取反,即0变1,1变0位左移、位右移运算符“<<”和”>>”,用来将一个数的各二进制位的全部左移或右移若干位;移位后,空白位补0,而溢出位舍弃。【例】设a=0x54=01010100B, b=0x3b=00111011B,则a&b、a|b、a^b、~a、a<<2、b>>2分别为多少?a&b=00010
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年河南省沁阳市高二生物下册期末考试考试卷及答案【必刷】
- 2025年浙江省嵊州市高二生物下册期末考试检测卷含完整答案(名校卷)
- 2026年四川省崇州市高二生物下册期末考试考试卷【B卷】附答案
- 2026年四川省崇州市高二生物下册期末考试测试卷(突破训练)附答案
- 2026年陕西省韩城市高二生物下册期末考试试卷及完整答案【考点梳理】
- 2026年湖北省汉川市高二生物下册期末考试测试卷及答案(夺冠系列)
- 2026年山东省诸城市高二生物下册期末考试测试卷含完整答案(典优)
- 2026年甘肃省临夏市高二生物下册期末考试模拟卷及完整答案【网校专用】
- 2026年贵州省凯里市高二生物下册期末考试模拟卷(各地真题)附答案
- 2025年浙江省乐清市高二生物下册期末考试模拟卷附完整答案【各地真题】
- 第四单元 人体生理与健康(一)(单元测试)(原卷版)初中生物人教版(2024)七年级下册
- 2025年济宁银行笔试题库及答案
- 图克绿色低碳产业示范园区规划方案-高质量打造鄂尔多斯世界级现代煤化工产业示范区关键核心区
- 股权兜底投资协议书
- 烟台万华安全培训课件
- 大思政课讲座课件
- 2025年大学《科学教育-科学课程与教学论》考试备考试题及答案解析
- 2025年甘肃省高考地理真题
- 小区踩踏应急预案
- 非遗漆扇动态介绍非物质文化遗产课件
- GB/T 13591-2025乙炔气瓶充装规定
评论
0/150
提交评论