计算机三级上机南开100题+难题解析.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机三级上机南开100题难题解析

计算机三级上机南开100题 难题解析 前言 对于南开100题中难度较大的几道题,题的答案程序都比较长,死记硬背不好背下来, 关键是要在心里明确并牢记要完成题目指定的功能所需完成的步骤! 心中清楚了需要完成的步骤,在考场上你只要根据这些步骤编制一定的代码实现就可以了! 所以关键是要知道“要做什么”,知道了“要做什么”后至于“怎么做”,只要你的C语言基础过关就可以办到! 再换句话说就是: 要想写出代码先要清楚完成指定功能的“算法”! 心中明确了“算法”,那么你只需按部就班转化为C语言程序代码即可! 另外声明:我下面的讲解有的很废话,语言很累赘,一是由于个人水平所限,二是由于我想尽量把题目解析得浅显易懂面面俱到!所以尽管语言很烦冗,但个人认为还是很浅显易懂的!这些文字只是本人第一次准备三级上机的心得总结,由于本人水平有限,如有错误之处欢迎交流,批评指正! 本人觉得南开100题中最难的也就三四道题。其中就包括字符串处理问题。 这种题型涉及到了南开100题的第三、四题。 下面先解析南开100题的第四题。 同意转载但请表明出处:/m/cuihuan 南开100题第四题 首先明确函数的功能是: 以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排。最后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组xx中。 木易版参考答案: void StrOL(void) { int i,j,k,s,m,strl; char str[80]; for(i=0;imaxline;i++) { strl=strlen(xx[i]); memset(str,0,80); /*初始化这字符串数组str*/ s=k=0; for(j=strl-1;j=0;j--) /*从当前字符串尾部开始向前倒序循环,实现题意要求的倒排*/ { if(isalpha(xx[i][j])) k++; /*如果当前字符是字母a~z或A~Z,则k加一*/ else { for(m=1;m=k;m++) /*否则将长度为k的单词顺序存入到字符串数组str中,s值加1*/ str[s++]=xx[i][j+m]; k=0; /*将k值清0,以方便下一个单词的长度计数*/ } if(!isalpha(xx[i][j])) str[s++]= ; /*如果当前字符不是字母a~z或A~Z,则以空格代之存入到字符串数组str中,s值加一*/ } for(m=1;m=k;m++) /*此时的k值为当前字符串中第一个单词的长度,但在上一个for循环中没能存入到字符串数组str中,所以在这里将其存入到str中*/ str[s++]=xx[i][j+m]; str[s]=\0; /*在当前行尾加0以标记此行的结束*/ strcpy(xx[i],str); /*将倒排好的当前字符串重新存回到当前行xx中*/ } } 清楚变量: 程序代码中: 变量s:用于扫描每行字符串, 变量k:用于扫描每个单词。 字符串变量str[80]:用于存储每行处理完的字符。每行全部处理完后,即该行单词全部逆序排好后就将此字符串暂存变量赋值给原字符串全局变量xx[50][80]。 步骤: ㈠确定最外层循环:for(i=0;imaxline;i++) ㈡每行字符串处理又需要一个循环:for(j=strl-1;j=0;j--) 从每行尾部开始逆序扫描每行字符串。 向前扫描过程中是字母的继续前行;当遇到非字母字符,则停住,这样就确定了一个单词,将前面刚确定的这个单词存入字符串变量中! ② 存好前面这个单词后将接下来的这个非字母字符变为空格,然后继续向前扫描。 ①②一直在每行字符串的循环中反复执行,直至逆序扫描至该行行首! 注意事项: ①开始先将字符串暂存变量初始化为空。代码是memset(str,0,80); 接着每行字符串扫描完处理完都要先将字符串暂存变量初始化为空后,再接着扫描处理下一行字符串!故代码memset(str,0,80); 要么放在两个循环for(i=0;imaxline;i++)和for(j=strl-1;j=0;j--) 之间要么也可以放在for(j=strl-1;j=0;j--)循环体的最前面! ②与①类似,每扫描并确定了一个单词,都要将变量k重新初始化赋值为0。(另外须注意:在程序处理字符串前,最最开始时s=0;k=0;) ③每行扫描的最后一个单词,即每行原字符串的第一个单词都未及时存入字符串暂存变量中!由于算法中,从后向前扫描字符串,只有当碰到了非字母字符时,才确定了一个单词并将刚刚确定的前面一个单词立即

文档评论(0)

almm118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档