当前位置:文档之家› 让你吃惊的f90程序错误(英文)

让你吃惊的f90程序错误(英文)

让你吃惊的f90程序错误(英文)
让你吃惊的f90程序错误(英文)

Mistakes in Fortran 90 Programs That Might Surprise You

Over the years we have made lots of interesting and fun mistakes in Fortran 90 that we would like to share with you. We welcome your contributions and experiences so that we can share your pain.

Topics

These "gotchas" are nasty because they will not fail on some machines, while failing on others (given various combinations of compilers and machine platforms).

* Danger with Optional Arguments

* Danger with intent(out)

* A suprise with non-advancing I/O

* Suprise with locally initialized variables

* Danger of calling Fortran 90 style routines

* Danger with interfaces to Fortran 77 subroutines

* A suprise with generic functions

* Big Danger with Undefined Pointers

* Subtle danger with overloading (=) to assign pointers

* Danger with pointers to pointers

Danger with Optional Arguments

In this example an optional argument is used to determine if a header is printed.

subroutine print_char(this,header)

character(len=*), intent (in) :: this

logical, optional, intent (in) :: header

! THIS IS THE WRONG WAY

if (present(header) .and. header) then

print *, 'This is the header '

endif

print *, this

end subroutine print_char

subroutine print_char(this,header)

character(len=*), intent (in) :: this

logical, optional, intent (in) :: header

! THIS IS THE RIGHT WAY

if (present(header)) then

if (header) print *, 'This is the header '

endif

print *, this

end subroutine print_char

Explanation

The first method is not safe because the compiler is allowed to evaluate the header argument before the present function is evaluated. If the header argument is not in fact present an out of bounds memory reference could occur, which could cause a failure.

Danger with intent(out)

In this example we assign components of a derived type with intent(out).

program intent_gotcha

type mytype

integer :: x

real :: y

end type mytype

type (mytype) :: a

a%x = 1 ; a%y = 2.

call assign(a)

! a%y COULD BE UNDEFINED HERE

print *, a

contains

subroutine assign(this)

type (mytype), intent (out) :: this

! THIS IS THE WRONG WAY

this%x = 2

end subroutine assign

subroutine assign(this)

type (mytype), intent (out) :: this

! THIS IS THE RIGHT WAY

this%x = 2 ; this%y = 2.

end subroutine assign

end program intent_gotcha

Explanation

The problem is that when intent(out) is used with a derived type, any component not assigned in a procedure could become undefined on exit. For example, even though a%y was defined on entry to this routine, it could

become undefined on exit because it was never assigned within the routine. The lesson is that all components of a derived type should be assigned within a procedure, when intent(out) is used. Intent(out) behaves like the result variable in a function: all components must be assigned.

As an alternative, use intent(inout).

A suprise with non-advancing I/O

Many people think that the new non-advancing I/O in Fortran 90 is the same as stream I/O in other languages. It is not.

do i = 1, 128

write (unit=6,fmt='(a)',advance='no') 'X'

end do

We expect this program to print 128 X's in a row. However, unexpected behavior may occur if the record length for unit 6 is less than 128.

One can inquire the record length in the follow way:

open(unit=6)

inquire(unit=6, recl=i)

print *, 'recl =', i

Explanation

All Fortran I/O is still record based. Non-advancing I/O allows partial reads and writes within a record. For many compilers the default record length is very large (e.g., 2147483647) giving the appearance of stream I/O. This is not true for all compilers however.

On some compilers it is possible to set the record length as follows:

open(unit=6, recl = 2147483646)

On other compilers unit 6 is preconnected and the record length cannot be changed. (Thanks to Jon Richards of the USGS for this tip.)

Note that unit 6 and unit * are not necessarily the same. Although they both may point to the default output device, with non-advancing I/O, each could keep track of the current location in its own record separately. Therefore we advise choosing one default unit and sticking with it. Suprise with locally initialized variables

One must be careful when initializing a locally declared variable.

real function kinetic_energy(v)

real, dimension(:), intent(in) :: v

integer i

! THIS IS THE WRONG WAY

real :: ke = 0.0

do i = 1, size(v)

ke = ke + v(i)**2

enddo

kinetic_energy = .5*ke

end function kinetic_energy

real function kinetic_energy(v)

real, dimension(:), intent(in) :: v

integer i

! THIS IS THE RIGHT WAY

real :: ke

ke = 0.

do i = 1, size(v)

ke = ke + v(i)**2

enddo

kinetic_energy = .5*ke

end function kinetic_energy

Explanation

A local variable that is initialized when declared has an implicit save attribute. ke is initialized only the first time the function is called. On subsequent calls the old value of ke is retained. This is a real suprise to C programmers.

To avoid confusion it is best to add the save attribute to such locally initialized variables explicitly, even though this is redundant. Danger of calling Fortran 90 style routines

program main

real, dimension(5) :: x

x = 0.

! THIS IS WRONG

call incb(x)

print *, x

end program main

subroutine incb(a)

! this is a fortran90 style subroutine

real, dimension(:) :: a

a = a + 1.

end subroutine incb

Explanation

The subroutine incb uses a Fortran 90 style assumed shape array (containing dimension(:)). Such routines must either be in a module, or have an explicit interface wherever they are used. In this example, neither one was true.

One correct way to call such procedures is to use an explicit interface as follows:

program main

real, dimension(5) :: x

! THIS IS THE RIGHT WAY

interface

subroutine incb(a)

real, dimension(:) :: a

end subroutine incb

end interface

x = 0.

call incb(x)

print *, x

end program main

subroutine incb(a)

! this is a fortran90 style subroutine

real, dimension(:) :: a

a = a + 1.

end subroutine incb

If the routine is in a module interfaces are generated automatically and do not need to be explicitly written.

