论文部分内容阅读
【摘要】算法有三种基本的逻辑结构:顺序结构、条件结构、循环结构,在这三种结构中,又当属循环结构最为繁琐,并且循环结构本身也包含了顺序结构、条件结构。本文就通过对循环结构的几个常见题型的深入剖析,来破解循环结构。
【关键词】算法,程序框图,程序,循环结构,嵌套
算法初步是课改后的新加内容。新课标对这一部分的要求是:学习算法的一些基本知识,体会算法的基本思想,发展有条理的思考与表达的能力,进而提高逻辑思维能力。而循环结构正是实现这一目标的有效载体。
在一些算法中,经常会出现从某处开始,按照一定的条件反复执行某些步骤的情况,这就是循环结构,反复执行的步骤称为循环体[1]。既然按照一定的条件反复执行,我们可以设计一个算法步骤,将这些反复的操作的步骤交给计算机去完成,从而可以将人从重复的劳动中解脱出来。
循环结构有两种,一种是当型循环结构,
当型循环是这样执行的:首先是对循环的条件进行判断,如果满足条件,则执行循环体,否则执行循环体下面的步骤。
还有一种是直到型循环结构,
直到型循环是这样执行的:首先执行循环体,再判断是否满足条件,如果满足条件,则执行循环体下面的步骤,否则,返回去接着执行循环体。下面本文就通过几道典型例题,来探究循环结构,以期达到抛砖引玉的效果。
题型一、计算累加求和
例1(顺序和):设计一个算法步骤,计算S=1+2+3+…+100的值。
算法分析:第一步,计算0+1=1,第二步,计算1+2=3,第三步,计算3+3=6,…,第100步,计算4950+100=5050,由于第i(i=1,2,3,…,100)步执行的步骤是Si=Si-1+i,即后一步的和是在前一步和的基础上再累加上变量i的值,所以可以用循环结构来实现。
算法步骤:
第一步,将计数变量i的值初始化为1,将求和变量S的值初始化为0;
第二步,将S+i的值仍赋值为S;
第三步,将i+1的值仍赋值为i;
第四步,判断i>100是否成立,若是,则输出S的值,结束算法,否则,返回第二步。
评注1:当型循环结构的判断条件是执行循环体的条件,直到型循环结构的判断条件是跳出循环体的条件。本题采用的是直到型循环结构,s=s+i,i=i+1是循环体,i>100是循环的终止条件。如果采用当型循环结构,则i≤100是循环的条件,s=s+i,i=i+1是循环体。
评注2:在含有循环结构的算法步骤中,第一步是对循环变量的初始赋值。在累加求和中,由于加“0”不改变求和的值。所以,一般对求和变量S的初始赋值为“0”。
例2(倒序和):设计一个算法步骤,计算S=100+99+98+…+1的值。
算法分析:例2与例1的区别是例2求的是倒序和,所以解决本问题同样需要两个变量,计数变量i,累加变量S,只是变量i初始化为100,i的值是从大到小的方向变化,每次减少1,当i<1时终止循环。
算法步骤:
第一步,将变量i初始化为100,将变量S初始化为0;
第二步,将S+i的值仍赋值为S;
第三步,将i-1的值仍赋值为i;
第四步,判断i<1是否成立,若是,则输出S,结束算法,否则,返回第二步。
例3(交错和):设计一个算法步骤,计算S=1-3+5-7+…-99。
算法分析:本题也可以看作累加求和,只不过是将变量i连同它前面的符号一起累加给求和变量S。当项数为奇数时,在变量S的基础上累加上变量i,当项数为偶数时,在变量S的基础上减去变量。当变量i>99时终止循环。
算法步骤:
第一步,将累加变量i初始化为1,求和变量S初始化为0,符号变量k初始化为1,通项t初始化为1;
第二步,判断i≤99是否成立,若是,执行第三第六步,否则,输出S,结束算法。
第三步,将S+t的值仍赋值给S;
第四步,将i+2的值仍赋值给i;
第五步,将-k的值仍赋值给k;
第六步,将k与i的乘积赋值给t后返回第二步。
评注3:本问题也可以仿后面例6的循环结构内嵌套条件结构来实现。为此,需要引入三个变量,计数变量n(n=1,2,……,50),n从1开始,每次循环变化1;累加变量i,从0开始,每次循环变化2;求和变量S,S从0开始。当n为奇数时,在S的基础上累加上变量i,当n为偶数时,在S的基础上减去变量i,当n>50时终止循环输出S。
题型二、计算累乘问题
例4:设计一个算法步骤,计算T=1×2×3×…×n的值。
算法分析:解决本问题需两个变量,计数变量i,累乘变量T。
算法步骤:
第一步,输入一个正整数n
第二步,将变量i初始化为1,变量T初始化为1;
第三步,判断i≤n是否成立,若是,执行第四第五步,否则,输出T,结束算法;
第四步,将T×i的值仍赋值给T;
第五步,将i+1的值仍赋值为i后返回第三步。
评注4:在累乘求积中,由于乘“1”不改变乘积的值。所以,一般对累积变量T的初始赋值为“1”。
题型三、求最大(最小)值问题
例5:设计一个算法步骤,输出满足1×2×3×…×n>1000的最小正整数。
算法分析:本题的左端是一个累乘,所以可模仿上例的累乘问题来解决。但要特别注意的是循环的执行步骤是先计算累乘积T,再让变量的值增加1,所以,在执行最后一次循环时,虽然累乘变量T已经大于1000,但变量i的值又增加了1,因而,输出的最小整数n比此时的i值小1。
算法步骤:
第一步,将变量i初始化为1,将变量T初始化为1;
第二步,将T×i的值仍赋值给T;
第三步,将i+1的值仍赋值给i;
第四步,判断T>1000是否成立,若是,执行下一步,否则返回第二步;
第五步,将i减1的值赋值给n;
第六步,输出n,结束算法。
题型四、计算加乘混合问题
例6:设计一个算法步骤,计算S=11!+12!+13!…+1n!的值。(其中n!=1×2×3×…×n)
算法分析:解决本题需三个变量,计数变量i,累乘变量T,累加变量S。
算法步骤:
第一步,输入一个正整数n;
第二步,将变量i初始化为1,将变量T初始化为1,将变量S初始化为0;
第三步,将T×i的值仍赋值给T,将S+1T的值仍赋值给S;
第四步,将i+1的值仍赋值给i;
第五步,判断i>n是否成立,若是,则输出S,结束算法,否则,返回第三步。
题型五、循环结构内嵌套条件结构
例7:设计一个算法步骤,输出100以内所有能被3整除的正整数。
算法分析:解决本问题的思路是从i=1开始检验,如能被3整除,则输出这个数,否则,将变量i的值增加1以后再重新检验,当i>100时结束检验。所以本题在对变量i循环的同时,还要对变量i是否能被3整除做出条件判断。
算法步骤:
第一步,将变量i的值初始化为1;
第二步,判断i能否被3整除,若是,则输出i,否则,转至第三步;
第三步,将i+1的值仍赋值给i;
第四步,判断i是否大于100,若是,则结束算法,否则,返回第二步。
题型六、循环结构内嵌套循环结构
例8:设计一个算法步骤,输出所有满足m+n<10的正整数对(m,n)[2]。
算法分析:解决本问题需先定一个变量m,再从小到大搜索变量n,然后让变量m由小到大变化。因而,本题需两次用到循环结构。
算法步骤:
第一步,将变量m的值初始化为1;
第二步,判断m≤8是否成立,若是,执行第三 第六步;否则,结束算法;
第三步,将n的值初始化为1;
第四步,判断n≤9-m是否成立,若是,执行第五 第六步,否则,将m+1的值仍赋值给m后返回第二步;
第五步,输出m,n;
第六步,将n+1的值仍赋值给n后返回第四步。
评注4:应用循环结构内嵌套循环结构可解决二维数组的搜索、计算问题。
上述几道例题,基本可以包括循环结构的所有题型,相信通过上述的分析,你会对循环结构有更加深入的理解。只有在平时的学习中善于归纳总结,将知识系统化、条理化,我们才能将知识记得更久、记得更牢。不仅如此,学习循环结构,无论是对于了解算法思想,还是对于启迪智慧,都是大有裨益的。下面还给出了几道配套练习,供读者练习,以检测学习的效果。
练习1:设计一个算法步骤,求S=1+12+13+…+1100的值。
练习2:设计一个算法步骤,求S=1+(1+2)+(1+2+3)+…+(1+2+3+…+n)。(其中n为任意大于1的正整数)
练习3:设计一个算法步骤,求S=11×2+12×3+…+1n×(n+1)的值。(其中n为任意大于1的正整数)
练习4:设计一个算法步骤,输出满足1×2×3×…×n≤1000的最大正整数n。
练习5:设计一个算法步骤,输出1~100内所有被7除余1的正整数。
练习6:仿例8,用直到型循环结构,输出所有满足m+n≤10的正整数对(m,n)。
参考文献
[1] 张淑梅等.普通高中课程标准实验教科书.数学3(必修),北京,人民教育出版社,2007(第三版).
[2] 张登军,岳雪普.高中新课程全程学习方略.数学3(必修),陕西,未来出版社,2007(第一版).
【关键词】算法,程序框图,程序,循环结构,嵌套
算法初步是课改后的新加内容。新课标对这一部分的要求是:学习算法的一些基本知识,体会算法的基本思想,发展有条理的思考与表达的能力,进而提高逻辑思维能力。而循环结构正是实现这一目标的有效载体。
在一些算法中,经常会出现从某处开始,按照一定的条件反复执行某些步骤的情况,这就是循环结构,反复执行的步骤称为循环体[1]。既然按照一定的条件反复执行,我们可以设计一个算法步骤,将这些反复的操作的步骤交给计算机去完成,从而可以将人从重复的劳动中解脱出来。
循环结构有两种,一种是当型循环结构,
当型循环是这样执行的:首先是对循环的条件进行判断,如果满足条件,则执行循环体,否则执行循环体下面的步骤。
还有一种是直到型循环结构,
直到型循环是这样执行的:首先执行循环体,再判断是否满足条件,如果满足条件,则执行循环体下面的步骤,否则,返回去接着执行循环体。下面本文就通过几道典型例题,来探究循环结构,以期达到抛砖引玉的效果。
题型一、计算累加求和
例1(顺序和):设计一个算法步骤,计算S=1+2+3+…+100的值。
算法分析:第一步,计算0+1=1,第二步,计算1+2=3,第三步,计算3+3=6,…,第100步,计算4950+100=5050,由于第i(i=1,2,3,…,100)步执行的步骤是Si=Si-1+i,即后一步的和是在前一步和的基础上再累加上变量i的值,所以可以用循环结构来实现。
算法步骤:
第一步,将计数变量i的值初始化为1,将求和变量S的值初始化为0;
第二步,将S+i的值仍赋值为S;
第三步,将i+1的值仍赋值为i;
第四步,判断i>100是否成立,若是,则输出S的值,结束算法,否则,返回第二步。
评注1:当型循环结构的判断条件是执行循环体的条件,直到型循环结构的判断条件是跳出循环体的条件。本题采用的是直到型循环结构,s=s+i,i=i+1是循环体,i>100是循环的终止条件。如果采用当型循环结构,则i≤100是循环的条件,s=s+i,i=i+1是循环体。
评注2:在含有循环结构的算法步骤中,第一步是对循环变量的初始赋值。在累加求和中,由于加“0”不改变求和的值。所以,一般对求和变量S的初始赋值为“0”。
例2(倒序和):设计一个算法步骤,计算S=100+99+98+…+1的值。
算法分析:例2与例1的区别是例2求的是倒序和,所以解决本问题同样需要两个变量,计数变量i,累加变量S,只是变量i初始化为100,i的值是从大到小的方向变化,每次减少1,当i<1时终止循环。
算法步骤:
第一步,将变量i初始化为100,将变量S初始化为0;
第二步,将S+i的值仍赋值为S;
第三步,将i-1的值仍赋值为i;
第四步,判断i<1是否成立,若是,则输出S,结束算法,否则,返回第二步。
例3(交错和):设计一个算法步骤,计算S=1-3+5-7+…-99。
算法分析:本题也可以看作累加求和,只不过是将变量i连同它前面的符号一起累加给求和变量S。当项数为奇数时,在变量S的基础上累加上变量i,当项数为偶数时,在变量S的基础上减去变量。当变量i>99时终止循环。
算法步骤:
第一步,将累加变量i初始化为1,求和变量S初始化为0,符号变量k初始化为1,通项t初始化为1;
第二步,判断i≤99是否成立,若是,执行第三第六步,否则,输出S,结束算法。
第三步,将S+t的值仍赋值给S;
第四步,将i+2的值仍赋值给i;
第五步,将-k的值仍赋值给k;
第六步,将k与i的乘积赋值给t后返回第二步。
评注3:本问题也可以仿后面例6的循环结构内嵌套条件结构来实现。为此,需要引入三个变量,计数变量n(n=1,2,……,50),n从1开始,每次循环变化1;累加变量i,从0开始,每次循环变化2;求和变量S,S从0开始。当n为奇数时,在S的基础上累加上变量i,当n为偶数时,在S的基础上减去变量i,当n>50时终止循环输出S。
题型二、计算累乘问题
例4:设计一个算法步骤,计算T=1×2×3×…×n的值。
算法分析:解决本问题需两个变量,计数变量i,累乘变量T。
算法步骤:
第一步,输入一个正整数n
第二步,将变量i初始化为1,变量T初始化为1;
第三步,判断i≤n是否成立,若是,执行第四第五步,否则,输出T,结束算法;
第四步,将T×i的值仍赋值给T;
第五步,将i+1的值仍赋值为i后返回第三步。
评注4:在累乘求积中,由于乘“1”不改变乘积的值。所以,一般对累积变量T的初始赋值为“1”。
题型三、求最大(最小)值问题
例5:设计一个算法步骤,输出满足1×2×3×…×n>1000的最小正整数。
算法分析:本题的左端是一个累乘,所以可模仿上例的累乘问题来解决。但要特别注意的是循环的执行步骤是先计算累乘积T,再让变量的值增加1,所以,在执行最后一次循环时,虽然累乘变量T已经大于1000,但变量i的值又增加了1,因而,输出的最小整数n比此时的i值小1。
算法步骤:
第一步,将变量i初始化为1,将变量T初始化为1;
第二步,将T×i的值仍赋值给T;
第三步,将i+1的值仍赋值给i;
第四步,判断T>1000是否成立,若是,执行下一步,否则返回第二步;
第五步,将i减1的值赋值给n;
第六步,输出n,结束算法。
题型四、计算加乘混合问题
例6:设计一个算法步骤,计算S=11!+12!+13!…+1n!的值。(其中n!=1×2×3×…×n)
算法分析:解决本题需三个变量,计数变量i,累乘变量T,累加变量S。
算法步骤:
第一步,输入一个正整数n;
第二步,将变量i初始化为1,将变量T初始化为1,将变量S初始化为0;
第三步,将T×i的值仍赋值给T,将S+1T的值仍赋值给S;
第四步,将i+1的值仍赋值给i;
第五步,判断i>n是否成立,若是,则输出S,结束算法,否则,返回第三步。
题型五、循环结构内嵌套条件结构
例7:设计一个算法步骤,输出100以内所有能被3整除的正整数。
算法分析:解决本问题的思路是从i=1开始检验,如能被3整除,则输出这个数,否则,将变量i的值增加1以后再重新检验,当i>100时结束检验。所以本题在对变量i循环的同时,还要对变量i是否能被3整除做出条件判断。
算法步骤:
第一步,将变量i的值初始化为1;
第二步,判断i能否被3整除,若是,则输出i,否则,转至第三步;
第三步,将i+1的值仍赋值给i;
第四步,判断i是否大于100,若是,则结束算法,否则,返回第二步。
题型六、循环结构内嵌套循环结构
例8:设计一个算法步骤,输出所有满足m+n<10的正整数对(m,n)[2]。
算法分析:解决本问题需先定一个变量m,再从小到大搜索变量n,然后让变量m由小到大变化。因而,本题需两次用到循环结构。
算法步骤:
第一步,将变量m的值初始化为1;
第二步,判断m≤8是否成立,若是,执行第三 第六步;否则,结束算法;
第三步,将n的值初始化为1;
第四步,判断n≤9-m是否成立,若是,执行第五 第六步,否则,将m+1的值仍赋值给m后返回第二步;
第五步,输出m,n;
第六步,将n+1的值仍赋值给n后返回第四步。
评注4:应用循环结构内嵌套循环结构可解决二维数组的搜索、计算问题。
上述几道例题,基本可以包括循环结构的所有题型,相信通过上述的分析,你会对循环结构有更加深入的理解。只有在平时的学习中善于归纳总结,将知识系统化、条理化,我们才能将知识记得更久、记得更牢。不仅如此,学习循环结构,无论是对于了解算法思想,还是对于启迪智慧,都是大有裨益的。下面还给出了几道配套练习,供读者练习,以检测学习的效果。
练习1:设计一个算法步骤,求S=1+12+13+…+1100的值。
练习2:设计一个算法步骤,求S=1+(1+2)+(1+2+3)+…+(1+2+3+…+n)。(其中n为任意大于1的正整数)
练习3:设计一个算法步骤,求S=11×2+12×3+…+1n×(n+1)的值。(其中n为任意大于1的正整数)
练习4:设计一个算法步骤,输出满足1×2×3×…×n≤1000的最大正整数n。
练习5:设计一个算法步骤,输出1~100内所有被7除余1的正整数。
练习6:仿例8,用直到型循环结构,输出所有满足m+n≤10的正整数对(m,n)。
参考文献
[1] 张淑梅等.普通高中课程标准实验教科书.数学3(必修),北京,人民教育出版社,2007(第三版).
[2] 张登军,岳雪普.高中新课程全程学习方略.数学3(必修),陕西,未来出版社,2007(第一版).