河北大学.®HebeiUniversity河北大学什么是算法程序应包括的内容:•对数据的描述——数据结构的定义•对操作的描述——由语句序列构成的算法程序=数据结构+算法河北大学.®HebeiUniversity河北大学算法的特性•有穷性•确定性•有零个或多个输入•有一个或多个输出•有效性河北大学.®HebeiUniversity河北大学关于算法设计,初学者要特别注意:•你不会的计算机也同样不会;避免列出方程,叫计算机去解。•解题步骤要清晰,有条理;避免笼统描述。•严格按照时间顺序理解C语言的运算符;避免习惯性思维。河北大学.®HebeiUniversity河北大学简单的算法举例鸡兔共十只,30条腿,问鸡兔各几只?解题:设鸡为x只,兔为y,列方程组:x+y=102*x+4*y=30用消元法,解方程得x=5,y=5用穷举法,尝试所有可能的解。看哪一组解满足该条件?河北大学.®HebeiUniversity河北大学解空间为:x=0、1…10,y=10-x,满足条件为:2*x+4*y=30main(){intx,y,i;x=0;y=10-x;while(x*2+y*4!=30)x=x+1;printf(“ji=%d”,x);printf(“tu=%d”,y);}y的值没有变化河北大学.®HebeiUniversity河北大学解空间为:x=0、1…10,y=10-x,满足条件为:2*x+4*y=30例3-1main(){intx,i;x=0;while(x*2+(10-x)*4!=30)x=x+1;printf(“ji=%d”,x);printf(“tu=%d”,10-x);}河北大学.®HebeiUniversity河北大学main(){inta;a=1×2×3×4×5;printf(“5!=%d”,a);}计算5!解题方法:5!=1×2×3×4×5乘法运算符应该用*河北大学.®HebeiUniversity河北大学main(){inta;a=1*2*3*4*5;printf(“5!=%d”,a);}计算5!解题方法:5!=1×2×3×4×5一步法河北大学.®HebeiUniversity河北大学main(){inta=1;a=a*1;a=a*2;a=a*3;a=a*4;a=a*5;printf(“5!=%d”,a);}计算5!解题方法:5!=1×2×3×4×5该语句分为2个运算,第一个运算为a*4,第二个运算为乘积赋值给a。注意两个a为同一个变量的不同时期的值。体会顺序结构的次序。分步法河北大学.®HebeiUniversity河北大学例3-2main(){inta=1,i=1;while(i=5){a=a*i;i=i+1;}printf(“5!=%d”,a);}计算5!解题方法:5!=1×2×3×4×5该语句为分步法的通式。凡是重复的操作,又能有通式表达,就可以用循环实现。体会循环结构的次序。循环法河北大学.®HebeiUniversity河北大学例3-3main(){inta=1,i=1,n;scanf(“%d”,&n);while(i=n){a=a*i;i=i+1;}printf(“n!=%d”,a);}计算n!解题方法:n!=(n-1)!×n循环法河北大学.®HebeiUniversity河北大学怎样表示一个算法常用的方法有:自然语言传统流程图结构化流程图伪代码……河北大学.®HebeiUniversity河北大学用流程图表示算法•流程图是用一些图框来表示各种操作•用图形表示算法,直观形象,易于理解起止框输入输出框处理框判断框流程线连接点注释框x≧0Y……N……一个入口两个出口河北大学.®HebeiUniversity河北大学求1×2×3×4×5算法用流程图表示。如果需要将最后结果输出:1ti5开始2it*iti+1i结束NY河北大学.®HebeiUniversity河北大学用N-S流程图表示算法•N-S流程图用以下的流程图符号:ABABYNpA当p1成立A直到p2成立顺序结构选择结构循环结构(当型)循环结构(直到型)河北大学.®HebeiUniversity河北大学求5!算法用N-S图表示。直到i51t输出t2it*iti+1i