算法习题精选精讲

合集下载

算法分析习题课PPT课件

算法分析习题课PPT课件

正整数K的不同的划分的个数叫做的划分数,记做p(K)。
比如对于6,可以进行如下不同的划分:
6;
------最大加数为6
5+1;
------最大加数为5
4+2; 4+1+1;
------最大加数为4
3+3;3+2+1;3+1+1+1;
------最大加数为3
2+2+2;2+2+1+1;2+1+1+1+1; ------最大加数为2
1+1+1+1+1+1+1
------最大加数为1
因此, p(K) =11。也就是说,6的划分数是11。
请设计一个分治算法,对于一个给定的整数(输入),求出该整数的划分数
(输出)。
8
.
分析 K=k1+k2+…+kp,其中(k1>=k2>=…>=kp)
比如对于6,可以进行如下不同的划分:
6;
------最大加数为6
End for
3
For j = 2 to m
4
For i = 2 to K
If i < j
p[i,j] =p[I,i];
5
If i == j
6
p[i,j] = 1 + p [i,i-1];
7
If i > j
p[i,j] = p[i, j-1] + p[i- j, j];
End for
End for
8
System.out.print(a[i]); } System.out.println(); } else { for (int i = k; i <= m; i++) {

高中数学 专题1.5 算法案例练习(含解析)新人教A版必修3(2021年整理)

高中数学 专题1.5 算法案例练习(含解析)新人教A版必修3(2021年整理)

2016-2017学年高中数学专题1.5 算法案例练习(含解析)新人教A版必修3编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(2016-2017学年高中数学专题1.5 算法案例练习(含解析)新人教A版必修3)的内容能够给您的工作和学习带来便利。

同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。

本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为2016-2017学年高中数学专题1.5 算法案例练习(含解析)新人教A版必修3的全部内容。

12 1。

5 算法案例一、选择题1.用更相减损术求1 515和600的最大公约数时,需要做减法次数是( )A .15B .14C .13D .12【解析】 1 515-600=915,915-600=315,600-315=285,315-285=30,285-30=255,255-30=225,225-30=195,195-30=165,165-30=135,135-30=105,105-30=75,75-30=45,45-30=15,30-15=15.∴1 515与600的最大公约数是15.则共做14次减法.【答案】 B2.用更相减损术可求得78与36的最大公约数是…( )A.24B.18 C 。

12 D 。

63.下列四个数中,数值最小的是( )A .25(10)B .54(4)C .10 110(2)D .10 111(2)【解析】 统一成十进制,B 中54(4)=5×41+4=24,C 中10 110(2)=1×24+1×22+2=22,D 中,10 111(2)=23.【答案】 C4.用秦九韶算法求多项式 a x a x a x f n n +++=-11)(时,求)( x f 需要算乘方、乘法、 加法的次数分别为( )A 。

算法分类题库及答案详解

算法分类题库及答案详解

算法分类题库及答案详解1. 算法按其设计方法可以分为哪几类?A. 暴力解法B. 贪心算法C. 分治算法D. 动态规划E. 所有以上答案:E2. 以下哪个算法不属于贪心算法?A. 活动选择问题B. 最小生成树C. 快速排序D. 霍夫曼编码答案:C3. 分治算法的基本思想是什么?A. 将问题分解成更小的子问题B. 直接求解问题C. 选择最优子问题D. 迭代求解答案:A4. 动态规划与分治算法的主要区别是什么?A. 动态规划需要存储中间结果B. 分治算法需要存储中间结果C. 动态规划不需要分解问题D. 分治算法不需要分解问题答案:A5. 暴力解法通常用于什么问题?A. 问题规模较小B. 问题规模较大C. 需要最优解D. 需要近似解答案:A6. 以下哪个算法是使用贪心算法解决的?A. 汉诺塔问题B. 旅行商问题C. 背包问题D. 八皇后问题答案:C7. 快速排序算法属于哪种算法类别?A. 暴力解法B. 贪心算法C. 分治算法D. 动态规划答案:C8. 动态规划通常用于解决什么问题?A. 线性问题B. 组合问题C. 排序问题D. 查找问题答案:B9. 以下哪个问题可以通过贪心算法得到最优解?A. 旅行商问题B. 背包问题C. 0/1背包问题D. 所有以上答案:B10. 汉诺塔问题通常使用什么算法解决?A. 暴力解法B. 贪心算法C. 分治算法D. 动态规划答案:C11. 以下哪个算法是动态规划算法的典型应用?A. 斐波那契数列B. 最长公共子序列C. 最短路径问题D. 所有以上答案:D12. 贪心算法在哪些情况下可能无法得到最优解?A. 问题具有最优子结构B. 问题不具有最优子结构C. 问题具有重叠子问题D. 问题不具有重叠子问题答案:B13. 动态规划算法的一般步骤是什么?A. 确定状态B. 确定状态转移方程C. 确定边界条件D. 所有以上答案:D14. 分治算法的一般步骤包括哪些?A. 分解问题B. 解决子问题C. 合并子问题的解D. 所有以上答案:D15. 以下哪个算法不是排序算法?A. 冒泡排序B. 选择排序C. 快速排序D. 霍夫曼编码答案:D16. 快速排序算法的时间复杂度在最坏情况下是多少?A. O(n log n)B. O(n^2)C. O(n)D. O(1)答案:B17. 动态规划算法在解决什么问题时会使用记忆化搜索?A. 线性问题B. 组合问题C. 排序问题D. 查找问题答案:B18. 贪心算法在选择策略时通常遵循什么原则?A. 选择当前最优B. 选择全局最优C. 选择随机D. 选择平均最优答案:A19. 以下哪个问题不适合使用贪心算法?A. 单源最短路径问题B. 旅行商问题C. 背包问题D. 霍夫曼编码答案:B20. 分治算法在解决哪些问题时特别有效?A. 线性问题B. 组合问题C. 排序问题D. 查找问题答案:B。

算法习题——精选推荐

算法习题——精选推荐

算法习题算法设计与分析试卷⼀、填空题(20分,每空2分)1、算法的性质包括输⼊、输出、确定性、有限性。

2、动态规划算法的基本思想就将待求问题分解成若⼲个⼦问题、先求解⼦问题,然后从这些⼦问题的解得到原问题的解。

3、设计动态规划算法的4个步骤:(1)找出最优解的性质,并刻画其结构特征。

(2)递归地定义最优值。

(3)以⾃底向上的⽅式计算出最优值。

(4)根据计算最优值得到的信息,构造最优解。

4、流⽔作业调度问题的johnson算法:(1)令N1={i|ai=bj};(2)将N1中作业依ai的ai的⾮减序排序;将N2中作业依bi的⾮增序排序。

5、对于流⽔作业⾼度问题,必存在⼀个最优调度π,使得作业π(i)和π(i+1)满⾜Johnson不等式min{bπ(i),aπ(i+1)}≥min{bπ(i+1),aπ(i)}。

6、最优⼆叉搜索树即是最⼩平均查找长度的⼆叉搜索树。

⼆、综合题(50分)1、当(a1,a2,a3,a4,a5,a6)=(-2,11,-4,13,-5,-2)时,最⼤⼦段和为∑ak(2<=k<=4)=20(5分)2、由流⽔作业调度问题的最优⼦结构性质可知,T(N,0)=min{ai+T(N-{i},bi)}(1=3、最⼤⼦段和问题的简单算法(10分)int maxsum(int n,int *a,int & bestj){Int sum=0;for (int i=1;i<=n;i++)for (int j=i;j<=n;j++)int thissum=0;for(int k=i;k<=j;k++)this sum+=a[k];if(thissum>sum){sum=thissum;besti=i;bestj=j;}}return sum;}4、设计最优⼆叉搜索树问题的动态规划算法OptimalBinarysearchTree? (15分)Void OptimalBinarysearchTree(int a,int n,int * * m, int * * w){for(int i=0;i<=n;i++) {w[i+1][i]=a[i]; m[i+1][i]= 0;}for(int r=0;rfor(int i=1;i<=n-r;i++){int j=i+r;w[i][j]=w[i][j-1]+a[j]+b[j];m[i][j]= m[i+1][j];s[i][j]=i;for(int k=i+1;k<=j;k++){int t=m[i][k-1]+m[k+1][j];if(t}m[i][j]=t; s[i][j]=k;}}5、设n=4, (a1,a2,a3,a4)=(3,4,8,10), (b1,b2,b3,b4)=(6,2,9,15) ⽤两种⽅法求4个作业的最优调度⽅案并计算其最优值?(15分)法⼀:min(ai,bj)<=min(aj,bi)因为min(a1,b2)<=min(a2,b1)所以1→2 (先1后2)由min(a1,b3)<=min(a3,b1)得1→3 (先1后3)同理可得:最后为1→3→4→2法⼆:johnson算法思想N1={1,3,4} N2={2}N11={1,3,4} N12={2}所以N11→N12得:1→3→4→2三、简答题(30分)1、将所给定序列a[1:n]分为长度相等的两段a[1:n/2]和a[n/2+1:n],分别求出这两段的最⼤⼦段和,则a[1:n]的最⼤⼦段和有哪三种情形?(10分)答:(1)a[1:n]的最⼤⼦段和与a[1:n/2]的最⼤⼦段和相同。

专题 算法经典精讲 课后练习二及详解

专题 算法经典精讲  课后练习二及详解

题1运行下面的程序时,WHILE循环语句的执行次数是()A.3B.4C.15D.19题2执行下面的程序框图,输出的S=()A.25 B.9C.17 D.20题3阅读如下图所示的程序框图,则运行后输出的结果是________.如果执行如图所示的程序框图,输入n=6,m=4,那么输出的p等于()A.720 B.360C.240 D.120题5执行下面的程序语句,输入a=3,b=-1,n=4后,输出的结果是________.a =input a =;b =input b=;n =input n =;i =1;while i <=nc =a +b ; a =b ;b =c ;i =i +1;endprint io ,c ;题6若a =11时,下面的程序段输出的结果是______.题7读如下两个程序,完成下列题目:程序(1):程序(2):(1)程序(1)的运行结果为_________.(2)若程序(1),(2)运行结果相同,则程序(2)输入的值为_________.题8用秦九韶算法计算多项式f(x)=1+5x+10x2+10x3+5x4+x5在x= 2时,v3的值为()A.1B.2C.3D.4课后练习详解题1答案:B详解:0<20,1<20,2×2<20,3×3<20,4×4<20,5×5>20,程序结束.故WHILE循环语句共执行了4次,所以选B.题2答案:C详解:由结构框图中循环体执行了2次输出的结果为17.题3答案:-3详解:依次执行的是S=1,i=2;S=-1,i=3;S=2,i=4;S=-2,i=5;S=3,i=6;S=-3,i=7,此时满足i>6,故输出的结果是-3.题4答案:B详解:由框图可知:当n=6,m=4时,第一次循环:p=(6-4+1)×1=3,k=2.第二次循环:p=(6-4+2)×3=12,k=3.第三次循环:p=(6-4+3)×12=60,k=4.第四次循环:p=(6-4+4)×60=360,此时k=m,终止循环.输出p=360,故选B.题5答案:4详解:循环体被执行了4次,第一次执行循环体得的结果是:c=2,a=-1,b=2,i=2;执行第二次的结果是:c=1,a=2,b=1,i=3;执行第三次的结果是:c=3,a=1,b=3,i =4;执行第四次的结果是:c=4,a=3,b=4,i=5,此时c的值输出.题6答案:1详解:由于当a=11时,不满足条件a<10,所以执行y=a MOD 10,得到的结果是y=1.注意“a MOD 10”是a除以10的余数.题7答案:(1)6 (2)0详解:赋值语句给变量赋值时,变量的值总是最后一次所赋的值,故程序(1)中x的值最后为6.要使程序(2)中y的值为6,即x2+6=6,故x=0.即输入的x的值为0.题8答案:B详解:f(x)=1+5x+10x2+10x3+5x4+x5=(x4+5x3+10x2+10x+5)x+1=((x3+5x2+10x+10)x+5)x+1=((((x+5)x+10)x+10)x+5)x+1∴在x= 2时,v3的值为((x+5)x+10)x+10=2,故选B.。

最新数据结构与算法习题讲解(全)精品课件

最新数据结构与算法习题讲解(全)精品课件
第十二页,共97页。
注:证明时默认地利用了一个命题:当原序列为互不 相等的等可能序列时,新加入一个与原来序列任何数 值都不相等的数值,无论这个数值放在原序列的哪个 (nǎ ge)位置,都不可能使原不相等的序列相等。
例:210, 021, 012, 201, 120, 102,这时加入一个新的 数值3,无论把3插入序列的哪个(nǎ ge)位置,因为原 来序列的排列不相等,所以,他们还是不会相等,这 样,才保证了最后k个序列的k+1种可能都不相等,不 会重复。
第十三页,共97页。
b.第一个算法中,决定a[i]中一个之前没有 使用过的随机数是否被填入的时间是O(i)。 在那些需要测试的随机数中,需要产生期望 的随机数的次数为N/(N − i)次。得出结论如 下(rúxià):n个数中有i个可能是重复的。因 此,置换成功的概率为(N − i)/N。因此,在 独立的测试中,期望数为N/(N − i)。时间复 杂度即为:
while(k>=1)
{ if(n%2==0) j--;
return count();
}
}
main() {
int i,j; cout<<“Please input n:”<<endl; cin>>i; if(i<0)
i=-i; count(i); cout<<“所输入(shūrù)整数中 的二进制中1的个数 是:”<<j<<endl; return 0; }
(d) 120001/3 times as large a problem, or input size 2,289. 由N3=1.2*107 可得
第十八页,共97页。
2.18 数值分析中一个重要的问题是对某一个 任意的函数f找出方程f(x)=0的一个解。如果 该函数是连续的,并有两个点low和hign使得 f(low)和f(high)符号相反,那么在low与high之 间必然存在一个根。并且这个根可以通过二 分搜索求得。写一个函数,以f, low和high为 参数(cānshù),并且解出一个零点。

算法设计与分析常见习题及详解

算法设计与分析常见习题及详解

算法设计与分析常见习题及详解⽆论在以后找⼯作还是⾯试中,都离不开算法设计与分析。

本博⽂总结了相关算法设计的题⽬,旨在帮助加深对贪⼼算法、动态规划、回溯等算法的理解。

1、计算下述算法执⾏的加法次数:输⼊:n =2^t //t 为整数输出:加法次数 k K =0while n >=1 do for j =1 to n do k := k +1 n = n /2return k解析:第⼀次循环执⾏n次加法,第⼆次循环执⾏1/2次加法,第三次循环执⾏1/次加法…因此,上述算法执⾏加法的次数为==2n-12、考虑下⾯每对函数 f(n) 和 g(n) ,如果它们的阶相等则使⽤Θ记号,否则使⽤ O 记号表⽰它们的关系解析:前导知识:,因为解析:,因为解析:,因为解析:解析:3、在表1.1中填⼊ true 或 false解析:利⽤上题的前导知识就可以得出。

2=21/4n +n +21n +41...+1n +n −n +21n −21n +41....−1f (n )=(n −2n )/2,g (n )=6n1<logn <n <nlogn <n <2n <32<n n !<n ng (n )=O (f (n ))f (n )=Θ(n ),g (n )=2Θ(n )f (n )=n +2,g (n )=n n 2f (n )=O (g (n ))f (n )=Θ(n ),g (n )=Θ(n )2f (n )=n +nlogn ,g (n )=n nf (n )=O (g (n ))f (n )=Θ(nlogn ),g (n )=Θ(n )23f (n )=2(log ),g (n )=n 2logn +1g (n )=O (f (n ))f (n )=log (n !),g (n )=n 1.05f (n )=O (g (n ))4、对于下⾯每个函数 f(n),⽤f(n) =Θ(g(n))的形式,其中g(n)要尽可能简洁,然后按阶递增序排列它们(最后⼀列)解析:最后⼀个⽤到了调和公式:按阶递增的顺序排列:、、、、、、、、、(n −2)!=Θ((n −2)!)5log (n +100)=10Θ(logn )2=2n Θ(4)n 0.001n +43n +31=Θ(n )4(lnn )=2Θ(ln n )2+3n logn =Θ()3n 3=n Θ(3)n log (n !)=Θ(nlogn )log (n )=n +1Θ(nlogn )1++21....+=n1Θ(logn )=∑k =1nk 1logn +O (1)1++21....+n 15log (n +100)10(lnn )2+3n logn log (n !)log (n )n +10.001n +43n +313n 22n (n −2)!5、求解递推⽅程前导知识:主定理前导知识:递归树:例⼦:递归树是⼀棵节点带权的⼆叉树,初始递归树只有⼀个结点,标记为权重W(n),然后不断进⾏迭代,最后直到树种不再含有权为函数的结点为⽌,然后将树根结点到树叶节点的全部权值加起来,即为算法的复杂度。

算法设计与分析考点精讲串烧

算法设计与分析考点精讲串烧

一、选择题(每小题3分,共15分)1.算法与程序的主要区别在于算法具有()。

A.能行性 B.确定性 C.有限性 D.输入和输出答案:C。

2.对一个有序序列,以比较为基础的搜索算法的最坏情况时间复杂性的下界为()。

A.Ω(n) B.Ω(n2) C.Ω(n log n) D.Ω(log n)答案:D。

3.背包问题:n=6,C=10,V(1:6)=(15,59,21,30,60,5),W(1:6)=(1,5,2,3,6,1)。

该问题的最大价值为()。

A.101 B.110 C.115 D.120答案:C。

4.矩阵连乘积问题:M1(5×10), M2(10×4), M3(4×6)。

矩阵链乘M1M2M3需要的最少乘法次数为()。

A.348 B.328 C.720 D.320答案:D。

5.用贪心策略设计算法的关键是()。

A.将问题分解为多个子问题来分别处理 B.选好贪心策略C.获取各阶段间的递推关系式 D.满足最优性原理答案:B。

二、填空题(每小题4分,共20分)1.某算法的计算时间T(n)满足递归关系式:T(n)=2T(n-1)+O(1),n>1;T(1)=1。

则T(n)= 。

答案:2n-1。

2.用方法对状态空间树进行搜索时,每个结点有可能多次成为扩展结点。

3.子集和数问题一般陈述如下:已知n+1个正数:w i(1≤i≤n)和M,要求找出w i的和数是M 的所有子集。

其解可以表示为n-元组(x1, x2,⋯, x n),这里x i∈{0,1},1≤i≤n。

如果没有选择w i,则相应的x i=0;如果选择了w i,则x i=1。

此解空间的空间树上有个叶结点,共有个结点。

答案:2n,2n+1-1。

4.已知将两个分别包含n个和m个记录的已分类文件归并在一起得到一个分类文件需作n+m 次记录移动。

现有五个已分类文件F1,F2,F3,F4,F5,它们的记录个数分别为25,40,15,10,40,将这五个文件归并成一个分类文件需作次记录移动。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.计算236312222+++++,写出算法的程序.解:s=1n=2i=1WHILE i<=63s=s+n∧ii=i+1WENDPRINT “1+2+2∧2+2∧3+…+2∧63=”;sEND2.写出已知函数⎪⎩⎪⎨⎧<-=>=).(1),(),(1xxxy输入x的值,求y的值程序.解:INPUT “请输入x的值:”;xIF x>0 THENy=1ELSEIF x=0 THENy=0ELSEy=-1END IFEND IFPRINT “y的值为:”;yEND3.新课标B版数学必修3教材41页第7题:用100元钱买100只鸡,公鸡每只5元,母鸡每只3元,小鸡3只一元,问能买多少公鸡,母鸡和小鸡?程序如下:for x=1:20 for y=1:33 z=100-x-y; if 5*x+3*y+z/3<>100else x y z end end end4.(本小题满分14分)根据下面的要求,求满足1+2+3+…+n > 500的最小的自然数n。

(1)画出执行该问题的程序框图;(2)以下是解决该问题的一个程序,但有几处错误,请找出错误并予以更正。

解:(1(2)①DO应改为WHILE; 10分②PRINT n+1 应改为PRINT n ; 12分 ③S=1应改为S=0 14分5. 儿童乘坐火车时,若身高不超过1.1 m ,则不需买票;若身高超过1.1 m 但不超过1.4 m ,则需买半票;若身高超过1.4 m ,则需买全票.试设计一个买票的算法,并画出相应的程序框图及程序。

解:程序是:INPUT “请输入身高h (米):”;hIF h<=1.1 THEN PRINT “免票” ELSEIF h<=1.4 THEN PRINT “买半票” ELSE PRINT “买全票” END IF END IF END6.意大利数学家菲波拉契,在1202年出版的一书里提出了这样的一个问题:一对兔子饲养到第二个月进入成年,第三个月生一对小兔,以后每个月生一对小兔,所生小兔能全部存活并且也是第二个月成年,第三个月生一对小兔,以后每月生一对小兔.问这样下去到年底应有多少对兔子? 试画出解决此问题的程序框图,并编写相应的程序.解: 分析: 根据题意可知,第一个月有1对小兔,第二个月有1对成年兔子,第三个月有两对兔子,从第三个月开始,每个月的兔子对数是前面两个月兔子对数的和,设第N 个月有两F 对兔子,第N -1个月有S 对兔子,第N -2个月有Q 对兔子,则有F=S+Q,一个月后,即第N+1个月时,式中变量S 的新值应变第N 个月兔子的对数(F 的旧值),变量Q 的新值应变为第N -1个月兔子的对数(S 的旧值),这样,用S+Q 求出变量F 的新值就是N+1个月兔子的数,依此类推,可以得到一个数序列,数序列的第12项就是年底应有兔子对数,我们可以先确定前两个月的兔子对数均为1,以此为基准,构造一个循环程序,让表示“第×个月的I 从3逐次增加1,一直变化到12,最后一次循环得到的F ”就是7.设计算法求100991431311211⨯++⨯+⨯+⨯ 的值。

要求画出程序框图,写出用基本语句编写的程序。

解:这是一个累加求和问题,共99项相加,可设计一个计数变量,一个累加变量,用循环结构实现这一算法。

程序框图如图所示:10==k SDO1))1(/(1+=+*+=k k k k S SLOOP UNTIL 99>kPRINTSEND8.求100以内的所有勾股数。

for i=1:100 for j=1:100 for k=2:100 if i*i+j*j<>k*k else i j k end end end end9. 计算 236312222+++++ ,写出算法的程序. 解:s=1n=2 i=1WHILE i <=63 s=s+n ∧i i=i+1 WENDPRINT “1+2+2∧2+2∧3+…+2∧63=”;s END10. 写出已知函数⎪⎩⎪⎨⎧<-=>=).0(1),0(0),0(1x x x y 输入x 的值,求y 的值程序. 解:INPUT “请输入x 的值:”;xIF x>0 THEN y=1 ELSEIF x=0 THEN y=0 ELSE y=-1 END IF END IFPRINT “y 的值为:”;y END11. 2000年我国人口为13亿,如果人口每年的自然增长率为7‟,那么多少年 后我国人口将达到15亿?设计一个算法的程序. 解:A=13R=0.007 i=1 DOA=A*(1+R ) i=i+1LOOP UNTIL A >=15 i=i -1PRINT “达到或超过15亿人口需要的年数为:”;i END12.1982年我国大陆人口10亿3千万,编程上机计算,若人口增长率r=1%,则哪一年我国人口增长到12亿,若r=O .5%,r=O .2%又是何年?INPUT r=O .01 i=O p=10.3 y=1982 WHILE P ≤12 i=i+1 p=p※(1+ r) y=y+1 WEND PRINT y ,p END13.假定在银行中存款10000元,按11.25%的利率,一年后连本带息将变为11125元,若将此款继续存人银行,试问多长时间就会连本带利翻一番?请用直到型和当型两种语句写出程序. 用直到型INPUT“money =”,10000 x=mOney r=11.25/100 y=OWHILE x≥2r y=y+1 x=x+r*x WEND PRINT y END 用当型 INPUT m=10000 X=m y=Or=11.25/100 Do m<2*x y=y+1x=x + r*x算法语句常见错误解析夏 文 凯人教版必修3第一章《算法初步》是新课程标准中的新增内容,是高考考查的内容。

程序的设计是本章的一个难点和重点,此难点主要体现在语句的选择、语句的使用、语句的衔接三方面。

如果概念不清、运用不当就容易出错,哪怕一个极细小的错误都会导致整个程序无法被计算机运行而宣告失败,所以,我们在设计程序时,一定要时时小心,处处留意,确保准确无误。

为帮助同学们防错、识错、纠错,笔者搜集了教学中一些常见的错误,望同学们加深对它们的理解,引以为戒。

一 输入语句常见错误解析例 判断下列给出的输入语句是否正确,为什么,怎样改正?(1)INPUT a ; b ; c (2) INPUT x = 2 解:(1)错误,变量之间应该用“,”隔开,应改为:INPUT a ,b ,c 备注:输入语句的一般格式是如果是输入一个变量,一般可以写成 INPUT “x=”;x 也可以简写为INPUT x ,如果是两个变量,一般可以写为也可以简写为INPUT a, b 变量中间要用“,”分隔,三个或三个以上的变量以此类推。

(2)错误,输入语句又称“键盘输入语句”,在程序运行过程中,停机等候用户由键盘输入数据,而不需要在写程序时指定,所以INPUT 后面只能是变量,不能是表达式,应改为:INPUT “请输入x 的值”;x 或INPUT x二输出语句常见错误解析例判断下列给出的输出语句是否正确,为什么,怎样改正?(1)PRINT A=3 (2)解:(1)错误,输出语句的格式为PRINT 语句不能用赋值号“=”,应改为:PRINT A(2)错误,输出语句可以输出多个表达式,不同的表达式之间用“,”分隔,不能用“;”分隔。

所以应改为:PRINT A ,B三 赋值语句常见错误解析例 判断下列给出的赋值语句是否正确,为什么,怎样改正? (1) 3=A (2)x+y+z=0 (3)A=B=4解:(1) 错误,赋值语句的一般格式是 , 赋值号的左边只能是变量,右边是一个常数或表达式,所以应改为:A=3(2) 错误,赋值语句不能给表达式赋值。

(3例 某同学编了一个交换两个变量A 和B 的值的程序(图一) 解:按照此程序运行,如果输入3,9输出的结果不是 A=B 表示把变量B 的值9赋给变量A, A 的初始值3被“覆盖”, A 的值变为9,变量B 的值保持不变;B=A 表示把刚才变量A 的值9变量B 的值被 “覆盖”,变为9 ,所以最后输出的是 量赋多个不同的值,但是变量的取值总是取最近被赋予的值),所以要交换两个变量的值,必须引如一个 中间变量x,暂时存放变量A 的值,并把其传递给变量B ,所以中间应改为:。

INPUT “a=”;a INPUT “b=”;b(图一)例:编写一个程序,对于函数⎪⎩⎪⎨⎧>+=<+-=)0(1)0(0)0(1x x x x x y 输入x 的值,输出相应的函数的值。

某同学编写了一个程序(图二),正确吗?如果不对,错在哪里?为什么?解析:条件语句的格式有两种,一个是只有一个“分支”的条件语句,它的格式见图三,一个是有两个“分支”的条件语句,它的一般格式见图四,这个同学编写的程序实际上两次运用了两个分支的条件语句,但是第一个条件语句实际上并不完整,少了一个END IF ,所以应在PRINT y 前加一个END IF.例:闰年是指年份能被4整除但是不能被100整除,或者能被400整除的年份,编写一个程序,判断输入的年份是否为闰年。

错解:依题意设计的程序如下:解析:本题是教材上的一道习题,这个错解是教师教学用书给出的答案,错误的原因在于,本程序有两套条件语句,当我们输入一个年份后,要被执行两次判断,结果会输出两次,对有些年份会输出两个相反的结果。

如:输入年份2008,按照第一套条件语句,2008是闰年,但是按照第二套条件语句,2008不是闰年。

正解:依题意设计的程序如图六。

备注:本程序把三个判断的条件集中在一起,对输入的年份只判断一次,便见分晓,有效地避免了错解中自相矛盾的现象,同时本解法还将错解中的赋值语句省略,集中到条件语句中说明是一个十分简捷程序。

(图二) (图三) (图四)(图六)例:分别用WHILE 型语句和UNTIL 型语句设计一个求100131211+⋅⋅⋅+++的值的程序。

错解:设计程序如下:错解分析:在WHILE 型程序里面i=1、sum=1,控制循环的条件为i ≤100,按此算法最后得到的结果应为1001312111+⋅⋅⋅++++,而不是题目要求的100131211+⋅⋅⋅+++,改正的方法是将sum=1改为sum=0;在UNTIL 型程序里面i=1、sum=0,控制条件为100≥i ,按此算法最后得到的结果是99131211+⋅⋅⋅+++,而不是题目要求的100131211+⋅⋅⋅+++,改正的方法是将100≥i 改为100>i 。

相关文档
最新文档