版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章
结构体C程序设计及工程案例分析XX大学:XX学习目标了解结构体、共用体和自定义类型的概念;掌握结构体类型、结构体变量、结构体数组、结构体指针变量的定义和使用;了解共用体变量的定义和使用;了解自定义类型的定义。结构体成员的类型必须是基本数据类型。TFAB提交单选题10分目录8.1结构体变量的定义和使用8.2结构体数组8.3结构体指针8.4共用体8.5用typedef声明新类型名8.6综合应用实例8.7工程案例分析结构体变量的定义和使用8.18.1.1结构体类型的声明一个简单的结构体声明的例子:structEmployee{intage;doublesalary;chargender;};声明结构体类型的一般形式为:struct结构体标识符{
数据类型成员名1;数据类型成员名2;
……
数据类型成员名n;};8.1.1结构体类型的声明结构体中的成员可以是任何类型的变量,包括数组和结构体(不能递归定义)structDatestructEmployee{{intyear;intnumber;intmonth;charname[10];intday;intage;}doublesalary;
chargender;
structDatebirthday;
};8.1.2结构体类型变量的定义第一种,先声明结构体类型,再定义该类型变量。在8.1.1节中已声明了一个结构体类型structEmployee,可以用它定义结构体类型变量,例如:structEmployeee1,e2;8.1.2结构体类型变量的定义第一种,先声明结构体类型,再定义该类型变量。在8.1.1节中已声明了一个结构体类型structEmployee,可以用它定义结构体类型变量,例如:structEmployeee1,e2;实际占据多少字节可以利用sizeof运算符获取。这种方式将结构体类型的声明与结构体类型变量的定义分开,是程序设计中提倡的一种方式。当定义一个结构体变量时,系统分配给它的内存是(
)。各成员所需内存量的总和结构中第一个成员所需内存量结构中最后一个成员所需内存量成员中占内存量最大者所需的容量ABCD提交单选题10分结构体类型声明如下,sizeof(a)的结果为(
)。structA{doublex;floatf;}a[3];36241248ABCD提交可为此题添加文本、图片、公式等解析,且需将内容全部放在本区域内。double类型占8个字节,float类型占4个字节,理论上A类型占12个字节,但因内存字节对齐的原因,12不是8的倍数,需要填充4个字节,故A类型实际占16个字节,因此3个数组元素共占16*3=48个字节。答案解析单选题10分8.1.2结构体类型变量的定义第二种,在声明结构体类型的同时定义该类型变量,例如:在声明structDate类型的同时定义了两个structDate类型的变量d3和d4。structDate{intyear;intmonth;intday;}d3,d4;8.1.2结构体类型变量的定义第三种,不指定结构体标识符直接定义该类型变量,例如:这种方式的作用与前面类似,声明了一个结构体类型的同时定义了一个结构体类型变量d5,区别在于这种方式声明了一个无名的结构体类型,显然无法再用此结构体去定义其他变量。struct{intyear;intmonth;intday;}d5;8.1.2结构体类型变量的定义注意以下几点:第一,结构体类型与结构体类型的变量是不同的概念,不能混淆。声明了结构体类型,相当于画好了房屋图纸,但并没有建好房子,因此不能存储数据,而定义了结构体类型的变量才相当于建好了一个房子,可以存储数据。第二,结构体类型中的成员可以与程序中其他变量同名,但二者代表完全不同的两类事物。例如,程序中可以另外定义一个变量salary,它与structEmployee中成员变量salary是互不影响的。第三,结构体变量中的成员在代码编写中可以通过结构体变量进行使用,其用法与普通变量相当。以下选项中,不能定义s为合法的结构变量的是(
)。structabc{doublea;charb[10];}s;struct{doublea;charb[10];}s;structABC{doublea;charb[10];};structABCs;structs{doublea;charb[10];};ABCD提交单选题10分下面声明结构体变量的语句中错误的是(
)。structstudent{intnum;charname[20];}s;struct{intnum;charname[20];}s;structstudent{intnum;charname[20];};structstudents;structstudent{intnum;charname[20];};students;ABCD提交单选题10分8.1.3结构体变量的使用(1)结构体变量的初始化在定义结构体变量时,可以对它初始化。例如:structEmployeee1={1001,"Ricky",36,8000,'M',{1982,11,7}};上面这行C程序语句的作用就是定义了一个structEmployee类型的变量e1,并对e1中各成员赋予了初始值。也可以改写为:structEmployeee1={1001,"Ricky",36,8000,'M',1982,11,7};可以看出,结构体变量的初始化与数组变量的初始化格式类似,不同之处在于数组只能使用同一种数据类型的数值,而结构体变量中的成员的数据类型可以不相同。8.1.3结构体变量的使用(2)结构体变量的引用在定义结构体变量后,就可以使用这个变量。在使用结构体变量时不能一次使用该结构体变量的全部字段(或成员变量),只能通过引用结构体变量成员的方式达到使用结构体变量的目的。引用的一般形式为:结构体变量名.成员名例如,e1.salary表示变量e1中的salary成员,可以对其赋值,例如:e1.salary=e1.salary+500;8.1.3结构体变量的使用几点说明:①“.”是成员运算符,它在所有运算符中优先级最高,可以将“结构体变量名.成员名”作为一个整体看待。②如果成员本身又是一个结构体变量,则需要多个成员运算符,逐级地找到最低一级的成员。例如:修改e1中生日为10月4日的代码为:e1.birthday.month=10;e1.birthday.day=4;③可以引用结构体变量的地址,也可以引用结构体变量成员的地址。结构体变量的地址通常也可作为函数参数,传递结构体变量的地址。例如:scanf("%d",&e1.number);8.1.3结构体变量的使用几点需要说明:④结构体变量的成员可以像普通变量一样进行使用。例如:e1.age++;total=e1.salary+e2.salary;⑤同类型的结构体变量相互之间可以直接赋值。例如:e2=e1;其功能是将e1中每个成员的值复制给e2中对应的成员,如下图所示。如果结构体变量s中的生日是“1981年3月1日”,下列对其生日的赋值正确是(
)。structstudent{intno;charname[20];charsex;struct{intyear;intmonth;intday;}birth;}s;year=1981;month=3;day=1;birth.year=1981;birth.month=3;birth.day=1;s.year=1981;s.month=3;s.day=1;s.birth.year=1981;s.birth.month=3;s.birth.day=1;ABCD提交单选题10分结构体数组8.28.2.1结构体数组的定义和初始化(1)结构体数组的定义结构体数组的定义与结构体类型的定义类似,同样有3种形式:8.2.1结构体数组的定义和初始化(2)结构体数组的初始化结构体数组的初始化与普通数组的初始化的方法相同,在定义数组的后面加上={初值列表},初值列表中属于同一个元素的成员可以用花括号括起来,各个成员初值之间用逗号隔开。例如:structEmpstaff[3]={{1001,"wang",35,7500},{1002,"zhang",32,7100},{1003,"Tim",38,8500}};同普通数组初始化一样可以不指定数组元素的个数,也可以省略元素初值之间的花括号。例如:structEmpstaff[]={1001,"wang",35,7500,1002,"zhang",
32,7100,1003,"Tim",38,8500};8.2.2结构体数组应用举例程序8.1输入n个员工的基本信息,输出最高薪水者的基本信息。n不超过20。#include<stdio.h>#defineN20structEmp{intnumber;charname[10];intage;doublesalary;}staff[N];intmain(void){intn,i;doublesmax=0.0;printf("Inputn(n<=20):");scanf("%d",&n);printf("NumberNameAgeSalary\n");for(i=0;i<n;i++){scanf("%d%s%d%lf",&staff[i].number,staff[i].name,&staff[i].age,&staff[i].salary);if(smax<staff[i].salary)smax=staff[i].salary;}程序8.1输入n个员工的基本信息,输出最高薪水者的基本信息。n不超过20。printf("Number\tName\tAge\tSalary\n");for(i=0;i<n;i++)if(smax==staff[i].salary){printf("%d\t%s\t",staff[i].number,staff[i].name);printf("%d\t%g\n",staff[i].age,staff[i].salary);}return0;}#include<stdio.h>#defineN7structPL{charname[8];doublepopular;};intmain(void){程序8.2根据编程语言热门程度表,按热门程度从高到低的顺序输出编程语言和热门程度值。structPLt,p[N]={"C",15.447,"C++",7.394,"Java",17.436,"Python",7.653,"VB.NET",5.308,"PHP",2.775,"C#",3.295};inti,j;for(i=0;i<N-1;i++)for(j=0;j<N-1-i;j++)if(p[j].popular<p[j+1].popular){t=p[j];p[j]=p[j+1];p[j+1]=t;}for(i=0;i<N;i++)printf("%s\t%g%%\n",p[i].name,p[i].popular);return0;}定义下列结构体数组:structstu{
charname[10];intage;}a[5]={"ZHOU",18,
"WU",19,
"ZHENG",20,
"WANG",21};执行语句printf("%d,%s",a[2].age,a[1].name);的输出结果为()。19,ZHOU21,WANG20,WU18,ZHENGABCD提交单选题10分对于以下定义,错误的scanf函数调用语句是(
)。scanf("%d",&pup[3].sex);scanf("%s",&pup[4].name);scanf("%s",pup[2].name);scanf("%d",&pup[4].age);ABCD提交单选题10分结构体指针8.38.3.1结构体指针的概念和使用(1)指向结构体变量的指针变量一般形式:struct结构体标识符*结构体指针变量;例如:structEmpe={3001,“Mike”,29,7500},*ep;其中,e是一个普通的结构体变量,ep是一个指向structEmp类型结构体的指针变量。如果执行代码“ep=&e”,则通过指针变量ep也能访问到变量e中的成员,如右图所示。当结构体指针变量
NULL时,访问结构体数据中各个成员的一般形式为:(*结构体指针变量名).成员名或结构体指针变量名->成员名(*ep).name等价于ep->name#include<stdio.h>structEmp{intnumber;charname[10];intage;doublesalary;}e1={3002,"Gavin",27,6500};intmain(void){structEmp*ep;ep=&e1;printf("Number\tName\tAge\tSalary\n");printf("%d\t%s\t%d\t%g\n",(*ep).number,ep->name,ep->age,ep->salary);return0;}程序8.3利用结构体指针变量访问结构体数据。8.3.1结构体指针的概念和使用(2)指向结构体数组的指针变量指向结构体数组的指针与指向结构体变量的指针没有本质的区别,都是结构体数据所占内存空间的起始地址。例如:structEmpstaff[10],*ep2=staff;其中,ep2是指向Emp结构体数组的指针变量。staff[0]:1001Ricky368000staff[1]:1002John309000
……
…………
……
staff[9]:1010Alice256000ep28.3.1结构体指针的概念和使用(2)指向结构体数组的指针变量【例8.4】已知5个员工的基本信息(如下表),编程实现输入一个double型薪水标准,然后输出薪水在该标准之上的员工的基本信息(员工编号、姓名、年龄、薪水)。序号员工编号姓名年龄薪水11001Tim40800021002Morse32600032001Nancy28550043001Rosa36740053002Newton508300#include<stdio.h>structEmp{intnumber;charname[10];intage;doublesalary;}t[5]={{1001,"Tim",40,8000},{1002,"Morse",32,6000},
{2001,"Nancy",28,5500},{3001,"Rosa",36,7400},{3002,"Paul",50,8300}};程序8.4输入一个薪水标准,输出薪水在该标准之上的员工的基本信息。intmain(void){structEmp*ep;doublex;scanf("%lf",&x);printf("Number\tName\tAge\tSalary\n");for(ep=t;ep<t+5;ep++){if(ep->salary>x)printf("%d\t%s\t%d\t%g\n",ep->number,ep->name,ep->age,ep->salary);}return0;}程序8.4输入一个薪水标准,输出薪水在该标准之上的员工的基本信息。#include<stdio.h>#include<stdlib.h>structEmp{intnumber;charname[10];intage;doublesalary;};程序8.5输入n个员工的基本信息,输出最高薪水者的基本信息。intmain(void){structEmp*ep=NULL,*p;intn;doublesmax=0.0;printf("Inputn:");scanf("%d",&n);
ep=(structEmp*)malloc(n*sizeof(structEmp));if(ep==NULL)exit(0);
printf("NumberNameAgeSalary\n");for(p=ep;p<ep+n;p++){scanf("%d%s%d%lf",&p->number,p->name,&p->age,&p->salary);if(smax<p->salary)smax=p->salary;}printf("\nNumber\tName\tAge\tSalary\n");for(p=ep;p<ep+n;p++)if(smax==p->salary)
printf("%d\t%s\t%d\t%g\n",p->number,p->name,p->age,p->salary);return0;}程序8.5输入n个员工的基本信息,输出最高薪水者的基本信息。以下对结构体变量stu1中成员age的非法引用是(
)struct
student{
intage;
intnum;}stu1,*p;p=&stu1;stu1.agestudent.agep->age(*p).ageABCD提交单选题10分设有如下声明:structsk{
inta;floatb;}data,*p=&data;则对data中的a成员的正确引用是(
)。(∗p).data.a(∗p).ap->data.ap.data.aABCD提交单选题10分8.3.2结构体变量和结构体指针作为函数的参数要把一个结构体变量的值传递给另一个函数,有3种传递方式:第一种,用结构体变量作实际参数,形式参数是同类型的变量。这时,采取的也是“传值”的方式,将结构体变量(实参)所占内存单元的内容全部按顺序复制给形参。采用这种传递方式,执行被调用函数期间只改变形参的值,对实参是没有影响的,因此一般不提倡使用这种传递方式。第二种,用结构体类型的成员变量作参数。t[0].number或t[0].salary作为实参,执行被调用函数时将实参的值传递给形参。其用法和用普通变量作实参是一样的,属于“传值”方式。第三种,用指向结构体变量或结构体数组的指针作为实参,将其地址传递给形参。在函数调用时,实参和形参指向相同的存储单元。程序8.6将程序8.4中每个员工的年龄增加1岁后输出所有员工的基本信息。#include<stdio.h>structEmp{intnumber;charname[10];intage;doublesalary;}t[]={{1001,"Tim",40,8000},{1002,"Morse",32,6000},{2001,"Nancy",28,5500},{3001,"Rosa",36,7400},{3002,"Paul",50,8300}};程序8.6将程序8.4中每个员工的年龄增加1岁后输出所有员工的基本信息。voidaddAge(structEmp*,int);/*将每个员工年龄加1,第二参数为员工人数*/voidprintEmp(structEmp);/*输出一个员工的信息*/intmain(void){inti,n;n=sizeof(t)/sizeof(structEmp);/*计算数组元素个数*/addAge(t,n);printf("Number\tName\tAge\tSalary\n");for(i=0;i<n;i++)printEmp(t[i]);return0;}程序8.6将程序8.4中每个员工的年龄增加1岁后输出所有员工的基本信息。voidaddAge(structEmp*p,intk)/*将每个员工年龄加1*/{inti;for(i=0;i<k;i++,p++)p->age++;}voidprintEmp(structEmpe)/*输出一个员工信息*/{printf("%d\t%s\t%d\t%g\n",e.number,,e.age,e.salary);}使用结构指针作为函数参数只要传递一个地址值,因此,能够提高参数传递的效率。TFAB提交单选题10分共用体8.48.4.1共用体类型的定义和使用共用体类型与结构体类型有一定的相似性,同样是一种构造类型,也称之为联合体类型。声明共用体类型的一般形式为:union共用体标识符{
数据类型成员名1;
数据类型成员名2;……
数据类型成员名n;};与结构体类型的区别在于:结构体类型数据的各个成员占有独立内存空间,是各个成员数据的集合;而共用体类型数据的所有成员共享一段存储空间,在任何时刻只有一个成员有效。程序8.7使用共用体类型处理数据。#include<stdio.h>unionU{inti;unsignedcharc[4];shorts;};intmain(void){unionUx;x.i=0x12345678;/*十六进制数,占4个字节*/printf("x.i=%08xH\n",x.i);printf("x.s=%04xH\n",x.s);printf("x.c:%02xH%02xH%02xH%02xH\n",x.c[3],x.c[2],x.c[1],x.c[0]);return0;}运行结果:x.i=12345678Hx.s=5678Hx.c:12H34H56H78H8.4.2共用体变量的使用规则①同一共用体变量中可以存在几种不同类型成员,但所有成员共享同一段内存空间,所以任一时刻只能存取其中一个成员数据。例如:
unionU{inti;charc;}x;x.i=65;x.c='C';此时,若执行printf("%d",x.i);则输出67。因为'C'的ASCII码是67。②可以在定义共用体变量时进行初始化,但初始化值表中只能有一个常量。例如:unionU{inti;charc;}x={100,'A'};/*不能初始化多个成员*/unionUy={100};
/*正确,对第一个成员初始化*/unionUy={.c='A'};/*C99允许对指定的成员初始化*/8.4.2共用体变量的使用规则③共用体变量的地址和它的各成员的地址是同一个地址。例如:&x,&x.c,&x.i都是同一个值。④允许同类型共用体变量之间赋值。⑤允许共用体变量作为函数参数。⑥共用体类型可以出现在结构体类型声明和共用体数组中,反之,结构体类型也可以出现在共用体类型声明中,数组也可以作为共用体类型的成员。程序8.8要求在一个表中显示学生的成绩信息(百分制或五级计分制)及其它信息。#include<stdio.h>structSTU{charname[10];charcourse[20];intflag;/*flag=0表示百分制,flag=1表示五级计分制*/union{intscore;chargrade[2];}cj;}stu[3];intmain(void){inti;程序8.8要求在一个表中显示学生的成绩信息(百分制或五级计分制)及其它信息。for(i=0;i<3;i++){scanf("%s%s%d",stu[i].name,stu[i].course,&stu[i].flag);if(stu[i].flag==0)scanf("%d",&stu[i].cj.score);elsescanf("%s",stu[i].cj.grade);}printf("Name\tCourse\tGrade\n");for(i=0;i<3;i++){printf("%s\t%s\t",stu[i].name,stu[i].course);if(stu[i].flag==0)printf("%d\n",stu[i].cj.score);elseprintf("%s\n",stu[i].cj.grade);}return0;}用typedef声明新类型名8.58.5用typedef声明新类型名一般形式为:typedef类型名新名称;例如:typedefintInteger;typedefstruct{intyear;intmonth;intyear;}Date;typedefintX[10];typedefchar*str;Integerx,y;/*定义带个int型变量*/Dated;/*定义结构体类型变量d*/Xt;/*定义t为一维数组,含10个int型元素*/strs;/*定义s为字符指针变量*/以下叙述中错误的是()可以用typedef说明的新类型名来定义变量typedef说明的新类型名必须使用大写字母,否则会出编译错误typedef的作用是用一个新的标识符来代表已存在的类型名用typedef可以说明一种新的类型名ABCD提交单选题10分综合应用实例——投票统计8.6程序8.9
投票统计有若干位候选人(n<=10),候选人姓名从键盘输入,姓名最长为9个字母且不含空格),若干位选民,选民每次输入一个得票的候选人的名字。完成输入后程序自动统计各候选人的得票结果,并按照得票数由高到低的顺序排序。#include<stdio.h>#include<string.h>structvote{charname[10];intsum;}cand[10],v;/*最多10位候选人*/
程序8.9
投票统计intfind(intn,charname[])/*返回候选人在数组cand中的下标*/{inti;for(i=0;i<n;i++){if(strcmp(cand[i].name,name)==0)returni;}return-1;}intmain(){intm,n,i,j;charvoter[10];程序8.9
投票统计
scanf("%d",&n);for(i=0;i<n;i++){scanf("%s",cand[i].name);cand[i].sum=0;}scanf("%d",&m);/*共有m位选民*/for(j=0;j<m;j++){scanf("%s",voter);i=find(n,voter);if(i>=0)cand[i].sum++;}程序8.9
投票统计
/*冒泡排序*/for(i=0;i<n-1;i++)for(j=0;j<n-1-i;j++)if(cand[j].sum<cand[j+1].sum){v=cand[j];cand[j]=cand[j+1];cand[j+1]=v;}for(i=0;i<n;i++)printf("%s\t%d\n",cand[i].name,cand[i].sum);return0;}
工程案例分析
——涡轮关键参数的封装8.7汽车电子控制系统中涡轮关键参数的封装structair_inf_exhmap_struct{F32exh_mass_flow;/*排气的质量流量*/F32dsp_mul;/*修正系数*/F32inf_exhmap;/*排气背压*/};structair_inf_exhmap_structair_inf_exhmap_func_core(F32exh_mass_flow_tmp,F32restriction_tmp,/*涡轮废气旁通阀开度*/F32dsp_tmp,/*修正系数*/F32exh_gas_temp_tmp)/*排气温度*/{autostructair_inf_exhmap_structout;autoF32deltap_tmp=0.0F;autoF32air_exhmap_coeff[3]={0.0F,0.0F,0.0F};汽车电子控制系统中涡轮关键参数的封装
/*先计算排气的质量流量,由于在基础标定时都是录入的标准实验工况下的排气温度,若要在车辆上对应起来,就要利用气体方程式进行修正,所以会出现把气体温度折算成绝对温度和标准情况对比后再开方进行修正的算法。*/out.exh_mass_flow=exh_mass_flow_tmp*f32sqrt((exh_gas_temp_tmp+273.0F)/(air_exh_ref_temp+273.0F));/*涡轮的废气旁通阀是串联在排气管中的一个机构,用它来控制实际推动涡轮泵轮端的废气量,从而达到目标的增压压力。而串联的这个机构会导致排气管中的气体流动阻力明显变化,在工程上会对涡轮废气旁通阀的开度和气体背压通过实验的方法进行数据拟合,通常稳定的流体拟合出来是一个2次方的多项式,所以二次方、一次方和常数就会得到三个常数,下面就是计算过程。*/air_exhmap_coeff[0]=lookup_2d(&fnair_exhmap_c0,restriction_tmp);air_exhmap_coeff[1]=lookup_2d(&fnair_exhmap_c1,restriction_tmp);air_exhmap_coeff[2]=lookup_2d(&fnair_exhmap_c2,restriction_tmp);汽车电子控制系统中涡轮关键参数的封装
/*根据所处的环境进行修正,由于排气管最终端是通大气的,而汽车是可以翻山越岭的,所以不同海拔情况下排气背压不同。一般中国的主机厂会从海平面测试到5200米的海拔,确保客户的用车安全,欧美这个指标比较低,美国一般能测试到4200米而欧洲更低,所以高海拔的数据一般都是中国进行试验供全球的客户使用。*/out.dsp_mul=lookup_2d(&fnair_exhmap_dsp,dsp_tmp);/*根据以上的计算合成压降*/deltap_tmp=((air_exhmap_coeff[2]*out.exh_mass_flow+
air_exhmap_coeff[1])*out.exh_mass_flow+
air_exhmap_coeff[0])*out.dsp_mul;汽车电子控制系统中涡轮关键参数的封装
/*确保存在压降,由于是涉及到剧烈工况变化的数值计算,精度肯定不会太高,但是从物理上讲必须存在压降,否则排气管无法排出气体,虽然
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026水利工程质量检测员考试(量测)历年参考题库含答案详解
- 2026教师职称-湖南-湖南教师职称(基础知识、综合素质、高中语文)历年参考题库含答案详解3套试卷
- 2026教师职称-江苏-江苏教师职称(基础知识、综合素质、小学英语)历年参考题库含答案详解3套试卷
- 基于机器视觉的尺寸测量系统在编程技巧课程设计
- 茶艺课程设计范文图片
- 茶叶罐盖冲压模课程设计
- 电动自行车动力系统设计电池技术课程设计
- 平台用户行为建模方法课程设计
- 超声波报警系统课程设计课程设计
- 容器逃逸检测工具比较课程设计
- 普华永道:2026年全球AI就业晴雨表-AI时代就业的两种未来图景(2026年-中文版)
- 2026秋小学西师大版音乐二年级上册(新教材)教学计划含教学进度表
- 《物流成本管理》全套教学课件
- 小学科学苏教版(新教材)六年级上册第一单元《物质的变化》单元小结课件
- 2026年计算机专业综合应用题库
- 2026年秋季六年级数学上册教学计划(人教版)
- GB/T 32741-2025肥料、土壤调理剂和有益物质分类
- GB/T 22717-2008电机磁极线圈及磁场绕组匝间绝缘试验规范
- GB/T 18400.7-2010加工中心检验条件第7部分:精加工试件精度检验
- 教育科学研究的步骤与方法-课件
- 当代西方社会思潮研究
评论
0/150
提交评论