! THIS IS ANOTHER RIGHT WAY

module inc

contains

subroutine incb(a)

! this is a fortran90 style subroutine

real, dimension(:) :: a

a = a + 1.

end subroutine incb

end module inc

program main

use inc

real, dimension(5) :: x

x = 0.

call incb(x)

print *, x

end program main

If interfaces are used, the interface MUST match the actual function. Danger with interfaces to Fortran 77 subroutines

program main

real, dimension(5) :: x

! interface to Fortran 77 style routine

interface

subroutine inca(a,n)

integer :: n

! THIS IS THE WRONG WAY

real, dimension(:) :: a

! THIS IS THE RIGHT WAY

real, dimension(n) :: a

end subroutine inca

end interface

x = 0.

call inca(x,5)

print *, x

end program main

subroutine inca(a,n)

! this is a fortran77 style subroutine

dimension a(n)

do 10 j = 1, n

a(j) = a(j) + 1.

10 continue

return

end

Explanation

The interface declaration must always match the actual subroutine declaration. In this case, the interface statement refers to a Fortran 90 style assumed shape array. The actual subroutine refers to a Fortran 77 explicit shape array. The lesson here is: Interfaces to Fortran 77 style routines must only use Fortran 77 style constructs.

In this example, it is permitted to leave out the interface altogether since routines without interfaces are treated as Fortran77 style routines by default. However, if the interface is left out, the compiler will no longer check whether the arguments of calling procedures agree with the arguments listed in the interface.

A Suprise with Generic Functions (Function Overloading)

Fortran 90 allows the same function name to be used for different actual functions, so long as the arguments to the functions differ. One would expect that the functions first_sub and second_sub below would be different, because in first_sub, the first argument is a real and the second is an integer, while in second_sub the arguments are reversed.

subroutine first_sub(a,i)

real :: a

integer :: i

...

end subroutine first_sub

!

subroutine second_sub(i,a)

integer :: i

real :: a

...

end subroutine second_sub

So that one could define a generic function first_or_second below:

interface first_or_second

module procedure first, second

end interface

This is NOT so.

Explanation

The reason is that Fortran 90 allows procedures to be called by name (keyword) arguments. The following

real :: b

integer :: n

call first_or_second(i=n,a=b)

does not work because when called by keyword, first_sub and second_sub are indistinguishable,

call first_sub(i=n,a=b)

call second_sub(i=n,a=b)

and therefore a generic function cannot be defined. A generic function must be able to distinguish its arguments by type AND by name.

The solution is to not use the same dummy argument name in both procedures. For example, the following would work:

subroutine second_sub(i,aa)

integer :: i

real :: aa

...

end subroutine second_sub

Dangers with Pointers

Fortran 90 has 3 ways to implement dynamic memory: Automatic arrays, allocatable arrays, and pointers.

Automatic arrays are automatically created on entry and deleted on exit from a procedure, and they are safest and easiest to use. Allocatable arrays require the user to manually create and delete them, and should only be used if automatic creation and deletion is not the desired behavior.

Pointers are the most error prone and should only be used when allocatable arrays are not possible, e.g., when one desires an array to be a component of a derived type.

Big Danger with Undefined Pointers

Many people think that the status of a pointer which has never been associated is .not. associated. This is false.

In this example we are allocating a local_table on first entry that is to be reused on subsequent entries.

subroutine local_pointer(this)

real, dimension(:) :: this

real, dimension(:), save, pointer :: local_table

! THIS IS THE WRONG WAY

if (.not. associated(local_table)) then

allocate(local_table(size(this)))

endif

local_table = ...

...

end subroutine local_pointer

subroutine local_pointer(this)

real, dimension(:) :: this

real, dimension(:), save, pointer :: local_table

! THIS IS THE RIGHT WAY

logical, save :: first_entry = .true.

if (first_entry) then

nullify(local_table) ; first_entry = .false.

end if

if (.not. associated(local_table)) then

allocate(local_table(size(this)))

endif

local_table = ...

...

end subroutine local_pointer

Explanation

When a pointer is declared its status is undefined, and cannot be safely queried with the associated intrinsic. A second variable is introduced to nullify the pointer on first entry so that its status can be safely tested. This is not a problem in Fortran 95 which allows one to nullify a pointer on declaration.

Note that the save attribute for local_table is necessary to guarantee that the array and the pointer status are preserved on subsequent entries. We recommend that the save attribute should always be used when pointers and allocatable arrays are allocated in procedures.

Subtle danger with overloading (=) to assign pointers

One must be careful with overloading the assignment operator.

In this module we have created a private type which contains a pointer and a public procedure to assign that pointer.

module assign_pointer_class

type mytype

private

real, pointer :: pr

end type mytype

interface assignment (=)

module procedure assign_pointer

end interface

contains

subroutine assign_pointer(this, a)

type (mytype), intent(out) :: this

real, target, intent(in) :: a

this%pr => a

end subroutine assign_pointer

end module assign_pointer_class

In this main program we intend to assign the pointer component x%pr to the variable a, x%pr =>a. We cannot do so directly because the components of mytype are private. One must use a public procedure to do so. Furthermore, to simplify the syntax one might be tempted to use an overloaded assignment operator (=).

program main

use assign_pointer_class

type (mytype) :: x

real :: a = 0

! THIS IS THE WRONG WAY

x = a

end program main

Don't give into this temptation! The only safe way to accomplish this is to call the procedure directly.

program main

use assign_pointer_class

type (mytype) :: x

! THIS IS THE RIGHT WAY

real, target :: a = 0

call assign_pointer(x,a)

end program main

Explanation

The Fortran 90 standard says that the right hand side of an assignment operator is an expression that may potentially only persist for the duration of the call. In other words, x%pr could inadvertently point to a temporary copy of the variable a.

