C程序常见模式小结.doc

上传人:wux****ua 文档编号:9158931 上传时间:2020-04-03 格式:DOC 页数:4 大小:40.02KB
返回 下载 相关 举报
C程序常见模式小结.doc_第1页
第1页 / 共4页
C程序常见模式小结.doc_第2页
第2页 / 共4页
C程序常见模式小结.doc_第3页
第3页 / 共4页
点击查看更多>>
资源描述
刚刚接触程序的同学,可能经常面临着拿到题目不知道从何写起的问题。其实基本的程序设计,很大程度上不是一种创造性的工作,而是一种模仿性的工作。如果你只是学了语法,然后直接面对着问题,想凭空想出一种解决方法,这可能是很难的。但是如果你弄懂了一个基本的程序,总结出了一个基本模式,然后模仿着再解决类似的问题,这就会容易很多。这与我们学英语要背例句是一个道理。你知道了May I borrow your pen?,你就可以类似的写出借书借钱的句子来。或者说你要背几个议论文的常见模式:Some people say AAAAAA. While others think BBBBBBB. From my point of view, CCCCCCCCC. 然后凡是遇到类似的作文题就可以套进去。对于初学者而言,程序能力强不强,可能很大程度上取决于他见过的模式多不多,以及见到一个新的问题,是不是能够套到模式里面去。在这里,我总结出我们目前所学的常用基本模式,大家应该将这些模式掌握得非常熟练。至于其余的,就有待自己积累了。选择模式:如果A条件成立,做B操作,否则做C操作。if ( A )B;elseC;这就是一个最基本的模式。这个说起来似乎很简单,具体做起来可能还是会有一些困难,例如是否能够认出这个框架,或者A这个条件是否能够写对,B、C操作能否处理好,都有可能存在问题。先看一个简单的例子,oj1041:从三鹿奶粉事件开始,众多三氯氰胺超标的食品出来勒。10月8日发布公告:“液态奶(包括原料乳)、奶粉、其他配方乳粉中三聚氰胺的限量值为2.5mg/kg,高于2.5mg/kg的产品一律不得销售。”现在我们就来对多家企业产品进行检测。结合后面的输入输出要求,实际上我们就可以将题目简化成:如果含量/质量大于2.5,输出被污染,否则输出没有被污染。这样很容易就可以得到代码了。我们在上课的时候,说过可以通过流程图,帮助理清思路。实际上除了流程图之外,也可以用伪代码。伪代码简单的说,就是将你的思路用自然语言+程序控制语法写出来。例如上面就可以写成:if 含量/质量大于2.5 输出被污染else 输出没被污染事实上,这时候程序的思路都已经清楚了,剩下就只需要翻译成C语言就好了。比流程图更加简单一点,自己可以试着用一用。拆数模式:要拆出一个数的右边第i位,首先使其整除10的i-1次方,将要拆的位变到右边的第1位,然后%10即可。例如,求123的右边第2位,则先整除10的2-1次方,得到12,然后12%10=2。1+2+n=n(n+1)/2。if-else链模式:当前问题需要分成互不相交的若干种情况来解决if ( 情况一 )处理情况一;else if ( 情况二 )处理情况二;。else 处理剩余情况;这类模型的要点是各种情况互不重叠,只会属于一种情况。这个问题很容易解决,但是当情况比较复杂,判断有可能出现重叠包含关系时,如何安排各种情况的顺序就比较有讲究,一般应该把特殊的情况放在前面先进行判断。例如oj1033,判断三角形:输入三角形的三条边,判断它们能否构成三角形。若能构成三角形,指出是何种三角形(等腰三角形isosceles triangle、等边三角形equilateral triangle,直角三角形right-angled triangle、一般三角形scalene triangle)。 这里等边三角形也能同时满足等腰三角形以及一般三角形的条件,如果先判断一般三角形,则等边三角形的情况就不会进入,因此需要把等边三角形的判断放到前面,以此类推。这个题目要写的话,建议先把伪代码写清楚。循环指定次数模式:int count, times;scanf( “%d”, × );for ( count = 0; count times; count+ )做要做的事情循环到特定条件退出模式:读入第一组数据while(当前数据不满足结束条件) 处理当前数据 读入下一组数据在这个模式中,注意while括号里面是结束条件的否定循环到特定条件退出模式二:while(1) 读入一组数据if 当前数据满足结束条件break;处理当前数据循环到特定条件退出模式中,第二种模式相对容易写对,因为结束条件通常比较好判断。而第一种模式while括号里要写结束条件的否定,否定用逻辑运算符连接的表达式时,需要注意变运算符问题来看一个综合实例判断三角形,题目是这样的:判断输入的三个整数能否构成三角形三角形:任意两边之和大于第三边多组测试数据,每组输入三个整数,为三角形的三条边长如果三个边长均为0,则结束程序如果有至少一条边为非正数,则不处理如果能构成三角形则输出yes,否则输出no,注意要换行在这个例子中,首先要分析出输入的方式,根据题目描述,是遇到三个0时结束,即循环到特定条件结束模式。确定了输入模式之后,就可以读入一组,处理一组了。在处理的过程中,可以看到还有一个要求,如果有一条边为非正数,则不处理,注意,像这样的要求,我们直接使用前面说的if模式即可,判断是否没有出现这种情况,只有没出现的时候才处理。结束的问题在循环中处理,而处理不处理的问题通过条件语句处理这就是根据经验作出的选择。现在我们需要两个条件式,一个判断是否结束,另一个判断是否需要处理。先来看是否结束。这个结束的条件是大家都是0,那就是( a = 0 ) & ( b = 0 ) & ( c = 0 )三个条件必须同时成立才能结束,如果使用模式二,则这句话很容易写对。可是如果使用模式一,则需要用到结束条件的否定,这个否定条件怎么写呢。一个最简单的方法是直接加上表示否定的逻辑运算符,即(!( a = 0 ) & ( b = 0 ) & ( c = 0 ),也就是不满足a、b、c都等于0的条件。如果不喜欢这么写,而是想用!=的形式,则需要用到德摩根率的第一条,变号。变号的意思是,&变成|,所以结束条件的否定要写为:( a != 0 )|(b != 0 )|( c != 0 )也就是a、b、c至少有一个不为0就接着循环。类似的,我们来看处理不处理的问题,不处理的条件是只要有一个非正就不处理。在这里,有一个经验,那就是类似“有一个”,或者含有“非”或者“不”的描述,在翻译成条件表达式的时候很容易出现问题,所以一个简单的办法,就是尽量处理肯定、所有的情况。这里,处理的条件是所有的都是正数才处理,这个就很容易写对了。在写程序时,根据实际情况,当需要用到if else语句进行二选一时,可以将比较好判断的那部分放到if里。求和、平均、计数模式:P44:28套-三【计数】P12:第2套-三【求和】函数传参&返回结果模式int fun(int x,int y)return ;检查条件是否满足并返回是或者否模式判断一个数是否是素数传递指针作为参数模式:P81:56套-二、三遍历数组进行处理模式找最大值模式&传递数组作为参数模式传递二维数组作为参数&遍历二维数组进行处理模式*标记数组模式。补充示例cinema*将不确定个数数据放入数组模式*存储数据查询模式。利用数组统计频率&字符的判断模式。字符串处理模式*选择排序模式以上基本涵盖了上课讲的重点内容,当然很多题目是以上各种模式的综合运用。另外,大家还应总结各种情况下的输入输出方法,以及处理各类型问题的常见错误。例如字符串处理的常见错误、数组处理的常见错误等上课时反复强调的问题。
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 管理文书 > 工作总结


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!