首页 > > > C程序设计语言(第2版·新版)习题解答.pdf

C程序设计语言(第2版·新版)习题解答.pdf

C程序设计语言(第2版·新版)习题解答.pdf

上传者: guozi 2012-04-12 评分1 评论0 下载638 收藏10 阅读量1551 暂无简介 简介 举报

简介:本文档为《C程序设计语言(第2版·新版)习题解答pdf》,可适用于IT书籍领域,主题内容包含㒗дljCᑣ䆒䅵䇁㿔gᮄNJᬭᴤ义在你自己的系统中运行“hello,world”程序。再有意去掉程序中的部分内容看看会得到什么出错信息。Ϟ䴶䖭Ͼᄤⳕњ㸠符等。

㒗д1-1 ljCᑣ䆒䅵䇁㿔2gᮄ NJᬭᴤ3义 在你自己的系统中运行“hello, world”程序。再有意去掉程序中的部分内容,看看 会得到什么出错信息。 Ϟ䴶䖭Ͼᄤⳕњ㸠ヺ \nˈ 䖭ᇚՓܝذ䕧ߎᙃⱘሒDŽ ѠϾᄤⳕњ p r i n t f ( )䴶ⱘߚDŽCᑣⱘ䇁হᖙ乏ҹߚ㒧ሒখ㾕ᬭᴤ 5 义 DŽℸˈᇍѢᴀˈ㓪䆥ᇚ䆚ߎᇥњϔϾߚᑊ㒭ߎⳌᑨⱘߎ䫭ᙃDŽ ϝϾᄤ䞠ˈ\ n䴶ⱘঠᓩ"㹿䫭ݭЎऩᓩ'DŽѢᰃˈ䖭Ͼऩᓩঞ䴶ⱘ ᣀߚᇚ㹿ⳟخᰃᭈϾ䕧ߎᄫヺІⱘϔ䚼ߚDŽ㓪䆥ᇚᡞ䖭ᚙމ㾚ЎϔϾ䫭䇃ˈӮ ਞ䇈㔎њϔϾঠᓩ㢅ᣀ㔎њϔϾᣀᄫヺІ䖛䭓ᄫヺІЁ 㸠ヺDŽ 㒗д1-2 ᬭᴤ3义 做个实验,当p r i n t f函数的参数字符串中包含\ c(其中c是上面的转义字符序列中未曾 列出的某一个字符)时,观察一下会出现什么情况 C1ゴ ᇐ 㿔 খ㗗ݠখ㾕ᬭᴤ 1 6 9义Ёᦤࠄ Āབᵰ\䴶䎳ⱘᄫヺϡҹϞᣛᅮⱘᄫヺЁˈ 㸠ЎᰃᅮНⱘDŽā Ϟ䴶䖭ҷⷕⱘᠻ㸠㒧ᵰϢԧⱘ㓪䆥ⳌDŽϔ㛑ߎⱘ㒧ᵰᰃ Ёˈ< B E L L >ᰃA S C I IㄝѢ7ⱘᄫヺ᠔ѻⱘϔໄⷁ㳖号DŽ \ⱘ䴶ˈҹ 3Ͼ 䖯ࠊᄫখ㾕ᬭᴤ 2 9义ᴹҷ㸼ϔϾᄫヺˈ㗠 \ 7A S C I Iᄫヺ䲚Ёҷ㸼ⱘᰃϔໄⷁ㳖 号DŽ 㒗д1-3 ᬭᴤ8义 请修改温度转换程序,使之能在转换表的顶部打印一个标题。 ᕾ䇁হПⱘprintf("FahrCelsius\n");䇁হᇚᑺ䕀㸼ⱘ乊䚼ѻ ϔϾ㸼DŽЎњ䅽䕧ߎݙᆍϢ䖭Ͼ㸼ᇍ唤ˈ៥Ӏ䖬 % 3 . 0 f% 6 . 1 fП䯈њϸϾぎ ḐDŽϞ䴶䖭ϾᑣЁⱘ䇁হϢᬭᴤ 6义Ё㒭ߎⱘҷⷕᅠϔ㟈DŽ 㒗д1-4 ᬭᴤ8义 编写一个程序打印摄氏温度转换为相应华氏温度的转换表。 2部分 第 1章分 ᴀᑣᇚ䕧ߎϔϾᑺ 03 0 0ࠄढᑺⱘ䕀㸼DŽढᑺᰃҹϟ䇁হ䅵 ㅫᕫࠄⱘ ᴀ乬ⱘ㾷乬ᗱ䏃Ϣᠧढᑺࠄᑺⱘᇍ㸼ᑣ㾕ᬭᴤ 6义ᰃⳌৠⱘDŽᭈ ব䞣l o w e rǃu p p e rǃs t e pߚᇍᑨѢব䞣 c e l s i u sⱘϟ䰤ǃϞ䰤ǃℹ䭓DŽᑣܜᡞব 䞣c e l s i u sЎᅗⱘϟ䰤ˈݡ w h i l eᕾЁᡞᇍᑨⱘढᑺ䅵ㅫߎᴹDŽˈᑣ ᠧߎ䖭㒘ᑺढᑺⱘˈᑊᣝℹ䭓䗦ব䞣 c e l s i u sⱘDŽw h i l eᕾᇚϔⳈ ᠻ㸠Ⳉࠄব䞣c e l s i u s䍙ߎϞ䰤ЎℶDŽ 㒗д1-5 ᬭᴤ9义 修改温度转换程序,要求以逆序(即按照从 3 0 0度递减到0度的顺序)打印温度转换表DŽ ᚳϔⱘᬍП໘ᰃ 䖭ᴵf o r䇁হⱘϔ䚼ߚ 䋳䋷ᡞढᑺব䞣 f a h rЎᅗⱘϞ䰤 f o r䇁হⱘѠ䚼ߚ f o rᕾⱘࠊ ᴵӊ 分导 言 分分3 䋳䋷Ẕᶹব䞣f a h rᰃѢㄝѢᅗⱘϟ䰤ü㽕䖭ϾẔᶹⱘ㒧ᵰЎˈ f o r䇁হህᇚ㒻 㓁ᕾᠻ㸠f o r䇁হⱘϝ䚼ߚℹ䭓㸼䖒ᓣ 䋳䋷ᇍব䞣f a h rᣝℹ䭓䖯㸠䗦ޣDŽ 㒗д1-6 ᬭᴤ11义 验证布尔表达式getchar()!= EOF的取值是0还是1DŽ ḍᬭᴤ11义ⱘ䆎䗄ˈ㸼䖒ᓣ ⳌᔧѢ ᴀᑣҢ㒳ⱘޚ䕧䇏পᄫヺᑊՓњϞ䴶ⱘ㸼䖒ᓣDŽᔧᄫヺ䇏ᯊˈ g e t c h a r ( )ϡ Ӯ䖨ಲӊ㒧ᴳヺE O Fˈ ᠔ҹ ⱘপЎˈব䞣cᇚ㹿䌟Ў1DŽᔧᑣ䘛ࠄӊ㒧ᴳヺᯊˈ㸼䖒ᓣপЎˈℸᯊˈব䞣 c ᇚ㹿䌟Ў0ˈᑣᇚ㒧ᴳ䖤㸠DŽ 㒗д1-7 ᬭᴤ11义 请编写一个打印E O F值的程序DŽ ヺᐌ䞣E O Fᰃӊ< s t d i o . h >ЁᅮНⱘDŽϞ䴶䖭ϾᑣЁˈ p r i n t f ( )䇁হЁ ঠᓩⱘE O Fᇚ㹿Ўӊ< s t d i o . h >Ё䎳 ПⱘᴀDŽ៥Ӏⱘ㒳Ёˈ E O F㹿ᅮНЎˉ1ˈԚҪ㒳Ёˈ E O F㛑㹿ᅮНЎҪ 4部分 第 1章分 ⱘDŽ䖭ℷᰃՓE O Fㄝޚヺᐌ䞣㛑ᑣỡᗻⱘॳ᠔DŽ 㒗д1-8 ᬭᴤ13义 编写一个统计空格、制表符和换行符个数的程序DŽ ᭈব䞣nb ntn lߚᴹ㒳䅵ぎḐǃࠊ㸼ヺ㸠ヺⱘϾDŽ䖭3Ͼব䞣ⱘ䛑ᰃ0DŽ w h i l eᕾⱘᕾԧݙˈߎ䕧ЁⱘϔϾぎḐǃࠊ㸼ヺ㸠ヺ䛑ᇚ㹿䆄ᔩDŽ w h i l eᕾЁⱘ3ᴵi f䇁হᕾЁ䛑ᇚ㹿ᠻ㸠DŽབᵰᑣ䇏ࠄⱘᄫヺϡᰃぎḐǃࠊ㸼 ヺ㸠ヺˈህϡᠻ㸠ӏDŽབᵰᑣ䇏ࠄⱘᄫヺᰃ䖭ϝϾヺПϔˈህᇍⳌᑨⱘ䅵 1DŽᔧw h i l eᕾ㒜ℶg e t c h a r䖨ಲE O FᯊˈᴀᑣᇚᡞぎḐǃࠊ㸼ヺ㸠ヺⱘ 㒳䅵㒧ᵰᠧߎᴹDŽ ᇍi f - e l s e䇁হⱘҟ㒡ߎѢᬭᴤ 1 4义ˈϟ䴶ᰃՓњ䖭ϔ䇁㒧ᵘⱘᅲᮍ 分导 言 分分5 㒗д1-9 ᬭᴤ13义 编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替DŽ ᭈব䞣c䋳䋷䆄ᔩᔧ䕧ᄫヺⱘ A S C I Iˈ㗠ᭈব䞣l a s t c䆄ᔩⴔϔϾ䕧ᄫ ヺⱘA S C I IDŽヺᐌ䞣N O N B L A N K䋳䋷ᡞব䞣l a s t cЎϔϾӏᛣⱘ䴲ぎḐᄫヺDŽ w h i l eᕾԧЁⱘϔᴵi f䇁হ䕧ߎ䴲ぎḐᄫヺѠᴵ i f䇁হ໘ぎḐᄫヺˈ㗠ϝ ᴵi f䇁হѢẔᶹᔧⱘぎḐᄫヺおコᰃϔϾऩϾⱘぎḐヺ䖬ᰃϔІぎḐЁⱘϔϾぎḐDŽ ˈᇍব䞣 l a s t c䖯㸠ࠋᮄDŽҹϞᇚϔⳈ䞡ࠄ w h i l eᕾ㒜ℶ g e t c h a r䖨ಲ E O FЎℶDŽ ᇍi f - e l s e䇁হⱘҟ㒡ߎѢᬭᴤ1 4义ˈϟ䴶ᰃՓњ䖭ϔ䇁㒧ᵘⱘᅲᮍ 6部分 第 1章分 ᇍ䘏䕥O Rヺ| |ⱘҟ㒡гߎѢᬭᴤ 1 4义ˈϟ䴶ᰃՓњ䖭ϔⶹ䆚ⱘᅲ ᮍ 㒗д1-10 ᬭᴤ13义 编写一个将输入复制到输出的程序,并将其中的制表符替换为 \ tˈ把回退符替换为 \bˈ 把反斜杠替换为\ \ˈ这样可以将制表符和回退符以可见的方式显示出来DŽ 䕧ⱘᄫヺҹᰃϔϾࠊ㸼ヺǃϔϾಲ䗔ヺǃϔϾডᴴ㗙ҪӏᄫヺDŽབᵰ䕧 ᰃϔϾࠊ㸼ヺˈ៥ӀህᡞᅗЎ \ tབᵰ䕧ᰃϔϾಲ䗔ヺˈ៥ӀህᡞᅗЎ \ bབᵰ 䕧ᰃϔϾডᴴˈ៥ӀህᡞᅗЎ \ \Ҫᄫヺᣝॳḋ䕧ߎDŽ C䇁㿔Ёˈডᴴᰃ'\ \ 'ᴹ㸼ⱘDŽℸˈབᵰ៥Ӏᛇ䕧ߎϸϾডᴴˈህᖙ乏ᡞᄫ ヺІ" \ \ \ \ "Ӵ䗦㒭p r i n t fߑDŽ 分导 言 分分7 ᇍi f - e l s e䇁হⱘҟ㒡ߎѢᬭᴤ 1 4义ˈϟ䴶ᰃՓњ䖭ϔ䇁㒧ᵘⱘᅲᮍ 㒗д1-11 ᬭᴤ15义 你准备如何测试单词计数程序?如果程序中存在某种错误,那么什么样的输入最可能发 现这类错误呢 ऩ䆡䅵ᑣⱘ䆩Ꮉ佪ܜ㽕Ңӏ䕧ⱘᚙމᓔDŽℸᯊˈ䆹ᑣⱘ䕧ߎ㒧ᵰ ᑨ䆹ᰃĀ0 0 0āˈ 䳊㸠ǃ䳊ऩ䆡ǃ䳊ᄫヺDŽ ϟᴹ䆩䕧ऩᄫヺऩ䆡ⱘᚙމDŽℸᯊˈ䆹ᑣⱘ䕧ߎ㒧ᵰᑨ䆹ᰃĀ 1 1 2āˈ ϔ㸠ǃ ϔϾऩ䆡ǃϸϾᄫヺϔϾᄫϞϔϾ㸠ヺ DŽ ݡ䆩ϔϾϸϾᄫヺ㒘៤ⱘऩ䆡DŽℸᯊˈ䆹ᑣⱘ䕧ߎ㒧ᵰᑨ䆹ᰃĀ 1 1 3āˈ ϔ㸠ǃ ϔϾऩ䆡ǃϝϾᄫヺѠϾᄫϞϔϾ㸠ヺ DŽ ˈݡ䆩ϸϾऩᄫヺऩ䆡ⱘᚙމDŽ佪ܜˈϸϾऩ䆡ߎৠϔ㸠ˈℸᯊⱘ䕧ߎ㒧ᵰ ᑨ䆹ᰃĀ1 2 4āˈϸϾऩ䆡ऴϔ㸠ˈℸᯊⱘ䕧ߎ㒧ᵰᑨ䆹ᰃĀ 2 2 4āDŽ 䙷ѯ䎇䖍ᴵӊⱘ䕧ᚙމѢথऩ䆡䅵ᑣЁⱘ䫭䇃DŽ䖭ѯ䖍ᴵӊᣀ ü䕧 üऩ䆡㸠ヺ üऩ䆡ぎḐǃࠊ㸼ヺ㸠ヺ üϾऩ䆡ऴϔ㸠ⱘᚙމぎḐࠊ㸼ヺ üऩ䆡ߎѢᴀ㸠㸠佪ⱘᚙމ üऩ䆡ߎѢϔІぎḐПⱘᚙމ 㒗д1-12 ᬭᴤ15义 编写一个程序,以每行一个单词的形式打印其输入DŽ 8部分 第 1章分 ᭈব䞣s t a t eᰃϔϾᏗᇨ䞣ˈѢ䆄ᔩᑣⱘ໘䖛ᰃℷ໘ѢᶤϾऩ䆡ⱘݙ䚼DŽ ᑣᓔ䖤㸠ⱘᯊˈব䞣 s t a t eᇚ㹿ЎO U Tˈ㸼ᯢᇮ໘ӏDŽ ϔᴵi f䇁হ ব䞣cᰃᰃϔϾऩ䆡ߚ䱨ヺDŽབᵰᰃˈѠᴵ i f䇁হ ᇚ䖭Ͼऩ䆡ߚ䱨ヺᰃ㸼ᶤϾऩ䆡㒧ᴳDŽབᵰᰃˈህ䕧ߎϔϾ㸠ヺᑊᬍব䞣 s t a t eⱘབᵰϡᰃˈϡ䖯㸠ӏDŽ བᵰcϡᰃϔϾऩ䆡ߚ䱨ヺˈ䙷Мˈᅗᇚ㗙ᰃᶤऩ䆡ⱘϔϾᄫヺǃ㗙ᰃϔϾऩ䆡Ё 䰸ϔϾᄫヺПⱘҪᄫヺDŽᇍѢϔᚙމ cᰃᶤऩ䆡ⱘϔϾᄫヺˈ ᑣᇚᬍব 䞣s t a t eⱘᑊ䕧ߎ䖭ϾᄫヺᇍѢѠᚙމ cᰃᶤϾऩ䆡ЁⱘҪᄫヺˈ ᑣⳈ䕧 ߎ䖭ϾᄫヺDŽ 㒗д1-13 ᬭᴤ17义 编写一个程序,打印输入中单词长度的直方图。水平方向的直方图比较容易绘制,垂直 方向的直方图则要困难些DŽ 分导 言 分分9 ぎḐǃ㸠ヺࠊ㸼ヺᖫⴔऩ䆡ⱘ㒧ᴳDŽབᵰϔϾऩ䆡 n c > 0Ϩᅗⱘ䭓ᑺᇣѢܕ 䆌ⱘऩ䆡䭓ᑺn c < M A X W O R Dˈ 䖭ϾᑣᇚᇍⳌᑨⱘऩ䆡䭓ᑺ䅵 1+ + w l [ n c ] DŽ བᵰऩ䆡ⱘ䭓ᑺ䍙ߎњܕ䆌ⱘऩ䆡䭓ᑺ n c > = M A X W O R Dˈ 䖭Ͼᑣᇚᇍব䞣 o v f l o w 1ҹ䆄ᔩ䭓ᑺѢㄝѢM A X W O R Dⱘऩ䆡ⱘϾDŽ 䇏䚼ऩ䆡Пˈ៥Ӏⱘᑣᇚᡒߎ㒘 w lЁⱘm a x v a l u e DŽ 10部分 第 1章分 ব䞣l e nᰃḍ MAXHIST m a x v a l u eⱘ䅵ㅫᕫߎⱘ w l [ i ]᠔ᇍᑨⱘⳈᮍ䭓ᑺDŽ བᵰw l [ i ]Ѣ䳊ˈህ㟇ᇥ㽕ᠧߎϔϾDŽ 分导 言 分分11 䖭Ͼᅲᮍᇚ䕧ߎϔϾⳈᮍⱘⳈᮍDŽ䖭ϾᑣҢᓔⳈࠄ m a x v a l u eⱘ䖛Ϣ ϔϾᑣᅠⳌৠDŽˈ䖭Ͼᑣ䳔㽕䅵ㅫ㒘 w lЁⱘϔϾܗᑊᰃ䳔㽕 㒘ܗⱘᇍᑨԡ㕂ϞᠧϔϾDŽ䖭ϔ䖛ᖙϡᇥˈЎⳈᮍⳈᮍⱘ᠔Ⳉ ᮍᴵᰃৠℹᠧⱘDŽⱘϸϾ f o rᕾᴹ䕧ߎ㒘w lܗⱘϟপDŽ 㒗д1-14 ᬭᴤ17义 编写一个程序,打印输入中各个字符出现频度的直方图DŽ 12部分 第 1章分 䖭ϾᑣϢ㒗д 1 - 1 3ЁⱘᑇⳈᮍ䕧ߎᑣᕜⳌԐˈԚ៥Ӏ㒳䅵ⱘᰃϾᄫヺⱘ ߎ乥ᑺDŽᑣЁՓњϔϾܗϾㄝѢ M A X C H A Rⱘᄫヺ䅵㒘ˈབᵰ៥ӀՓⱘᄫ ヺ䲚ЁᄬѢㄝѢ M A X C H A Rⱘᄫヺˈ䖭ѯᄫヺᇚ㹿ᗑDŽϔϾऎᰃ៥ӀՓњ ϔϾᅣᴹᶤϾᄫヺᰃᰃϔϾᰒᄫヺDŽѢⱘӊ <c t y p e . h>ⱘ䅼䆎ߎѢ ᬭᴤ3 4义ˈᇍi s p r i n tⱘҟ㒡ߎѢᬭᴤ2 2 7义䰘ᔩB DŽ 㒗д1-15 ᬭᴤ19义 重新编写1 . 2节中的温度转换程序,使用函数实现温度转换计算DŽ ៥Ӏ䞛ϔϾߑᡞढᑺ䕀ЎᑺDŽ䖭ϾߑৡЎ c e l s i u sˈᅗⱘ䕧খ ᰃϔϾˈ䖨ಲгᰃϔϾDŽ䖭Ͼߑᇚ䗮䖛 r e t u r n䇁হ䖨ಲ㸼䖒ᓣⱘDŽᯊˈ 㸼䖒ᓣᰃϔϾㅔऩব䞣ˈབ p o w e rߑখ㾕ᬭᴤ 1 9义Ԛᯊ៥ӀгӮՓϔϾ 䕗ᴖⱘ㸼䖒ᓣˈབ䖭䞠ⱘ c e l s i u sߑˈЎ䖭ḋخҹՓ᠔Ꮉ䛑 r e t u r n䇁হ Ёᅠ៤DŽ Ўߑc e l s i u sⱘ䕧খᰃϔϾˈᅗⱘ䖨ಲгᰃϔϾˈ᠔ҹ៥Ӏᡞ ᅗໄᯢЎབϟⱘᔶᓣ 㒗д1-16 ᬭᴤ22义 修改打印最长文本行的程序的主程序 m a i n,使之可以打印任意长度的输入行的长度,并 分导 言 分分13 尽可能多地打印文本。 14部分 第 1章分 ៥ӀᇍॳᴹⱘЏߑ䖯㸠њϔ໘ᬍˈབϟ᠔ 䖭ᴵ䇁হᇚᡞ䕧㸠ⱘ䭓ᑺ l e nᄬ㒘l i n e䞠ⱘᄫヺሑ㛑ᠧߎᴹDŽ ៥Ӏᇍߑg e t l i n eгخњ໘ᬍDŽ佪ܜˈᕾ䇁হ ϡݡẔᶹᄫヺᰃ䍙ߎ㒘 sⱘ䰤ࠊüЎ䖭ϔ䰤ࠊϡݡᰃ f o rᕾⱘ㒜ℶᴵӊПϔњˈ ⱘg e t l i n e㛑䖨ಲӏᛣ䭓ⱘ䕧㸠ⱘ䭓ᑺᑊ㛑ᄬټሑ㛑ⱘ䕧㸠ݙᆍDŽˈॳᴹ f o rᕾЁѢᄫヺІ㒘ᰃ䖬ぎԡ㕂ⱘ㸼䖒ᓣ 㹿ᬍЎ䇁হ П᠔ҹ㽕䖯㸠䖭ḋⱘᬍˈᰃЎ㒘 sⱘϔϾϟᰃ 㗠䖭জᰃЎ㒘sЁl i mϾܗϨ៥ӀᏆ㒣䇏পњ䕧ᄫヺDŽ᠔ҹ ᇚ㒘s䞠㒭㸠ヺߎϔϾԡ㕂ˈ 䖬㽕㒭ᄫヺІ㒧ᴳヺߎϔϾԡ㕂ˈ ᄫヺІⱘ䭓ᑺᇚ䗮䖛ব䞣i䖨ಲ㗠ব䞣j䆄ᔩⴔ㹿ࠊࠄᄫヺІsЁⱘᄫヺⱘϾDŽ 㒗д1-17 ᬭᴤ22义 编写一个程序,打印长度大于 8 0个字符的所有输入行。 分导 言 分分15 䖭Ͼᑣ䇗ߑg e t l i n eᴹ䇏প䕧㸠DŽߑg e t l i n eᇚ䖨ಲ䕧㸠ⱘ䭓ᑺሑ㛑 ⱘݙᆍDŽབᵰ䕧㸠ⱘ䭓ᑺѢ 8 0ϾᄫヺL O N G L I N Eˈ ៥Ӏⱘᑣህᇚᡞᅗᠧߎᴹ ˈϡ䖯㸠ӏDŽ䖭ϔ䖛ᇚϔⳈᕾࠄߑ g e t l i n e䖨ಲϔϾㄝѢ䳊ⱘ䕧㸠䭓ᑺ ЎℶDŽ ߑg e t l i n eϢ㒗д1 - 1 6ЁⱘৠৡߑⳌৠDŽ 㒗д1-18 ᬭᴤ22义 编写一个程序,删除每个输入行末尾的空格及制表符,并删除完全是空格的行DŽ r e m o v eߑ䋳䋷ߴᥝᄫヺІ l i n eሒⱘぎḐࠊ㸼ヺᑊ䖨ಲᅗⱘᮄ䭓ᑺDŽབᵰ䖭Ͼ䭓 ᑺѢ䳊ˈህ䇈ᯢl i n eЁϡᰃぎḐࠊ㸼ヺⱘҪᄫヺˈᑣህӮᡞ䖭ϔ㸠ᠧߎᴹ ˈህ䇈ᯢl i n eᅠᰃぎḐࠊ㸼ヺᵘ៤ⱘˈᑣህᇚᗑᥝ䖭Ͼ䕧㸠DŽ䖭ህ䆕њᅠ 16部分 第 1章分 ᰃぎḐⱘ㸠ϡӮ㹿ᠧߎᴹDŽ r e m o v eߑ佪ܜᡒࠄ㸠ヺˈצ䗔ϔϾԡ㕂DŽ䱣ˈ䖭ϾߑᇚҢẔᶹぎḐ ࠊ㸼ヺˈⳈࠄᅗᡒࠄϔϾϡᰃぎḐࠊ㸼ヺⱘᄫヺ㗙ᄫヺ䅽ᅗ㒻㓁צ䗔 i< 0 ЎℶDŽབᵰi > = 0ˈ䇈ᯢ㟇ᇥ䖬ϔϾᄫヺDŽℸˈߑ r e m o v eᇚ㸠ヺᄫヺІ㒧ᴳヺ ݭಲ䕧㸠ˈݡ䖨ಲব䞣iDŽ ߑg e t l i n eϢ㒗д1 - 1 6ЁⱘৠৡߑⳌৠDŽ 㒗д1-19 ᬭᴤ22义 编写函数r e v e r s e ( s )将字符串s中的字符顺序颠倒过来。使用该函数编写一个程序,每 次颠倒一个输入行中的字符顺序DŽ r e v e r s eߑܜ㽕ᡒࠄᄫヺІsⱘሒˈҢ' \ 0 'צ䗔ϔϾԡ㕂ˈ䖭ḋҹ䆕乴צ 分导 言 分分17 ᕫࠄⱘᄫヺІⱘϔϾᄫヺϡӮ៤ЎϔϾᄫヺІ㒧ᴳヺDŽབᵰҢ ' \ 0 'צ䗔ϔϾԡ㕂䘛ࠄⱘ ᰃϔϾ㸠ヺ' \ n 'ˈ䙷ህݡצ䗔ϔϾԡ㕂ˈЎ㸠ヺгڣ' \ 0 'ϔḋᖙ乏ߎ㸠ⱘሒDŽ ব䞣jܜ㹿䆒㕂ЎᄫヺІⱘϔϾᄫヺⱘϟˈব䞣 i㹿䆒㕂ЎᄫヺІϔϾᄫヺⱘ ϟDŽѸᄫヺⱘ䖛Ёˈᑣᇚᇍব䞣 j䖯㸠䗦ҢᄫヺІⱘϔϾᄫヺᄫヺІⱘ ሒ䚼ᮍˈ ᇍব䞣i䖯㸠䗦ޣҢᄫヺІⱘϔϾᄫヺᄫヺІⱘ䚼ᮍ DŽ ᭈϾ䖛ᇚϔⳈ䖯㸠ࠄব䞣jѢㄝѢব䞣iᯊذℶDŽ Џᑣ䇏পϔϾ䕧㸠ˈ乴צПˈᡞ乴צⱘᴀ㸠ᠧߎᴹDŽ ߑg e t l i n eϢ㒗д1 - 1 6ЁⱘৠৡߑⳌৠDŽ 㒗д1-20 ᬭᴤ25义 请编写程序d e t a bˈ将输入中的制表符替换成适当数目的空格,使空格充满到下一个制 表符终止的地方。假设制表符终止位的位置是固定的,比如每隔 n列就会出现一个制表符终止 位。n应该作为变量还是符号常量呢? ៥Ӏ䆒䱨T A B I N CϾԡ㕂ህӮߎϔϾࠊ㸼ԡDŽ䖭ϾᑣЁˈ៥Ӏᡞ T A B I N CᅮН Ў8DŽব䞣p o sᰃᑣᴀ㸠Ёⱘᔧԡ㕂DŽ ᔧ䘛ࠄࠊ㸼ヺⱘᯊˈᑣᇚ䅵ㅫߎ㽕ࠄ䖒ϟϔϾࠊ㸼ԡ䳔㽕ⱘぎḐ n bDŽ䖭ϔᰃ ϟ䴶䖭ᴵ䇁হ䅵ㅫߎᴹⱘ 18部分 第 1章分 བᵰ䘛ࠄⱘᰃϔϾ㸠ヺˈᑣᇚᡞᅗᠧߎᴹᑊᡞব䞣 p o s䞡ᮄЎ䕧㸠ⱘϔϾ ᄫヺԡ㕂 p o s = 1 DŽབᵰ䘛ࠄⱘᰃҪᄫヺˈᑣᇚᡞᅗᠧߎᴹᑊ䗦ব䞣 p o sⱘ + + p o s DŽ ៥ӀᡞT A B I N CᅮНЎϔϾヺᐌDŽ 5ゴЁˈ៥ӀᇚᄺдࠄབЏᑣӴ䗦খˈ 䙷ϔⶹ䆚ˈԴህ㛑䅽㞾㸠䆒ᅮ䖲㓁ϸϾࠊ㸼ԡП䯈ⱘ䯈䱨њDŽࠄ䙷ᯊˈԴг䆌Ӯᅝ ᥦϔϾব䞣ᴹᄬT A B I N CⱘDŽ ᑣd e t a bᇚ㒗д5 - 11㒗д5 - 1 2Ё䖯㸠ᠽሩDŽ 㒗д1-21 ᬭᴤ25义 编写程序e n t a b,将空格串替换为最少数量的制表符和空格,但要保持单词之间的间隔 不变。假设制表符终止位的位置与练习 1 - 2 0的d e t a b程序的情况相同。当使用一个制表符或 者一个空格都可以到达下一个制表符终止位时,选用哪种替换字符比较好 ᭈব䞣n bn tߚᰃᴹぎḐІⱘぎḐࠊ㸼ヺⱘᇥϾDŽব䞣 p o sᰃᑣ ᴀ㸠Ёⱘᔧԡ㕂DŽ 分导 言 分分19 ᑣⱘЏ㽕ᛇᰃᡒߎ䚼ぎḐDŽব䞣 p o s䗦ࠄT A B I N CⱘϔϾסᯊˈ៥Ӏህ㽕ᡞ ぎḐІЎϔϾࠊ㸼ヺDŽ ᔧ䘛ࠄϔϾ䴲ぎḐヺᯊˈᑣᇚܜᡞ䘛ࠄ䖭ϾᄫヺП㌃䍋ᴹⱘࠊ㸼ヺぎḐᠧߎ ᴹˈݡᡞ䖭ϾᄫヺᠧߎᴹDŽˈᑣᇚᡞব䞣 n bn t䞡ᮄ䆒㕂Ў䳊ˈབᵰᔧᄫヺᰃϔ Ͼ㸠ヺˈ䖬㽕ᡞব䞣p o s䞡ᮄ䆒㕂Ў䕧㸠ⱘᓔDŽ ᔧ䘛ࠄϔϾࠊ㸼ヺᯊˈᑣᇚᡞℸ㌃ⱘࠊ㸼ヺᔧ䘛ࠄ䖭Ͼࠊ㸼ヺᠧߎᴹDŽ བᵰ䳔ϔϾぎḐህ㛑ࠄ䖒ϟϔϾࠊ㸼ԡˈ៥Ӏⱘ䗝ᢽᰃᡞᅗЎϔϾࠊ㸼ヺˈЎ 䖭Ѣ䙓ܡᚙމDŽ ᑣe n t a bᇚ㒗д5 - 11㒗д5 - 1 2Ё䖯㸠ᠽሩDŽ 㒗д1-22 ᬭᴤ25义 编写一个程序,把较长的输入行“折”成短一些的两行或多行,折行的位置在输入行的 第n列之前的最后一个非空格符之后。要保证程序能够智能地处理输入行很长以及在指定的列 前没有空格或制表符的情况DŽ 20部分 第 1章分 M A X C O LᰃϔϾヺᐌ䞣ˈᅗ㒭ߎњ䕧㸠ⱘᡬ㸠ԡ㕂ˈ䕧㸠ⱘ nDŽᭈব䞣 p o sᰃᑣᴀ㸠Ёⱘᔧԡ㕂DŽᑣᇚ䕧㸠ⱘϔ໘ nПᇍ䆹䕧㸠ᡬ㸠DŽ 䖭Ͼᑣᇚᡞࠊ㸼ヺᠽሩЎぎḐ䘛ࠄϔϾ㸠ヺህᡞℸⱘ䕧ᴀᠧߎᴹ ᔧব䞣p o sⱘ䖒ࠄ M A X C O LᯊˈህӮᇍ䕧㸠䖯㸠ĀᡬāDŽ 分导 言 分分21 ߑf i n d b l n kҢ䕧㸠ⱘp o s໘ᓔצ䗔ⴔᇏᡒϔϾぎḐⳂⱘᰃЎњᣕᡬ㸠ԡ㕂ⱘ ऩ䆡ⱘᅠᭈ DŽབᵰᡒࠄњϔϾぎḐヺˈᅗህ䖨ಲ䎳䆹ぎḐヺ䴶ⱘ䙷Ͼԡ㕂ⱘϟབ ᵰᡒࠄぎḐˈᅗህ䖨ಲ M A X C O LDŽ ߑp r i n t lᠧ䕧ߎҢԡ㕂䳊ࠄԡ㕂p o sˉ1П䯈ⱘᄫヺDŽ ߑn e w p o s䇗ᭈ䕧㸠ˈᅗᇚᡞҢԡ㕂 p o sᓔⱘᄫヺࠊࠄϟϔϾ䕧ߎ㸠ⱘᓔˈ ݡ䖨ಲব䞣p o sⱘᮄDŽ 㒗д1-23 ᬭᴤ25义 编写一个删除C语言程序中所有的注释语句。要正确处理带引号的字符串与字符常量。在 C语言程序中,注释不允许嵌套DŽ 22部分 第 1章分 䖭Ͼᑣ䆒䕧ᰃϔϾড়ⱘ CᑣDŽߑ r c o m m e n t䞞䇁হⱘ䍋ᖫ / *ᡒࠄ䖭Ͼᖫᯊˈᅗᇚ䇗ϔϾߑ i n _ c o m m e n t䞞䇁হⱘ㒧ᴳᖫ * /ˈ Ң㗠CᑣЁⱘ䞞䇁হ䛑㛑㹿ߴ䰸DŽ ߑ r c o m m e n t䖬ᇚऩᓩঠᓩᡒࠄᅗӀᯊˈᅗᇚ䇗ϔϾߑ e c h o _ q u o t eDŽߑe c h o _ q u o t eⱘখᇚᣛᯢᡒࠄⱘᄫヺᰃϔϾऩᓩ䖬ᰃϔϾঠᓩDŽ e c h o _ q u o t eᓩЁⱘݙᆍ㛑ᣝॳḋ䕧ߎˈϡӮ㹿䇃䅸Ўᰃ䞞DŽߑ e c h o _ q u o t e ϡӮᡞ䎳ϔϾডᴴ䴶ⱘᓩⳟخᰃ㒧ᴳᓩখ㾕ᬭᴤ 1 3义㒗д1 - 2ЁѢ䕀Нᄫ ヺᑣⱘ䅼䆎 DŽҪӏᄫヺ䛑ᇚᣝॳḋ䕧ߎDŽ ᴀᑣᇚg e t c h a r䖨ಲӊ㒧ᴳヺᯊ㒧ᴳ䖤㸠DŽ 㒗д1-24 ᬭᴤ25义 编写一个程序,查找C语言程序中的基本语法错误,如圆括号、方括号以及花括号不配对 等。要正确处理引号(包括单引号、双引号)、转义字符序列与注释。(如果读者想把该程序 编写成完全通用的程序,难度会比较大DŽ 分导 言 分分23 24部分 第 1章分 Ϟ䴶䖭Ͼᑣᇍᴀ䇁䫭䇃Ёⱘϔ䚼ߚ䖯㸠њẔᶹDŽ 䖭ϾᑣẔᶹ3䇁䫭䇃ϡ䜡ᇍⱘᣀǃᮍᣀ㢅ᣀҪ䇁䯂乬䛑ϡᴀ ᑣⱘẔᶹ㣗ПݙDŽ ߑs e a r c h䘛ࠄϔϾᎺ㢅ᣀ' { 'ህᇍব䞣b r a c e䖯㸠䗦ˈ䘛ࠄϔϾ㢅ᣀ ' } 'ህᇍব䞣b r a c e䖯㸠䗦ޣDŽᇍব䞣b r a c kᇍᑨѢᮍᣀ p a r e nᇍᑨѢ ᣀⱘ໘гϢℸԐDŽ 䖛Ёˈব䞣 b r a c eǃb r a c kp a r e nⱘপᰃℷㄝѢ䳊ⱘᚙމ䛑ᰃড় ⱘԚབᵰব䞣b r a c eǃb r a c kp a r e nⱘপব៤њ䋳ˈህ㸼䇁䫭䇃ˈᑣᇚᠧ ߎϔᴵⳌᑨⱘߎ䫭ᙃDŽВᴹ䇈ˈ䖲㓁ߎ 3ϾᎺᮍᣀ[ [ [ⱘᚙމᅗᇚՓব䞣b r a c k ㄝѢ3ᰃড়ⱘˈЎ㛑Ӯ䴶ⱘЁᡒࠄϢП䜡ᇍⱘ 3ϾᮍᣀDŽ㽕ᰃ䖲㓁ߎ ⱘ3Ͼᮍᣀ] ] ]Փব䞣b r a c kㄝѢˉ3ˈህϡড়њˈЎ䖭㸼ᯢ䴶Ϣ䖭 3Ͼᮍ ᣀ䜡ᇍⱘᎺᮍᣀDŽབᵰϢП䜡ᇍⱘ 3ϾᎺᮍᣀⱘ䆱ˈব䞣 b r a c kⱘᑨ䆹ㄝѢ 0DŽ ℸˈ䇁হ ᰃᖙϡᇥⱘDŽབᵰ䖭ᴵ䇁হˈ䇌བ ) (ǃ] ] ] [ [ [} } { {Пⱘᚙމህ䛑Ӯ㹿䅸Ўᰃ䜡 ᇍⱘDŽ Џߑ m a i n䖬ᇚᑊẔᶹᓩऩᓩǃঠᓩ䞞ᖫⱘ䜡ᇍᚙމˈԚᇍ䜡ᇍ ⱘᖫП䯈ⱘᄫヺϡخẔᶹüЎ䞞ᓩЁⱘᣀǃᮍᣀ㢅ᣀϡ㽕䜡ᇍߎ DŽ ᔧ䘛ࠄE O F䆄ⱘᯊˈᑣᇚᇍᰃᄬᇮ䜡ᇍⱘᣀǃᮍᣀ㢅ᣀ䖯㸠 ⱘẔᶹDŽབᵰᄬᣀϡ䜡ᇍⱘᚙމˈᑣህӮ䕧ߎⳌᑨⱘߎ䫭ᙃDŽ 分导 言 分分25 㒗д2-1 ᬭᴤ28义 编写一个程序以确定分别由 s i g n e d及u n s i g n e d限定的c h a r、s h o r t、i n t及l o n g类 型变量的取值范围。采用打印标准头文件中的相应值以及直接计算两种方式实现。通过直接 计算来确定浮点类型的取值范围是一项难度很大的任务DŽ ANSI Cޚ㾘ᅮⱘপ㣗ᖙ乏ӊ < l i m i t s . h >ЁᅮНDŽ s h o r tǃ i n tl o n gϡৠⱘӊϞϡৠⱘ䭓ᑺˈ᠔ҹᅗӀϡৠᴎϞⱘপ㣗гᕔᕔӮ ϡৠDŽϞ䴶ᰃޚӊᴹᅮপ㣗ⱘ㾷އᮍḜDŽ C2ゴ ǃ䖤ㅫヺϢ㸼䖒ᓣ ϔ㾷އᮍḜᰃᣝԡ䖤ㅫヺখ㾕ᬭᴤ 3 9义䖯㸠䅵ㅫDŽ㸼䖒ᓣ ܜᡞᄫ0ⱘϾѠ䖯ࠊԡ䚼䕀Ў 1 ˈᇚ㒧ᵰ䕀Ўunsigned char ݡᡞ䖭Ͼunsigned charϔԡҹ䰸ヺԡ ˈᡞᅗ䕀Ўc h a r 䖭ϔⱘ㒜㒧ᵰህᕫࠄњ s i g n e dᄫヺⱘDŽ 㒗д2-2 ᬭᴤ33义 在不使用& &或| |的条件下编写一个与上面的f o r循环语句等价的循环语句DŽ ॳᴹⱘf o rᕾ䇁হ ϢПㄝӋⱘᕾ䇁হ 28部分 第 2章分 ϡՓ& &| |ヺⱘᚙމϟˈ៥Ӏህ㛑ᡞॳᴹⱘ f o rᕾߚ㾷Ўϔ i f䇁হDŽ ៥Ӏ䖬ᖙ乏ᬍⱘᴵӊ㸼䖒ᓣDŽབˈॳᴹⱘ f o rᕾ䇁হЁˈ ⱘᰃব䞣iᰃҡপ㣗ПݙDŽㄝӋⱘᕾ䇁হЁˈ 㸼ᯢব䞣i䍙ߎপ㣗ᯊᕾᑨᔧ㒧ᴳDŽ o k l o o pᰃϔϾᵮВব䞣DŽϔᴵӊЁⱘᶤϔϾᕫࠄ䎇ˈ o k l o o pህᇚ㹿䆒㕂ЎN Oˈ㗠 ᕾгህ㒧ᴳњDŽ 㒗д2-3 ᬭᴤ37义 编写函数h t o i ( s ),把由十六进制数字组成的字符串(包含可选的前缀 0 x或0 X)转换为 与之等价的整型值。字符串中允许包含的数字包括: 0 ~ 9、a ~ f以及A ~ FDŽ 分类型、运算符与表达式 分分29 ᭈϾߑᰃϟ䴶䖭ᴵ䇁হࠊⱘ Ёˈᭈব䞣iᰃ㒘sⱘϟDŽᔧs [ i ]ᰃϔϾড়ⱘक䖯ࠊᄫᯊˈ i n h e xⱘপᇚ ᣕЎY E Sˈ㗠ᕾгᇚ㒻㓁ᠻ㸠DŽᭈব䞣 h e x d i g i tⱘপ㣗ᰃ0~1 5DŽ 䇁হ 䆕㒘ܗs [ i ]ᰃϔϾড়ⱘक䖯ࠊᄫᄫヺˈ h e x d i g i tⱘ㣗ПݙDŽᔧᕾ 㒧ᴳᯊˈߑh t o iᇚ䖨ಲব䞣nⱘDŽ 䖭ϾߑϢa t o iᕜⳌԐখ㾕ᬭᴤ3 5义 DŽ 㒗д2-4 ᬭᴤ38义 重新编写函数squeeze(s1, s2),将字符串s 1中任何与字符串s 2中字符匹配的字符都 删除DŽ 䖭Ͼߑⱘϔᴵ䇁হ ᇍᭈব䞣ikǃᄫヺ㒘s 1ⱘϟҹঞ㒧ᵰᄫヺІгህᰃs 1ߚ䖯㸠њDŽᄫヺІs 1 ЁϢᄫヺІs 2ЁⱘᄫヺⳌऍ䜡ⱘᄫヺ䛑ᇚ㹿ߴ䰸DŽᭈϾᕾ䇁হᇚϔⳈᠻ㸠ࠄᄫヺІs 1㒧ᴳЎℶDŽ Ѡᴵf o r䇁হᇚs 1 [ i ]Ϣs 2ЁⱘϾᄫヺⳌ䕗DŽ䖭Ͼᕾᇚᠻ㸠ࠄᄫヺІ s 2㒧ᴳ 㗙ᡒࠄϔϾऍ䜡ᄫヺЎℶDŽབᵰᡒࠄऍ䜡ⱘᄫヺˈ s 1 [ i ]ህᇚ㹿ࠊࠄ㒧ᵰᄫヺІЁ བᵰᡒࠄњऍ䜡ⱘᄫヺˈ䇁হ Ёⱘᴵӊ㸼䖒ᓣⱘ㒧ᵰᇚᰃˈ s 1 [ i ]ህϡӮ㹿ࠊࠄ㒧ᵰᄫヺІЁᅗᇚҢᄫヺІ s 1 Ё㹿ࠨ䰸ߎএ DŽ 㒗д2-5 ᬭᴤ38义 编写函数a n y(s 1 , s 2),将字符串s 2中的任一字符在字符串 s 1中第一次出现的位置作 30部分 第 2章分 为结果返回。如果 s 1中不包含s 2中的字符,则返回- 1。(标准库函数s t r p b r k具有同样的 功能,但它返回的是指向该位置的指针。) ᭈϾߑᰃϟ䴶䖭ᴵ䇁হࠊⱘ ᔧ䖭Ͼᕾℷᐌ㒧ᴳᯊࠄ䖒ᄫヺІ s 1ⱘሒᯊˈ ߑa n yᇚ䖨ಲˉ1ҹ㸼ᯢᄫヺІs 1 ЁᡒࠄᄫヺІs 2ЁⱘᄫヺDŽ ব䞣iⱘপবϔˈѠᴵf o r䇁হ 䛑Ӯ㹿ᠻ㸠DŽᅗᇚs 1 [ i ]Ϣs 2ЁⱘϾᄫヺⳌ䕗DŽབᵰᄫヺІ s 2ЁⱘᶤϾᄫヺϢs 1 [ i]Ⳍ ऍ䜡ˈ䖨ಲব䞣iüüгህᰃᄫヺІs 1ЁߎᄫヺІs 2Ёⱘᄫヺⱘ䙷Ͼԡ㕂DŽ 㒗д2-6 ᬭᴤ40义 编写一个函数s e t b i t s ( x , p , n , y )ˈ该函数返回对x执行下列操作后的结果值:将 x中从第p位开始的n个(二进制)位设置为y中最右边n位的值,x的其余各位保持不变DŽ ЎњᡞxЁⱘnԡ䆒㕂Ўy䖍ⱘnԡⱘབϟ᠔ ៥Ӏ䳔㽕ᇍxЁⱘnԡ䳊ᡞyЁ䰸䖍ⱘnԡҹⱘҪԡ䛑䳊ᑊᎺࠄ pԡ໘ ᇍ䴶ϸℹⱘ㒧ᵰ䖯㸠O RDŽབϟ᠔ ЎњᇍxЁⱘnԡ䳊ˈ៥Ӏ䳔㽕ᡞxϢϔϾሣ㬑ⷕ䖯㸠A N DDŽ䖭Ͼሣ㬑ⷕҢԡ㕂 pᓔ ⱘnԡ䛑ᰃ0ˈҪԡЎ1DŽ 分类型、运算符与表达式 分分31 佪ܜˈᡞϔϾ᠔ԡ䛑Ў 1ⱘሣ㬑ⷕᎺnԡˈᅗⱘ䖍ࠊ䗴ߎnԡ0 ˈᡞሣ㬑ⷕ䖍ⱘnԡ䆒㕂Ў1ˈᡞԡ䚼䆒㕂Ў0 ϟᴹˈᡞሣ㬑ⷕ䖍ⱘnϾЎ1ⱘԡᎺࠄpԡ໘ ݡᕔˈᡞሣ㬑ⷕҢpԡᓔⱘnԡ䆒㕂Ў0ˈᡞԡ䚼䆒㕂Ў1 䖭Ͼሣ㬑ⷕ x䖯㸠A N Dˈህᅠ៤њᇍ xҢpԡᓔⱘnԡ䳊ⱘᎹDŽԧབ ϟ ЎњᡞyЁ䰸ッⱘnԡҹⱘ᠔ԡ䳊ˈ៥Ӏ䳔㽕ッⱘ nԡЎ1ˈԡ Ў0ⱘሣ㬑ⷕᇍy䖯㸠A N Dˈབϟ᠔ 䖭Ͼሣ㬑ⷕy䖯㸠A N Dˈ៥Ӏህ䗝ߎњyッⱘnԡDŽԧབϟ᠔ ϟᴹˈ៥Ӏ䖬䳔㽕ϟ䴶ⱘᡞ䖭 nԡᎺࠄԡ㕂p໘ ˈᇍ䗮䖛Ϟ䗄ℹ偸ᕫࠄⱘϸϾ䰊ᗻ㒧ᵰ䖯㸠 O R ህᅠ៤њĀᇚxЁҢpԡᓔⱘnԡ䆒㕂ЎyЁ䖍nԡⱘˈxⱘԡᣕϡবāDŽ 㒗д2-7 ᬭᴤ40义 编写一个函数invert(x, p, n),该函数返回对x执行下列操作后的结果值:将 x中从 第p位开始的n个(二进制)位求反(即, 1变成0,0变成1),x的其余各位保持不变DŽ 佪ܜˈᡞϔϾ᠔ԡ䛑Ў 1ⱘሣ㬑ⷕᎺnԡˈᅗⱘ䖍ࠊ䗴ߎnԡ0 ˈᡞሣ㬑ⷕ䖍ⱘnԡ䆒㕂Ў1ˈᡞԡ䚼䆒㕂Ў0 ϟᴹˈᡞሣ㬑ⷕ䖍ⱘnϾЎ1ⱘԡᎺࠄpԡ໘ 䖭Ͼሣ㬑ⷕx䖯㸠ᣝԡᓖ^ˈህᅠ៤њᇍxҢpԡᓔⱘnԡ䖯㸠㗏䕀ⱘᎹDŽ 32部分 第 2章分 ԧབϟ བᵰϸϾѠ䖯ࠊԡপϡৠˈᅗӀⱘᓖ㒧ᵰᇚᰃ 1བᵰϸϾѠ䖯ࠊԡপⳌৠˈᅗӀⱘᓖ 㒧ᵰᇚᰃ 0DŽ៥ӀⱘⳂᰃᇍ xҢpԡᓔⱘ nԡ䖯㸠㗏䕀ˈ㗠Ң pԡᓔ nԡ1 ԡЎ0ⱘሣ㬑ⷕx䖯㸠ᓖᙄད㛑ᅲ䖭ϔⳂབᵰॳᴹⱘԡᰃ 0ˈᅗϢ1䖯㸠 ᓖⱘ㒧ᵰᇚᰃ1üᕫࠄњ㗏䕀བᵰॳᴹⱘԡᰃ 1ˈᅗϢ1䖯㸠ᓖⱘ㒧ᵰᇚᰃ 0üг ᕫࠄњ㗏䕀DŽ 䖭nԡҹⱘҪԡᇚϢ 0䖯㸠ᓖ 0 ^ 0ϸϾԡⳌৠⱘ㒧ᵰᰃ 0üᣕϡব 1 ^ 0 ϸϾԡϡৠⱘ㒧ᵰᰃ 1üгᣕϡবDŽᘏПˈᣛᅮⱘ nԡᕫࠄњ㗏䕀DŽ 㒗д2-8 ᬭᴤ40义 编写一个函数rightrot(x,n),该函数返回将x循环右移(即从最右端移出的位将从 最左端再移入)n(二进制)位后所得到的值DŽ 佪ܜˈ៥Ӏব䞣r b i tᡞxッⱘԡᎺࠄᎺッⱘԡ㕂 w o r d l e n g t h ( )ˉ1 DŽ ˈ៥ӀᡞxϔԡˈݡᇍⱘxϢr b i t䖯㸠O Rˈ䖭ህᅠ៤њϔᇍxⱘᕾ DŽߑr i g h t r o tᇚᇍxخnᕾDŽ ߑw o r d l e n g t h ( )ⱘᰃ䅵ㅫߎ䖤㸠ᑣⱘ䅵ㅫᴎ᠔Փⱘᄫ䭓DŽ ϟ䴶ᰃ䖭Ͼ㒗дⱘϔ㾷 分类型、运算符与表达式 分分33 བᵰᇍx䖯㸠ᕾⱘᘏԡ nϢϔϾ᮴ヺᭈⱘѠ䖯ࠊԡ䖭䅵ㅫᴎⱘ ᄫ䭓Ⳍㄝˈᅠ៤䖭ѯᕾⱘ㒧ᵰᇚϢ xᅠϔḋˈℸ៥Ӏህϡᖙᇍ x䖯㸠ᕾ њDŽབᵰnᇣѢ䖭䅵ㅫᴎⱘᄫ䭓ˈ䙷៥Ӏህᖙ乏ᡞ xᕾnԡDŽབᵰnѢ䖭䅵ㅫᴎ ⱘᄫ䭓ˈ䙷Мˈ៥Ӏ䳔ܜপ䖤ㅫヺߎ nᇍ䖭䅵ㅫᴎⱘᄫ䭓ⱘˈݡᡞ xᕾ 䖭Ͼ᠔ҷ㸼ⱘDŽѢϞ䗄ߚᵤˈ៥ӀᇚᕫࠄϔϾϡ䳔㽕Փᕾ䇁হⱘ㾷އ ᮍḜDŽ ~0 << n ᡞϔϾ1ⱘሣ㬑ⷕᎺnԡˈᅗⱘッࠊ䗴ߎnԡ0 ~(~0 << n) ᡞሣ㬑ⷕッⱘnԡ䆒㕂Ў1ˈԡ䆒㕂Ў0 ᔧ៥Ӏ䖭Ͼሣ㬑ⷕ x䖯㸠A N D䖤ㅫᯊˈxッⱘnԡᇚ㹿䌟㒭ব䞣 r b i t sDŽˈᇚ r b i t sЁⱘ1ᎺࠄᅗⱘᎺッˈᡞ xnԡˈݡᇍⱘ xr b i t s䖯㸠O R䖤ㅫˈህᅠ ៤њᇍ᮴ヺᭈ xᕾnԡDŽ 㒗д2-9 ᬭᴤ41义 在求对二的补码时,表达式x &= (x-1 )可以删除x中最右边值为1的一个二进制位。请 解释这样做的道理。用这一方法重写 b i t c o u n t函数,以加快其执行速度。 ៥Ӏܜ䱣Ў xˉ1䗝ᢽϔϾˈབѠ䖯ࠊ 1 0 1 0क䖯ࠊЁⱘ 1 0 DŽ៥Ӏⶹ䘧ˈ( x ˉ1) + 1ⱘ㒧ᵰᅲህㄝѢxˈབϟ᠔ Ѡ䖯ࠊ क䖯ࠊ 1 0 1 0 xˉ1 1 0 + 1 + 1 1 0 11 x 11 ៥Ӏপ( xˉ1 )ˈᇍ1ᕫࠄxDŽ( xˉ1 )ッЎ0ⱘԡ㒧ᵰxЁবЎ1DŽгህᰃ䇈ˈ xッЎ1ⱘԡϢ( xˉ1 )ৠϔԡ㕂ϞЎ 0ⱘԡᰃᇍᑨⱘDŽ᠔ҹˈϔϾ䞛ᇍѠⱘ㸹ⷕ㸼 ⱘ㒳Ёˈx & (xˉ 1 )ᇚ䰸xッЎ1ⱘԡDŽ 34部分 第 2章分 ៥ӀҹϔϾ4ԡⱘ᮴ヺЎߚᵤϔϟ b i t c o u n tߑⱘ㓪ݭᗱ䏃DŽЎњ㒳䅵ߎ䖭Ͼ ЁЎ1ⱘԡⱘϾˈॳᴹⱘb i t c o u n tߑ䳔㽕䖯㸠4ԡᑊᇍッⱘԡخ 4 䕗DŽĀx & (xˉ1 )ᇚ䰸xッЎ1ⱘԡā䖭ϔ㒧䆎ˈ៥Ӏҹ㓪ݭߎϔϾᠻ㸠 䗳ᑺᖿⱘb i t c o u n tߑDŽབˈ䆒xㄝѢ9ˈѢᰃ 1 0 0 1 Ѡ䖯ࠊ㸼ⱘxüक䖯ࠊ9 & 1 0 0 0 Ѡ䖯ࠊ㸼ⱘ( xˉ1 )üक䖯ࠊ8 1 0 0 0 x & ( xˉ1 ) 㾕ˈxッЎ1ⱘԡ㹿䰸Ў 0њDŽ䖤ㅫ㒧ᵰᰃѠ䖯ࠊ 1 0 0 0क䖯ࠊ8 DŽݡҹ8Ўxˈ ݡ䞡Ϟ䗄䖛ˈᕫࠄ 1 0 0 0 Ѡ䖯ࠊ㸼ⱘxüक䖯ࠊ8 & 0 111 Ѡ䖯ࠊ㸼ⱘ( xˉ1 )üक䖯ࠊ7 0 0 0 0 x & ( xˉ1 ) xッЎ 1ⱘԡজ㹿䰸Ў 0њDŽ䖤ㅫ㒧ᵰᰃѠ䖯ࠊ 0 0 0 0क䖯ࠊ 0 DŽℸᯊˈᮄⱘ x Ѡ䖯ࠊ0 0 0 0Ёݡг1ⱘԡњˈ䖛гህℸ㒧ᴳDŽ ണⱘᚙމϟüᔧxЁⱘ᠔ԡ䛑Ў 1ᯊˈᮄᮍḜ䳔㽕䖯㸠ⱘ A N DϢॳ b i t c o u n tߑ䳔㽕䖯㸠ⱘԡϔḋDŽԚᘏⱘᴹ䇈ˈᣝᮄᮍḜ㓪ݭߎᴹⱘ b i t c o u n tߑ㽕ᠻ㸠ᕫᖿϔѯDŽ 㒗д2-10 ᬭᴤ42义 重新编写将大写字母转换为小写字母的函数 l o w e r,并用条件表达式替代其中的 i f - e l s e结构DŽ བᵰcᰃϔϾݭᄫ䖭䞠ⱘ䅼䆎䩜ᇍ A S C I Iᄫヺˈ 䙷Мᴵӊ㸼䖒ᓣ ህᇚЎˈ䖭Ͼᮄl o w e rߑህᇚᇍϟ䴶ⱘ㸼䖒ᓣ 䖨ಲϔϾᇣݭᄫDŽˈབᵰcᰃϔϾᇣݭᄫˈl o w e rߑህӮॳᇕϡ䖨ಲ䖭ϾᄫヺDŽ 分类型、运算符与表达式 分分35 㒗д3-1 ᬭᴤ47义 在上面有关折半查找的例子中, w h i l e循环语句内共执行了两次测试,其实只要一次就 足够(代价是将更多的测试在循环外执行)。重写该函数,使得在循环内部只执行一次测试。 比较两种版本函数的运行时间DŽ ៥Ӏᡞw h i l e䇁হⱘᕾᴵӊ㸼䖒ᓣҢॳܜⱘ ᬍЎ 䖭ḋˈw h i l e䇁হⱘᕾ䚼ߚϔᴵ i f䇁হᅠ៤DŽԚ䖭㽕៥Ӏᖙ乏ϔ䖯 w h i l eᕾПҹঞᕾᔧЁ䅵ㅫߎ m i dⱘDŽ w h i l eᕾ㒧ᴳПˈ៥Ӏ䖬䳔㽕ϔᴵ i f䇁হᴹw h i l eᕾᰃᰃЎ㒘 vЁᡒࠄx㗠㒜ℶⱘDŽབᵰ㒘䞠ᡒࠄњ xˈߑb i n s e a r c hᇚ䖨ಲm i dব䞣ˈ䖨ಲ ˉ1DŽ ϸᮍḜⱘᠻ㸠ᯊ䯈ТҔМᏂᓖDŽ៥Ӏᑊᕫࠄⱘᗻ㛑ᬍ䖯ˈড㗠ᥝњ ҷⷕ䇏ᗻDŽᬭᴤ4 8义Ϟॳⱘҷⷕᆍ䯙䇏㾷DŽ C3ゴ ࠊ 㒗д3-2 ᬭᴤ49义 编写一个函数e s c a p e ( s , t ),将字符串t复制到字符串s中,并在复制过程中将换行符、 制表符等不可显示字符分别转换为\ n、\ t等相应的可显示的转义字符序列。要求使用s w i t c h 语句。再编写一个具有相反功能的函数,在复制过程中将转义字符序列转换为实际字符。 䇁হ ࠊⴔᭈϾᕾDŽব䞣iᰃᄫヺІtⱘᓩˈ㗠ব䞣jᰃⳂᄫヺІsⱘᓩDŽ s w i t c h䇁হЁ3䏃ߚᇍᑨѢ㸠ヺⱘ ' \ n 'ǃᇍᑨѢࠊ㸼ヺⱘ ' \ t 'd e f a u l tDŽ བᵰᄫヺ t [ i ]Ϣϸᚙމϡऍ䜡ˈ e s c a p eߑህᇚᠻ㸠Ў d e f a u l tⱘ䚼ߚᡞ t [ i ]ࠊࠄᄫヺІsЁএDŽ u n e s c a p eߑϢe s c a p eߑᕜⳌԐˈབϟ᠔ 38部分 第 3章分 བᵰᄫヺt [ i ]ᰃϔϾডᴴˈ៥Ӏህ䗮䖛ϔϾ s w i t c h䇁হᡞ\ n䕀Ў㸠ヺˈᡞ\ t䕀 Ўࠊ㸼ヺDŽ s w i t c h䇁হⱘd e f a u l t䚼ߚᴹ໘䎳ডᴴ䴶ⱘᰃҪᄫヺⱘᚙމ üᡞডᴴt [ i ]ࠊࠄᄫヺІsЁএDŽ s w i t c h䇁হᰃܕ䆌ጠⱘDŽϟ䴶ᰃℸ㒗дⱘϔ㾷އᮍDŽ Ϟ䴶䖭ҷⷕЁˈሖⱘ s w i t c h䇁হ䋳䋷ऎߚডᴴҪᄫヺ d e f a u l tˈ ড ᴴⱘߚЁ䖬ጠⴔϔᴵs w i t c h䇁হDŽ 㒗д3-3 ᬭᴤ52义 编写函数e x p a n d ( s 1 , s 2 ),将字符串s 1中类似于a - z一类的速记符号在字符串 s 2中扩 展为等价的完整列表 a b c. . .x y z。该函数可以处理大小写字母和数字,并可以处理 a - b - c、 a - z 0 - 9与a - z等类似的情况。作为前导和尾随的字符原样复制DŽ 分控 制 流 分分39 e x p a n dߑܜᡞs 1ЁⱘϔϾᄫヺ䇏ࠄব䞣 cЁˈݡẔᶹϟϔϾᄫヺDŽབᵰϟϔϾᄫヺ ᰃ-ϨݡϟϔϾᄫヺѢㄝѢᄬব䞣 cЁⱘᄫヺˈe x p a n dߑህӮᇍ䖭Ͼ䗳䆄ヺ䖯 㸠ᠽሩDŽˈe x p a n dߑህᇚᡞব䞣cЁⱘᄫヺⳈࠊࠄs 2ЁএDŽ e x p a n dߑ㛑ᇍA S C I Iᄫヺ䖯㸠໘DŽབˈᅗᇚᡞ䗳䆄ヺ a - zᠽሩЎϢПㄝӋⱘ 㸼a b cĂx y zˈᡞ! - ~ᠽሩЎ! " #ĂA B CĂX Y ZĂa b cĂx y zĂ| }~DŽ 䖭ϔ㾷އᮍḜᰃᖋO s n a b r u c kᄺⱘAxel SchreinerᦤկⱘDŽ 㒗д3-4 ᬭᴤ53义 在数的对二的补码表示中,我们编写的i t o a函数不能处理最大的负数,即n等于-( 2ᄫ䭓ˉ1)的 情况。请解释其原因。修改该函数,使它在任何机器上运行时都能打印出正确的值DŽ 佪ܜˈ៥Ӏᖙ乏њ㾷䖭ḋϔϾџᅲ ˉ( 2ᄫ䭓ˉ1) ᮴䗮䖛䇁হ n = ˉn ; 40部分 第 3章分 䕀ЎϔϾℷDŽ䖭ᰃЎᇍѠⱘ㸹ⷕ᠔㛑㸼ⱘℷ㛑ᰃ ( 2ᄫ䭓ˉ1)ˉ1 ៥Ӏ㾷ㄨ䖭䘧㒗дⱘᗱ䏃ᰃܜᣝ䗚ᑣߎԡᄫˈݡߑ r e v e r s eখ㾕㒗д 1 -1 9ᇍᄫヺІ s䞠ⱘᄫヺخϔ乴צ㗠ᕫࠄ㒜ⱘ㒧ᵰDŽԧ䇈ˈ䖭Ͼ i t o aߑЁˈ ៥Ӏব䞣s i g nᄬnⱘˈᅣa b s䅵ㅫn % 1 0ⱘ㒱ᇍDŽ䳔ᡞপⱘ㒧ᵰ䕀 Ўℷˈ䖭ḋህ㛑㒩䖛᮴ᡞ䋳 ˉ( 2ᄫ䭓ˉ1) 䕀ЎϔϾℷⱘ䯂乬DŽ ℸˈ៥Ӏ䖬ᡞd o - w h i l e䇁হЁⱘᴵӊ㸼䖒ᓣҢॳᴹⱘ ᬍЎ 䖭ᰃЎњ䙓ܡЎnᰃϔϾ䋳㗠Փߑi t o a䱋᮴䰤ᕾDŽ 㒗д3-5 ᬭᴤ53义 编写函数itob(n, s, b),将整数n转换为以b为底的数,并将转换结果以字符的形式保 存到字符串s中。例如,itob(n, s, 16)把整数n格式化成十六进制整数保存在s中。 ៥Ӏ㾷ㄨ䖭䘧㒗дⱘᗱ䏃ᰃܜᣝ䗚ᑣ៤ b䖯ࠊⱘϔԡᄫˈݡߑ r e v e r s e খ㾕㒗д1 - 1 9ᇍᄫヺІsЁⱘᄫヺخϔ乴צ㗠ᕫࠄ㒜ⱘ㒧ᵰDŽЎ៥Ӏ㽕ᡞᭈ n䕀 ЎϔϾb䖯ࠊˈ᠔ҹ៥Ӏ㽕 ձ䖨ಲϔϾ0ࠄbˉ1П䯈ⱘᑊᡞ䖭Ͼ䕀ЎⳌᑨⱘᄫヺᄬࠄᄫヺІ sЁDŽݡ 䇗ᭈnⱘDŽ㽕n / bѢ䳊ˈ䖭ϔ䖛ህᇚϔⳈᕾϟএDŽ 分控 制 流 分分41 㒗д3-6 ᬭᴤ53义 修改i t o a函数,使得该函数可以接收三个参数。其中,第三个参数为最小字段宽度。为 了保证转换后所得的结果至少具有第三个参数指定的最小宽度,在必要时应在所得结果的左 边填充一定的空格DŽ Ϟ䴶䖭ϾߑϢ㒗д3 - 4Ёⱘi t o aߑᕜⳌԐDŽ៥Ӏᇍخњᖙ㽕ⱘᬍ 䖭Ͼw h i l eᕾⱘᰃᖙ㽕ᯊ㒭ᄫヺІ s㸹䎇ぎḐDŽ 42部分 第 3章分 封面 封底 书名页 版权页 出版者的话 专家指导委员会 前言页 目录页 第1章 导言 第2章 类型、运算符与表达式 第3章 控制流 第4章 函数与程序结构 第5章 指针与数组 第6章 结构 第7章 输入与输出 第8章 UNIX系统接口

编辑推荐

  • 名称/格式
  • 评分
  • 下载次数
  • 资料大小
  • 上传时间

用户评论

0/200
    暂无评论
上传我的资料

相关资料

资料评价:

/ 0
所需积分:0 立即下载
返回
顶部
举报
资料
关闭

温馨提示

感谢您对爱问共享资料的支持,精彩活动将尽快为您呈现,敬请期待!