Thanks to Henry Zongaro of IBM for pointing this out. (We never would have figured this one out on our own.)

Also, James Giles found a subtle point regarding this example. We did not include "target" in the declaration of the real variable "a" (this has been corrected above). In James' words:

"Notice that for this to really work, the actual argument, 'a', must be declared with the target attribute. You correctly declare the dummy argument in the assign_pointer routine with the target attribute, but the actual argument must also have that attribute (otherwise it's illegal for any pointer to be associated with it). Just a minor point..."

Danger with pointers to pointers

When creating a hierarchy of pointers to pointers, each level of pointers must be allocated before being used.

program main

type mytype

real, dimension(:), pointer :: p

end type mytype

type (mytype), pointer :: x

! BOTH OF THESE ARE THE WRONG WAY

! AND THE COMPILER WON'T CATCH IT

! nullify(x%p)

! allocate(x%p(5))

! ONE SHOULD ALWAYS IMMEDIATELY NULLIFY THE PARENT POINTER

! OR ALLOCATE IT

nullify(x) ! or allocate(x)

...

! THEN LATER NULLIFY OR ALLOCATE THE CHILD POINTER

call child_construct(x,5)

if (associated(x%p)) print *, x%p

contains

subroutine child_construct(this,len)

! child constructor for pointer within mytype

! if len is present, then allocate it, otherwise nullify it.

! mytype is assumed to be already nullified or allocated

type (mytype), pointer :: this

integer, optional, intent(in) :: len

if (.not.associated(x)) allocate(x)

if (present(len)) then

allocate(x%p(len))

x%p = 0.

else

nullify(x%p)

endif

end subroutine child_construct

end program main

Explanation

This example creates a pointer to a pointer to an array of reals where the first pointer has not been allocated. For safety one should always either allocate or nullify the parent pointer immediately after its declaration. The child pointer cannot be allocated before the parent. Since the child pointer may be allocated elsewhere in the code, it is convenient to use constructor routines for this purpose.

Each child constructor can safely allocate or nullify its pointers only when it can be sure that its parent's pointers have been allocated or nullified.

常见12个典型的英文错误

——这个春节你回家吗? ——是的,我回去。 --Will you be going back home for the Spring Festival? 误:--Of course! 正:--Sure. / Certainly. 提示:以英语为母语的人使用of course的频率要比中国的学生低得多,只有在回答一些众所周知的问题时才说of course。因为of course后面隐含的一句话是“我当然知道啦!难道我是一个傻瓜吗?”因此,of course带有挑衅的意味。在交谈时,用sure或certainly 效果会好得多。同时,of course not也具挑衅的意味。正常情况下语气温和的说法是certainly not。英语口译 我想我不行。 误:I think I can't. 正:I don't think I can. 提示:汉语里说“我想我不会”的时候,英语里面总是说“我不认为我会”。以后您在说类似的英语句子的时候,只要留心,也会习惯英语的表达习惯的。 我没有英文名。 误:I haven't English name. 正:I don't have an English name. 提示:许多人讲英语犯这样的错误,从语法角度来分析,可能是语法功底欠缺,因为have在这里是实义动词,而并不是在现在完成时里面那个没有意义的助动词。所以,这句话由肯定句变成否定句要加助动词。明白道理是一回事,习惯是另一回事,请您再说几话:我没有钱;I don't have any money.我没有兄弟姐妹;I don't have any brothers or sisters.我没有车。I don't have a car. 现在几点钟了? 误:What time is it now? 正:What time is it, please? 提示:What time is it now是一个直接从汉语翻译过的句子,讲英语的时候没有必要说now,因为您不可能问what time was it yesterday, 或者what time is it tommorow?所以符合英语习惯的说法是:请问现在几点了?还有一种说法是:How are we doing for time?这句话在有时间限制的时候特别合适。 我的舞也跳得不好。 误:I don't dance well too. 正:I am not a very good dancer either. 提示:当我们说不擅长做什么事情的时候,英语里面通常用not good at something,英语的思维甚至直接踊跃到:我不是一个好的舞者。 我的英语很糟糕。 误:My English is poor. 正:I am not 100% fluent, but at least I am improving.

小学英语教学中几个常见问题及解决策略

小学英语教学中几个常见问题及解决策略 随着课程改革的不断推进,人们的目光进一步聚焦教育的主阵地——课堂,各种各样的教学模式、学习方法纷纷出现,课堂教学改革异彩纷呈,极具创造性、观赏性。似乎我们已经走进了新课堂,落实了新课标,似乎学生的英语能力得到了很大提高。认真审视一下当前的课堂教学,我们感到:不少小学英语教师对于新课程缺乏全面的、深入的理解,重现象不重本质,重形式不重实质,有的完全放弃了传统教学中的优秀方法,盲目“跟风”,追求“时髦”,致使课堂教学出现虚假的繁荣。 一、教材使用中的误区及解决策略 新课程倡导教师“用教材”而不是简单的“教教材”。教师要创造性地用教材,要对教材内容和各个版块进行重组和整合。教学内容的范围是灵活的,是广泛的,可以是课内的也可以是课外的,只要适合学生的认知规律,从学生的实际出发的材料都可作为学习内容。教师“教教科书”是传统的“教书匠”的表现,“用教科书教”才是现代教师应有的姿态。 (一)现象分析 1. 教“死”书,“死”教书 有的教师,不能恰当地以旧引新;更不会滚动已经学过的知识,巧妙帮助学生温故而知新;不会适度拓展,而是死搬教条:只会教本课时、本单元出现的内容,书本上出现的课上一字不漏详细地讲解,要求学生全部掌握;书本以外的,生怕学生不会掌握不敢拓展。如《牛津小学英语》4AUnit2PartD是操练There isn’t a / aren’t any… Here’s a…for you. Here are some…for you.的句型,有的教师采用多种形式,帮助学生把书上八幅图里的内容练得相当熟练,就是没有想到把以前所学的文具类,学习用品类,家具类单词等滚动进去操练。出现这种现象,主要是教师对教材不熟悉,缺少有意识地随时帮助学生复习的意识。 2. 照本宣科,死搬教材 有的教师不能灵活处理教材内容,完全按照教材上的内容和编排顺序进行教学。先教A版块的对话,再教B版块的生词,然后操练C、D版块的句型,接着学习

