1、流程控制语句习题课流程控制语句习题课l本习题课的目的 通过程序复习基本语句 进行编程练习 通过例题开阔思路l介绍程序设计的基本思想 穷举法 的基本思路和关键 输出 简单图形2程序设计的一般步骤程序设计的一般步骤l 明确问题的性质,分析题意 数值问题 /非数值问题l 建立问题的描述模型 数学模型 /过程模型l 设计 /确定算法 数学问题:数值分析 非数学问题:n 数据结构 /算法分析与设计n 一般方法:穷举 /递推 /递归 /分治 /回溯/.l 编程调试l 分析运行结果3典型数值问题典型数值问题 -例例 1l 例 1:怎样存钱利最大假设银行整存整取存款不同期限的月息利率分别为:0.63% 期限
2、一年0.66% 期限 二年0.69% 期限 三年0.75% 期限 五年0.84% 期限 八年利息本金 月息利率 存款年限现在某人手中有 2000 元,请通过计算选择一种存钱方案,使得钱存入银行 20 年后得到的利息最多(假定银行对超过存款期限的那部分时间不付利息)。 4典型数值问题典型数值问题 -例例 1l 问题分析与算法设计为了得到最多的利息,存入银行的钱应在到期时马上转存。由于存款的利率不同,所以不同的存款方法(年限组合)得到的利息也是不一样的。l 设 2000 元存 20 年,其中 1年存 i1 次, 2年存 i2 次, 3年存 i3 次, 5年存 i5 次, 8年存 i8 次,则到期时
3、应得的本利合计:2000*(1+r1)i1*(1+r2)i2*(1+r3)i3*(1+r5)i5*(1+r8)i8l 根据题意还可得到以下限制条件:0 main( ) int i8,i5,i3,i2,i1,n8,n5, n3,n2,n1; float max=0, term;for (i8=0; i8max ) /* 记录可能的年限组合 */max=term; n1=i1; n2=i2; n3=i3; n5=i5; n8=i8;printf(“%d, %d,%d,%d,%dn“, n8, n5, n3, n2, n1);printf(“Total: %.2fn“, max); 6典型数值问题典
4、型数值问题 -例例 2l 例 2: 从键盘上任意输入一个正整数,要求判断该正整数是否是另一个整数的平方。l 问题分析与算法设计设:输入的正整数为 i, 若 i满足:i = m*m ( m为整数 0)则 i 为整数的平方。#include ”srdio.h”main ( ) int i, m;scanf (”%d”, for ( m=1; m*m=31) 8典型数值问题典型数值问题 -例例 3#include ” stdio.h“main( )int i, j, k, m;for (i=1; i=9; i+) /* i:车号前二位的取值 */for (j=0; j=9; j+) /* j:车号后
5、二位的取值 */if ( i!=j ) /* 判断两位数字是否相异 */k = i*1100+j*11;for ( m=31; m*mk; m+) ;/* 判断是否为整数的平方 */if ( m*m=k )printf(“Lorry_No. is %d.n“, k);l 运行结果: Lorry_No. is 7744. 9典型数值问题典型数值问题 -例例 4l 例 4: 百钱百鸡问题。 中国古代数学家张丘建在他的算经中提出了著名的 “ 百钱百鸡问题 ” :鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,翁、母、雏各几何 ?l 问题分析与算法设计设:要买 x只公鸡, y只母鸡, z只小鸡,可得到方程:x+y+z=100 5x+3y+z/3=100 取值范围: 0 = x、 y、 z = 100可以采用穷举法求解。10