• 1.23 MB
  • 2022-04-29 14:27:57 发布

最新C语言——7(计算机2级考试必学资料)课件PPT.ppt

  • 98页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'C语言——7(计算机2级考试必学资料) 教学目的和基本要求:要求学生了解模块化程序设计的思想,掌握函数的定义及调用,理解变量的作用域与存储方式的概念,理解编译预处理的概念。教学重点:函数的定义及调用、递归调用、变量的作用域。 6.1模块化程序设计与函数在设计较复杂的程序时,我们一般采用的方法是:把问题分成几个部分,每部分又可分成更细的若干小部分,逐步细化,直至分解成很容易求解的小问题。这样的话,原来问题的解就可以用这些小问题来表示。把复杂任务细分成多个问题的过程,就叫程序的模块化。模块化程序设计是靠设计函数和调用函数实现的。 6.2函数的定义与调用在C语言中,函数(Function)是一个处理过程,可以进行数值运算、信息处理、控制决策,即一段程序的工作放在函数中进行,函数结束时可以携带或不带处理结果。库函数(标准函数):系统提供 自定义函数:用户自己写C语言程序处理过程全部都是以函数形式出现,最简单的程序至少也有一个main函数。函数必须先定义和声明后才能调用。 标准库函数C语言有丰富的库函数,这些函数的说明在不同的头文件(*.h)中。想要调用标准的库函数,就必须include。#include main() {printf(“%d”,1024*768);}调用printf函数时,必须include “函数”的主要知识点函数的定义函数的参数和返回值函数的调用嵌套和递归变量的作用域 函数举例#include main() {inta,b,m;/*说明变量*/intmax(inta,intb);/*函数声明*/scanf(“%d,%d”,&a,&b);/*调用库函数scanf*/m=max(a,b);/*调用自定义函数max*/printf("max=%dn",m));/*调用库函数printf*/getch();/*调用库函数getch*/}intmax(inta,intb)     /*定义函数max*/ {inty;  y=(a>b)?a:b;/*条件表达式*/returny; } 函数的定义一般格式合法标识符函数返回值类型缺省int型无返回值void函数体函数类型函数名(形参类型说明表){说明部分语句部分}现代风格:例有参函数(现代风格)intmax(intx,inty){intz;z=x>y?x:y;return(z);}例有参函数(现代风格)intmax(intx,y){intz;z=x>y?x:y;return(z);}例空函数dummy(){}函数体为空例无参函数printstar(){printf(“**********n”);}或printstar(void){printf(“**********n”);} 函数类型函数名(形参表)形参类型说明{说明部分语句部分}传统风格:例有参函数(传统风格)intmax(x,y)intx,y;{intz;z=x>y?x:y;return(z);} 自定义函数可以把完成一个任务的过程写成函数。inta_to_a(intcapital) {intsmall; if(capital>=‘A’&&capital<=‘Z’) small=capital–(‘A’-’a’); returnsmall; }返回值类型名函数名注意不要与已有库函数重名参数说明和参数列表调用函数时输入参数的格式要与之相同定义局部变量最好只使用局部变量,这样将方便调试。返回值如果不需返回则可return0;另外请注意这样的判断,如写成‘A’"z")    ;   returnch;}调用:i=funct1();/*返回的是int类型*/ 函数的调用调用形式函数名(实参表);说明:实参与形参个数相等,类型一致,按顺序一一对应实参表求值顺序,因系统而定(TurboC自右向左) main(){inti=2,p;p=f(i,++i);printf("%d",p);}intf(inta,intb){intc;if(a>b)c=1;elseif(a==b)c=0;elsec=-1;return(c);}例参数求值顺序main(){inti=2,p;p=f(i,i++);printf("%d",p);}intf(inta,intb){intc;if(a>b)c=1;elseif(a==b)c=0;elsec=-1;return(c);}运行结果:0运行结果:1 调用方式函数语句:例printstar();printf(“Hello,World!n”);函数表达式:例m=max(a,b)*2;函数参数:例printf(“%d”,max(a,b));m=max(a,max(b,c)); 函数说明对被调用函数要求:必须是已存在的函数库函数:#include<*.h>用户自定义函数:函数类型声明函数声明一般形式:函数类型函数名(形参类型[形参名],…..);或函数类型函数名();作用:告诉编译系统函数类型、参数个数及类型,以便检验函数定义与函数声明不同函数说明位置:程序的数据说明部分(函数内或外) 下列情况下,可不作函数说明若函数返值是char或int型,系统自动按int型处理被调用函数定义出现在主调函数之前有些系统(如BorlandC++)要求函数说明指出函数返值类型和形参类型,并且对void和int型函数也要进行函数说明 自定义函数的声明自定义函数在调用前应先声明。使系统知道将要用到某个函数及它的类型,以便处理。函数声明应与该函数定义时给出的函数类型与名字、形参的个数、类型、次序相一致。#include“stdio.h”voidmain() {floatx,y; intn;floatpower(floatx,intn);scanf("%f,%d",&x,&n); y=power(x,n);printf(“%8.2f”,y); }floatpower(floatx,intn) {inti; floatt=1; for(i=1;i<=n;i++) t=t*x; returnt;} 例:求1!+2!+3!+…+10!算法i=1;s=0;当i<=10s=s+i!定义求i!的函数 求1!+2!+3!+…+10!程序voidmain(){longmm(int);/*自定义求阶乘函数应先声明*/inti;longs=0;for(i=1;i<=10;i++)s+=mm(i);/*调用求阶乘函数,求i的阶乘*/printf(“n%ld”,s);} 定义求n!的函数longmm(intn){longt=1;inti;for(i=1;i<=n;i++)t*=i;returnt;} 函数参数及其传递方式形参与实参形式参数:定义函数时函数名后面括号中的变量名实际参数:调用函数时函数名后面括号中的表达式c=max(a,b);(main函数)(max函数)max(intx,inty){intz;z=x>y?x:y;return(z);}例比较两个数并输出大者main(){inta,b,c;scanf("%d,%d",&a,&b);c=max(a,b);printf("Maxis%d",c);}max(intx,inty){intz;z=x>y?x:y;return(z);}形参实参 形式参数与实际参数的关系形式参数在函数中是变量名,在函数调用时,形参被分配相应的内存实际参数是表达式  负责向对应的形参标识的内存单元传递数据实参与形参必须个数相同对应的形参和实参的类型必须一致 说明:实参必须有确定的值形参必须指定类型形参与实参类型一致,个数相同若形参与实参类型不一致,自动按形参类型转换———函数调用转换形参在函数被调用前不占内存;函数调用时为形参分配内存;调用结束,内存释放 例计算x的立方#includefloatcube(floatx){return(x*x*x);}main(){floata,product;printf("Pleaseinputvalueofa:");scanf("%f",&a);product=cube(a);printf("Cubeof%.4fis%.4fn",a,product);}xaproduct××××1.21.21.728 参数传递方式值传递方式方式:函数调用时,为形参分配单元,并将实参的值复制到形参中;调用结束,形参单元被释放,实参单元仍保留并维持原值特点:形参与实参占用不同的内存单元单向传递 711x:y:调用前:调用结束:711x:y:例交换两个数#includemain(){intx=7,y=11;printf("x=%d,ty=%dn",x,y);printf("swapped:n");swap(x,y);printf("x=%d,ty=%dn",x,y);}swap(inta,intb){inttemp;temp=a;a=b;b=temp;}调用:711a:b:711x:y:swap:711x:y:117a:b:temp 函数的嵌套调用解决更复杂问题时可以嵌套调用。C规定:函数定义不可嵌套,但可以嵌套调用函数main()调用函数a结束a函数b函数调用函数b longfac(intk) {longf=1; inti; for(i=1;i<=k;i++) f=f*i; retrunf; }主函数:main() {intn,m; longc; longfac(int);longcomb(int,int);scanf(“%d,%d”,&n,&m); c=comb(n,m); prnit(“%ld”,c); }例:编程求组合longcomb(intn,intm) {longc; inti; c=fac(m)/(fac(n)*fac(m-n)); retrunc; } 6.3函数的递归调用函数调用它本身,称为递归。直接在函数内调用自己为直接递归,通过别的函数调用自己为间接递归。voida() {...... a();...... }voida() {...... b();...... } voidb() {...... a();...... }递归在解决某些问题中,是一个十分有用的方法。因为其一,有的问题它本身就是递归定义的;其二,它可以使某些看起来不易解决的问题变得容易解决,写出的程序较简短。 递归方法求n!由于n!=n*(n-1)!是递归定义所以求n!(n-1)!(n-1)!(n-2)!(n–2)!(n-3)! ……0!的问题, 根据公式有0!=1。 再反过来依次求出1!,2!……直到最后求出n!。 递归方法求n!longfac(intn) {longf; if(n==0) f=1; else f=n*fac(n-1); returnf; }fac(3)n=33*fac(2)return6n=22*fac(1)return2n=11*fac(0)return1n=0f=1return1main() {longy; intn; scanf(“%d”,&n);y=fac(n);printf(“%d!=%ld”,n,y); }main()fac()fac()fac()fac() 递归举例问题:第1个月有1对兔子过2个月,兔子就可每个月生1对兔子问第n个月有多少对兔子?分析:设第n个月有f(n)对兔子根据题意有f(0)=0,f(1)=1f(n)=f(n-1)+f(n-2)f(n-1):前一个月的兔子数f(n-2):本月生的兔子数 定义函数f(n)longf(intn) { switch(n){case0:return0;break;case1:return1;break; default:returnf(n-1)+f(n-2);/*调用函数f(n)*/}} 兔子问题主函数voidmain(){longf(intn);/*自定义函数声明*/intn; printf(“ninputn:”); scanf(“%d”,&n);printf(“nf(%d)=%ld”,n,f(n));/*调用函数f(n)*/} 辗转相除法求最大公约数求m和n的公约数算法if(m%n==0) n是公约数;else求n和m%n的公约数; 求最大公约数的递归算法intgcd(intm,intn){if(m%n==0)returnn;elsereturngcd(n,m%n);}voidmain(){intm,n,t; intgcd(intm,intn); scanf(“%d%d”,&m,&n); if(m%d”,a,c); else {hanoi(n-1,a,c,b); printf(“%d->%d”,a,c); hanoi(n-1,b,a,c); } }n=1时,直接将金片 从a移动到cn-1个金片从a经过c移动到b将第n个金片 从a移动到c再将n-1个盘子从b经过a移动到cmain() {intn; printf(“inputn:”); scanf(“%d”,&n); hanoi(n,1,2,3);} 递归汉诺塔步骤voidhanoi(intn,inta,intb,intc) { if(n==1) printf(“%d->%d”,a,c); else {hanoi(n-1,a,c,b); printf(“%d->%d”,a,c); hanoi(n-1,b,a,c); } }main() {intn; printf(“inputn:”); scanf(“%d”,&n); hanoi(n,1,2,3);}输入3。则n=3 递归汉诺塔步骤voidhanoi(intn,inta,intb,intc) { if(n==1) printf(“%d->%d”,a,c); else {hanoi(n-1,a,c,b); printf(“%d->%d”,a,c); hanoi(n-1,b,a,c); } }main() {intn; printf(“inputn:”); scanf(“%d”,&n); hanoi(n,1,2,3);}主函数调用hanoi(n,1,2,3);第一次调用。第一次调用hanoi(n,a,b,c)(第一层)即要把三个金片移到cn=3 递归汉诺塔步骤voidhanoi(intn,inta,intb,intc) { if(n==1) printf(“%d->%d”,a,c); else {hanoi(n-1,a,c,b); printf(“%d->%d”,a,c); hanoi(n-1,b,a,c); } }main() {intn; printf(“inputn:”); scanf(“%d”,&n); hanoi(n,1,2,3);}由于n>1则执行hanoi(n-1,a,c,b)(第二次调用)n=3 递归汉诺塔步骤voidhanoi(intn,inta,intb,intc) { if(n==1) printf(“%d->%d”,a,c); else {hanoi(n-1,a,c,b); printf(“%d->%d”,a,c); hanoi(n-1,b,a,c); } }main() {intn; printf(“inputn:”); scanf(“%d”,&n); hanoi(n,1,2,3);}由于仍然n>1则执行hanoi(n-1,a,c,b) (第三次调用)n=2 递归汉诺塔步骤voidhanoi(intn,inta,intb,intc) { if(n==1) printf(“%d->%d”,a,c); else {hanoi(n-1,a,c,b); printf(“%d->%d”,a,c); hanoi(n-1,b,a,c); } }main() {intn; printf(“inputn:”); scanf(“%d”,&n); hanoi(n,1,2,3);}由于n=1则printf(“%d->%d”,a,c);即把金片从a移动到cn=1 递归汉诺塔步骤voidhanoi(intn,inta,intb,intc) { if(n==1) printf(“%d->%d”,a,c); else {hanoi(n-1,a,c,b); printf(“%d->%d”,a,c); hanoi(n-1,b,a,c); } }main() {intn; printf(“inputn:”); scanf(“%d”,&n); hanoi(n,1,2,3);}第三层执行完毕,返回到第二层,即下去执行printf(“%d->%d”,a,c);把第二个金片摆到第二根针上n=2 递归汉诺塔步骤voidhanoi(intn,inta,intb,intc) { if(n==1) printf(“%d->%d”,a,c); else {hanoi(n-1,a,c,b); printf(“%d->%d”,a,c); hanoi(n-1,b,a,c); } }main() {intn; printf(“inputn:”); scanf(“%d”,&n); hanoi(n,1,2,3);}执行下一条语句,又调用第三层hanoi(1,3,1,2)n=2 递归汉诺塔步骤voidhanoi(intn,inta,intb,intc) { if(n==1) printf(“%d->%d”,a,c); else {hanoi(n-1,a,c,b); printf(“%d->%d”,a,c); hanoi(n-1,b,a,c); } }main() {intn; printf(“inputn:”); scanf(“%d”,&n); hanoi(n,1,2,3);}n=1,执行结果为32n=1 递归汉诺塔步骤voidhanoi(intn,inta,intb,intc) { if(n==1) printf(“%d->%d”,a,c); else {hanoi(n-1,a,c,b); printf(“%d->%d”,a,c); hanoi(n-1,b,a,c); } }main() {intn; printf(“inputn:”); scanf(“%d”,&n); hanoi(n,1,2,3);}第二层也执行完了,返回第一层,执行接下来的语句,结果为13。n=3 递归汉诺塔步骤voidhanoi(intn,inta,intb,intc) { if(n==1) printf(“%d->%d”,a,c); else {hanoi(n-1,a,c,b); printf(“%d->%d”,a,c); hanoi(n-1,b,a,c); } }main() {intn; printf(“inputn:”); scanf(“%d”,&n); hanoi(n,1,2,3);}执行接下来的语句,再次调用 第二层hanoi(2,2,1,3)n=3 递归汉诺塔步骤voidhanoi(intn,inta,intb,intc) { if(n==1) printf(“%d->%d”,a,c); else {hanoi(n-1,a,c,b); printf(“%d->%d”,a,c); hanoi(n-1,b,a,c); } }main() {intn; printf(“inputn:”); scanf(“%d”,&n); hanoi(n,1,2,3);} 6.4变量作用域与存储方式先看一个例子,错在那里?:voidf1(){intt=2;a*=t;b/=t;}main(){inta,b;printf(“Entera,b:”);scanf(“%d,%d”,&a,&b);f1();/*调用函数f1()*/printf(“a=%d,b=%d”,a,b);}编译程序会提示出错:Undefinedsymbol‘a’和Undefinedsymbol‘b’。为什么? 一.变量的作用域即变量的有效范围1.变量按作用域分为全局变量和局部变量2.比较:全局变量(外部变量)局部变量(内部变量)定义位置:函数体外函数体内作用域:从定义处到本源从定义处到本函数结束举例:所有函数体外定义的变量(1)所有在函数体内定义(2)形式参数注意与局部变量同名的处理局部变量屏蔽全局变量不同函数中同名局部变量互不干扰文件结束 3、局部变量C语言程序是由函数组成的,有且只能有一个main函数。变量定义可以出现在函数内,亦可出现在函数外或者是函数的参数中。按照变量定义语句出现的位置,可以分为:局部变量:在函数或复合语句内定义;只在该函数或复合语句中才能使用。全局变量:在函数外定义;从它被定义的位置起,在之后的所有函数中有效。形式参数:定义为函数的参数;只在该函数中才能使用。 在函数内部说明的变量或者在复合语句中定义的变量称为局部变量。其作用范围是其所在的函数或复合语句。 又称全程变量或外部变量,在函数外部说明。其作用范围从它被定义的位置起,在之后的程序段中都是起作用的。4、全局变量 如果在全局变量定义之前的函数想引用该外部变量,则应该在该函数中用关键字extern作“外部变量说明”。 inta,b;voidswap(){intt;t=a;a=b;b=t;printf(“swap:a=%d,b=%dn”,a,b);}main(){printf(“Entera,b:”);scanf(“%d,%d”,&a,&b);swap();printf(“main:a=%d,b=%d”,a,b);}Entera,b:5,3↙swap:a=3,b=5main:a=3,b=5运行结果 inta,b;voidswap(){intt;t=a;a=b;b=t;printf(“swap:a=%d,b=%dn”,a,b);}main(){printf(“Entera,b:”);scanf(“%d,%d”,&a,&b);swap();printf(“main:a=%d,b=%d”,a,b);}运行结果inta,b;程序在编译时,屏幕将提示有错误:Undefinesymbol‘a’Undefinesymbol‘b’ inta,b;voidswap(){intt;t=a;a=b;b=t;printf(“swap:a=%d,b=%dn”,a,b);}main(){printf(“Entera,b:”);scanf(“%d,%d”,&a,&b);swap();printf(“main:a=%d,b=%d”,a,b);}运行结果inta,b;inta=5,b=3;Entera,b:5,3↙swap:a=3,b=5main:a=5,b=3 #includeinta,b;/*a,b为全局变量*/voidf1(intx){intt1,t2,a;a=t1=x*4;t2=b*3;b=10;printf(“f1:t1=%d,t2=%d,a=%d,b=%dn”,t1,t2,a,b);}main(){a=2;b=4;/*此a,b是全局变量,赋值*/f1(a);/*调用函数f1()*/printf(“main:a=%d,b=%d”,a,b);}程序输出结果为:f1:t1=8,t2=12,a=8,b=10main:a=2,b=10 若将程序改为:#includeinta=2,b=4;/*a,b为全局变量*/voidf1(){intt1,t2;t1=a*2;t2=b*3;b=100;printf(“t1=%d,t2=%d,b=%dn”,t1,t2,b);}main(){intb=4;/*此b是局部变量,赋值*/f1();/*调用函数f1()*/printf(“a=%d,b=%d”,a,b);}结论:全局变量与局部变量同名时,局部变量起作用,全局变量被屏蔽(不影响),应小心使用程序输出结果为:t1=4,t2=12,b=100a=2,b=4 二.变量的存储特性1.变量按存在时间分静态变量动态变量静态存储类型的变量的生存期为程序执行的整个过程,在该过程中占有固定的存储空间,通常称它们为永久存储。动态存储类型变量只生存在某一段时间内。例如,函数的形参和函数体或分程序中定义的变量,只是在程序进入该函数或分程序时才分配存储空间,当该函数或分程序执行完后,变量对应的存储空间又被撤销了。 2.c语言中每一个变量有两个属性:数据类型,存储特性完整的变量定义:[存储特性][数据类型]变量名; 3.变量的存储特性自动型auto静态型static寄存器型register外部型extern(1)auto型每次进入程序是自动分配内存,不长期占用内存例如:形式参数,自动型局部变量(2)static型①局部静态变量②全局静态变量长期占用内存 例1:分析执行结果f(inta){intb=0;staticintc=3;b++;c++;printf(“%5d%5d%5d”,a,b,c);return(a+b+c);}main(){inta=2,k;for(k=0;k<3;k++)printf(“%5dn”,f(a));}静态变量只初始化一次结果:214(a,b,c)7(f(a))21582169 (3)register型工作原理:使用CPU中的寄存器存放数据,即可通过变量访问寄存器。使用时不需要访问内存,而直接从寄存器中读写。将使用频率高的变量定义为register型,可以提高运行速度.寄存器变量只限于整型、字符型、指针型的局部变量。寄存器变量是动态变量,而且数目有限,一般仅允许说明两个寄存器变量。例如:registerintd;registercharc; (4)extern型引用:extern类型变量名如果某个模块文件中要用到另一个模块文件中的全局变量,就要用extern说明例如:程序模块file1.c中定义了全局变量ints;而在另一个程序模块file2.c中的函数fun1()中需要使用这个变量s。为此,可以在file2.c的函数fun1()中加上外部变量说明语句:fun1(){externints;/*表明变量s是在其他文件定义的*/.......}定义时分配内存,其他文件引用时不再分配内存. 6.5编译预处理“编译预处理”是C语言编译系统的一个组成部分。是在编译前由编译系统中的预处理程序对源程序的预处理命令进行加工。源程序中的预处理命令均以“#”开头,结束不加分号,以区别源程序中的语句,它们可以写在程序中的任何位置,作用域是自出现点到源程序的末尾。预处理命令包括执行宏定义(宏替换)、包含文件和条件编译。 一.宏定义简单宏定义1.一般形式为:#define宏名串(宏体)如:#definePI3.141592.宏定义的作用在宏定义之后,该程序中宏名就代表了该字符串。3.说明①可以用#undef命令终止宏定义的作用域。例如:#undefPI②宏定义的嵌套使用 #defineR3.0#definePI3.1415926#defineL2*PI*R/*宏体是表达式*/#defineSPI*R*Rmain(){printf("L=%fnS=%fn",L,S);/*2*PI*R替换L,PI*R*R替换S*/}程序运行结果如下:L=18.849556③双引号内与宏同名的字母不作宏展开.(见上例) 带参数的宏定义1.带参数的宏定义的一般形式为#define宏名(参数表)字符串如:#defineS(a,b)a*b#definePR(x)printf("s=%fn”,x) 2.带实参的宏名被展开宏名被所定义的宏体替换,宏体中的形参按从左到右的顺序被实参替换。例如:#defineS(a,b)a*b#definePR(x)printf("s=%fn”,x)main(){….area=S(3,2);PR(area);…}展开为:area=3*2;PR(area)展开的结果是:printf("s=%fn”,area); 宏定义与函数的区别(1)引用宏只占编译时间,不占运行时间。(2)引用宏没有返回值。如:#defineSQU(n)n*nvoidmain(void){printf("%fn",27.0/SQU(3.0));}程序输出结果为:27.000000注意,展开为27.0/3.0*3.0不是27.0/(3.0*3.0) (3)宏替换的形参无类型(4)实参为表达式的情况函数调用是先计算出实参的值,再将值传递给形参;宏的引用是用表达式替换形参.例如:#defineS(a,b)a*b引用:S(a+c,b+c)展开后的表达式为:a+c*b+c 二.文件包含#include1.文件包含是指一个源文件可以将另一个源文件的全部内容包含进来。2.#include命令有两种格式。(1)#include<文件名>(2)#include“文件名”3.两种格式区别(P96) 三.条件编译1.控制条件为常量表达式的条件编译,有以下几种形式:(1)功能:常量表达式为非0时,程序段被编译。否则,程序段不被编译。(2)功能:常量表达式为非0,程序段1被编译。否则,编译程序段2。#if常量表达式程序段#endif#if常量表达式程序段1#else程序段2#endif 2.控制条件为定义标识符的条件编译1)#ifdef标识符程序段#endif功能:当标识符在该条件编译结构前已定义过时,程序段被编译。否则,程序段不被编译。 (2)#ifdef标识符程序段1#else程序段2#endif功能:当标识符在该条件编译结构前已定义过时,程序段1被编译。否则,编译程序段2。(3)#ifndef标识符程序段1#else程序段2#endif功能是,当标识符在该条件编译结构之前没有被#define定义过时,程序段1被编译;否则,编译程序段2 条件编译举例:#defineinttag1main(){intch;scanf(“%d”,&ch);#ifinttagprintf(“%d”,ch);#elseprintf(“%c”,ch);#endif}编译成:main(){intch;scanf(“%d”,&ch);printf(“%d”,ch);} 本章结束再见!同学们: 文言文翻译:得“意”不忘“形” 1、理解句子在文中的意思2、把古文翻译成现代汉语3、综合考查文言实词、虚词、句式等4、为高考必考题型,分值10分理解并翻译文中的句子一、考纲解读 彦约还长沙,未几,复出督战,余党悉平。二、考题评析1、曹彦约回到长江,过了几天,又外出监督战事,剩余的党羽都被消灭。3、曹彦约回到了长沙,没过几日,又出征监督参战,很快就铲除了剩余的贼党。2、曹彦约回到长沙,没有结果,就进行督战,元励的余党都被平定。曹彦约回到长沙,不久,又出来督战,残余的盗贼都被平定。 三、练一练说一说(技法点睛)1、赵惠文王十六年,廉颇为赵将伐齐,大破之,取阳晋,拜为上卿,以勇气闻于诸侯。2、所以遣将守关者,备他盗之出入与非常也。3、疏屈平而信上官大夫4、是故弟子不必不如师5、永州之野产异蛇,黑质而白章,触草木,尽死;以啮人,无御之者。6、夫晋,何厌之有7、蚓无爪牙之利,筋骨之强。 赵惠文王十六年,廉颇为赵将伐齐,大破之,取阳晋,拜为上卿,以勇气闻于诸侯。三、练一练说一说(技法点睛)年号、人名、地名、国名、官名等专有名词及古今词义相同的普通名词留 所以遣将守关者,备他盗之出入与非常也。删去同义连用的实词,某些虚词(语气词、连词、结构助词),偏义复词中的陪衬词等删偏义复词:出:无意义 (1)疏屈平而信上官大夫(2)是故弟子不必不如师1、用双音节词换单音,2、用本字词义换通假字,3、用普通话词语换文言词语3、词类活用的词语。换疏远亲信所以不一定 永州之野产异蛇,()黑质而白章,()触草木,()尽死;()以啮人,()无御之者。根据语言环境的需要增加词语,或补出省略的语句或成分补 (1)夫晋,何厌之有(2)蚓无爪牙之利,筋骨之强。把古汉语倒装句(主要是宾语前置句、定语后置、状语后置等)调整为现代汉语的句式。调宾语前置定语后置 四、学以致用1、伦、秀谮之,系坐免官,以白衣还第,阖门自守。2、帝以他事召隐甫,指曰:“就请丏此人。”对曰:“陛下轻臣而重乐工,请辞官。”3、时帝践祚岁余,未尝亲政,权多旁落,朝润请帝躬览万机。4、金人虽不吾索,吾当与之俱行,求见二酋面责之,庶或万一可济。5、彦约悉发本司所储减价遣粜,通商蠲税,民赖以济。 1、伦、秀谮之,系坐免官,以白衣还第,阖门自守。2、帝以他事召隐甫,指曰:“就请丏此人。”()对曰:“陛下轻臣而重乐工,请辞官。”3、时帝践祚岁余,未尝亲政,权多旁落,朝润请帝躬览万机。人名保留补充主语实词替换赵王伦、孙秀中伤诬陷解系,解系被定罪而免官。解职后,解系以平民的身份返回私宅,关上门以求自保。玄宗用别的事由召见崔隐甫,对他说:“就请你宽免这个人吧。”崔隐甫回答:“陛下看轻臣子而重视一个乐工,请辞官。”当时皇帝登基一年多,不曾亲自处理政务,国家大权多落在别人手里,周朝瑞请求皇帝亲自处理政务 4、金人虽不吾索,吾当与之俱行,求见二酋面责之,庶或万一可济。5、彦约悉发本司所储减价遣粜,通商蠲税,民赖以济。调整语序金人虽然不索取我本人,我也应当跟太子一起去,求见两位首领当面谴责他们,或者还有可能成功。曹彦约全部拿出本部门储存的粮食减价派人卖出,买卖减免商税,百姓依靠这些来渡过难关。 文言文翻译熟读文段,领会文意扣住词语,进行翻译字字落实,准确第一单音词语,双音换替调整词序,删去无义带回原文,检查仔细国年官地,保留不译遇有省略,补充词语得“意”不忘“形”'