英语日常交流的常见问句

英语日常交流的常见问句 语言是文化的载体。一旦会用另一种语言提问了,那就意味着你掌握了打开另一扇文化之门的钥匙。英语中基本的疑问词不外乎what, where, when, who, which, why和how 这么几个,下面这七十个句子,足以让你得到你最想要的。 一:关于What口语中最常用的问题: 1.What time is it?(几点了?) 2 . What are you doing?(你在干什么?) 4.What did you say?(你说什么?) 5. What do you think?(你认为怎样?) 5.What do you recommend?(你有何推荐的?) 6.What are you looking for?(你在找什么?) 7.What is this for?(这是用来做什么的?) 8.What would you like to drink?(你想喝什么?) 9.What do you call this in English?(这用英语怎么说?) 10.What school do you go to?(你在哪所学校就读?) 二:关于Where口语中最常用的问题: 1. Where are you from?(你从哪里来?) 2. Where is your company?(你们公司在哪? 3. Where is the restroom?(洗手间在哪?) 4. Where are you headed?(你去哪里?) 5. Where should I pay?(我该在哪里交钱?) 6. Where did you buy it?(你在哪买的?) 7. Where did you learn English?(你在哪学的英语?) 8. Where do you work?(您在哪里高就?) 9. Where would you like to go?(你想去哪里?)10. Where have you been?(你去哪了?) 三:关于Where口语中最常用的问题: 1. When did you come here?(你何时到的?) 2. When does the meeting start?(会议何时开始?) 3. When will you finish your work?(你何时做完?) 4. When is this due?(什么时候到期?) 5. When will the flight arrive?(飞机何时到港?) 6. When are you free?(你什么时候有空?)

简要分析英文摘要中几种常见错误

简要分析英文摘要中几种常见错误 摘要本文阐述了英文摘要在知识传播中的重要作用,结合多年来从事编辑工作实践,笔者总结了在撰写英文摘要时几种常犯错误。 关键词摘要;知识传播;错误 Several Common Errors in English Abstract Abstract This article illustrates the important role of English abstract in the diffusion of knowledge. Combined with several years of editing practice, the author summarizes up several common errors in writing English abstract. Keywords abstract; diffusion of knowledge; error 科技期刊在知识传播中起着重要的作用,它可以帮助广大的受众获取必要的知识、技能、最新科学前沿,以便有效的利用这些信息和技术。目前,国内发行的大多数中文期刊都有英文摘要,这是学术规范的体现,也是全球化发展的必然结果,符合信息化时代的要求。科技知识一定要和国际接轨,才具有生命力。在科技期刊中,英文摘要撰写的规范与准确在知识国际化进程中起着至关重要的作用。所谓摘要,就是“应用符合英文语法的文字语言,以提供文献内容梗概为目的,不加评论和补充解释,简明、确切地记述文献重要内容的短文”。摘要是论文主题的高度浓缩,应该能提炼论文的主要观念,简明地描述论文的内容和范围,简短地进行概括和总结。 英文摘要作为科技论文的重要组成部分,有其特殊的意义和作用,它是国际间知识传播、学术交流与合作的桥梁和媒介。国际上重要的检索,对不以英语刊发的论文主要是借助英文摘要来判定是否收录,检索数据库对英文摘要的依赖性很

英文交流中的常见错误

英文交流中的常见错误,今天你犯了吗? 比如Chuck第一次来中国,下飞机后,负责接待他的东北某大学英语系陈老师说:您刚到,我们吃点饭吧。我们要点Chinese dumpling(饺子)和Chinese beancurd(豆腐),您看可以吗?Chuck以前从未听说过这两种东西,但出于好奇,就说可以,结果饭菜端上来一看,原来就是ravioli(饺子,来自意大利语)和tofu(豆腐,来自日语)。Chuck当时心里暗想,这两种东西,国际上早已经有通用的说法(ravioli和tofu),他们中国人为什么还要用那种生僻的说法呢?以后Chuck跟陈先生混熟了,就问他,当初你为什么不说ravioli和tofu呢?陈先生听了大吃一惊,连忙解释说,我真的不知道这两个词,而且我们的《英汉词典》上也没有这两个词。于是Chuck开始意识到,中国的英语教师、英语课本、甚至英语词典肯定存在问题,否则不可能发生这种事情。在中国五年的任教期间,Chuck收集了大量的Chinglish说法,从中挑选出一组最常见的,编写了上面提到的那篇长文。下面就是这些Chinglish说法,其中每行第一部分是汉语说法,第二部分是Chinglish说法,第三部分则是英语的标准说法。 ①欢迎你到... ② welcome you to ... ③ welcome to ... ①永远记住你② remember you forever ③ always remember you(没有人能活到forever) ①祝你有个... ② wish you have a ... ③ I wish you a ... ①给你② give you ③ here you are ①很喜欢... ② very like ... ③ like ... very much ①黄头发② yellow hair ③ blond/blonde(西方人没有yellow hair的说法) ①厕所② WC ③ men's room/women's room/restroom ①真遗憾② it's a pity ③ that's too bad/it's a shame(it's a pity说法太老) ①裤子② trousers ③ pants/slacks/jeans ①修理② mend ③ fix/repair ①入口② way in ③ entrance

