大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
D
创新互联专注于企业网络营销推广、网站重做改版、霍城网站定制设计、自适应品牌网站建设、H5页面制作、商城网站建设、集团公司官网建设、成都外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为霍城等各大城市提供网站开发制作服务。
试题分析:考查时态。句意:—我想知道你是否可以和我去购物中心?—不要打扰我。今天早晨我一直在写实验报告,到现在还没有写好。指从过去开始一直到现在都在做某事,故使用现在完成进行时。故D正确。
点评:时态的考查要根据上下文的语境进行,同时要注意一些关键的时间状语。
大家都知道,生活在21世纪的年轻人掌握一门外语是十分重要的,尤其是英语。如何学好英语,提高英语水平,是当前很多中学生困惑的问题。其实,学好英语并不是一件难事,关键在于要掌握好的学习方法。学习方法自然是因人而异、因时而异的。其实方法本身无所谓好与坏,关键就看它能否完美地与 个人相结合,提高学习效率,如果一套方法能够激发你的学习兴趣,提高学习效率的话,以后要做的就是坚持下去。可能我们都见过类似的情况:有的人整日埋头书案,学得很辛苦,但成绩仍不理想:有的人则懂得“有张有弛”,学得很轻松,而且名列前茅。如果你是后者,相信你已经找到了良好的学习方法与你个人的最佳结合点了,只要持之以恒即可;而前者已经具备了一定的毅力,关键就在于提高自己的学习效率了。
学好英语的另一个关键是提高英语学习的兴趣。爱因斯坦说过“兴趣是
最好的老师”。兴趣是产生学习的动力。那如何产生学习的兴趣呢?当然你必须要学会英语、懂得英语、会在生活实践中运用你所学习的英语知识。你懂得越多你的兴趣就会越浓。首先,你必须有足够的词汇量,有坚实的语法知识。
一、词汇
词汇是学好英语的关键,没有足够的词汇就无从谈起听、说、读、写。
词汇量的大小决定一个学生英语水平的高低。因此在初中阶段除要掌握《大纲》要求的800多词汇外,还要扩充500个左右的词汇。在学习词汇的过程中,要掌握词的拼读规则,根据规则记忆单词;同时还要根据构词法知识记忆和扩充单词,通过语境理解和记忆单词也是一个最佳学习单词的好方法。目前词汇在中考试题中汉译英的试题越来越少,取而代之的是词汇在语境中的运用考查比重越来越大。在进入学习英语的初级阶段时,掌握语音知识是学好英语单词的基础,读准英语音素是拼读音标的前提。因此一定要熟练掌握48个音素,要做到会拼读、拼写。有些同学认为中考试题的笔试部分取消了对语音的考查,于是就其次,要注意训练自己听音、辨音和模仿的能力。课堂上,专心听老师的发音和磁带上的录音,争取当堂学会。对于那些比较拗口的单词、短语或句子,课下一定要挤时间反复模仿,直到读准、读熟为止。再次,熟练掌握读音规则,培养自己根据读音规则把字母(或字母组合)与读音建立起联系的能力。因为掌握拼读规则对单词的记忆很有好处。为此要经常复习巩固每单元最后一课的“Listen,read and say”和课本附录中的"Pronunciation and spelling”,如果不重视这些内容。我觉得这可是很大的缺撼。如果谁能够熟练掌握它,它可就成为你记忆单词的好帮手了。
说到记忆单词,这可是同学们普遍感到头疼的事。尤其是现行的新教材词汇量扩大了不少,记忆的难度就更大了。记不住单词,学好英语就无从谈起。所以突破单词这一难关非常关键。记忆单词的方法很多。
1.按读音记忆单词。实际上在你看单词时就要顺便看一眼音标,掌握字母及字母组合的读音规律。将所有符合规则的单词归类记忆。如:①按开、闭音节记忆,掌握元音字母的读音。Bag: cat, map, sad;cake: name, plane, date; desk: next, set, step, let; these: Chinese, Japanese; hit: big, ship, this, kill; like: side, nice, kite,mine ; not: dog, hot, stop, got; nose: note, those, close, hole ; bus: nut, cup, rubber, dust; use: huge等。②按字母组合记忆,掌握元音字母组合和辅音字母组合的读音,如:
bee, meet, see, keep等等,ee字母组合读/i:/;chair,
ch字母组合读/tS / 。
2.分音节记忆。单词不论长短,如果从第一个字母背到最后一个字母,是
很难记忆的。如:information,共11个字母组成,可以把它“大卸八
块”,分音节记忆就会很容易。in-for-ma-tion
3.音、形、义结合法
背单词将它的音、形、义结合起来,记忆牢固,速度也快。读准它的
音,看好它的形,明白它的义,尤其是一词多义,记忆时要提高分辨率。
如:orange是个兼类词,作可数名词意思是“桔子”;作形容词意思是
“桔色的”;作不可数名词意思是“桔汁”。可读音只有一
个/'orindJ/,词形一样。这样有意识地去分辨记忆就容易多了。
4.联想记忆来记单词。它主要包括以下几种形式:
① 对比联想记忆:
将同义词: study/learn(学习),big/large/great(大的),look/
see/watch(看),hear/listen(听),good/fine/well/
nice(好的), door/gate(门),like/love/enjoy(喜欢)等。
反义词: 如:big(大) →small(小),dear(昂贵) →cheap(便宜),hot
(热) →cold(冷),slow(慢) →quick/fast(快),thin(瘦)
→(胖),in front of(在……前面) →behind(在……后面),
south(南) →north(北)等。
同音词: too(也) →two(二),for(为) →four(四),right(正确) →
write(写),by(乘) →buy(买),blue(蓝色的) →blew(blow
的过去式),sea(海洋) →see(看见),son(儿子) →sun(太
阳), whether(是否)→weather(天气)
词形相近比较:want(想要)→wait(等待),read(读)→ready(准备好
的),wall(墙) →walk(走),quite(很)→quiet(安静的),
present(礼物)→parent(父母)等放到一起对比记忆。
同时还可以联想到一些义同形不同的词。如:由cost联想到pay,take和spend,并将这些意义相对、相同或读音相同的词的用法进行比较。
②归类联想记忆:把所学的单词按照不同的范畴分门别类, 将所学单词合理归类。
A.按词性归类。如:名词driver, name…,动词be, have, drive…,
形容词careful, happy…,副词carefully, happily…,介词in,
on at…,代词he, she, him, her…等。
B.按用途归类。如:服装类coat, shirt, skirt, sweater,
shoes…,食品类cake, rice, dumpling, noodle…,运动类
football, basketball, race, sport…,交通类traffic, bus,
car, taxi, train, plane, ship…,月份January, February,
March, April…,星期Monday, Tuesday, Wednesday,
Thursday, Friday, Saturday, Sunday和节日等。比如学习
Christmas一词时, 就联想到Children's Day,Women's Day,
Teachers’Day,Tree—Planting Day,Mid—autumn
Festival,National Day, New Year’s Day, Spring
Festival等一系列的节日名词。
③构词联想记忆:利用同根词(词形转换)联想记忆,注意词性。英语单
词中有许多词具有一词多性的特点,如open既可作动词用,又可作
形容词用。另一些词具有同一个词根,如单词care既具备名词性质
又具备动词性质,它的同根词有careful,carefully,careless,
carelessly,对于这些词,我们应重点记忆。再如:north→
northern,noise→noisy→noisily等。利用合成词联想记忆,如
学到moonlight这个词就想到它是由moon和light这两个词合成
的;classroom是由class与room合成的。
④搭配联想记忆:以一个单词为中心搭配不同的词而构成新的短语。这种语言现象非常多,如能经常使用此法则会牢固地记住所学的短语。如:
1)含有get的短语有:get ready for 为…… 做准备,get up 起 床,get on, with 与人相处,get down下来, get dressed穿衣服,get back取回;回来,got on 上车,get off下车,get to 到达,get out of从……出来, get lost迷路。
2)含go的短语有:go swimming去游泳, goes on继续;持续, go to school去上学, go to bed上床睡觉, goes home回家, go out for a walk出去散步, go away走开, goes down降落,go back回去, go on with继续做某事
3) 含look的短语有:look at 看, 1ook after照看;照顾, look the same 看起来很像, 1ook like看起来像, 1ook for寻找, 1ook up(在词典、参考书中)查找, 1ook over (医生)检查, 1ook around (round)环顾四周
4)含make的短语有:make room for 为……. 让地方, make sentences with 用……造句, made a face or made faces 做鬼脸, be made in在…制造 , be made of由…制成, make tea沏茶, make friends with 与……交朋友, make up编出, made a mistake出差错, make sure确保,确信, make a noise吵闹
5)含take的短语有:take your time 不急;慢慢来, take, medicine 吃药;服药, take a walk 散步,take, exercise 运动, take turns 轮流;替换, take care of 照料;照顾, take, out of 带走;拿出, taking off 脱掉, take a message for 给……捎个信
6)含come的短语有:came into 进来, come down 下来, come in 进来, come over 过来,come from 来自, come back 回来, come round 前来(过来)/ comes over, come on 快,加油, come out (花)开;出来, come along 赶快,快一点
7)含turn的短语有:turn off 关上, turn, up (把收音机等)开大一些, turn on 打开(灯等), turn down (把收音机等)开小一些, turned white 变白, turn left 向左拐。
8)含have的短语有: have to 不得不, have an idea 有了主意, have a rest 休息, have breakfast吃早饭, have a look 看一看, have a good time玩得愉快, had better 最好,have a drink of 喝一点儿
只要你多留心,有意识地注意归纳总结,记忆单词和短语不是一件难事。
此外,老师课堂上播放朗读带,不只是单纯地听,而是一边听一边迅速地将
其写下来,做到耳、心、手、眼并用。总之,对于那些新近学的单词,要不厌其
烦地靠读、写、背等各种途径反复记忆。重复到一定的次数,就会成为长时间的
记忆,也就不会遗忘了。
(5)记忆单词还要靠勤奋,抓住零散时间进行记忆。记忆单词时,除了
以上方法外还要做到“五到①脑到—背单词时肯定要想着,不能开小差。
②眼到—仔细观察单词的写法。③口到—口里要念着单词。④耳到—听着
自己的读音。⑤手到—用手在书桌上或纸上写几遍这个单词。不要偷懒,
一定要边记边壁划。把各个器官动用起来,相信自己一定能记住更多的单
词。
有的同学认为单词的识记真很麻烦。其实并不麻烦。如果你能经常有意识
地这样做,时间久了,就会养成习惯。以后每遇到一个词就会不知不觉地去联
想。
一位外语专家曾经说过这样一句话:“千个单词至少在你眼前出现二十次
才能牢记。”同学们想想看,你所学的单词总共在眼前出现过多少次?这下你
也许找到记不住单词的原因了吧?
(6)学好英语做好课前预习和课后复习也是十分重要的。
你应该在每学习一课之前,先进行预习。预习可以提前扫清听课中的障碍。
通过预习,就像“火力侦察”,可以发现自己知识上的薄弱环节。在上课前迅速
补上这部分知识,这样,在理解新知识时就会很顺利。有的学生听讲效果不好,
其中一条主要原因,就是没有搞好预习。课前预习是学生学好新课,取得高效率
的学习成果的基础。如果搞不好课前预习,上新课时就会心里没底,听课就会变
得被动、难以消化,以致对全部接受新课丧失信心。反之如果做好了课前预习,
不仅可以提前扫清听课中的障碍,培养自学的能力,而且可以提高学习新课的兴
趣,掌握学习的主动权。
首先,熟悉并能记住大部分生词。校正单词读音。在了解了生词的基本
意思和词性用法后,应及时听课文录音磁带,一般情况下,要连续听2—3
遍,并跟着大声读,目的是校正生词读音,并且模仿朗读课文的语音语调,
提高说的能力。用这种方法校正单词读音,还可增强语感。
在自学时,你会经常遇到疑难问题?你是如何处理的?
当然。每遇到这种情况,首先是自己要认真地去思考,多角度地分析、推
敲。要知道,若是自己费尽了一番周折将某个难题弄个水落石出,那心里可真是
一种说不出的痛快。如果实在搞不清,你可以向老师或同学请教,绝不轻易放过
任何一个疑难问题。
二、语法
语法是学好英语的基础,它是掌握英语的工具。在你掌握了一定的词汇量
后,了解一些语法知识是非常必要的。选择填空是考查语法的一个重要题型。
它可以通过选择的方式考查名词、动词、代词、形容词、副词、连词、介词和
数词等等。覆盖面较广。
初中阶段所学的语法知识就是那么屈指可数的几个,反复练习过多遍,为什
么到头来还是出错呢?
这种一错再错的现象在学生中是普遍存在的,即某个题目在以前曾做错过,
以后再次见到这个题,还是做不对甚至犯同样的错误。我觉得问题的关键在于没
有彻底弄懂错误的原因或没有引起足够的重视。你应该把做错的每一道题,都要
进行认真、仔细的分析和思考:错在哪里?是对该知识点不了解还是粗心大意所
致?如何改正?怎样才能避免类似错误的发生?是否还有其它的解法?经过这一番反
思之后,再把它们记录到“错题库”中去。以后再碰到类似题目就基本上可以杜
绝错误的发生。尤其是那些易受思维定势影响的题目更应当这样去处理,否则就
很容易重蹈覆辙。
时态学习是中国学生最为头疼是一项语法项目。因为中国人在语言的表达中
只有时间的变化,而没有时态的概念,但英语中语言所表述的事情处在不同的时
间,要用不同的时态,而且时态的关键表述在句子的谓语动词上。有时背起规则
来很容易,但在句子的使用中却常常出现错误。
要准确地掌握初中阶段的五个基本时态,重要的还是要在句子中多运用。
1.掌握连系动词be,feel,look,get,turn等与表语连用的一般用法。
2.掌握延续性动词与瞬间动词在用法上的区别。
这类动词主要体现在过去时和完成时态中。
一、在现在完成时中延续性动词可与表示一段时间的介词短语for或since连用,而终止性动词的现在完成时则不能与一段时间连用。如:
I have bought this dictionary for three years.
这本字典我已买三年了。(误)
上句中的bought(buy的过去分词)是终止性动词,它不能与表示时间段
的短语连用,若要连用,就必须改变结构,可变为:I have had this
dictionary for three years.因此在学习中要注意归纳终止性动词变为
延续性动词。常见的终止性动词与延续性动词的转换有come→be here,
begin/start→be on,borrow→keep, buy→have,die→be dead,
end/finish→be over,get up→be up,go(get)out→be out, fall
asleep→be asleep, leave→be away from, join→be in/be a
member of,put on→wear,catch a cold→have a cold等。
3.掌?罩��蔰o,will,shall,have,be在句中的作用。归纳时态,记住其结构。
4.掌握行为动词speak, write, read…在句子中时态变化的形式。
《大纲》中要求掌握的五个基本时态。理解各种时态的概念,掌握在句中的
结构和提示时态的时间状语。同时还要理解其他的三种时态“过去进行时、过去
将来时、过去完成时”。
下面将五个基本时态列表如下:
时态
时间
结构
一般
现在时
often, usually, always, sometimes, every day (week…),
on Sunday
He/She/It+动词s
I/We/You/They+动词原形
一般
过去时
yesterday, … ago, last week,
in 2001
主语+动词的过去式
现在
进行时
now
主语+be+ 现在分词
现在
将来时
tomorrow, next week
主语+will/be going to+动词原形
现在
完成时
already, yet, ever, never, for+一段时间, since+时间起点
He/She/It has+过去分词
I/We/ You/They have +过去分词
动词在语言交流中是十分重要的,语法只是学好英语的工具,利用这个工具可以提高自己的自学能力。在理解时态的过程中要注意上下句或前后语境的提示。要注意动词的基本变化。
①例1:(2003 北京市)
②---What are Mr and Mrs Black doing?
③---They _______ tea in the garden.
④A. are drinking B. drank C. have drunk D. drink
⑤【解析】
⑥此题考查现在进行时。
⑦从上句语境分析得知动作就发生在此时此刻,找准动词部分的结构,排
除干扰,得出正确答案。该句的问句在问“布莱克夫妇正在干什
么?”,回答应是“现在正在……”,现在进行时的结构是“be(am,is,
are)+现在分词”。
⑧例2(2003 重庆市)
⑨---I don’t know if his uncle___________.
⑩---I think he _________if it doesn’t rain.
A.comes;comes B.will come;will come
C.comes; comes D.comes; will come
【解析】
本题考查了两种时态在语境中的应用。先分清if引导的是个什么从
句,再根据语境确定各自的时态。第1空if在及物动词之后引导宾语从
句,意思是“是否”,该句的主句是一般现在时,宾语从句的动作还没有
发生,用将来时;第二个空if引导是条件状语从句,条件从句用一般现在
时,主句的谓语动词用将来时。
三、交际
《大纲》指出“使学生掌握一定的语言基本知识和基本
技能,建立初步的语感,获得初步运用英语的能力,为真实交际
打下基础”。学习语言的关键在于运用。同学们是否注重自己英
语,口语的练习呢?我们没有说外语的环境,但要尽量创造。每天
早上起床后,应该是先读上至少5分钟英语。大声朗读不仅可以练
习发音,形成良好的语感,而且对听力的提高也有着不可低估的
作用。另外,我们还要利用一切可能的机会用英语和同学、老师
或者其它懂英语的人打招呼或谈论事情。碰到生词,就汉英夹杂
着说。一开始,可能不太习惯,但没有关系,只要坚持就会有结
果。前苏联语言学家巴乌利•阿里斯德教授能流利地讲十五种外
语。他说:“我只要学会了100个单词,就立即用这种语言讲话。
一个怕出错的人永远也讲不了地道的外语。”看来,要想练好口
语,真要有“厚着脸皮,磨破嘴皮”的精神才行。
四、阅读
1.你是如何培养阅读能力的呢?
阅读理解难度较高,必须在有了充足的词汇的基础上才能进行阅读训练。它
是检查你英语学习水平的高低的重要标志。你是否在阅读上花了不少的力气呢?
要想提高阅读水平,除了学习课本外,必须在课外有意识地扩大阅读量,提高阅
读速度,掌握阅读技巧。养成课余阅读英文读物的习惯。刚开始时,由于词汇量
的限制,你可以阅读一些较浅显的文章,尽量读那些没有生词的简易读物。随着
词汇量的扩大,你的胃口也会越来越大。要多读原汁原味的文章,这样不仅开阔
了眼界,还学到了不少知识。一段时间下来,你的词汇量会丰富不少,理解能力
也有长足的进步。开始要有意地读一些诸如科普、历史、地理、环保、医学保健
方面的小品文。
有的同学还会经常碰到这样的问题:是文章本身对我来讲没有生词,但做阅
读理解题时经常会出现偏差。当然这种情况更多地是设计到阅读理解的考试。说
明你在阅读过程中遇到了理解上的障碍,因此在阅读理解中掌握一些答题技巧也
是十分重要的。
例如:
阅读理解(一)
about the weather, but nobody does anything about it."
people begin their talks by saying, "Isn't it a nice day?
""Do you think it will rain?" "I think it's going to
snow."
Many people think they can tell what the weather is
going to be like. But sometimes they don' t agree with
each other. One man may say, "Do you see how cloudy it is
in the east? It' s going to rain tomorrow. "Another man
will say, "Yes, it' s going to be fine tomorrow."
People often look for the weather they want. When a
farmer needs water,he looks for something to tell him it' s going to rain, and he doesn' t look for anything else. When
friends have a picnic, they hope the weather is going to
be fine and they can sit eating their lunch under the blue
sky.
Almost everyone listens to what the weatherman says. But
he doesn ' t always tell us what we want, and sometimes he
makes a mistake. Still, he is right most of the time.
1.What's the best title for the passage?
A. How to Begin a Talk . B. Story about a Weatherman
C. Weather Report D. About Weather
1.通读全文,了解短文整体框架、大意及作者意向,并抓住主要信息及各段的中
心内容. (如各段有无共同的谈论对象或各段是否有共同的作用等.)认真体会
作者围绕着什么中心写.
2.忠实于原文, 切忌从主观出发,漫无边际地联想.
3.整体把握全文,切忌只凭文中的只言片语断章取义.
4.忌草率行事.选项中常有一个似是而非的答案。这样答案干扰性特别强,容易
迷惑考生。如果在发现一个看似正确答案时就草率定案,往往会掉进设计者设
置的?跋葳濉崩铩?
阅读理解(二)
Computers are very important to modern life. Many people
think that in the future computers will be used in lots of
everyday life. It is thought that we won' t have to go
shopping because we will be able to get most things which
are sold in shops on the Internet. There will be no more
books because we will be able to get all texts(内容) from
computers. The Internet will be used to play games, see
films and buy food. Most telephone calls will be made by
computers,too. Some people are glad about these new ways of
shopping and communicating(交际). Others do not think that
computers will replace(代替) our old ways of life.
Let's look at books, for example. Some people think
that one day we will not read books made of paper. Instead,
we will buy and read books using computers. We will read
texts on small pocket computers. The computers will keep
many different books in them at the same time. We won't
need to turn lots of pages and paper will be saved.
Computerized books will be used more and more.
Is the Internet shopping such a pleasure as going to the
shop? Many people say it is not. It is a pleasure to go
Into shops and look at things you want to buy. It is also
unlikely (不大可能) that many people will want to read large
texts on our computers. Because paper books will perhaps be
more friendly. Maybe computers won't change these two
habits.
1 .The title for this passage is"______".
A. Computers will Replace Shops and Books
B. Computers are the Future
C. Computers will Do Everything for Man
D. How Computers Change Our Habits
A. 与原文意思不符,见第一段最后一行.
B. 全文都谈了人们的猜测:未来,电脑将被应用在日常生活的很多领域中, 有人
认为它能改变人们旧有的生活习惯而有人却认为不能.
C.过于绝对,文中没有可靠证据支持.
D.“电脑怎样改变我们的习惯”.
1.“how” 意为“怎样,用何方法”文中并未提到电脑怎样改变我们的习惯.第
1,2段提到的未来用电脑阅读,打电话或购物等只是它在未来将被应用的领域
而不是方法.
2.文中提出有些习惯未必会被改变,见第一段最后一句“Others do not think
that computers will replace our old ways of life.”和第三段最后一
句“Maybe computers won’t change these two habits”.
阅读理解(三)
阅读理解既理解文章的字面意思,也要理解文章的深层含义,包括作者的态
度、意图等。做阅读理解题时,对不同的题型通常需用不同的方法。解答推理题
时需要注意这样两点:
第一:要依据事物的本质,而不是现象进行推断。
第二:要依据作者的思路和文章本身提供的事实,而不是读者自身经验和见解进
行推断。
Every day we see pictures like this on our televisions. We see
Iraqi(伊拉克) children begging for food and water from American
and British soldiers as they move through towns and cities to the
树和哈夫曼树实验报告
一.实验目的
练习树和哈夫曼树的有关操作,和各个算法程序,理解哈夫曼树的编码和译码
二.实验环境
Microsoft visual c++
三.实验问题描述
1. 问题描述:建立一棵用二叉链表方式存储的二叉树,并对其进行遍历(先序、中序和后序),打印输出遍历结果。
基本要求:从键盘接受输入先序序列,以二叉链表作为存储结构,建立二叉树(以先序来建立),并将此二叉树按照“树状形式”打印输出,然后对其进行遍历(先序、中序和后序),最后将遍历结果打印输出。在遍历算法中要求至少有一种遍历采用非递归方法。
测试数据:
ABCØØDEØGØØFØØØ(其中Ø表示空格字符)
输出结果为:
先序:ABCDEGF
先序:CBEGDFA
先序:CGEFDBA
2. 问题描述:利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接受端将传来的数据进行译码(复原)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站写一个哈夫曼码的编/译码系统。
基本要求:(至少完成功能1-2)
一个完整的系统应具有以下功能:
I:初始化(Initialization)。从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存于文件hfmTree中。
基本要求:
E:编码(Encoding)。利用已建好的哈夫曼树(如不在内存,则从文件hfmTree中读入),对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile中。
D:译码(Decoding )。利用已建好的哈夫曼树将文件CodeFile中的代码进行译码,结果存入文件TextFile中。
P:印代码文件(Print)。将文件CodeFile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码文件写入文件CodePrint中。
T:印哈夫曼树(TreePrinting)。将已在内存中的哈夫曼树以直观的方式(树或凹入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件TreePrint中。
测试数据:
设权值w=(5,29,7,8,14,23,3,11),n=8。
按照字符‘0’或‘1’确定找左孩子或右孩子,则权值对应的编码为:
5:0001,29:11,7:1110,8:1111
14:110,23:01,3:0000,11:001
用下表给出的字符集和频度的实际统计数据建立哈夫曼树,并实现以下报文的编码和译码:“THIS PROGRAM IS MY FAVORITE”。
四.实验主要程序流
实验题目一主要程序:
1.
void CreatBiTree(BitTree *bt)//用扩展先序遍历序列创建二叉树,如果是#当前树根置为空,否则申请一个新节点//
{
char ch;
ch=getchar();
if(ch=='.')*bt=NULL;
else
{
*bt=(BitTree)malloc(sizeof(BitNode));
(*bt)-data=ch;
CreatBiTree(((*bt)-LChild));
CreatBiTree(((*bt)-RChild));
}
}
2.void Visit(char ch)//访问根节点
{
printf("%c ",ch);
}
3.
void PreOrder(BitTree root)
{
if (root!=NULL)
{
Visit(root -data);
PreOrder(root -LChild);
PreOrder(root -RChild);
}
}
4. void InOrder(BitTree root)
{
if (root!=NULL)
{
InOrder(root -LChild);
Visit(root -data);
InOrder(root -RChild);
}
}
5.int PostTreeDepth(BitTree bt) //后序遍历求二叉树的高度递归算法//
{
int hl,hr,max;
if(bt!=NULL)
{
hl=PostTreeDepth(bt-LChild); //求左子树的深度
hr=PostTreeDepth(bt-RChild); //求右子树的深度
max=hlhr?hl:hr; //得到左、右子树深度较大者
return(max+1); //返回树的深度
}
else return(0); //如果是空树,则返回0
}
6.void PrintTree(BitTree Boot,int nLayer) //按竖向树状打印的二叉树 //
{
int i;
if(Boot==NULL) return;
PrintTree(Boot-RChild,nLayer+1);
for(i=0;inLayer;i++)
printf(" ");
printf("%c\n",Boot-data);
PrintTree(Boot-LChild,nLayer+1);
}
7.void main()
{
BitTree T;
int h;
int layer;
int treeleaf;
layer=0;
printf("请输入二叉树中的元素(以扩展先序遍历序列输入,其中.代表空子树):\n");
CreatBiTree(T);
printf("先序遍历序列为:");
PreOrder(T);
printf("\n中序遍历序列为:");
InOrder(T);
printf("\n后序遍历序列为:");
PostOrder(T);
h=PostTreeDepth(T);
printf("\此二叉树的深度为:%d\n",h);
printf("此二叉树的横向显示为:\n");
PrintTree(T,layer);
}
实验二主要程序流:
1.int main(){
HuffmanTree huftree;
char Choose;
while(1){
cout"\n**********************欢迎使用哈夫曼编码/译码系统**********************\n";
cout"*您可以进行以下操作: *\n";
cout"*1.建立哈夫曼树 *\n";
cout"*2.编码(源文已在文件ToBeTra中,或键盘输入) *\n";
cout"* 3.译码(码文已在文件CodeFile中) *\n";
cout"* 4.显示码文 *\n";
cout"* 5.显示哈夫曼树 *\n";
cout"* 6.退出 *\n"; cout"***********************************************************************\n";
cout"请选择一个操作:";
cinChoose;
switch(Choose)
{
case '1':
huftree.CreateHuffmanTree();
break;
case '2':
huftree.Encoder();
break;
case '3':
huftree.Decoder();
break;
case '4':
huftree.PrintCodeFile();
break;
case '5':
huftree.PrintHuffmanTree();
break;
case '6':
cout"\n**********************感谢使用本系统!*******************\n\n";
system("pause");
return 0;
}//switch
}//while
}//main
2.// 建立哈夫曼树函数
// 函数功能:建立哈夫曼树(调用键盘建立哈夫曼树或调用从文件建立哈夫曼树的函数)
void HuffmanTree::CreateHuffmanTree()
{char Choose;
cout"你要从文件中读入哈夫曼树(按1),还是从键盘输入哈夫曼树(按2)?";
cinChoose;
if(Choose=='2') { //键盘输入建立哈夫曼树 CreateHuffmanTreeFromKeyboard();
}//choose=='2'
else { //从哈夫曼树文件hfmTree.dat中读入信息并建立哈夫曼树
CreateHuffmanTreeFromFile();
}
}
3. // 从键盘建立哈夫曼树函数
// 函数功能:从键盘建立哈夫曼树
//函数参数:无
//参数返回值:无
void HuffmanTree::CreateHuffmanTreeFromKeyboard(){
int Num;
cout"\n请输入源码字符集个数:";
cinNum;
if (Num=1) {
cout"无法建立少于2个叶子结点的哈夫曼树。\n\n";
return;
}
LeafNum=Num;
Node=new HuffmanNode[2*Num-1];
for(int i=0;iNum;i++) {//读入哈夫曼树的叶子结点信息
cout"请输入第"i+1"个字符值";
getchar();
Node[i].sourcecode=getchar(); //源文的字符存入字符数组Info[]
getchar();
cout"请输入该字符的权值或频度";
cinNode[i].weight; //源文的字符权重存入Node[].weight
Node[i].parent=-1;
Node[i].lchild=-1;
Node[i].rchild=-1;
Node[i].code="\0";
}
for(int j=Num;j2*Num-1;j++) {//循环建立哈夫曼树内部结点
int pos1,pos2;
int max1,max2;
pos2=pos1=j;
max2=max1=numeric_limitsint::max( );
//在所有子树的根结点中,选权重最小的两个根结点,pos1最后应指向权重最小的根结点的下标
//pos2最后应指向权重第二小的根结点的下标
//max1存放当前找到的权重最小的根结点的权重
//max2存放当前找到的权重第二小的根结点的权重
for(int k=j-1;k=0;k--) {
if (Node[k].parent==-1){//如果是某棵子树的根结点
if (Node[k].weightmax1){ //发现比当前最大值还大的权重
max2=max1;
max1=Node[k].weight;
pos2=pos1;
pos1=k;
}
else
if(Node[k].weightmax2){ //发现比当前次大值还大的次大权重
max2=Node[k].weight;
pos2=k;
}
}//if (Node[j].parent==-1)
} //for
//在下标i处新构造一个哈夫曼树的内部结点,其左、右孩子就是以上pos1、pos2所指向的结点
Node[pos1].parent=j;
Node[pos2].parent=j;
Node[j].lchild=pos1;
Node[j].rchild=pos2;
Node[j].parent=-1;
Node[j].weight=Node[pos1].weight+Node[pos2].weight;
} //for
//产生所有叶子结点中字符的编码
for (int m=0;mNum;m++) {
//产生Node[i].sourcecode的编码,存入Node[i].code中
int j=m;
int j1;
while(Node[j].parent!=-1) { //从叶结点开始往根结点走,每往上走一层,就产生一位编码存入code[]
j1=Node[j].parent;
if(Node[j1].lchild==j)
Node[m].code.insert(0,"0");
else
Node[m].code.insert(0,"1");
j=j1; }}
cout"哈夫曼树已成功构造完成。\n";
//把建立好的哈夫曼树写入文件hfmTree.dat
char ch;
cout"是否要替换原来的哈夫曼树文件(Y/N):";
cinch;
if (ch!='y'ch!='Y') return;
ofstream fop;
fop.open("hfmTree.dat",ios::out|ios::binary|ios::trunc); //打开文件
if(fop.fail()) {
cout"\n哈夫曼树文件打开失败,无法将哈夫曼树写入hfmTree.dat文件。\n";
return;
}
fop.write((char*)Num,sizeof(Num)); //先写入哈夫曼树的叶子结点个数
for(int n=0;n2*Num-1;n++) { //最后写入哈夫曼树的各个结点(存储在Node[]中)
fop.write((char*)Node[n],sizeof(Node[n]));
flush(cout); }
fop.close(); //关闭文件
cout"\n哈夫曼树已成功写入hfmTree.dat文件。\n";}
4. // 从文件建立哈夫曼树函数
// 函数功能:从文件建立哈夫曼树
//函数参数:无
//参数返回值:无
void HuffmanTree::CreateHuffmanTreeFromFile(){
ifstream fip;
fip.open("hfmTree.dat",ios::binary|ios::in);
if(fip.fail()) {
cout"哈夫曼树文件hfmTree.dat打开失败,无法建立哈夫曼树。\n";
return;
}
fip.read((char*)LeafNum,sizeof(LeafNum));
if (LeafNum=1) {
cout"哈夫曼树文件中的数据有误,叶子结点个数少于2个,无法建立哈夫曼树。\n";
fip.close();
return;
}
Node=new HuffmanNode[2*LeafNum-1];
for(int i=0;i2*LeafNum-1;i++)
fip.read((char*)Node[i],sizeof(Node[i]));
fip.close();
cout"哈夫曼树已从文件成功构造完成。\n";
}
5. // 编码函数
// 函数功能:为哈夫曼树编码
//函数参数:无
//参数返回值:无
void HuffmanTree::Encoder()
{
if(Node==NULL) { //内存没有哈夫曼树,则从哈夫曼树文件hfmTree.dat中读入信息并建立哈夫曼树
CreateHuffmanTreeFromFile();
if (LeafNum=1) {
cout"内存无哈夫曼树。操作撤销。\n\n";
return;
}
}//if
char *SourceText; //字符串数组,用于存放源文
//让用户选择源文是从键盘输入,还是从源文文件ToBeTran.txt中读入
char Choose;
cout"你要从文件中读入源文(按1),还是从键盘输入源文(按2)?";
cinChoose;
if(Choose=='1') {
ifstream fip1("ToBeTran.txt");
if(fip1.fail()) {
cout"源文文件打开失败!无法继续执行。\n";
return;
}
char ch;
int k=0;
while(fip1.get(ch)) k++; //第一次读文件只统计文件中有多少个字符,将字符数存入k
fip1.close();
SourceText=new char[k+1]; //申请存放源文的字符数组空间
ifstream fip2("ToBeTran.txt"); //第二次读源文文件,把内容写入SourceText[]
k=0;
while(fip2.get(ch)) SourceText[k++]=ch;
fip2.close();
SourceText[k]='\0';
}
else { //从键盘输入源文
string SourceBuff;
cin.ignore();
cout"请输入需要编码的源文(可输入任意长,按回车键结束):\n";
getline(cin,SourceBuff,'\n');
int k=0;
while(SourceBuff[k]!='\0')
k++;
SourceText=new char[k+1];
k=0;
while(SourceBuff[k]!='\0') {
SourceText[k]=SourceBuff[k];
k++;
}
SourceText[k]='\0';
}
cout"需编码的源文为:";
coutSourceTextendl;
//开始译码
ofstream fop("CodeFile.dat",ios::trunc); //打开码文存放文件
int k=0;
while(SourceText[k]!='\0') //源文串中从第一个字符开始逐个编码
{
int i;
for(i=0;iLeafNum;i++){ //找到当前要编码的源文的字符在哈夫曼树Node[]中的下标
if(Node[i].sourcecode==SourceText[k]) { //将对应编码写入码文文件
fopNode[i].code;
break;
};
}
if (i=LeafNum) {
cout"源文中存在不可编码的字符。无法继续执行。\n"endl;
fop.close();
return;
}
k++; //源文串中的字符后移一个
}
fop.close();
cout"已完成编码,码文已写入文件CodeFile.dat中。\n\n";
}
6. // 译码函数
// 函数功能:对哈夫曼树进行译码
//函数参数:无
//参数返回值:无
void HuffmanTree::Decoder()
{//如果内存没有哈夫曼树,则从哈夫曼树文件hfmTree.dat中读入信息并建立哈夫曼树
if(Node==NULL)
{
CreateHuffmanTreeFromFile();
if (LeafNum=1) {
cout"内存无哈夫曼树。操作撤销。\n\n";
return;
}
}
//将码文从文件CodeFile.dat中读入 CodeStr[]
ifstream fip1("CodeFile.dat");
if(fip1.fail()) {
cout"没有码文,无法译码。\n";
return;
}
char* CodeStr;
int k=0;
char ch;
while(fip1.get(ch)){
k++;
}
fip1.close();
CodeStr=new char[k+1];
ifstream fip2("CodeFile.dat");
k=0;
while(fip2.get(ch))
CodeStr[k++]=ch;
fip2.close();
CodeStr[k]='\0';
cout"经译码得到的源文为:";
ofstream fop("TextFile.dat");
int j=LeafNum*2-1-1; //j指向哈夫曼树的根
int i=0; //码文从第一个符号开始,顺着哈夫曼树由根下行,按码文的当前符号决定下行到左孩子还是右孩子
while(CodeStr[i]!='\0') { //下行到哈夫曼树的叶子结点处,则译出叶子结点对应的源文字符
if(CodeStr[i]=='0')
j=Node[j].lchild;
else
j=Node[j].rchild;
if(Node[j].rchild==-1) { //因为哈夫曼树没有度为1的结点,所以此条件等同于Node[j]为叶结点
coutNode[j].sourcecode; //屏幕输出译出的一个源文字符
fopNode[j].sourcecode;
j=LeafNum*2-1-1; //j再指向哈夫曼树的根
}
i++;
}
fop.close();
cout"\n译码成功且已存到文件TextFile.dat中。\n\n";
}
7. // 输出码文函数
// 函数功能:从文件中输出哈夫曼树的码文
//函数参数:无
//参数返回值:无
void HuffmanTree::PrintCodeFile()
{
char ch;
int i=1;
ifstream fip("CodeFile.dat");
ofstream fop("CodePrin.dat");
if(fip.fail())
{
cout"没有码文文件,无法显示码文文件内容。\n";
return;
}
while(fip.get(ch))
{coutch;
fopch;
if(i==50)
{
coutendl;
fopendl;
i=0;
}
i++;
}
coutendl;
fopendl;
fip.close();
fop.close();
}
8. // 输出函数
// 函数功能:从内存或文件中直接输出哈夫曼树
//函数参数:无
//参数返回值:无
void HuffmanTree::PrintHuffmanTree()
{
//如果内存没有哈夫曼树,则从哈夫曼树文件hfmTree.dat中读入信息并建立哈夫曼树
if(Node==NULL)
{
CreateHuffmanTreeFromFile();
if (LeafNum=1) {
cout"内存无哈夫曼树。操作撤销。\n\n";
return; }}
ofstream fop("TreePrint.dat",ios_base::trunc);
fop.close();
PrintHuffmanTree_aoru(2*LeafNum-1-1);
return;
}
Golang 的创建是为了实现最大的用户效率和编码效率。已经熟悉 Java 或 PHP 的程序员可以在几周内接受 Go 的培训(许多人最终会更喜欢它)。在本文中,Dewet Diener 探讨了 Golang 的优缺点,以及它的测试驱动开发 (TDD) 如何完美契合。
Golang 由 Google 开发和设计,于 2009 年作为一种综合性编程语言首次出现,旨在最大限度地提高编码效率。创建该语言的目的是修正其他已建立语言的缺陷。尽管 Golang(或简称为“Go”)是一门年轻的语言,但已经积累了大量的开发人员,因此我们想分享为什么在 Curve 我们喜欢 Golang,以及我们如何采用它来实现我们移动银行业务的目标到云端。
Go 是一种精致的编程语言:它支持“所见即所得”的原则,这意味着清晰易读的代码和更少的复杂抽象。该语言本身易于使用且易于训练。尽管如此,作为一个相对较新的生态系统,要找到对 Go 具有广泛预先知识的工程师可能会很棘手。
然而,与其他编程语言不同,Go 的创建是为了最大限度地提高用户效率。因此,具有 Java 或 PHP 背景的开发人员和工程师可以在几周内获得使用 Go 的技能和培训——根据我们的经验,他们中的许多人最终更喜欢它。
在 Curve,我们大力提倡测试驱动开发 (TDD),Go 的框架与这种方法保持一致。通过简单地命名一个文件 foo_test.go 并在该文件中添加结构化测试函数,Go 将快速有效地运行您的单元测试。这一创新功能提高了生产力,因为它可以更加专注于测试驱动的开发和改进的同行评审机会。
Golang 具有出色的生产优化品质,例如内存占用小,这支持其在大型项目中作为构建块的能力,以及开箱即用的与其他架构的轻松交叉编译。由于 Go 代码被编译为单个静态二进制文件,因此它可以轻松进行容器化,并且通过扩展,将 Go 部署到任何高可用性环境(例如 Kubernetes)中几乎是微不足道的。
它提供了一种机制来保护工作负载,通过拥有非常纤薄的生产容器而没有任何无关的依赖项。这使得构建、部署和维护基于 Go 的资产更加直接和安全,并为希望建立或发展其微服务战略的公司提供了可靠的选择。
Go 是专门为满足我们快速发展的技术生态系统的需求而创建的。例如,Go 可以满足您构建 API 所需的一切,并将其作为其标准库的一部分。它使用简单,高性能的 http 服务器消除了团队设计新项目时经常发生的一些常见的 探索 和设计瘫痪问题——这对于一些其他流行语言(如 Java 和 Node.js)来说太常见了。
Golang 还通过其内置于语言本身的自动格式化程序巧妙地解决了代码格式化分歧。这完全消除了格式争议,进而提高了团队的生产力和注意力。
尽管我是 Go 的拥护者,但它显然也不是没有缺陷。一个争论不休的特性是 Go 没有显式接口,这是许多开发人员习惯的概念。虽然不是有害的,但它可以使选择最适合您的结构的接口成为一项任务。这是因为您不会像在其他流行的编程语言中那样编写 X 实现 Y,但您很快就会接受。
依赖管理也是另一个不属于 Google Golang 开发团队原始设计的功能。开源社区介入并创建了 Glide 和 Dep,最初的努力并没有完全解决问题。从 Go 1.11 开始,添加了对模块的支持,这似乎已成为官方的依赖管理工具。这些挑战并没有削弱 Go 作为一种高效编程语言的独创性,并且它继续为我们提供优于其他编程语言的显着优势。
Golang 吸引了全球敏锐的开发人员的注意,并且围绕它的兴奋继续增长。开源社区因有趣的项目而蓬勃发展;最著名的是 Docker 和 Kubernetes。
正是这种新鲜、有创意但又简单的包装吸引了我们去Go:它是一种令人兴奋的编码语言,可以帮助我们在 Curve 中快速开发以构建更好的产品。
1
select
*
from
教师表
where
系别
='cs';
2
select
姓名,2011-年龄
as
出生日期
from
学生表
3
select
*
from
学生表
where
年龄=20
and
系别='cs';
4
select
*
from
学生表
where
年龄
not
between
18
and
20;
5
select
姓名,年龄
from
教师表
where
系别
in('cs','is');
6
select
*
from
教师表
where
姓名
like
'%敏';
7
select
*
from
选课表
where
先修课
is
null;
8
select
count(*)
from
教师表
9
select
avg(成绩),max(成绩),min(成绩)
from
选课表
where
课程号=5;
10
select
count(*)
from
选课表
group
by
课程号