爱问 爱问共享资料 爱问分类
首页 > > > C程序设计语言(第2版·新版)习题解答.pdf

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

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

上传者: guozi
638次下载 0人收藏 暂无简介 简介 2012-04-12 举报

简介:C语言好书

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

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

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

上传者: guozi
638次下载 0人收藏 暂无简介 简介 2012-04-12 举报

简介:C语言好书

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

用户评论

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

资料阅读排行

关闭

请选择举报的类型

关闭

提示

提交成功!

感谢您对爱问共享资料的支持,我们将尽快核实并处理您的举报信息。

关闭

提示

提交失败!

您的举报信息提交失败,请重试!

关闭

提示

重复举报!

亲爱的用户!感觉您对爱问共享资料的支持,请勿重复举报噢!

全屏 缩小 放大
收藏
资料评价:

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

温馨提示

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