英文写作中常见错误汇编

英文常犯错误汇编 A.词性使用不当 1.Now is the golden time for us to attain a fair command of English. 2. I am very like sports. B.句子结构出错 1.I am a student lived in room 808. 2.It really makes me can’t study and rest in the dorm. C.标点和连接 1.My roommates is so troublesome, I can hardly put up with him any more. 2.Could you please check the Lost and Found Department . D.时态和语态 1.I would be very appreciated if you are so kind as to arrange for me a new room next term. 2.I am very grateful if you could furnish me with some useful information as followed. E.主谓语和并列成分的一致 结构不一致 1.I am a student who live in No. 3 Building . 2.If people always keep their family in mind, to visit their family members frequently, and to share feelings with their beloved, then they can maintain a close and harmonious relationship. 指代不清 1.If one has talents and self-confidence, we will likely succeed. 2.When a man always thinks of his own interest, they will be cut off from help. F.中式英语 1.Some small thieves always steal people’s money in supermarket. 2.The tree by the windows of my house has four men height. G.重复累赘 1.I could not bear my roommate who shares the room with me now. 2.I am a new freshman from China. H.非谓语动词(分词,不定式) 1.I think set up a camera in the residential area is the best way to ensure the security of the dwellers. 2.The long-lasting debate is tired. I.同义词、近义词及固定词组的搭配 1.The government will cost a large sum of money on the mass transit system. https://www.doczj.com/doc/f15419015.html,st Sunday my flat was stolen. 3.As you know, life is compared with a voyage.

英语日常交流的常见问句

