![学业指导中心学习2014.6-3c语言程序设计res review_第1页](http://file4.renrendoc.com/view/c4cbc74f9baf44b95e6cd8ab152476d0/c4cbc74f9baf44b95e6cd8ab152476d01.gif)
![学业指导中心学习2014.6-3c语言程序设计res review_第2页](http://file4.renrendoc.com/view/c4cbc74f9baf44b95e6cd8ab152476d0/c4cbc74f9baf44b95e6cd8ab152476d02.gif)
![学业指导中心学习2014.6-3c语言程序设计res review_第3页](http://file4.renrendoc.com/view/c4cbc74f9baf44b95e6cd8ab152476d0/c4cbc74f9baf44b95e6cd8ab152476d03.gif)
![学业指导中心学习2014.6-3c语言程序设计res review_第4页](http://file4.renrendoc.com/view/c4cbc74f9baf44b95e6cd8ab152476d0/c4cbc74f9baf44b95e6cd8ab152476d04.gif)
![学业指导中心学习2014.6-3c语言程序设计res review_第5页](http://file4.renrendoc.com/view/c4cbc74f9baf44b95e6cd8ab152476d0/c4cbc74f9baf44b95e6cd8ab152476d05.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
鉴于理论考是计算机随机抽题,覆盖面较广,故复习以教学大纲和为准PART1:C语言基 C语言是什么样的语言 程序设计语言的功 C语言程序设计语言的语法要 (合法的)标识符 保留字(又称关键字):记住常用的关键 关键字void,两种一般的用 关键字 类static变量在递归函数中的举 关于关键字中的变量的4个 关键字 关键字 区别typdef和结构定义 常量: 法:p96- 普通字符和转义字 字符常量的ASCII关系,数字字符,大写字母,小写字 区别strlen(char*s)和 区别16进制的整数表示与用16进制数表示的转义字符表 区别8进制的整数表示与用8进制数表示的转义字符表 关于字符常 字符的计算与不同的输出形 PART2基本数据类型与表达 基本数据类 UNSIGNED与无UNSIGNED的区别,数的范围的理 清楚8,16位数的有符号值范围,和无符号的值的范 关于运算 注意整数/整数的结 指针+-的概念与一般变量的加减的意义的区 关于数据类型转换 2、表达 关于++,--操 关系运 位运 位运算计算之前必须先化成二进制表 一些特殊的位运算 区别位逻辑运算(&,|,~)与变量逻辑运算(&&,||, 条件表达式 记住运算符优先级 PART3:语 顺序结构,选择结构,循环结 巧用循环解决满足条件的 PART4:数组与指 数组:熟练掌握一维和二维数组的定义和初始化,数组元素的 包括一维字符数组和字符串,二维字符数组和字符串数 熟练掌握指针和地址的概念;熟练掌握指针变量的定义和初始化;熟练掌握通过指针指向实 指针的定义形 一维数组 一维字符数组,一级字符指 当一级指针作为函数的返回 将数组名作为函数的参 注意循环一维数组元素时 对下标的控 二维数 指针与二维数组的关 二维数组存放多个字符 利用指针数组元素字符串中的字 理解指针数组的数组名是一个二级指针常 关于指针数组与数组指针的区 PART5:程序结构和函 变量的作用 关于全局变 函数返回值的数据类型 由函数首行决定(首行指定数据类型 函数的数据类 指针变量作为函数参数的意 函数在参数传递过程中,实参 形参的传递是单向 函数的递 在函数递归的计算时要注意实参到行参的传递 若行参是数组,传递的是起始地 常见递归问题举例 递归实现fibonacci数列的第n 递归实现质因素分 用递归计算 递归将一个整数顺序输 递归将一个整数逆序输 调用f(1234)输出 调用f(1234)输出 顺序输出一个整 逆向输出一个整 递归逆序输出的不同处 递归实现输入整数按逆序输出,如输出1234,输出 使用递归方法 将字符数组倒置输出 如输入“123”,输出为 将数1234逆叙存放到一个字符数组 PART6:结 关于结构变量占的空间大 关于结构指 结构的成员变量的:区别.和->的使 熟练掌握结构数 (链表的基本概念)(P231)单向链 单向链表的遍 单向链表点的和删 PART7:熟练掌握基本的标准库函 常用标准库函 常用数学函数 常用字符函数 常用字符串函数 标准文件的输入和输出 常用数学函数 #include 常用字符串函数:#include 常用文件相关函 PART8:编译预处 文件包含,宏定义,条件编 PART9文 缓冲文件系统(文本文件 熟练掌握文件的打开和关 熟练掌握文件的基本读写操 熟练掌握文件的状态检 PART10常用计算方法(算法 熟练掌握书中例题所涉及到过的计算方法 所有机器练习做过的常见问题的计算方法 习题4- 错误!未定义书签习题4- 错误!未定义书签理解解决问题时不同的形 二分法相 搜索(检索),查字 用二分法求方程的 一种特殊的运算(交换运算 Part1:CC程序设计语言可以分类成二进制语言(又称机器指令),汇编语言(又称符号语言),和高级语言。C语言是一种高级程序设计语言。高级语言有解释型和编译型。我们目前使用的TC和VC版本的C都是编译型。标准C源程序的文件扩展名是A”c”B.“.obj”C.“.exe” )由于C源程序是高级语言程序,因此一定要在TC由 程序是高级语言程序,因此输入后即可执由 程序是高级语言程序,因此它由命令组填空C语言程序的三种基本结构是 顺序结构、分支结构(选择结构)和循环结构C Cintcharstruct、typedef,C32关键字voidvoidmain(){}func(void);func(void);错int}2int2intintf(int staticintk=0;x+=k++;return}{i=f(f(1));printf("%d",}类static变量在递归函数中的举例 intf(intx){staticintk=0;return}3 语言中,形参的缺省的类说明是 关键字struct 则10structstudent若要求用typedef定typedefstruct }ST[10];STstudents; typedeftypedefstudent{charname[10];intage;}void{STUa[3]={"Zhang",10,"Li",20,"Wang",STU*ap=a;printf("%s#%d",ap->name,++ap-}typedefstruct }STs[10]={typdef和结构定义structtypedefst1…}} aA是类型,可以用Aa,A常量:格式合法的写法:p96-99 A. B.- C. D. %d",NULL,'\0',注意 NULL是特殊的常量不是关键 输出记住常用的转义字符: \b退格符:功能是将光标一个,(退格)不合法的转义符:如a='\';会使得编译出 1-3位8进制整数代\xhh1-2ASCII符,大写字母,小写字母charstr[]="XYZabc123";str[0]+=('a'-'A');str[3]-=('b'- /*或写成tr[5]=0; printf("%s",str);执行语句printf("%d,%x",'a'-'A','z输出区别strlen(char*s)和 *s)是<string.hs在第一次遇见结束符\0之前所包含的字符的个数。printf("%d",strlen("\\\25ab,0\n")seof()是表达式或者是一种运算,是计算)内对象所占的字节个数printf("%d",sizeof("\\\25ab,0\n")输 区别16进制的整数表示与用16如如上输出都 10,因为它们在计算机内的数值的大小都 00000000intintb1=0x0a;intb2=0X0A;intc=012;printf("%d,%d,%d,%d",错的转义字符: 区别字符常量 特殊字符'%'的输 ASCII值:‘0’(十进制数为 顺序,‘0’-‘9A’-‘Z’,a’-已知字符‘a’的ASCII码为97,执行下列语句的输出 printf("%d,%c",’b’,’b’-1)98,Part2int,char,float,doublelong,short,字节数 printf("%d\n",sizeof(short VC,TCsizeof(char*)=?sizeof(double*)=?unsignedunsignedunsignedcharx=0xff;printf("%d",x-- charx=0xff;printf("%d\n",x--); unsignedshortinta=0xffff;printf("%d\n",a); 65535(216-1)shortinta=0xffff;printf("%d\n",a); unsignedchara=0;intb=1;{a--}变量b的值等于A. B. C. D.Dfloatx1,x2;printf("%d#%.1f",(int)x1,x2)#include<stdio.h> charchar*sp=s;long*p;p=(long*)s;sp=(char*)p;printf("%s\n",sp);}整数/整数:分子小于分母为零;或截尾关于数据类型转换表达式'A'+'B'B2、表达关于++,--操作intfor(i=0;i++<=4;i++);printf("%d",i);7floatx1,x2;printf("%d#%.1f",(int)x1,x2)intx=printf("%d",5<x<11执行语句“inta,b;a=b=3;printf("%d,%d\n",a<<2,b>>2);”后的 A) B)C) D)Aa^a为0;a^ 为二进制全E1&&E2,E1变量逻辑运算E1||E2,E1~(A||B)~A&&~(A&&B)~A||0,1代入计算一个变量x0两个变量取(x,y)(00,01,10,11)只要有一种情况出现不等就变量逻辑运算非零即 (== printf("%d",(4&1)||(4| 1chara=2,b=5,c=8; //或intc|=(~a&&b)^!(a&b);printf("c=%d",条件表达式?:inta,b,a=1;b=2;c=c=(a<--b)?a++:b--printf("%d#%d#%d",?执行以下代码后,变量d的值 inta=-10,b=0,c=20,d=a>b?-3.14:b>c?2.68:4()[]-> - *&(type) + ==&^|?=+=-=*=/=%=&=^=|=<<=,,3执行以下代码后,变量x的值 inta=3,b=4,c=3,x;x=a!=(b=c);0 a-0Part3: if、注意switch(){}的格式inta=3;switcha{case }charc,k;c=’b’;k=4;case‘a’:case‘b’:case‘c’:}3intk,for(k=0,x=0;k<=9&&x!=10;k++)printf("%d,%d",k,x)for(i=0;i++<=10;i++);后,变量iA. D.A判断:执行循环语句“for(i=1;i<10;i=i+2)s+=i;”后,i的当前值为11。后,变量x的值为A、不可能大于 B、不可能大于C、等于 D、可以远大于As、a、b、ca、c赋值(c大于1)for(b=1;b<=c;b++) B、 C、 }}int floatfor(k=0,s=0;k<6;k++)s=s+k/2;printf("%d,%.1f\n",k,{#includeintcount=0,x,y,for(x=1;x<=2;for(y=1;y<=3;y++)for(z=1;z<=4;z++) #include<stdio.h>intmain(void){inti,sum=0;}printf("%d",#include<stdio.h>intmain(void){inti,sum=0;}printf("%d",sum);return0;}4的正整数和5的和是5的倍数,与5的差是8的倍数,求 {intn;n=for(;;) while(1)if(((n+5)%5==0)&&((n-5)%8==0)}printf("n=%d",}Part4:数组与指针数组:熟练掌握一维和二维数组的定义和初始化,数组元素的。 熟练掌握指针和地址的概念;熟练掌握指针变量的定义和初始化;熟练掌握通过指针指向实体若inta; &&a无意义,编译结果:问:*p++以及*++p区别*和++的优先级相同,右结合前者相当于*(p++),表达式的值是*p,然后*++p,p先自增1,再间接,表达式的值是p加1后的间float p,pqfloatpfloat*),qpfloat,qfloatB下列语句定义x为指向int类型变量a B)intC)int D)intBx0xffd8,写出输出内容(16#include<stdio.h>{intx=3,*p=printf("%x,%d,%d,%d,%x",p,*p+2,**&p,3**p,/*或printf("%pddd%p",p,*p+2,**&p,3**p,p+4);}12ff7c,5,3,9执行以下代码后,将输 longinta[5]={10,20,30,40,longint*p=a+1;longint*q=&a[3];printf("q-p=%d",q-p);q-int编译器为a分配10个int,a是其址,它是一个地址常 charinta[]={5,1,2,3,4,0,2,4,5},i=0,{putchar(t[go=a[i++]]}一维字符数组,*(a+i*(p+ichars[]="EDCBA";char*p=s;printf("%c#%c#%c\n",*p,*(p+2),chara[]="abcdef",while(++ap &a[5])chara[]="abcdef",*ap=a;*(ap+3)=0;printf("%s",a);22inta[]={1,int*ap=a+1;当一级指针作为函数的返回int*func(inta,int{
intreturn 型的指针}#include#include<stdio.h>char*func(char*str) returns;}{char*str="123";printf("%s,%c\n",func(str)+1,*func(str)+1);printf("%s\n",str);}voidfun(int{int*(p+1)=}int{intintfor(i=0;i<4;i++)printf("%d#",a[i]);return0;}注意循环一维数组元素时 对下标的控int b54列要明确行地址,列地址和步进运算关系(P132)intb[M][N*bpi:行指针j列指针,bb
类型和意 表达式的写二维数 bp=&b[0][0]或二维数组的首地 (但不允许写也是起始行的首地址i行,0列元素或i行的首地i行的首地相当于b的起始地址直接跳过i行*bp 下一个列元素int*bp,
代表第i行,第j列元素的代表第i行,第j列元素的
bp=b[i]+j;b[i][j]的值i行下标,j列下标可以如下初始化:bp=&b[0][0];bp=b[0]##不允许写成 b是由行和列组成,bp是一级指##也不允许写成bp=b+i,b+i是数组b的第i行地址 int*bp;intintb[4][3]={10,20,30,40,50,60,70,80,90,100,110,printf("%d#%d#",*(*bpp+1),**bpp+1chars[][10]={"A1B2","C3D4E6", +3Gcharprintf("%c",x理解指针数组的数组名是一个二级指针常量char*a[2]={"one",printf("%s",*(a+1)+char*strs[]={"Happy","BirthDay","To",printf("%s#%c",*(strs+3),XXchar*strs[]={"Happy","NEW",printf("%c",ppchar*a[3]={"one","two","three",},**p2,*p1;p1=a[0];p2=printf("%c\n",*(p1++)+printf("%s\n",*(++p2)+1);printf("%c\n",**p2+++1);关于指针数组与数组指针的区别int(*a)[10],则a是一个指针,指向了一个包含10个整型元素的数void{ printf("%d",}P3个p[1][2]*(p[1]+2)//charcharp //这里p是一个数组指针printf("%s,%s",p[0],char*p[10]p=a111charp=a;p++;printf("%s",Part5:程序结构和函数1、程序结函数是C的基本组成单元熟练掌握main函数与其他函数之间的关系,包括标准库函数和自定义熟练掌握函数定义的ANSIC 。#include<stdio.h>intx;intp(int returnx-1;}void inty;printf("(%d,%d)",x,}A)(-1, B)(1, C)(1, DC若题目中的全局变量没有给初始值的化,认为是intz; /*没有给初值的化,计算时视作0*/voidp(int*x,inty) printf(„%d,%d,%d#”,*x,y,}void intx=1,y=5,z=9;p(&x,y);printf(“%d,%d,%d#”,x,y,}函数返回值的数据类型,由函数首行决定(首行指定数据类型)void{/*在voidreturn语句是可以省略的} {}
intresult;returnresult;main()/*若对函数类型未加显式说明,则函数的隐含类型为int在C语言程序中,若对函数类型未加显式说明,则函数的隐含类型 A. B. C. D.D关于 swap3()的三个函数的区函数在参数传递过程中,实参 形参的传递是单向 A.地址传 B.单向值传C.由实参传给形参,再由形参传回实 D.传递方式由用户指B A)C语言编译时查语法。B)C语言的子程序有过程和函数两 D#includeintMax(int*x,int inttemp;if(*x<*y) temp=*x=*y=}return}{intx=3,y=4,max=0;max=Max(&y,&x);printf("Max=%d,%d,%d",max,y,}Max= 4 main()中的后两条语句改成:max=Max(&x,&y);printf("Max=%d,%d,%d",max,y,输出Max=4,下列程序的输出结果 fun(inta,intb,int c=a*b; intc;printf(“%d\n”,}A. B. C. D.无法确定Dintvoidp(int*x,int y--printf("%d,%d,%d#",*x,y,}void intx=1,y=5,p(&x,printf("%d,%d,%d#",x,y,}2,6#2,5voidabc(intx,int x}void intx=1,y=4;abc(y,&y);printf("%d#%d",x,y);}有递归的出口;2)55intintf(int{return((x>0)?f(x-1)+f(x-intfunc(intx[],int{if(i==0)returnx[i]+10;return(2+func(&x[1],i-1));}{intprintf("%d\n",func(a,3)+2*func(a+1,2)}fibonacci数列的第nlongfib(int{if((n==0)||(n==1))return(n);returnfib(n-1)+fib(n-2);}对比如下是fiblongfib(int{intlonga,if(( n==1)||(n==2))return1;a=1;b=1;for(i=3;i<=n;{c=a+a=b=}return}voidf(inti,int{if(i==n){ /*最后有个约in)也会通过*/printf("%d",n);}if(prime(i)&&(n%i==0))f(2,n/i);}elsef(i+1,}void intn;scanf("%d",&n);} /*long的范围已经足够{if(n==0||n==1)return1;elsereturn(n*fact(n-1));}voidvoidf(intvoidf(int{{if(n<10)printf("%1d",if(n<10)printf("%1d",elseelseprintf("%1d",printf("%1d",}}}}调用f(1234)输出调用f(1234)输出1234,4321#include<stdio.h>voidreverse(intn*递归实现{printf("%d",n%10);n=n/10;if(n!=0)reverse(n);}使用递归方法,将字符数组倒置输出,如输入“123输出为voidreverse(char{if(!*s)return;}将数1234voidreverse(char*s,int{intif(k=n/10) reverse(s+1,k);else*s='\0';*s=n%10+}void{charstr[10]="";reverse(str,1234);}Part6:熟练掌握结构类型的定义,结构变量的定义和初始化,结构变量成员的。熟练掌握结构指针,掌握结构中含指针或数组;掌握嵌套结构;掌握指向指针的指针(二级)的基本概念;了解单向链表Dstudent{Dstudent{intcharname[30];floatscore;则标准的ANSIC( TC)下,计 sizeof(stud1)的值structstructintlen;char*str;}}问:++p->str中的++加在 A、指针strBpC、strDA结构的成员变量的:区别.和->的使(*p).name不能写成*.的左边是变量,->的左边是指针,例如:p->name intlen;char*str;}structstudentst1;{p=&st1; /*p*/(*p).len=5;p->len=6;}问:(*p).n++与++p->n是否相答 前者相当于成员变量 ++;后者相当于++成员变量p-main({ stintx,}structst ++p- (a+3)-}10,41,#includestruct{char*sp;charc[10];inta;}{structst1s1[]={{"67890","PQRSTU",20}structst1*q1=s1,*q2=s1;printf("%d\n",q1- printf("%c\n",}1(链表的基本概念)(p231)若干个同一结构类型的“结点”依次串接而structstructstudent_node }structstudent_node(结构的递归定义for(p=head;p!=NULL;p=p->next)printf("%d,%s,%d",p->num,p->name,p->score);单向链表点的和删如在某个p指向的节点后s指向的节点:s->next=p->next;p->next=s;如要删除p1后面的pt=p1->next;p1->next=pt-Part7请判定:C语言本身没有输入输出语句(Torcos、sqrt、pow、exp、fabs、log、log10等isalnum、isalpha、isdigit、islower、toupperstrcpy、strcmp、strcat、strlen等标准文件的输入和输出(P278)#include<stdio.h>(键盘输入,显示器输出getchar,putchar,gets,puts,scanf,scanf()通过不同格式来实现不同形式的输入方scanf(“%d%d”,&a,&b);scanf("%d%d",&a, 其它间隔有严格的规定输入;scanf("%d,%d",&a, %x”,scanf()的输入参double需要用格式% printf("%d,%d",FILEfp=fopen("f1.txt","r");fscanf(fp,"%3s%3d",name,&a);printf("%s,%d",name,a);printf()只是输出变量值的形式,并不改变输出变量本身的如 %ox %o,%x计算机表示的数是有范围限制的,输出也是会根据输出格式自动判定显示,例:/*16*/#include<stdio.h>void{longb=0x11118888;inta=b;printf("%lx#%x#",}printf(“%2d”,1234); 5 printf(“%4.3f\n”,1.23456789);a a的值是多少答选择:若a是基本整型变量,c是单精度实型变量,输入语句 A.scanf("%d,%f",&a, B.scanf("d=%d,c=%f",&a,C.scanf("%d%f",&a, D.scanf("%d%f",a,D sqrt、pow、exp、fabs、log、log10,cos、等上述函数类型(返回值均为double)3)常用字符串函数:#include<char*strcpy(char*dest,char*src);char*strcat(char*dest,char*src);intstrcmp(char*dest,char*src);unsignedintstrlen(char*str);例intn=strcmp("ABC",Cfgetc,fputc,fgetsfputsfscanffprintf,feof,fl等)Part8:编译预处理Cinclude<stdio.h>TorF?#defineA(x,y)(x*y) printf("%d",A(1+1,2)}3 Part9文件FILE的含义常用函数:fopen和fclose,返回值的意义常用函数:fscanf、fprintf、fgetc、fputc、fgets、fputsgets(s,n, sn-1个有效字符(2008设文件file1.txt中以如下文本格式存放一批学生的及成绩TomJerry与成绩之间用至少一个空格分隔并且每个学生的中不含空格。现通过编程file1.txt中的资料,找出其中成绩最高的那位学生(假定最高分唯一),并把该生的资料写入file2.txt中。#include<stdio.h>#include<string.h>typedefstructstudent{charname[10];intscore;}void{FILE*fp1;FILE*fp2;STa,fp1=fopen("file1.txt",fp2=fopen("file2.txt",if((9)fp1==NULL||fp2==NULL{puts("Cannotopenfile!");}max.score=- (10) {fscanf(fp1,"%s%d",,&a.score) if(a.score>max.score){strcpy(,.name) max.score=a.score;}}fprintf(fp2,"%s%d\n",,}#include<stdio.h>#include<stdlib.h>voidmain(){FILEchar*c1="o";charif((fp=fopen("f.txt","w"))!=NULL)while(*c1!='\0')fputc(*c1++,fp);if((fp=fopen("f.txt","r"))!=NULL)while(fgetc(fp)!=EOF)putchar(*c2++);}了一个计数器的作用,将c2所指的串显示charintinti=0,ps=1;while(ps){putchar(s[ps=a[i++]} 对于阅读题,需要给出题目的计算思路,采取的方法可以从前到 getMax(int*p,int intmax; int*q;max=*p;for(q=p+1;q<p+n;q++)if(*q>max)max=*q;returnmax;}主调函数:printf(“%d”,getMax(a,n)intprime(int intif(n==1)return /*或者以sqrt(n)为界限 if(n%i==0)return0;}return}intprime(int intfor(i=2;i<=x-1;if(x%i==0)break;return
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 展览馆管理合作协议
- 新材料研发与应用在制造业中的推广方案设计
- 农村电商农村电商国际合作与交流方案
- 环保科技在水资源管理中的应用合作协议
- 保证金质押担保协议书
- 房屋租赁合同三方协议
- 可再生能源设备采购合同
- 项目季度工作总结与前景展望报告
- 大数据平台开发协议
- 承包招商合同协议书
- 五年级数学(小数乘除法)计算题专项练习及答案汇编
- 上海市杨浦区2024-2025学年八年级上学期英语期末考卷(含笔试答案无听力答案、原文及音频)
- 课题申报参考:法国汉学家弗朗索瓦·朱利安对中国山水画论的阐释研究
- 生物-山东省潍坊市、临沂市2024-2025学年度2025届高三上学期期末质量检测试题和答案
- 2024年09月2024年中国农业发展银行总行部门秋季校园招聘(22人)笔试历年参考题库附带答案详解
- 2025年小学督导工作计划
- 2024-2025学年部编版历史九年级上册期末复习练习题(含答案)
- 2025年月度工作日历含农历节假日电子表格版
- 《商务数据分析》课件-商务数据的分析
- 安全隐患规范依据查询手册
- 部编版六年级下册道德与法治全册教案教学设计
评论
0/150
提交评论