关闭

关闭

封号提示

内容

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

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

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

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

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

㒗дljCᑣ䆒䅵䇁㿔gᮄNJᬭᴤ义在你自己的系统中运行“hello,world”程序。再有意去掉程序中的部分内容看看会得到什么出错信息。Ϟ䴶䖭Ͼᄤⳕњ㸠ヺnˈ䖭ᇚՓܝذ䕧ߎᙃⱘሒDŽѠϾᄤⳕњprintf()䴶ⱘߚDŽCᑣⱘ䇁হᖙ乏ҹߚ㒧ሒখ㾕ᬭᴤ义DŽℸˈᇍѢᴀˈ㓪䆥ᇚ䆚ߎᇥњϔϾߚᑊ㒭ߎⳌᑨⱘߎ䫭ᙃDŽϝϾᄤ䞠ˈn䴶ⱘঠᓩ"㹿䫭ݭЎऩᓩ'DŽѢᰃˈ䖭Ͼऩᓩঞ䴶ⱘᣀߚᇚ㹿ⳟخᰃᭈϾ䕧ߎᄫヺІⱘϔ䚼ߚDŽ㓪䆥ᇚᡞ䖭ᚙމ㾚ЎϔϾ䫭䇃ˈӮਞ䇈㔎њϔϾঠᓩ㢅ᣀ㔎њϔϾᣀᄫヺІ䖛䭓ᄫヺІЁ㸠ヺDŽ㒗дᬭᴤ义做个实验当printf函数的参数字符串中包含c(其中c是上面的转义字符序列中未曾列出的某一个字符)时观察一下会出现什么情况Cゴᇐ㿔খ㗗ݠখ㾕ᬭᴤ义ЁᦤࠄĀབᵰ䴶䎳ⱘᄫヺϡҹϞᣛᅮⱘᄫヺЁˈ㸠ЎᰃᅮНⱘDŽāϞ䴶䖭ҷⷕⱘᠻ㸠㒧ᵰϢԧⱘ㓪䆥ⳌDŽϔ㛑ߎⱘ㒧ᵰᰃЁˈ<BELL>ᰃASCIIㄝѢⱘᄫヺ᠔ѻⱘϔໄⷁ㳖号DŽⱘ䴶ˈҹϾ䖯ࠊᄫখ㾕ᬭᴤ义ᴹҷ㸼ϔϾᄫヺˈ㗠ASCIIᄫヺ䲚Ёҷ㸼ⱘᰃϔໄⷁ㳖号DŽ㒗дᬭᴤ义请修改温度转换程序使之能在转换表的顶部打印一个标题。ᕾ䇁হПⱘprintf("FahrCelsiusn")䇁হᇚᑺ䕀㸼ⱘ乊䚼ѻϔϾ㸼DŽЎњ䅽䕧ߎݙᆍϢ䖭Ͼ㸼ᇍ唤ˈ៥Ӏ䖬ffП䯈њϸϾぎḐDŽϞ䴶䖭ϾᑣЁⱘ䇁হϢᬭᴤ义Ё㒭ߎⱘҷⷕᅠϔ㟈DŽ㒗дᬭᴤ义编写一个程序打印摄氏温度转换为相应华氏温度的转换表。部分第章分ᴀᑣᇚ䕧ߎϔϾᑺࠄढᑺⱘ䕀㸼DŽढᑺᰃҹϟ䇁হ䅵ㅫᕫࠄⱘᴀ乬ⱘ㾷乬ᗱ䏃Ϣᠧढᑺࠄᑺⱘᇍ㸼ᑣ㾕ᬭᴤ义ᰃⳌৠⱘDŽᭈব䞣lowerǃupperǃstepߚᇍᑨѢব䞣celsiusⱘϟ䰤ǃϞ䰤ǃℹ䭓DŽᑣܜᡞব䞣celsiusЎᅗⱘϟ䰤ˈݡwhileᕾЁᡞᇍᑨⱘढᑺ䅵ㅫߎᴹDŽˈᑣᠧߎ䖭㒘ᑺढᑺⱘˈᑊᣝℹ䭓䗦ব䞣celsiusⱘDŽwhileᕾᇚϔⳈᠻ㸠Ⳉࠄব䞣celsius䍙ߎϞ䰤ЎℶDŽ㒗дᬭᴤ义修改温度转换程序要求以逆序(即按照从度递减到度的顺序)打印温度转换表DŽᚳϔⱘᬍП໘ᰃ䖭ᴵfor䇁হⱘϔ䚼ߚ䋳䋷ᡞढᑺব䞣fahrЎᅗⱘϞ䰤for䇁হⱘѠ䚼ߚforᕾⱘࠊᴵӊ分导言分分䋳䋷Ẕᶹব䞣fahrᰃѢㄝѢᅗⱘϟ䰤ü㽕䖭ϾẔᶹⱘ㒧ᵰЎˈfor䇁হህᇚ㒻㓁ᕾᠻ㸠for䇁হⱘϝ䚼ߚℹ䭓㸼䖒ᓣ䋳䋷ᇍব䞣fahrᣝℹ䭓䖯㸠䗦ޣDŽ㒗дᬭᴤ义验证布尔表达式getchar()!=EOF的取值是还是DŽḍᬭᴤ义ⱘ䆎䗄ˈ㸼䖒ᓣⳌᔧѢᴀᑣҢ㒳ⱘޚ䕧䇏পᄫヺᑊՓњϞ䴶ⱘ㸼䖒ᓣDŽᔧᄫヺ䇏ᯊˈgetchar()ϡӮ䖨ಲӊ㒧ᴳヺEOFˈ᠔ҹⱘপЎˈব䞣cᇚ㹿䌟ЎDŽᔧᑣ䘛ࠄӊ㒧ᴳヺᯊˈ㸼䖒ᓣপЎˈℸᯊˈব䞣cᇚ㹿䌟Ўˈᑣᇚ㒧ᴳ䖤㸠DŽ㒗дᬭᴤ义请编写一个打印EOF值的程序DŽヺᐌ䞣EOFᰃӊ<stdioh>ЁᅮНⱘDŽϞ䴶䖭ϾᑣЁˈprintf()䇁হЁঠᓩⱘEOFᇚ㹿Ўӊ<stdioh>Ё䎳ПⱘᴀDŽ៥Ӏⱘ㒳ЁˈEOF㹿ᅮНЎˉˈԚҪ㒳ЁˈEOF㛑㹿ᅮНЎҪ部分第章分ⱘDŽ䖭ℷᰃՓEOFㄝޚヺᐌ䞣㛑ᑣỡᗻⱘॳ᠔DŽ㒗дᬭᴤ义编写一个统计空格、制表符和换行符个数的程序DŽᭈব䞣nbntnlߚᴹ㒳䅵ぎḐǃࠊ㸼ヺ㸠ヺⱘϾDŽ䖭Ͼব䞣ⱘ䛑ᰃDŽwhileᕾⱘᕾԧݙˈߎ䕧ЁⱘϔϾぎḐǃࠊ㸼ヺ㸠ヺ䛑ᇚ㹿䆄ᔩDŽwhileᕾЁⱘᴵif䇁হᕾЁ䛑ᇚ㹿ᠻ㸠DŽབᵰᑣ䇏ࠄⱘᄫヺϡᰃぎḐǃࠊ㸼ヺ㸠ヺˈህϡᠻ㸠ӏDŽབᵰᑣ䇏ࠄⱘᄫヺᰃ䖭ϝϾヺПϔˈህᇍⳌᑨⱘ䅵DŽᔧwhileᕾ㒜ℶgetchar䖨ಲEOFᯊˈᴀᑣᇚᡞぎḐǃࠊ㸼ヺ㸠ヺⱘ㒳䅵㒧ᵰᠧߎᴹDŽᇍifelse䇁হⱘҟ㒡ߎѢᬭᴤ义ˈϟ䴶ᰃՓњ䖭ϔ䇁㒧ᵘⱘᅲᮍ分导言分分㒗дᬭᴤ义编写一个将输入复制到输出的程序并将其中连续的多个空格用一个空格代替DŽᭈব䞣c䋳䋷䆄ᔩᔧ䕧ᄫヺⱘASCIIˈ㗠ᭈব䞣lastc䆄ᔩⴔϔϾ䕧ᄫヺⱘASCIIDŽヺᐌ䞣NONBLANK䋳䋷ᡞব䞣lastcЎϔϾӏᛣⱘ䴲ぎḐᄫヺDŽwhileᕾԧЁⱘϔᴵif䇁হ䕧ߎ䴲ぎḐᄫヺѠᴵif䇁হ໘ぎḐᄫヺˈ㗠ϝᴵif䇁হѢẔᶹᔧⱘぎḐᄫヺおコᰃϔϾऩϾⱘぎḐヺ䖬ᰃϔІぎḐЁⱘϔϾぎḐDŽˈᇍব䞣lastc䖯㸠ࠋᮄDŽҹϞᇚϔⳈ䞡ࠄwhileᕾ㒜ℶgetchar䖨ಲEOFЎℶDŽᇍifelse䇁হⱘҟ㒡ߎѢᬭᴤ义ˈϟ䴶ᰃՓњ䖭ϔ䇁㒧ᵘⱘᅲᮍ部分第章分ᇍ䘏䕥ORヺ||ⱘҟ㒡гߎѢᬭᴤ义ˈϟ䴶ᰃՓњ䖭ϔⶹ䆚ⱘᅲᮍ㒗дᬭᴤ义编写一个将输入复制到输出的程序并将其中的制表符替换为tˈ把回退符替换为bˈ把反斜杠替换为ˈ这样可以将制表符和回退符以可见的方式显示出来DŽ䕧ⱘᄫヺҹᰃϔϾࠊ㸼ヺǃϔϾಲ䗔ヺǃϔϾডᴴ㗙ҪӏᄫヺDŽབᵰ䕧ᰃϔϾࠊ㸼ヺˈ៥ӀህᡞᅗЎtབᵰ䕧ᰃϔϾಲ䗔ヺˈ៥ӀህᡞᅗЎbབᵰ䕧ᰃϔϾডᴴˈ៥ӀህᡞᅗЎҪᄫヺᣝॳḋ䕧ߎDŽC䇁㿔Ёˈডᴴᰃ''ᴹ㸼ⱘDŽℸˈབᵰ៥Ӏᛇ䕧ߎϸϾডᴴˈህᖙ乏ᡞᄫヺІ""Ӵ䗦㒭printfߑDŽ分导言分分ᇍifelse䇁হⱘҟ㒡ߎѢᬭᴤ义ˈϟ䴶ᰃՓњ䖭ϔ䇁㒧ᵘⱘᅲᮍ㒗дᬭᴤ义你准备如何测试单词计数程序?如果程序中存在某种错误那么什么样的输入最可能发现这类错误呢ऩ䆡䅵ᑣⱘ䆩Ꮉ佪ܜ㽕Ңӏ䕧ⱘᚙމᓔDŽℸᯊˈ䆹ᑣⱘ䕧ߎ㒧ᵰᑨ䆹ᰃĀāˈ䳊㸠ǃ䳊ऩ䆡ǃ䳊ᄫヺDŽϟᴹ䆩䕧ऩᄫヺऩ䆡ⱘᚙމDŽℸᯊˈ䆹ᑣⱘ䕧ߎ㒧ᵰᑨ䆹ᰃĀāˈϔ㸠ǃϔϾऩ䆡ǃϸϾᄫヺϔϾᄫϞϔϾ㸠ヺDŽݡ䆩ϔϾϸϾᄫヺ㒘៤ⱘऩ䆡DŽℸᯊˈ䆹ᑣⱘ䕧ߎ㒧ᵰᑨ䆹ᰃĀāˈϔ㸠ǃϔϾऩ䆡ǃϝϾᄫヺѠϾᄫϞϔϾ㸠ヺDŽˈݡ䆩ϸϾऩᄫヺऩ䆡ⱘᚙމDŽ佪ܜˈϸϾऩ䆡ߎৠϔ㸠ˈℸᯊⱘ䕧ߎ㒧ᵰᑨ䆹ᰃĀāˈϸϾऩ䆡ऴϔ㸠ˈℸᯊⱘ䕧ߎ㒧ᵰᑨ䆹ᰃĀāDŽ䙷ѯ䎇䖍ᴵӊⱘ䕧ᚙމѢথऩ䆡䅵ᑣЁⱘ䫭䇃DŽ䖭ѯ䖍ᴵӊᣀü䕧üऩ䆡㸠ヺüऩ䆡ぎḐǃࠊ㸼ヺ㸠ヺüϾऩ䆡ऴϔ㸠ⱘᚙމぎḐࠊ㸼ヺüऩ䆡ߎѢᴀ㸠㸠佪ⱘᚙމüऩ䆡ߎѢϔІぎḐПⱘᚙމ㒗дᬭᴤ义编写一个程序以每行一个单词的形式打印其输入DŽ部分第章分ᭈব䞣stateᰃϔϾᏗᇨ䞣ˈѢ䆄ᔩᑣⱘ໘䖛ᰃℷ໘ѢᶤϾऩ䆡ⱘݙ䚼DŽᑣᓔ䖤㸠ⱘᯊˈব䞣stateᇚ㹿ЎOUTˈ㸼ᯢᇮ໘ӏDŽϔᴵif䇁হব䞣cᰃᰃϔϾऩ䆡ߚ䱨ヺDŽབᵰᰃˈѠᴵif䇁হᇚ䖭Ͼऩ䆡ߚ䱨ヺᰃ㸼ᶤϾऩ䆡㒧ᴳDŽབᵰᰃˈህ䕧ߎϔϾ㸠ヺᑊᬍব䞣stateⱘབᵰϡᰃˈϡ䖯㸠ӏDŽབᵰcϡᰃϔϾऩ䆡ߚ䱨ヺˈ䙷Мˈᅗᇚ㗙ᰃᶤऩ䆡ⱘϔϾᄫヺǃ㗙ᰃϔϾऩ䆡Ё䰸ϔϾᄫヺПⱘҪᄫヺDŽᇍѢϔᚙމcᰃᶤऩ䆡ⱘϔϾᄫヺˈᑣᇚᬍব䞣stateⱘᑊ䕧ߎ䖭ϾᄫヺᇍѢѠᚙމcᰃᶤϾऩ䆡ЁⱘҪᄫヺˈᑣⳈ䕧ߎ䖭ϾᄫヺDŽ㒗дᬭᴤ义编写一个程序打印输入中单词长度的直方图。水平方向的直方图比较容易绘制垂直方向的直方图则要困难些DŽ分导言分分ぎḐǃ㸠ヺࠊ㸼ヺᖫⴔऩ䆡ⱘ㒧ᴳDŽབᵰϔϾऩ䆡nc>Ϩᅗⱘ䭓ᑺᇣѢܕ䆌ⱘऩ䆡䭓ᑺnc<MAXWORDˈ䖭ϾᑣᇚᇍⳌᑨⱘऩ䆡䭓ᑺ䅵wlncDŽབᵰऩ䆡ⱘ䭓ᑺ䍙ߎњܕ䆌ⱘऩ䆡䭓ᑺnc>=MAXWORDˈ䖭Ͼᑣᇚᇍব䞣ovflowҹ䆄ᔩ䭓ᑺѢㄝѢMAXWORDⱘऩ䆡ⱘϾDŽ䇏䚼ऩ䆡Пˈ៥Ӏⱘᑣᇚᡒߎ㒘wlЁⱘmaxvalueDŽ部分第章分ব䞣lenᰃḍMAXHISTmaxvalueⱘ䅵ㅫᕫߎⱘwli᠔ᇍᑨⱘⳈᮍ䭓ᑺDŽབᵰwliѢ䳊ˈህ㟇ᇥ㽕ᠧߎϔϾDŽ分导言分分䖭Ͼᅲᮍᇚ䕧ߎϔϾⳈᮍⱘⳈᮍDŽ䖭ϾᑣҢᓔⳈࠄmaxvalueⱘ䖛ϢϔϾᑣᅠⳌৠDŽˈ䖭Ͼᑣ䳔㽕䅵ㅫ㒘wlЁⱘϔϾܗᑊᰃ䳔㽕㒘ܗⱘᇍᑨԡ㕂ϞᠧϔϾDŽ䖭ϔ䖛ᖙϡᇥˈЎⳈᮍⳈᮍⱘ᠔ⳈᮍᴵᰃৠℹᠧⱘDŽⱘϸϾforᕾᴹ䕧ߎ㒘wlܗⱘϟপDŽ㒗дᬭᴤ义编写一个程序打印输入中各个字符出现频度的直方图DŽ部分第章分䖭ϾᑣϢ㒗дЁⱘᑇⳈᮍ䕧ߎᑣᕜⳌԐˈԚ៥Ӏ㒳䅵ⱘᰃϾᄫヺⱘߎ乥ᑺDŽᑣЁՓњϔϾܗϾㄝѢMAXCHARⱘᄫヺ䅵㒘ˈབᵰ៥ӀՓⱘᄫヺ䲚ЁᄬѢㄝѢMAXCHARⱘᄫヺˈ䖭ѯᄫヺᇚ㹿ᗑDŽϔϾऎᰃ៥ӀՓњϔϾᅣᴹᶤϾᄫヺᰃᰃϔϾᰒᄫヺDŽѢⱘӊ<ctypeh>ⱘ䅼䆎ߎѢᬭᴤ义ˈᇍisprintⱘҟ㒡ߎѢᬭᴤ义䰘ᔩBDŽ㒗дᬭᴤ义重新编写节中的温度转换程序使用函数实现温度转换计算DŽ៥Ӏ䞛ϔϾߑᡞढᑺ䕀ЎᑺDŽ䖭ϾߑৡЎcelsiusˈᅗⱘ䕧খᰃϔϾˈ䖨ಲгᰃϔϾDŽ䖭Ͼߑᇚ䗮䖛return䇁হ䖨ಲ㸼䖒ᓣⱘDŽᯊˈ㸼䖒ᓣᰃϔϾㅔऩব䞣ˈབpowerߑখ㾕ᬭᴤ义Ԛᯊ៥ӀгӮՓϔϾ䕗ᴖⱘ㸼䖒ᓣˈབ䖭䞠ⱘcelsiusߑˈЎ䖭ḋخҹՓ᠔Ꮉ䛑return䇁হЁᅠ៤DŽЎߑcelsiusⱘ䕧খᰃϔϾˈᅗⱘ䖨ಲгᰃϔϾˈ᠔ҹ៥ӀᡞᅗໄᯢЎབϟⱘᔶᓣ㒗дᬭᴤ义修改打印最长文本行的程序的主程序main使之可以打印任意长度的输入行的长度并分导言分分尽可能多地打印文本。部分第章分៥ӀᇍॳᴹⱘЏߑ䖯㸠њϔ໘ᬍˈབϟ᠔䖭ᴵ䇁হᇚᡞ䕧㸠ⱘ䭓ᑺlenᄬ㒘line䞠ⱘᄫヺሑ㛑ᠧߎᴹDŽ៥Ӏᇍߑgetlineгخњ໘ᬍDŽ佪ܜˈᕾ䇁হϡݡẔᶹᄫヺᰃ䍙ߎ㒘sⱘ䰤ࠊüЎ䖭ϔ䰤ࠊϡݡᰃforᕾⱘ㒜ℶᴵӊПϔњˈⱘgetline㛑䖨ಲӏᛣ䭓ⱘ䕧㸠ⱘ䭓ᑺᑊ㛑ᄬټሑ㛑ⱘ䕧㸠ݙᆍDŽˈॳᴹforᕾЁѢᄫヺІ㒘ᰃ䖬ぎԡ㕂ⱘ㸼䖒ᓣ㹿ᬍЎ䇁হП᠔ҹ㽕䖯㸠䖭ḋⱘᬍˈᰃЎ㒘sⱘϔϾϟᰃ㗠䖭জᰃЎ㒘sЁlimϾܗϨ៥ӀᏆ㒣䇏পњ䕧ᄫヺDŽ᠔ҹᇚ㒘s䞠㒭㸠ヺߎϔϾԡ㕂ˈ䖬㽕㒭ᄫヺІ㒧ᴳヺߎϔϾԡ㕂ˈᄫヺІⱘ䭓ᑺᇚ䗮䖛ব䞣i䖨ಲ㗠ব䞣j䆄ᔩⴔ㹿ࠊࠄᄫヺІsЁⱘᄫヺⱘϾDŽ㒗дᬭᴤ义编写一个程序打印长度大于个字符的所有输入行。分导言分分䖭Ͼᑣ䇗ߑgetlineᴹ䇏প䕧㸠DŽߑgetlineᇚ䖨ಲ䕧㸠ⱘ䭓ᑺሑ㛑ⱘݙᆍDŽབᵰ䕧㸠ⱘ䭓ᑺѢϾᄫヺLONGLINEˈ៥Ӏⱘᑣህᇚᡞᅗᠧߎᴹˈϡ䖯㸠ӏDŽ䖭ϔ䖛ᇚϔⳈᕾࠄߑgetline䖨ಲϔϾㄝѢ䳊ⱘ䕧㸠䭓ᑺЎℶDŽߑgetlineϢ㒗дЁⱘৠৡߑⳌৠDŽ㒗дᬭᴤ义编写一个程序删除每个输入行末尾的空格及制表符并删除完全是空格的行DŽremoveߑ䋳䋷ߴᥝᄫヺІlineሒⱘぎḐࠊ㸼ヺᑊ䖨ಲᅗⱘᮄ䭓ᑺDŽབᵰ䖭Ͼ䭓ᑺѢ䳊ˈህ䇈ᯢlineЁϡᰃぎḐࠊ㸼ヺⱘҪᄫヺˈᑣህӮᡞ䖭ϔ㸠ᠧߎᴹˈህ䇈ᯢlineᅠᰃぎḐࠊ㸼ヺᵘ៤ⱘˈᑣህᇚᗑᥝ䖭Ͼ䕧㸠DŽ䖭ህ䆕њᅠ部分第章分ᰃぎḐⱘ㸠ϡӮ㹿ᠧߎᴹDŽremoveߑ佪ܜᡒࠄ㸠ヺˈצ䗔ϔϾԡ㕂DŽ䱣ˈ䖭ϾߑᇚҢẔᶹぎḐࠊ㸼ヺˈⳈࠄᅗᡒࠄϔϾϡᰃぎḐࠊ㸼ヺⱘᄫヺ㗙ᄫヺ䅽ᅗ㒻㓁צ䗔i<ЎℶDŽབᵰi>=ˈ䇈ᯢ㟇ᇥ䖬ϔϾᄫヺDŽℸˈߑremoveᇚ㸠ヺᄫヺІ㒧ᴳヺݭಲ䕧㸠ˈݡ䖨ಲব䞣iDŽߑgetlineϢ㒗дЁⱘৠৡߑⳌৠDŽ㒗дᬭᴤ义编写函数reverse(s)将字符串s中的字符顺序颠倒过来。使用该函数编写一个程序每次颠倒一个输入行中的字符顺序DŽreverseߑܜ㽕ᡒࠄᄫヺІsⱘሒˈҢ''צ䗔ϔϾԡ㕂ˈ䖭ḋҹ䆕乴צ分导言分分ᕫࠄⱘᄫヺІⱘϔϾᄫヺϡӮ៤ЎϔϾᄫヺІ㒧ᴳヺDŽབᵰҢ''צ䗔ϔϾԡ㕂䘛ࠄⱘᰃϔϾ㸠ヺ'n'ˈ䙷ህݡצ䗔ϔϾԡ㕂ˈЎ㸠ヺгڣ''ϔḋᖙ乏ߎ㸠ⱘሒDŽব䞣jܜ㹿䆒㕂ЎᄫヺІⱘϔϾᄫヺⱘϟˈব䞣i㹿䆒㕂ЎᄫヺІϔϾᄫヺⱘϟDŽѸᄫヺⱘ䖛Ёˈᑣᇚᇍব䞣j䖯㸠䗦ҢᄫヺІⱘϔϾᄫヺᄫヺІⱘሒ䚼ᮍˈᇍব䞣i䖯㸠䗦ޣҢᄫヺІⱘϔϾᄫヺᄫヺІⱘ䚼ᮍDŽᭈϾ䖛ᇚϔⳈ䖯㸠ࠄব䞣jѢㄝѢব䞣iᯊذℶDŽЏᑣ䇏পϔϾ䕧㸠ˈ乴צПˈᡞ乴צⱘᴀ㸠ᠧߎᴹDŽߑgetlineϢ㒗дЁⱘৠৡߑⳌৠDŽ㒗дᬭᴤ义请编写程序detabˈ将输入中的制表符替换成适当数目的空格使空格充满到下一个制表符终止的地方。假设制表符终止位的位置是固定的比如每隔n列就会出现一个制表符终止位。n应该作为变量还是符号常量呢?៥Ӏ䆒䱨TABINCϾԡ㕂ህӮߎϔϾࠊ㸼ԡDŽ䖭ϾᑣЁˈ៥ӀᡞTABINCᅮНЎDŽব䞣posᰃᑣᴀ㸠Ёⱘᔧԡ㕂DŽᔧ䘛ࠄࠊ㸼ヺⱘᯊˈᑣᇚ䅵ㅫߎ㽕ࠄ䖒ϟϔϾࠊ㸼ԡ䳔㽕ⱘぎḐnbDŽ䖭ϔᰃϟ䴶䖭ᴵ䇁হ䅵ㅫߎᴹⱘ部分第章分བᵰ䘛ࠄⱘᰃϔϾ㸠ヺˈᑣᇚᡞᅗᠧߎᴹᑊᡞব䞣pos䞡ᮄЎ䕧㸠ⱘϔϾᄫヺԡ㕂pos=DŽབᵰ䘛ࠄⱘᰃҪᄫヺˈᑣᇚᡞᅗᠧߎᴹᑊ䗦ব䞣posⱘposDŽ៥ӀᡞTABINCᅮНЎϔϾヺᐌDŽゴЁˈ៥ӀᇚᄺдࠄབЏᑣӴ䗦খˈ䙷ϔⶹ䆚ˈԴህ㛑䅽㞾㸠䆒ᅮ䖲㓁ϸϾࠊ㸼ԡП䯈ⱘ䯈䱨њDŽࠄ䙷ᯊˈԴг䆌ӮᅝᥦϔϾব䞣ᴹᄬTABINCⱘDŽᑣdetabᇚ㒗д㒗дЁ䖯㸠ᠽሩDŽ㒗дᬭᴤ义编写程序entab将空格串替换为最少数量的制表符和空格但要保持单词之间的间隔不变。假设制表符终止位的位置与练习的detab程序的情况相同。当使用一个制表符或者一个空格都可以到达下一个制表符终止位时选用哪种替换字符比较好ᭈব䞣nbntߚᰃᴹぎḐІⱘぎḐࠊ㸼ヺⱘᇥϾDŽব䞣posᰃᑣᴀ㸠Ёⱘᔧԡ㕂DŽ分导言分分ᑣⱘЏ㽕ᛇᰃᡒߎ䚼ぎḐDŽব䞣pos䗦ࠄTABINCⱘϔϾסᯊˈ៥Ӏህ㽕ᡞぎḐІЎϔϾࠊ㸼ヺDŽᔧ䘛ࠄϔϾ䴲ぎḐヺᯊˈᑣᇚܜᡞ䘛ࠄ䖭ϾᄫヺП㌃䍋ᴹⱘࠊ㸼ヺぎḐᠧߎᴹˈݡᡞ䖭ϾᄫヺᠧߎᴹDŽˈᑣᇚᡞব䞣nbnt䞡ᮄ䆒㕂Ў䳊ˈབᵰᔧᄫヺᰃϔϾ㸠ヺˈ䖬㽕ᡞব䞣pos䞡ᮄ䆒㕂Ў䕧㸠ⱘᓔDŽᔧ䘛ࠄϔϾࠊ㸼ヺᯊˈᑣᇚᡞℸ㌃ⱘࠊ㸼ヺᔧ䘛ࠄ䖭Ͼࠊ㸼ヺᠧߎᴹDŽབᵰ䳔ϔϾぎḐህ㛑ࠄ䖒ϟϔϾࠊ㸼ԡˈ៥Ӏⱘ䗝ᢽᰃᡞᅗЎϔϾࠊ㸼ヺˈЎ䖭Ѣ䙓ܡᚙމDŽᑣentabᇚ㒗д㒗дЁ䖯㸠ᠽሩDŽ㒗дᬭᴤ义编写一个程序把较长的输入行“折”成短一些的两行或多行折行的位置在输入行的第n列之前的最后一个非空格符之后。要保证程序能够智能地处理输入行很长以及在指定的列前没有空格或制表符的情况DŽ部分第章分MAXCOLᰃϔϾヺᐌ䞣ˈᅗ㒭ߎњ䕧㸠ⱘᡬ㸠ԡ㕂ˈ䕧㸠ⱘnDŽᭈব䞣posᰃᑣᴀ㸠Ёⱘᔧԡ㕂DŽᑣᇚ䕧㸠ⱘϔ໘nПᇍ䆹䕧㸠ᡬ㸠DŽ䖭Ͼᑣᇚᡞࠊ㸼ヺᠽሩЎぎḐ䘛ࠄϔϾ㸠ヺህᡞℸⱘ䕧ᴀᠧߎᴹᔧব䞣posⱘ䖒ࠄMAXCOLᯊˈህӮᇍ䕧㸠䖯㸠ĀᡬāDŽ分导言分分ߑfindblnkҢ䕧㸠ⱘpos໘ᓔצ䗔ⴔᇏᡒϔϾぎḐⳂⱘᰃЎњᣕᡬ㸠ԡ㕂ⱘऩ䆡ⱘᅠᭈDŽབᵰᡒࠄњϔϾぎḐヺˈᅗህ䖨ಲ䎳䆹ぎḐヺ䴶ⱘ䙷Ͼԡ㕂ⱘϟབᵰᡒࠄぎḐˈᅗህ䖨ಲMAXCOLDŽߑprintlᠧ䕧ߎҢԡ㕂䳊ࠄԡ㕂posˉП䯈ⱘᄫヺDŽߑnewpos䇗ᭈ䕧㸠ˈᅗᇚᡞҢԡ㕂posᓔⱘᄫヺࠊࠄϟϔϾ䕧ߎ㸠ⱘᓔˈݡ䖨ಲব䞣posⱘᮄDŽ㒗дᬭᴤ义编写一个删除C语言程序中所有的注释语句。要正确处理带引号的字符串与字符常量。在C语言程序中注释不允许嵌套DŽ部分第章分䖭Ͼᑣ䆒䕧ᰃϔϾড়ⱘCᑣDŽߑrcomment䞞䇁হⱘ䍋ᖫ*ᡒࠄ䖭Ͼᖫᯊˈᅗᇚ䇗ϔϾߑincomment䞞䇁হⱘ㒧ᴳᖫ*ˈҢ㗠CᑣЁⱘ䞞䇁হ䛑㛑㹿ߴ䰸DŽߑrcomment䖬ᇚऩᓩঠᓩᡒࠄᅗӀᯊˈᅗᇚ䇗ϔϾߑechoquoteDŽߑechoquoteⱘখᇚᣛᯢᡒࠄⱘᄫヺᰃϔϾऩᓩ䖬ᰃϔϾঠᓩDŽechoquoteᓩЁⱘݙᆍ㛑ᣝॳḋ䕧ߎˈϡӮ㹿䇃䅸Ўᰃ䞞DŽߑechoquoteϡӮᡞ䎳ϔϾডᴴ䴶ⱘᓩⳟخᰃ㒧ᴳᓩখ㾕ᬭᴤ义㒗дЁѢ䕀Нᄫヺᑣⱘ䅼䆎DŽҪӏᄫヺ䛑ᇚᣝॳḋ䕧ߎDŽᴀᑣᇚgetchar䖨ಲӊ㒧ᴳヺᯊ㒧ᴳ䖤㸠DŽ㒗дᬭᴤ义编写一个程序查找C语言程序中的基本语法错误如圆括号、方括号以及花括号不配对等。要正确处理引号(包括单引号、双引号)、转义字符序列与注释。(如果读者想把该程序编写成完全通用的程序难度会比较大DŽ分导言分分部分第章分Ϟ䴶䖭Ͼᑣᇍᴀ䇁䫭䇃Ёⱘϔ䚼ߚ䖯㸠њẔᶹDŽ䖭ϾᑣẔᶹ䇁䫭䇃ϡ䜡ᇍⱘᣀǃᮍᣀ㢅ᣀҪ䇁䯂乬䛑ϡᴀᑣⱘẔᶹ㣗ПݙDŽߑsearch䘛ࠄϔϾᎺ㢅ᣀ'{'ህᇍব䞣brace䖯㸠䗦ˈ䘛ࠄϔϾ㢅ᣀ'}'ህᇍব䞣brace䖯㸠䗦ޣDŽᇍব䞣brackᇍᑨѢᮍᣀparenᇍᑨѢᣀⱘ໘гϢℸԐDŽ䖛Ёˈব䞣braceǃbrackparenⱘপᰃℷㄝѢ䳊ⱘᚙމ䛑ᰃড়ⱘԚབᵰব䞣braceǃbrackparenⱘপব៤њ䋳ˈህ㸼䇁䫭䇃ˈᑣᇚᠧߎϔᴵⳌᑨⱘߎ䫭ᙃDŽВᴹ䇈ˈ䖲㓁ߎϾᎺᮍᣀⱘᚙމᅗᇚՓব䞣brackㄝѢᰃড়ⱘˈЎ㛑Ӯ䴶ⱘЁᡒࠄϢП䜡ᇍⱘϾᮍᣀDŽ㽕ᰃ䖲㓁ߎⱘϾᮍᣀՓব䞣brackㄝѢˉˈህϡড়њˈЎ䖭㸼ᯢ䴶Ϣ䖭Ͼᮍᣀ䜡ᇍⱘᎺᮍᣀDŽབᵰϢП䜡ᇍⱘϾᎺᮍᣀⱘ䆱ˈব䞣brackⱘᑨ䆹ㄝѢDŽℸˈ䇁হᰃᖙϡᇥⱘDŽབᵰ䖭ᴵ䇁হˈ䇌བ)(ǃ}}{{Пⱘᚙމህ䛑Ӯ㹿䅸Ўᰃ䜡ᇍⱘDŽЏߑmain䖬ᇚᑊẔᶹᓩऩᓩǃঠᓩ䞞ᖫⱘ䜡ᇍᚙމˈԚᇍ䜡ᇍⱘᖫП䯈ⱘᄫヺϡخẔᶹüЎ䞞ᓩЁⱘᣀǃᮍᣀ㢅ᣀϡ㽕䜡ᇍߎDŽᔧ䘛ࠄEOF䆄ⱘᯊˈᑣᇚᇍᰃᄬᇮ䜡ᇍⱘᣀǃᮍᣀ㢅ᣀ䖯㸠ⱘẔᶹDŽབᵰᄬᣀϡ䜡ᇍⱘᚙމˈᑣህӮ䕧ߎⳌᑨⱘߎ䫭ᙃDŽ分导言分分㒗дᬭᴤ义编写一个程序以确定分别由signed及unsigned限定的char、short、int及long类型变量的取值范围。采用打印标准头文件中的相应值以及直接计算两种方式实现。通过直接计算来确定浮点类型的取值范围是一项难度很大的任务DŽANSICޚ㾘ᅮⱘপ㣗ᖙ乏ӊ<limitsh>ЁᅮНDŽshortǃintlongϡৠⱘӊϞϡৠⱘ䭓ᑺˈ᠔ҹᅗӀϡৠᴎϞⱘপ㣗гᕔᕔӮϡৠDŽϞ䴶ᰃޚӊᴹᅮপ㣗ⱘ㾷އᮍḜDŽCゴǃ䖤ㅫヺϢ㸼䖒ᓣϔ㾷އᮍḜᰃᣝԡ䖤ㅫヺখ㾕ᬭᴤ义䖯㸠䅵ㅫDŽ㸼䖒ᓣܜᡞᄫⱘϾѠ䖯ࠊԡ䚼䕀Ўˈᇚ㒧ᵰ䕀Ўunsignedcharݡᡞ䖭Ͼunsignedcharϔԡҹ䰸ヺԡˈᡞᅗ䕀Ўchar䖭ϔⱘ㒜㒧ᵰህᕫࠄњsignedᄫヺⱘDŽ㒗дᬭᴤ义在不使用或||的条件下编写一个与上面的for循环语句等价的循环语句DŽॳᴹⱘforᕾ䇁হϢПㄝӋⱘᕾ䇁হ部分第章分ϡՓ||ヺⱘᚙމϟˈ៥Ӏህ㛑ᡞॳᴹⱘforᕾߚ㾷Ўϔif䇁হDŽ៥Ӏ䖬ᖙ乏ᬍⱘᴵӊ㸼䖒ᓣDŽབˈॳᴹⱘforᕾ䇁হЁˈⱘᰃব䞣iᰃҡপ㣗ПݙDŽㄝӋⱘᕾ䇁হЁˈ㸼ᯢব䞣i䍙ߎপ㣗ᯊᕾᑨᔧ㒧ᴳDŽokloopᰃϔϾᵮВব䞣DŽϔᴵӊЁⱘᶤϔϾᕫࠄ䎇ˈokloopህᇚ㹿䆒㕂ЎNOˈ㗠ᕾгህ㒧ᴳњDŽ㒗дᬭᴤ义编写函数htoi(s)把由十六进制数字组成的字符串(包含可选的前缀x或X)转换为与之等价的整型值。字符串中允许包含的数字包括:~、a~f以及A~FDŽ分类型、运算符与表达式分分ᭈϾߑᰃϟ䴶䖭ᴵ䇁হࠊⱘЁˈᭈব䞣iᰃ㒘sⱘϟDŽᔧsiᰃϔϾড়ⱘक䖯ࠊᄫᯊˈinhexⱘপᇚᣕЎYESˈ㗠ᕾгᇚ㒻㓁ᠻ㸠DŽᭈব䞣hexdigitⱘপ㣗ᰃ~DŽ䇁হ䆕㒘ܗsiᰃϔϾড়ⱘक䖯ࠊᄫᄫヺˈhexdigitⱘ㣗ПݙDŽᔧᕾ㒧ᴳᯊˈߑhtoiᇚ䖨ಲব䞣nⱘDŽ䖭ϾߑϢatoiᕜⳌԐখ㾕ᬭᴤ义DŽ㒗дᬭᴤ义重新编写函数squeeze(s,s)将字符串s中任何与字符串s中字符匹配的字符都删除DŽ䖭Ͼߑⱘϔᴵ䇁হᇍᭈব䞣ikǃᄫヺ㒘sⱘϟҹঞ㒧ᵰᄫヺІгህᰃsߚ䖯㸠њDŽᄫヺІsЁϢᄫヺІsЁⱘᄫヺⳌऍ䜡ⱘᄫヺ䛑ᇚ㹿ߴ䰸DŽᭈϾᕾ䇁হᇚϔⳈᠻ㸠ࠄᄫヺІs㒧ᴳЎℶDŽѠᴵfor䇁হᇚsiϢsЁⱘϾᄫヺⳌ䕗DŽ䖭Ͼᕾᇚᠻ㸠ࠄᄫヺІs㒧ᴳ㗙ᡒࠄϔϾऍ䜡ᄫヺЎℶDŽབᵰᡒࠄऍ䜡ⱘᄫヺˈsiህᇚ㹿ࠊࠄ㒧ᵰᄫヺІЁབᵰᡒࠄњऍ䜡ⱘᄫヺˈ䇁হЁⱘᴵӊ㸼䖒ᓣⱘ㒧ᵰᇚᰃˈsiህϡӮ㹿ࠊࠄ㒧ᵰᄫヺІЁᅗᇚҢᄫヺІsЁ㹿ࠨ䰸ߎএDŽ㒗дᬭᴤ义编写函数any(s,s)将字符串s中的任一字符在字符串s中第一次出现的位置作部分第章分为结果返回。如果s中不包含s中的字符则返回-。(标准库函数strpbrk具有同样的功能但它返回的是指向该位置的指针。)ᭈϾߑᰃϟ䴶䖭ᴵ䇁হࠊⱘᔧ䖭Ͼᕾℷᐌ㒧ᴳᯊࠄ䖒ᄫヺІsⱘሒᯊˈߑanyᇚ䖨ಲˉҹ㸼ᯢᄫヺІsЁᡒࠄᄫヺІsЁⱘᄫヺDŽব䞣iⱘপবϔˈѠᴵfor䇁হ䛑Ӯ㹿ᠻ㸠DŽᅗᇚsiϢsЁⱘϾᄫヺⳌ䕗DŽབᵰᄫヺІsЁⱘᶤϾᄫヺϢsiⳌऍ䜡ˈ䖨ಲব䞣iüüгህᰃᄫヺІsЁߎᄫヺІsЁⱘᄫヺⱘ䙷Ͼԡ㕂DŽ㒗дᬭᴤ义编写一个函数setbits(x,p,n,y)ˈ该函数返回对x执行下列操作后的结果值:将x中从第p位开始的n个(二进制)位设置为y中最右边n位的值x的其余各位保持不变DŽЎњᡞxЁⱘnԡ䆒㕂Ўy䖍ⱘnԡⱘབϟ᠔៥Ӏ䳔㽕ᇍxЁⱘnԡ䳊ᡞyЁ䰸䖍ⱘnԡҹⱘҪԡ䛑䳊ᑊᎺࠄpԡ໘ᇍ䴶ϸℹⱘ㒧ᵰ䖯㸠ORDŽབϟ᠔ЎњᇍxЁⱘnԡ䳊ˈ៥Ӏ䳔㽕ᡞxϢϔϾሣ㬑ⷕ䖯㸠ANDDŽ䖭Ͼሣ㬑ⷕҢԡ㕂pᓔⱘnԡ䛑ᰃˈҪԡЎDŽ分类型、运算符与表达式分分佪ܜˈᡞϔϾ᠔ԡ䛑Ўⱘሣ㬑ⷕᎺnԡˈᅗⱘ䖍ࠊ䗴ߎnԡˈᡞሣ㬑ⷕ䖍ⱘnԡ䆒㕂Ўˈᡞԡ䚼䆒㕂Ўϟᴹˈᡞሣ㬑ⷕ䖍ⱘnϾЎⱘԡᎺࠄpԡ໘ݡᕔˈᡞሣ㬑ⷕҢpԡᓔⱘnԡ䆒㕂Ўˈᡞԡ䚼䆒㕂Ў䖭Ͼሣ㬑ⷕx䖯㸠ANDˈህᅠ៤њᇍxҢpԡᓔⱘnԡ䳊ⱘᎹDŽԧབϟЎњᡞyЁ䰸ッⱘnԡҹⱘ᠔ԡ䳊ˈ៥Ӏ䳔㽕ッⱘnԡЎˈԡЎⱘሣ㬑ⷕᇍy䖯㸠ANDˈབϟ᠔䖭Ͼሣ㬑ⷕy䖯㸠ANDˈ៥Ӏህ䗝ߎњyッⱘnԡDŽԧབϟ᠔ϟᴹˈ៥Ӏ䖬䳔㽕ϟ䴶ⱘᡞ䖭nԡᎺࠄԡ㕂p໘ˈᇍ䗮䖛Ϟ䗄ℹ偸ᕫࠄⱘϸϾ䰊ᗻ㒧ᵰ䖯㸠ORህᅠ៤њĀᇚxЁҢpԡᓔⱘnԡ䆒㕂ЎyЁ䖍nԡⱘˈxⱘԡᣕϡবāDŽ㒗дᬭᴤ义编写一个函数invert(x,p,n)该函数返回对x执行下列操作后的结果值:将x中从第p位开始的n个(二进制)位求反(即变成变成)x的其余各位保持不变DŽ佪ܜˈᡞϔϾ᠔ԡ䛑Ўⱘሣ㬑ⷕᎺnԡˈᅗⱘ䖍ࠊ䗴ߎnԡˈᡞሣ㬑ⷕ䖍ⱘnԡ䆒㕂Ўˈᡞԡ䚼䆒㕂Ўϟᴹˈᡞሣ㬑ⷕ䖍ⱘnϾЎⱘԡᎺࠄpԡ໘䖭Ͼሣ㬑ⷕx䖯㸠ᣝԡᓖ^ˈህᅠ៤њᇍxҢpԡᓔⱘnԡ䖯㸠㗏䕀ⱘᎹDŽ部分第章分ԧབϟབᵰϸϾѠ䖯ࠊԡপϡৠˈᅗӀⱘᓖ㒧ᵰᇚᰃབᵰϸϾѠ䖯ࠊԡপⳌৠˈᅗӀⱘᓖ㒧ᵰᇚᰃDŽ៥ӀⱘⳂᰃᇍxҢpԡᓔⱘnԡ䖯㸠㗏䕀ˈ㗠ҢpԡᓔnԡԡЎⱘሣ㬑ⷕx䖯㸠ᓖᙄད㛑ᅲ䖭ϔⳂབᵰॳᴹⱘԡᰃˈᅗϢ䖯㸠ᓖⱘ㒧ᵰᇚᰃüᕫࠄњ㗏䕀བᵰॳᴹⱘԡᰃˈᅗϢ䖯㸠ᓖⱘ㒧ᵰᇚᰃüгᕫࠄњ㗏䕀DŽ䖭nԡҹⱘҪԡᇚϢ䖯㸠ᓖ^ϸϾԡⳌৠⱘ㒧ᵰᰃüᣕϡব^ϸϾԡϡৠⱘ㒧ᵰᰃüгᣕϡবDŽᘏПˈᣛᅮⱘnԡᕫࠄњ㗏䕀DŽ㒗дᬭᴤ义编写一个函数rightrot(x,n)该函数返回将x循环右移(即从最右端移出的位将从最左端再移入)n(二进制)位后所得到的值DŽ佪ܜˈ៥Ӏব䞣rbitᡞxッⱘԡᎺࠄᎺッⱘԡ㕂wordlength()ˉDŽˈ៥ӀᡞxϔԡˈݡᇍⱘxϢrbit䖯㸠ORˈ䖭ህᅠ៤њϔᇍxⱘᕾDŽߑrightrotᇚᇍxخnᕾDŽߑwordlength()ⱘᰃ䅵ㅫߎ䖤㸠ᑣⱘ䅵ㅫᴎ᠔Փⱘᄫ䭓DŽϟ䴶ᰃ䖭Ͼ㒗дⱘϔ㾷分类型、运算符与表达式分分བᵰᇍx䖯㸠ᕾⱘᘏԡnϢϔϾ᮴ヺᭈⱘѠ䖯ࠊԡ䖭䅵ㅫᴎⱘᄫ䭓Ⳍㄝˈᅠ៤䖭ѯᕾⱘ㒧ᵰᇚϢxᅠϔḋˈℸ៥Ӏህϡᖙᇍx䖯㸠ᕾњDŽབᵰnᇣѢ䖭䅵ㅫᴎⱘᄫ䭓ˈ䙷៥Ӏህᖙ乏ᡞxᕾnԡDŽབᵰnѢ䖭䅵ㅫᴎⱘᄫ䭓ˈ䙷Мˈ៥Ӏ䳔ܜপ䖤ㅫヺߎnᇍ䖭䅵ㅫᴎⱘᄫ䭓ⱘˈݡᡞxᕾ䖭Ͼ᠔ҷ㸼ⱘDŽѢϞ䗄ߚᵤˈ៥ӀᇚᕫࠄϔϾϡ䳔㽕Փᕾ䇁হⱘ㾷އᮍḜDŽ~<<nᡞϔϾⱘሣ㬑ⷕᎺnԡˈᅗⱘッࠊ䗴ߎnԡ~(~<<n)ᡞሣ㬑ⷕッⱘnԡ䆒㕂Ўˈԡ䆒㕂Ўᔧ៥Ӏ䖭Ͼሣ㬑ⷕx䖯㸠AND䖤ㅫᯊˈxッⱘnԡᇚ㹿䌟㒭ব䞣rbitsDŽˈᇚrbitsЁⱘᎺࠄᅗⱘᎺッˈᡞxnԡˈݡᇍⱘxrbits䖯㸠OR䖤ㅫˈህᅠ៤њᇍ᮴ヺᭈxᕾnԡDŽ㒗дᬭᴤ义在求对二的补码时表达式x=(x-)可以删除x中最右边值为的一个二进制位。请解释这样做的道理。用这一方法重写bitcount函数以加快其执行速度。៥Ӏܜ䱣Ўxˉ䗝ᢽϔϾˈབѠ䖯ࠊक䖯ࠊЁⱘDŽ៥Ӏⶹ䘧ˈ(xˉ)ⱘ㒧ᵰᅲህㄝѢxˈབϟ᠔Ѡ䖯ࠊक䖯ࠊxˉx៥Ӏপ(xˉ)ˈᇍᕫࠄxDŽ(xˉ)ッЎⱘԡ㒧ᵰxЁবЎDŽгህᰃ䇈ˈxッЎⱘԡϢ(xˉ)ৠϔԡ㕂ϞЎⱘԡᰃᇍᑨⱘDŽ᠔ҹˈϔϾ䞛ᇍѠⱘ㸹ⷕ㸼ⱘ㒳Ёˈx(xˉ)ᇚ䰸xッЎⱘԡDŽ部分第章分៥ӀҹϔϾԡⱘ᮴ヺЎߚᵤϔϟbitcountߑⱘ㓪ݭᗱ䏃DŽЎњ㒳䅵ߎ䖭ϾЁЎⱘԡⱘϾˈॳᴹⱘbitcountߑ䳔㽕䖯㸠ԡᑊᇍッⱘԡخ䕗DŽĀx(xˉ)ᇚ䰸xッЎⱘԡā䖭ϔ㒧䆎ˈ៥Ӏҹ㓪ݭߎϔϾᠻ㸠䗳ᑺᖿⱘbitcountߑDŽབˈ䆒xㄝѢˈѢᰃѠ䖯ࠊ㸼ⱘxüक䖯ࠊѠ䖯ࠊ㸼ⱘ(xˉ)üक䖯ࠊx(xˉ)㾕ˈxッЎⱘԡ㹿䰸ЎњDŽ䖤ㅫ㒧ᵰᰃѠ䖯ࠊक䖯ࠊDŽݡҹЎxˈݡ䞡Ϟ䗄䖛ˈᕫࠄѠ䖯ࠊ㸼ⱘxüक䖯ࠊѠ䖯ࠊ㸼ⱘ(xˉ)üक䖯ࠊx(xˉ)xッЎⱘԡজ㹿䰸ЎњDŽ䖤ㅫ㒧ᵰᰃѠ䖯ࠊक䖯ࠊDŽℸᯊˈᮄⱘxѠ䖯ࠊЁݡгⱘԡњˈ䖛гህℸ㒧ᴳDŽണⱘᚙމϟüᔧxЁⱘ᠔ԡ䛑ЎᯊˈᮄᮍḜ䳔㽕䖯㸠ⱘANDϢॳbitcountߑ䳔㽕䖯㸠ⱘԡϔḋDŽԚᘏⱘᴹ䇈ˈᣝᮄᮍḜ㓪ݭߎᴹⱘbitcountߑ㽕ᠻ㸠ᕫᖿϔѯDŽ㒗дᬭᴤ义重新编写将大写字母转换为小写字母的函数lower并用条件表达式替代其中的ifelse结构DŽབᵰcᰃϔϾݭᄫ䖭䞠ⱘ䅼䆎䩜ᇍASCIIᄫヺˈ䙷Мᴵӊ㸼䖒ᓣህᇚЎˈ䖭Ͼᮄlowerߑህᇚᇍϟ䴶ⱘ㸼䖒ᓣ䖨ಲϔϾᇣݭᄫDŽˈབᵰcᰃϔϾᇣݭᄫˈlowerߑህӮॳᇕϡ䖨ಲ䖭ϾᄫヺDŽ分类型、运算符与表达式分分㒗дᬭᴤ义在上面有关折半查找的例子中while循环语句内共执行了两次测试其实只要一次就足够(代价是将更多的测试在循环外执行)。重写该函数使得在循环内部只执行一次测试。比较两种版本函数的运行时间DŽ៥Ӏᡞwhile䇁হⱘᕾᴵӊ㸼䖒ᓣҢॳܜⱘᬍЎ䖭ḋˈwhile䇁হⱘᕾ䚼ߚϔᴵif䇁হᅠ៤DŽԚ䖭㽕៥Ӏᖙ乏ϔ䖯whileᕾПҹঞᕾᔧЁ䅵ㅫߎmidⱘDŽwhileᕾ㒧ᴳПˈ៥Ӏ䖬䳔㽕ϔᴵif䇁হᴹwhileᕾᰃᰃЎ㒘vЁᡒࠄx㗠㒜ℶⱘDŽབᵰ㒘䞠ᡒࠄњxˈߑbinsearchᇚ䖨ಲmidব䞣ˈ䖨ಲˉDŽϸᮍḜⱘᠻ㸠ᯊ䯈ТҔМᏂᓖDŽ៥Ӏᑊᕫࠄⱘᗻ㛑ᬍ䖯ˈড㗠ᥝњҷⷕ䇏ᗻDŽᬭᴤ义Ϟॳⱘҷⷕᆍ䯙䇏㾷DŽCゴࠊ㒗дᬭᴤ义编写一个函数escape(s,t)将字符串t复制到字符串s中并在复制过程中将换行符、制表符等不可显示字符分别转换为n、t等相应的可显示的转义字符序列。要求使用switch语句。再编写一个具有相反功能的函数在复制过程中将转义字符序列转换为实际字符。䇁হࠊⴔᭈϾᕾDŽব䞣iᰃᄫヺІtⱘᓩˈ㗠ব䞣jᰃⳂᄫヺІsⱘᓩDŽswitch䇁হЁ䏃ߚᇍᑨѢ㸠ヺⱘ'n'ǃᇍᑨѢࠊ㸼ヺⱘ't'defaultDŽབᵰᄫヺtiϢϸᚙމϡऍ䜡ˈescapeߑህᇚᠻ㸠Ўdefaultⱘ䚼ߚᡞtiࠊࠄᄫヺІsЁএDŽunescapeߑϢescapeߑᕜⳌԐˈབϟ᠔部分第章分བᵰᄫヺtiᰃϔϾডᴴˈ៥Ӏህ䗮䖛ϔϾswitch䇁হᡞn䕀Ў㸠ヺˈᡞt䕀Ўࠊ㸼ヺDŽswitch䇁হⱘdefault䚼ߚᴹ໘䎳ডᴴ䴶ⱘᰃҪᄫヺⱘᚙމüᡞডᴴtiࠊࠄᄫヺІsЁএDŽswitch䇁হᰃܕ䆌ጠⱘDŽϟ䴶ᰃℸ㒗дⱘϔ㾷އᮍDŽϞ䴶䖭ҷⷕЁˈሖⱘswitch䇁হ䋳䋷ऎߚডᴴҪᄫヺdefaultˈডᴴⱘߚЁ䖬ጠⴔϔᴵswitch䇁হDŽ㒗дᬭᴤ义编写函数expand(s,s)将字符串s中类似于az一类的速记符号在字符串s中扩展为等价的完整列表abcxyz。该函数可以处理大小写字母和数字并可以处理abc、az与az等类似的情况。作为前导和尾随的字符原样复制DŽ分控制流分分expandߑܜᡞsЁⱘϔϾᄫヺ䇏ࠄব䞣cЁˈݡẔᶹϟϔϾᄫヺDŽབᵰϟϔϾᄫヺᰃϨݡϟϔϾᄫヺѢㄝѢᄬব䞣cЁⱘᄫヺˈexpandߑህӮᇍ䖭Ͼ䗳䆄ヺ䖯㸠ᠽሩDŽˈexpandߑህᇚᡞব䞣cЁⱘᄫヺⳈࠊࠄsЁএDŽexpandߑ㛑ᇍASCIIᄫヺ䖯㸠໘DŽབˈᅗᇚᡞ䗳䆄ヺazᠽሩЎϢПㄝӋⱘ㸼abcĂxyzˈᡞ!~ᠽሩЎ!"#ĂABCĂXYZĂabcĂxyzĂ|}~DŽ䖭ϔ㾷އᮍḜᰃᖋOsnabruckᄺⱘAxelSchreinerᦤկⱘDŽ㒗дᬭᴤ义在数的对二的补码表示中我们编写的itoa函数不能处理最大的负数即n等于-(ᄫ䭓ˉ)的情况。请解释其原因。修改该函数使它在任何机器上运行时都能打印出正确的值DŽ佪ܜˈ៥Ӏᖙ乏њ㾷䖭ḋϔϾџᅲˉ(ᄫ䭓ˉ)᮴䗮䖛䇁হn=ˉn部分第章分䕀ЎϔϾℷDŽ䖭ᰃЎᇍѠⱘ㸹ⷕ᠔㛑㸼ⱘℷ㛑ᰃ(ᄫ䭓ˉ)ˉ៥Ӏ㾷ㄨ䖭䘧㒗дⱘᗱ䏃ᰃܜᣝ䗚ᑣߎԡᄫˈݡߑreverseখ㾕㒗дᇍᄫヺІs䞠ⱘᄫヺخϔ乴צ㗠ᕫࠄ㒜ⱘ㒧ᵰDŽԧ䇈ˈ䖭ϾitoaߑЁˈ៥Ӏব䞣signᄬnⱘˈᅣabs䅵ㅫnⱘ㒱ᇍDŽ䳔ᡞপⱘ㒧ᵰ䕀Ўℷˈ䖭ḋህ㛑㒩䖛᮴ᡞ䋳ˉ(ᄫ䭓ˉ)䕀ЎϔϾℷⱘ䯂乬DŽℸˈ៥Ӏ䖬ᡞdowhile䇁হЁⱘᴵӊ㸼䖒ᓣҢॳᴹⱘᬍЎ䖭ᰃЎњ䙓ܡЎnᰃϔϾ䋳㗠Փߑitoa䱋᮴䰤ᕾDŽ㒗дᬭᴤ义编写函数itob(n,s,b)将整数n转换为以b为底的数并将转换结果以字符的形式保存到字符串s中。例如itob(n,s,)把整数n格式化成十六进制整数保存在s中。៥Ӏ㾷ㄨ䖭䘧㒗дⱘᗱ䏃ᰃܜᣝ䗚ᑣ៤b䖯ࠊⱘϔԡᄫˈݡߑreverseখ㾕㒗дᇍᄫヺІsЁⱘᄫヺخϔ乴צ㗠ᕫࠄ㒜ⱘ㒧ᵰDŽЎ៥Ӏ㽕ᡞᭈn䕀ЎϔϾb䖯ࠊˈ᠔ҹ៥Ӏ㽕ձ䖨ಲϔϾࠄbˉП䯈ⱘᑊᡞ䖭Ͼ䕀ЎⳌᑨⱘᄫヺᄬࠄᄫヺІsЁDŽݡ䇗ᭈnⱘDŽ㽕nbѢ䳊ˈ䖭ϔ䖛ህᇚϔⳈᕾϟএDŽ分控制流分分㒗дᬭᴤ义修改itoa函数使得该函数可以接收三个参数。其中第三个参数为最小字段宽度。为了保证转换后所得的结果至少具有第三个参数指定的最小宽度在必要时应在所得结果的左边填充一定的空格DŽϞ䴶䖭ϾߑϢ㒗дЁⱘitoaߑᕜⳌԐDŽ៥Ӏᇍخњᖙ㽕ⱘᬍ䖭Ͼwhileᕾⱘᰃᖙ㽕ᯊ㒭ᄫヺІs㸹䎇ぎḐDŽ部分第章分封面封底书名页版权页出版者的话专家指导委员会前言页目录页第章导言第章类型、运算符与表达式第章控制流第章函数与程序结构第章指针与数组第章结构第章输入与输出第章UNIX系统接口

职业精品

废旧物资处置管理办法.docx

学校固定资产管理制度.doc

机械合同范本.doc

显示屏广告发布合同范本.doc

用户评论

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

精彩专题

相关资料换一换

资料评价:

/ 142
所需积分:0 立即下载

意见
反馈

返回
顶部