过程化程序设计中典型案例的多思路分析

来源 :今日财富 | 被引量 : 0次 | 上传用户:wanchh520
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:过程化编程是面向对象编程的基础,它的规律和特点适合采用案例教学、适合进行思维训练。通过对典型案例的剖析,在给出了多种解决方案的过程中,本文的亮点是哲学视野下的思维拓展和思维创新。作为基础编程训练,本文对《C/C++程序设计》课程教学有实用价值。
  关键词:过程化编程;案例教学;辗转相除法;创新思路
  过程化程序设计方法即结构化程序设计方法是“自顶向下、逐步细化、模块化。”,也就是说,过程化程序的基本组成单元是函数(模块),一个程序是由若干个函数组成的;而面向对象程序的基本组成单元是类(class) ,一个程序是由若干个类组成的。类里面包含有成员函数,因此过程化编程是面向对象编程的基础。过程化编程要求编程人员一步一步地安排好程序的执行过程,根据著名的Wirth公式“算法+数据结构 =程序”,[1]在过程化程序设计中,数据结构就像物质、算法就像意识。如同人类的身体和灵魂!哲学告诉我们:意识是依赖于物质而存在的,物质会由于意识的发展而发展。双方是相互依存、缺一不可的!因此算法依赖于具体的数据结构, 数据结构关系到算法的选择与效益!在面向对象编程中,是将算法与数据结构看成一个整体,称做对象。Wirth公式也就扩展为:“对象=算法+数据结构”、“程序=对象1+对象2+……+对象n”。过程化程序通俗来说就是告诉计算机做什么?怎么做?计算机要把做出来的结果展示给我们……人机交互性和操作性决定了采用案例教学的可行性和有效性。过程化编程强调三种基本结构,所以这里选择了分支结构与循环结构的两个有代表性的典型案例。由于算法的灵活性及多样性决定了程序的丰富多彩,因此每个案例我们都给出了三种解决方案。
  一、分支结构案例及解决方案
  案例1:白云服装公司经营套服,同时也单件出售,如果整套买入服装,一次性购买的多于50套(含50套),每套为80元;如果一次性购买的不足50套,每套90元;如果只买进上衣,每件60元;如果只买进裤子,每条45元;请输入需要购买的上衣和裤子的件数,计算出应付金额。[2]
  问题分析:充分理解题意找到解决思路:输入上衣数量(用c表示)和裤子数量(用t表示),哪个数量小,哪个按成套数算,剩下的部分按单件算。例如:c=65,t=60,应付金额应当是m=60*80+(65-60)*60=5100而不是m=65*60+60*45=6600或其他。这里顾客要熟悉定价规则,防止商家往高处算。要让同学们知道,在过程化编程中,我们要寻找解决方案,然后将这个解决思路用某种语言写成代码让计算机执行。显然这是一个多分支结构,多分支结构编程关键是把各种可能性都要考虑到。通过方法1中的程序代码注释部分可看出编程思路。
  方法1:
  #include
  void main()
  {
  int c, t; /*变量c代表买上衣的件数,t代表买裤子的件数*/
  int m; /*变量m表示应付金额*/
  cout << "请输入你需要买的上衣和裤子的件数:\n";
  cin >> c >> t; /*输入需要买的上衣和裤子的件数*/
  if (c == t) /*成套买*/
  {
  if (c >= 50)
  m = c * 80; /*买50套以上,每套80元*/
  else
  m = c * 90; /*买50套以下,每套90元*/
  }
  else /*不成套买*/
  {
  if (c > t) /*买的上衣比裤子多*/
  if (t >= 50)
  m = t * 80 + (c - t) * 60;/*多于50套,成套部分按每套80元算,单件另算*/
  else
  m = t * 90 + (c - t) * 60;/*少于50套,成套部分按每套90元算,单件另算*/
  else /*买的裤子比上衣多*/
  if (c>=50)
  m = c * 80 + (t - c) * 45;/*多于50套,成套部分按每套80元算,单件另算*/
  else
  m = c * 90 + (t - c) * 45;/*少于50套,成套部分按每套90元算,单件另算*/
  }
  cout << "\n应付金额是: " << m << "\n";
  }
  运行结果如下:
  c=65,t=60时,应付金额是5100,程序计算结果和前面手工计算结果一致。
  在上课过程中要引导同学们积极思考,虽然问题分析、程序代码、程序运行结果都已经出来,但我们考虑一下定价临界值问题:买50套服装花费50*80=4000元,买49套服装花费49*90=4410元……买45套服装花费45*90=4050元,买44套服装花费44*90=3960元。结果很有意思:买50套服装比买49套服装便宜410元……比买45套服装便宜50元、仅仅比买44套服装贵40元。定价规则出了问题?商家需要修改定价规则吗?
  至此问题已圆满解决,作为思维拓展我们还要考虑其他思路的解决方法。后面的方法2和方法3教科书上一般不会有,有一定的创新性。但有了方法1的基础,容易理解这两种方法。读者可仔细阅读、细心体会。
  方法2:
  #include
  int main()
  { /* d1表示单件上衣数,d2表示单件裤子数。 */
  int c,t,ts,d1=0,d2=0,m; /* ts表示c与t的最小值,构成套数。 */   printf("请输入你需要买的上衣件数:\n");
  scanf("%d",&c);
  printf("请输入你需要买的裤子件数:\n");
  scanf("%d",&t);
  if(c>t)
  {
  ts=t;
  d1=c-t;
  }
  else
  {
  ts=c;
  d2=t-c;
  }
  if(ts>=50)
  m=ts*80+d1*60+d2*45;
  else
  m=ts*90+d1*60+d2*45;
  printf("应付金额是: %d\n",m);
  return 0;
  }
  这里if(ts>=50) m=ts*80+d1*60+d2*45; else m=ts*90+d1*60+d2*45;是个关键的式子,找到了规律也就找到了简化的方向,有了思路也就有了方法!为保证思维效果的完备性,程序运行结果分为以下六种有意思的情形:
  1、50套以上(含50套),上衣多于裤子。
  2、50套以上(含50套),上衣少于裤子。
  3、50套以上(含50套),上衣和裤子相等(成套)。
  4、50套以下,上衣多于裤子。
  5、50套以下,上衣少于裤子。
  6、50套以下,上衣和裤子相等(成套)。
  方法3:
  #include "stdio.h"
  int main()
  { int c,t,ts,m;
  printf("input c,t:\n");
  scanf("%d%d",&c,&t);
  ts=c  m=(ts>=50)?(ts*80):(ts*90);
  m=m+(c-ts)*60+(t-ts)*45;
  printf("m=%d\n",m);
  getch();
  return 0;
  }
  注:m=(ts>=50)?(ts*80):(ts*90); 与m=m+(c-ts)*60+(t-ts)*45;这两个语句可合成一个语句:
  m=( (ts>=50)?(ts*80):(ts*90) )+(c-ts)*60+(t-ts)*45;效果是一样的。
  整理思路我们会发现,方法2是方法1的简化,方法3是方法2的进一步简化,用条件表达式代替了if语句(代替的前提是双分支中对同一变量赋值)。规律决定了简化的方向!需要“画龙点睛”的是:付款金额是成套数的钱加上单件的钱,套数是上衣数与裤子数的最小值,单件数用上衣数或裤子数减去套数即可(其中必有一个为0)。
  二、循环结构案例及解决方案
  案例2:从键盘输入两个自然数,求出它们的最大公约数与最小公倍数,输出结果。[3]
  问题分析:根据代数学的知识,求最大公约数的算法可以采用“辗转相除法”,这就找到了解决该问题的思路:对于两个自然数a和b,若a=b,则其最大公约数和最小公倍数都是a;若a与b不相等,不妨设大数是a,分为以下两种情况:1、用a除以b得到余数r,若r=0,则b(小数)就是两数的最大公约数。2、若r不等于0,则令a=b,b=r,再转去执行第1种情况。用数学式子表达如下:
  a=q*b+r, b=q1*r+r1, r=q2*r1+r2, ……,(a,b)=(b,r)=(r,r1)=(r1,r2)=…=(rn,0)= rn。rn即为所求结果。其中(m,n)代表m和n的最大公约数。
  “辗转相除”是一个重复过程,可用循环实现,循环的前提是r,r1,r2…不等于0。
  最小公倍数的算法是:a与b最小公倍数= (a*b)/( a与b最大公约数)。
  方法1:
  #include
  void main()
  {
  int a,b,r,sa,sb;
  cout<<"请输入两个正整数:"<  cin>>a>>b;
  sa=a;
  sb=b;
  if(a  {r=a;a=b;b=r;}
  r=a%b;
  while(r!=0)
  {a=b;b=r;r=a%b;}
  cout<<"最大公约数:"<  cout<<"最小公倍数:"<  }
  注:程序中语句if(a  下面我们考虑将“辗转相除法”求最大公约数写成一个函数,通过主函数调用此函数得到解决方案。
  方法2:
  #include
  int gys(int a,int b)/* 求两数的最大公约数*/
  {
  int r;
  while(b!=0)
  {
  r=a%b;
  a=b;
  b=r;
  }
  return a;
  }
  void main() //主函数
  {
其他文献
摘要:新形势下,随着国企改革的不断深入,职工思想状况也有了新的变化,思想意识、思维方式趋于多元,职工中的“困惑点”越来越多,一定程度上影响了国企思想政治工作的健康发展。那么,针对当前存在问题,本文通过相关的调查与分析,并结合工作实际,进一步总结了做好一人一事思想政治工作的方法与对策,对做好新形势下思想政治工作有一定的参考意义。  关键词:一人一事;思想政治工作;管理;交流  一、一人一事思想工作 
期刊
摘要:通过对既有居住建筑节能改造后的供热运行能耗的对比分析,说明对既有居住建筑节能改造后,冬季建筑供热能耗显著下降,随着既有居住建筑节能改造的逐步完善,对供热运行整体能耗降低将起到比较重要的作用,应该加大既有居住建筑节能改造的力度,降低整体供热能耗,为国家节能减排工作贡献力量。  关键词: 既有居住建筑;节能改造;供热能耗  我国城镇既有居住建筑量大面广。据不完全统计,仅北方采暖地区城镇既有居住建
期刊
摘要:担保圈风险已成为温州不可忽视的金融风险之一,在温州金融改革时期,对化解担保圈危机的经验总结刻不容缓,本文以H集团破产重整为例,试图总结近年来温州采取的为破产重整的担保圈解套方法并分析其长期效应,得出企业共赢是防范金融风险的根本措施,破产重整是企业重获新生的有效途径,政府的支持是信心来源的结论,为各个区域化解风险指点迷津。  关键词:联保贷;化解;破产重组  一、研究设计  (一)案例选择  
期刊
摘要:人本管理是管理科学发展的新阶段和重要成果,本文从人本管理的产生入手,介绍了企业人本管理的涵义和精髓了,在此基础上对企业人本管理的实现进行了一定的探索。  关键词:人本管理;内涵;实现  一、人本管理是现代管理的新趋势  (一)人本管理是管理理论发展的新阶段  管理理论与管理学派的形成已过了三个阶段:古典管理理论;行为科学理论;管理科学学派。这些传统的管理理论和模式虽有合理因素,但片面的认为人
期刊
摘要:创新是企业发展的动力和生存之本。企业“首脑”机关的管理创新,系关科技创新的成败。在全球经济一体化的今天,管理模式已从“硬管理”向“软管理”转变;从“物本管理”向“人本管理”转变。“能本管理”则将“人本”中的“能”视为本位,把人的知识、智力、作为价值内核的基本取向。利用“系统论”将企业的人才、物力、技术、信息等生产要素和科技研发、生产、销售、服务等进行调整、优化、组合、重构,建立起以市场为中心
期刊
摘要:我们居住的地球作为一个天体出现于宇宙空间,据科学家们推测说距今约有45亿年之多.虽无确凿证据,我们就权当为真。可是在那初形成的时候地球上是既无空气也无水分的,当然也没有生物,也更没有我们现在看到的土壤。完全是岩石组成的地球。那么,土壤,空气和水分是怎样形成的呢 ?  关键词:土壤;空气;水分  在谈论这个问题之前我们必须明确物质的斥力学说,才能得到一个准确的答案。因为我认为是力所起的作用。但
期刊
摘要:通过对景德镇市物流产业基本情况的调研,获得本地物流市场及物流人才市场的第一手资料。根据调研结果进行分析,从中获得适应景德镇物流产业发展的物流人才培养模式的一些启示。  关键词:景德镇;物流;人才;调查报告  景德镇学院经管系物流本科班立项课题《景德镇市物流市场人才调查报告》课题组于2015年三月至六月,针对景德镇市物流市场规模、人才需求状况、人才培养要求等方面进行了走访和问卷调查。通过实地调
期刊
摘要:面对职工结构变化、职工思想多样化的特点,如何及早发现问题,化解矛盾,准确把握“油公司”模式改造过程中职工思想的特点,改进和创新思想政治工作方式方法,进一步优化和谐稳定、气顺劲足的发展环境,凝心聚力,为油田改革发展稳定服务成为当前加强思想政治工作的一项重要任务。因此,2014年以来,我们运用红、黄、蓝动态分析法,建立职工思想动态分析预警机制,在“源头切入、过程参与、动态预控、快速反应”等方面进
期刊
摘要:德国应用科技大学(Applied Science & Technology University -- ASTU)属于本科层次的高等职业技术教育,与我国当前转型发展的ASTU教育极为相似。研究德国ASTU的实践教学模式,学习其先进办学理念,对于当前我国ASTU院校的转型发展和教育改革发展具有很重要的指导与借鉴意义。本文首先分析了影响我国高校产学研合作良性互动的原因,接着介绍了德国ASTU实践
期刊
摘要:在创新驱动发展和经济新常态的趋势下,金融创新也逐渐成为创新的热潮,P2P网络借贷作为金融创新的生力军也因此得到了空前的发展。但在其飞速发展的同时,借贷信用、资金坏账等问题也不断涌现。如何使P2P网络借贷行业健康发展,使平台受众树立良好的投资意识及风险意识成为了当下亟需解决的问题。本次研究针对P2P借贷行业入行门槛较低这一特性,利用问卷调查的方法对广大P2P平台的受众进行调查,并将研究目光锁定
期刊