英语日常交流的常见问句!---相当实用--- 语言是文化的载体。一旦会用另一种语言提问了,那就意味着你掌握了打开另一扇文化之门的钥匙。英语中基本的疑问词不外乎what, where, when, who, which, why和how这么几个,下面这七十个句子,足以让你得到你最想要的。 一:关于What口语中最常用的问题: 1.What time is it?(几点了?) 2 . What are you doing?(你在干什么?) 4.What did you say?(你说什么?) 5. What do you think?(你认为怎样?) 5.What do you recommend?(你有何推荐的?) 6.What are you looking for?(你在找什么?) 7.What is this for?(这是用来做什么的?) 8.What would you like to drink?(你想喝什么?) 9.What do you call this in English?(这用英语怎么说?) 10.What school do you go to?(你在哪所学校就读?) 二:关于Where口语中最常用的问题: 1.Where are you from?(你从哪里来?) 2. Where is your company?(你们公司在哪? 3. Where is the restroom?(洗手间在哪?) 4. Where are you headed?(你去哪里?) 5. Where should I pay?(我该在哪里交钱?) 6. Where did you buy it?(你在哪买的?) 7. Where did you learn English?(你在哪学的英语?) 8. Where do you work?(您在哪里高就?) 9. Where would you like to go?(你想去哪里?)10. Where have you been?(你去哪了?)三:关于When口语中最常用的问题: 1.When did you come here?(你何时到的?) 2. When does the meeting start?(会议何时开始?) 3. When will you finish your work?(你何时做完?) 4. When is this due?(什么时候到期?) 5. When will the flight arrive?(飞机何时到港?) 6. When are you free?(你什么时候有空?) 7. When is your birthday?(你的生日是何时?) 8. When is he coming back?(他什么时候回来?) 9. When does the store open?(商店什么时候开门?) 10. When can I see you again?(我何时可以再见到你?) 四:关于Who口语中最常用的问题: 1. Who did that?(那是谁干的?) 2.Who is she?(她是谁?) 3.Who’s calling?(您是哪一位?) 4.Who do you think you are?(你以为你是谁?) 5.Who will take over his job?(谁来接管他的工作?) 6.Who does this belong to?(这是谁的?) 7.Who told you that?(谁告诉你的?) 8.Who asked you?(谁问你了?) 9.Who are you looking for?(你在找谁?) 10.Who do you think you are talking to?(你以为你在跟谁说话?) 五:关于Which 口语中最常用的问题: 1.Which is yours?(哪一个是你的?) 2.Which hotel are you staying in?(您在哪个宾馆下榻?) 3.Which is better?(哪一个更好一点?) 4.Which city do you like best?(你最喜欢哪个城市?) 5.Which one should I buy?(我该买哪一个?) 6.Which train should I take?(我该坐哪趟火车?) 7.Which department do you work for?(你在哪个部门工作?) 8.Which restaurant do you recommend?(你推荐哪个饭店?) 9.Which number should I call?(我该打哪个电话?) 10.Which newspaper do you read?(你读哪家报纸?) 六:关于Why 口语中最常用的问题:

英语口语常见问题及解决方法

英语口语常见问题及解决方法 1.在跟外教或其他同学用英语交流的时候总是害怕说错,不敢张口,该怎么克服呢? 在陌生人面前我们会觉得胆怯,对自己的英语没有自信。为什么呢?因为都怕被人嘲笑。这种情况尤其会影响我们讲英语的专业学生。该怎么办呢?我们可以先说服自己讲别人的语言出了错误并不是件丢人的事。设想将情景反过来,外国人在努力与我们讲中文。我们会怎么办?是否会嘲笑他们的语病,还是会去帮助他们呢?许多以英语为母语的人,尤其是那些长期在国外的,了解学英语的人努力讲英语的情形,一般都会有耐心、宽容地提供帮助。了解到这一点,我们就可以试着与外国人交谈,或者和同学用英语练习着交流了。仔细听,大体弄懂他们谈的是什么。"轮到"自己说话的时候我们可以发表自己的意见。我们认为自己可能误解的地方,可以请与我们交谈的人解释,我们也可以请他们纠正一两个关键的错误。这样就会慢慢建立起信心了。 2. 如何避免“中国式英语”? 在开口说话之前我们总是在脑子里先用中文打好草稿,然后才翻译成英语,其实还是把中文译成英语,没有真正达到用英语交谈的目的。这是因为我们的口语技巧尚未达到让我们自信的水平。我们在参加交谈前需掌握四项技巧,理解、回答、提问、说,因此我们要集中提高这些技巧:训练自己理解英语口语,训练自己问问题,训练自己回答问题,最终说英语。我们在掌握了前三项技巧后,就可以水到渠成地掌握最后(也是最难的)一项:说。要理解英语口语就必须自己先掌握大量的口语表达方式,然后自己熟练那些提问方式,再自己试着用地道的英语回答这些问题。 3.为什么还是有那么多简单的句子我们每天都在用中文说,却不会用英语表达?大家都知道,英语单词有60多万个。然而,无论有多少单词,我们却总可以按照使用频率分成三个类别small word, middle word和big word, 全球的英语使用者们在大部分时候大部分场合都用small word及其固定搭配交谈。然而,还有许多small word用法我们却从没听说过。很多简单的固定搭配虽然我们早在中学或大学学过,但跟别人交流的时候老记不起来用。这就是我们的问题所在。

关于英语翻译常见错误的分析

龙源期刊网 https://www.doczj.com/doc/f15419015.html, 关于英语翻译常见错误的分析 作者:宋倩 来源:《神州·中旬刊》2017年第04期 摘要:随着科学技术的不断发展,全球一体化趋势越来越明显,我国与其他国家在政治、经济、文化等方面都存在交流,文化之间的交流需要建立在语言沟通的基础上,这时就需要对不同语言进行翻译。翻译是现在人类社会生活中不可缺少的一部分,是人类在相互认识、交往中的基本手段,具体的就是将语言的一种形式转化为另一种形式。我国清代文学家严复在《天演论》种曾提出过“信、达、雅”的境界,即在翻译时,既要让译文要与原文的内容和风格保持一致,又要注意译文的文字语言规范,通俗易懂,还要抓住整篇文章的中心思想,避免读者在读译文时产生“只见树木,不见森林”的感觉。然而,我们在日常英语翻译时,存在很多的问题,这既会让翻译质量大打折扣,也会影响读者的阅读兴趣。下面就几点常见错误,和大家分享我个人的见解。 关键词:英语;翻译;常见错误 一、英语翻译常见错误 1、忽视语境。一个同样的单词或者短语,在日常的英语翻译过程中,面对不同的语境,可能表达出来完全不同的态度和含义,因此,如果在翻译时不注意文章的语境,则很有可能造翻译出来的文章令人哭笑皆非。比如“Jack found that one of the lines went limp and he shouted to us ‘Wait a minute.In my opinion,we must have a break somewhere’”,很多人在单纯的翻译译文中“In my opinion,we must have a break somewhere”这句话时,很容易的就理解成“依我来看,我们必须要在某个地方休息一下”。可是,在我们联系到前边“Jack found that one of the lines went limp”这句话时,我们就会分轻易地发现这里的“have a break”与我们正常理解的“休息一下”的意思相去甚远,它在这里是表达线路“断开”的意思,由此可以看出,当我们在翻译时如果忽略掉语境,就很难完整准确的将文章翻译出来。 2、语法结构不熟悉。中文和英语的句子语法结构不同,对于绝大部分中国人来说,由于一直以来受到中文的影响,由于对英文句子的语法结构不熟悉,因此在翻译时,英语中的一些特殊的语法结构或者结构比较复杂的从句,都很容易的成为翻译雷区,一不小心就会“炸伤”自己。因此,我们在翻译那些使用特殊语法或者结构复杂的从句时,首先要从语法的角度将句子分析透彻,只有如此,才能够将句子正确的翻译出来。比如“All of the girls are not beautiful”,我们看到这句话的第一反应会有两种翻译结果“不是所有女孩都漂亮”“所有女孩都不漂亮”,因此会让我们对整个句子的表达内容和逻辑充满疑问。所以,我们这时候就要从语法的角度进行抽丝剥茧的分析,当我们对句子分析透了之后,就会有拨开云雾见阳光的感觉。这句话实际上是一种部分否定的句型,否定的部分是“all of the girls”中的一部分,当我们知道这样的结构之后就很很轻易地知道这句话的意思是“不是所有女孩都漂亮”。

英文表达中常见错误

英文表达中常见错误 瞧,树上有两只麻雀。 [误] Look, there are two sparrows on the tree. [正] Look, there are two sparrows in the tree. 注:英语中,只有“长”在树上的东西才用介词on,例如:There are lots of apples on the tree;其余均用介词in,例如:The primitive built houses in the tree(原始人在树上建房子)。本例句也不例外。 裘德在乡下有一块菜地。 [误] Jude has a piece of vegetable field in the countryside. [正] Jude has a piece of vegetable plot in the countryside. 注:英语里field 的确可指“(一块)田地”,如:a paddy field(一块稻田),terraced fields(梯田)等,但“菜地”却习惯称为vegetable plot,而不是field。plot 指“小块土地,小块地皮”,如:an experimental plot of cotton(一块棉花试验田)。 我妻子总喜欢留朋友吃顿便饭。 [误] My wife is fond of asking her friends to stay for a casual meal. [正] My wife is fond of asking her friends to stay for a light meal. 注:casual 可作“不拘礼节的,非正式的”讲,如:clothes for casual wear(便服)。但“便饭”人们习惯用形容词light,该词也有“随便的,不重要的”之意,如:a light conversation(闲谈)。 要测量海水的深度不是一件容易的事情。 [误] It is a tough job to measure the depth of the sea.

英语口语交际中常犯的中国式错误

英语口语交际中常犯的中国式错误 1. 这个价格对我挺合适的。 误:The price is very suitable for me。 正:The price is right。 提示:suitable(合适的、相配的)最常见的用法是以否定的形式出现在告示或通知上,如:下列节目儿童不宜。The following programme is not suitable for children. 这句话用后面的说法会更合适。 2. 你是做什么工作的呢? 误:What's your job? 正:Are you working at the moment? 提示:what's your job这种说法难道也有毛病吗?是的。因为如果您的谈话对象刚刚失业,如此直接的问法会让对方有失面子,所以您要问:目前您是在上班吗?Are you working at the moment?接下来您才问:目前您在哪儿工作 呢?Where are you working these days?或者您从事哪个行业呢?What line of work are you in? 3. 用英语怎么说? 误:How to say? 正:How do you say this in English?提示:How to say是在中国最为泛滥成灾的中国式英语之一,这绝不是地道的英语说法。同样的句子有:请问这个词

如何拼写?How do you spell that please?请问这个单词怎么读?How do you pronounce this word? 4. 明天我有事情要做。 误:I have something to do tomorrow。 正:I am tied up all day tomorrow。 提示:用I have something to do来表示您很忙,这也完全是中国式的说法。因为每时每刻我们都有事情要做,躺在那里睡大觉也是事情。所以您可以说我很忙,脱不开身:I'm tied up。还有其他的说法:I can't make it at that time. I'd love to, but I can't, I have to stay at home。 5. 我没有英文名。 误:I haven't English name。 正:I don't have an English name。 提示:许多人讲英语犯这样的错误,从语法角度来分析,可能是语法功底欠缺,因为have在这里是实义动词,而并不是在现在完成时里面那个没有意义的助动词。所以,这句话由肯定句变成否定句要加助动词。明白道理是一回事,习惯是另一回事,请您再说几话:我没有钱;I don't have any money。我没有兄弟姐妹;I don't have any brothers or sisters。我没有车。I don't have a car。 6. 我想我不行。 误:I think I can't。 正:I don't think I can。

英语口语常见错误

英语口语常见错误 The price is very suitable for me. 正确:The price is right. Note:suitable(合适的、相配的)最常见的用法是以否定的形式出现在告示或通知上,如:下列节目儿童不宜。The following programme is not suitable for children. 你是做什么工作的呢?What’s your job? 正确:Are you working at the moment? Note: what’s your job这种说法难道也有毛病吗?是的。因为如果您的谈话对象刚刚失业,如此直接的问法会让对方有失面子,所以要问:目前您是在上班吗? Are you working at the moment? 接下来再问:目前您在哪儿工作呢?Where are you working these days? 或者您从事哪个行业呢?What line of work are you in? 顺带说一下,回答这类问题时不妨说得具体一点,不要只是说经理或者秘书。 用英语怎么说?How to say? 正确:How do you say this in English? Note:How to say是在中国最为泛滥成灾的中国式英语之一,这决不是地道的英语说法。同样的句子有:请问这个词如何拼写?How do you spell that please?请问这个单词怎么读?How do you pronounce this word? 我的舞也跳得不好。I don't dance well too. 正确:I am not a very good dancer either. Note:当我们说不擅长做什么事情的时候,英语里面通常用not good at something,英语的思维甚至直接踊跃到:我不是一个好的舞者。 明天我有事情要做。I have something to do tomorrow。 正确:Sorry, but I am tied up all day tomorrow. Note: 用I have something to do来表示很忙,也完全是中国式的说法。因为每时每刻我们都有事情要做,躺在那里睡大觉也是事情。所以您可以说我很忙,脱不开身:I'm tied up.还有其他的说法:I'm sorry I can't make it at that time. /I'd love to, but I can't, I have to stay at home. 我没有英文名。I haven't English name. 正确:I don't have an English name. Note:许多人犯这样的错误,从语法角度来分析,因为have在这里是实义动词,而并不是在现在完成时里面那个没有意义的助动词。所以,这句话由肯定句变成否定句要加助动词。请您再说几话:我没有钱;I don't have any money. 我没有兄弟姐妹;I don't have any brothers or sisters. 我没有车。I don't have a car.

大学生常见英文写作错误

常见写作错误 一、主语错误 1. 主语缺失 1)In our country feels very free. People feel free in our country. 2) In my hometown aren’t very busy. People in my hometown are very busy. 2. 非名词主语 1)Rich doesn’t ensure a happy life. Being rich doesn’t mean a happy life. / Wealth doesn’t ensure a happy life. 2)Keep two full-time jobs is simply impossible. Keeping two full-time jobs is simply impossible. 3. 主谓错位 1)Reading books can acquire knowledge. People can acquire knowledge from books. 2) Now people’s lives can’t l eave TV. Now people can’t do without TV. 二、谓语错误 1. 多重谓语 1)In our modern society, there are many examples around us show that many people are cheated. In our modern society, many examples around us show that many people are cheated. / A large number of people have fallen victim to various tricks.

英语中中国人常见的12种错误

1. 这个价格对我挺合适的。 误:The price is very suitable for me。 正:The price is right。 提示:suitable(合适的、相配的)最常见的用法是以否定的形式出现在告示或 通知上,如:下列节目儿童不宜。The following programme is not suitable for children. 这句话用后面的说法会更合适。 2. 你是做什么工作的呢? 误:What's your job? 正:Are you working at the moment? 提示:what's your job这种说法难道也有毛病吗?是的。因为如果您的谈话 对象刚刚失业,如此直接的问法会让对方有失面子,所以您要问:目前您是在上班吗?Are you working at the moment?接下来您才问:目前您在哪儿工作呢?Where are you working these days?或者您从事哪个行业呢?What line of work are you in? 3. 用英语(论坛)怎么说? 误:How to say? 正:How do you say this in English? 提示:How to say是在中国最为泛滥成灾的中国式英语之一,这绝不是地道 的英语说法。同样的句子有:请问这个词如何拼写?How do you spell that please?请问这个单词怎么读?How do you pronounce this word? 4. 明天我有事情要做。 误:I have something to do tomorrow。 正:I am tied up all day tomorrow。 提示:用I have something to do来表示您很忙,这也完全是中国式的说法。 因为每时每刻我们都有事情要做,躺在那里睡大觉也是事情。所以您可以说我很忙,脱不开身:I'm tied up。还有其他的说法:I can't make it at that time. I'd love to, but I can't, I have to stay at home。

发英文邮件最常见的三个错误

成千上万人,学洛基英语 A recent post on the DailyMuse outlined the most common business writing mistakes you don’t even know you are making. Before you draft your next email, consider the following examples of bad habits to avoid:最近职业女性社区DailyMuse在线版上刊登了一篇报道,指出了商务写作中最常见的错误,有些错误甚至你都不知道自己正在犯。在你下次起草一封电邮之前,看一看以下列举的这些发邮件时的易错处,尽量避免这些坏习惯吧: 1. “btw, need u 2 sign tom. thx.” “顺便说一下,谢谢把这份邮件转发给Tom” Being too casual in an email may lead the receiver to think (A) you are unprofessional and not taking the conversation seriously, (B) too busy to address their needs, or (C) they may have no idea what the heck you are talking about in the first place. Business should always be handled with care and this can by done so by taking the time to properly communication regardless of how laid-back the environment is. 在写邮件时用词太随意可能会让收件人产生以下想法:(1)发件人不够专业或者没有认真对待此次谈话;(2)发件人太忙了,都没有时间来说清楚自己的要求;(3)不知道发件人到底想要干什么。所有商业活动都需要认真对待,不管身处什么样的环境,都要花时间来进行恰当的交流。 2. “It was a pleasure meeting you yesterday!! Looking forward to our next encounter! Take care!” “昨天见到你很高兴!!期待下次再见!保重!” Exclamation points are sometimes 100% necessary in business emails to express enthusiasm and even good manners, but overusing this punctuation takes on a whole new and unwanted meaning. With one too many exclamation points, your positive attitude turns…. quite weird and unwelcoming. 在商务信函中,有时使用惊叹号是有很必要的,可以表达出热烈的情感和良好的礼仪。不过,过分使用标点符号就会适得其反了。就像上面提到的这句话一样,滥用惊叹号来表达积极情感反而会让人觉得奇怪和不受欢迎。 3. Subject: Meeting 主题:开会 First, imagine how many emails professionals receive a day. Now, imagine how many emails professionals receive a day including the word “meeting.”Subject lines are the filtering mechanism and the best way to draw help the recipient distinguish the reason behind your email. Don’t be vague in your subject lines. It is your job to summarize the

中国人使用英语常见错误分析

中国人使用英语常见错误分析 “让”都能译成let吗? 如果你们有人住在大城市的话,有没有注意到马路上一群带着黄色安全帽的小学生过马路,有的孩子手里还举着一个小圆牌子,上面有个英文字LET,这是汉语里说的要司机“礼让”的“让”。你们觉得let用在这里好吗?到过英语国家的人,尤其是自己开车的话,是否注意到支路和干道交接处,在支路路旁有块交通标志牌,要求在支路上开车的人让干道上的车,因为这时干道上的车有the right of way(优先通行权),而牌子上却不是let,而是YIELD (让步,让与),汉语的“让”有多种含义,而英语中的let做“让”解时,是allow somebody to do something;表示“允许”的“让”。现在请大家自己做出判断:是孩子们请求司机允许他们通过马路,还是司机见到孩子而主动停车让他们安全通过。另外,下面这些话又应该怎样译成英语: 1、他把客人让进来。 2、警卫不让我进去。 3、店主让我父亲一天干十六个时活。 4、小王让你回电话。 5、大夫让我卧床。 6、她让我在雨里等了两个钟头。 7、请让一让。 8、他是你弟弟,你该让着他点儿。 第一句“他把客人让进来”,这里的“让”是“请”的意思,所以答案应该是He invited the guest in.把let用在第二句是对的;The guard did not let me in.因为这里就是要表达“不允许” 的意思。第三句如果用let的话,只能表示父亲甘受剥削,希望店主同意每天工作十六个小时;这里“让”是“迫使”,因此,英语是The shop-owner made my father work 16 hours a day. 第四、第五句“小王让你回电话”和“大夫让我卧床”都没有“允许”的意思,两句用asked,expected都行,大夫还可以told或advised me to stay in bed.恐怕没有愿意在雨里等两个小时的人,更没有人希望对方允许他等两个钟头,所以按照习惯第六句应该译成She kept me waiting in the rain as long as two hours.第七句“请让一让”,可以简单地用Excuse me表达就可以,也可以译成Please step aside.第八句“他是你弟弟,你应该让着他点儿”就更没法用let了,它可以译成He is your brother. You ought to humour him a little.如果你们的译文除了第七、八句用现在时,辊的句子是过去时就很好。这里我想特别提醒职务是老师的读者,要时刻注意培养学生的英语时态感。虽然大部分学生懂得一般现在时表示习惯或经常性的动作或状态,但在实践中该用过去时态的时候,更多的却是用现在时。即使句子中没有表示过去的时间状

相关主题
文本预览
相关文档 最新文档