二级常用算法
计算机考试二级VB常用算法:排序
计算机考试二级VB常用算法(9):排序1、算法说明1)初等数学递推法又称为”迭代法”,其基本思想是把一个复杂的计算过程转化为简单过程的多次重复。
每次重复都在旧值的基础上递推出新值,并由新值代替旧值。
问题:猴子吃桃子小猴子有若干桃子,第一天吃掉一半多一个;第二天吃掉剩下的—半多一个••…;如此,到第七天早上要吃时,只剩下一个桃子。
问小猴子一开始共有多少桃子?分析:可以最后一天桃子数推出倒数第二天的桃子数;再从倒数第二天推出倒数第三天桃子数........设第n天桃子数为xn ,前一天桃子数是:xn -1 z则有关系:xn = xn -1/2程序如下:Private Sub Commandl_Click()Dim n%, i%x =「第七天桃子数Print ”第七天桃子数:1只”For i = 6 To 1 Stepx = (x + 1) * 2Print “第“ & i & "天桃子数:” & x & ”只”Next iEnd Sub穷举法又称枚举法,即将所有可能情况一一测试,判断是否满足条件,—般用循环实现。
问题:百元买鸡问题。
假定小鸡每只5角;公鸡每只2元;母鸡每只3元。
现在有100 元,要求买100只鸡,编程列出所有可能的购鸡方案。
分析:设母鸡、公鸡、小鸡分别x、y、z只,则有:x + y+ z = 1003x + 2y + 0.5z = 100程序一:Private Sub Commandl_Click()Dim x%, y%, z%For x = 0 To 100For y = 0 To 100For z = 0 To 100If x + y + z = 100 And 3*x + 2*y + 0.5*z = 100 Then艇锻陆(ix 邸心"uoipunj oi|q n d:XP(S+X乙+ £X)£“二s :乌谥尊相⑹虽崇讎昼(乙qns pugx WNXixaN il P u3 人・x・oOT久'x |uud umq丄001 =(人・x・00l)学FO +人学乙+ x * £ jlOS °1 0 = JOJ ££ o丄0 二xJOJ %人'%x id ()>|oi|3_XP ueujLUO D qns 91SAUJ(刑割)二劄畚qns pugx ixa |\]X|X9|\|ZWNH P u3Z 久'X 1UUJf = x*(x*x + 2) + 5End FunctionPublic Function trapez(ByVal a!, By Vai b!, By Vai n%) AsSingle'b、a分别为积分上下限,n为等分数Dim sum!, h!, x!h = (b ・ a) / nsum = (f(a) + f(b)) / 2For i = 1 To n - 1x = a + i * hsum = sum + f(x)Next itrapez = sum * hEnd Function调用:Private Sub Commandl_Click()Print trapez(l z 3, 30)End Sub数论综合题此类题目比较广泛,必须给以足够重视。
计算机二级知识点(一)
选择题1.队列元素个数公式:题型一:计算队列的元素个数:(尾-头+表长)%表长。
队列头指针为front,队列尾指针为rear,队列容量为M,则元素个数为|rear-front+M|%M,注意,这个%是求余运算。
设循环队列的存储空间为Q(1:40),初始状态为front=rear=40,现经过一系列入队与退队运算后,front=15,rear=15,又正常地退出一个元素,则循环队列中的元素个数为(39)Front与rear数值相等,元素不变仍为40(0或40,但该题排除0),40-1=392.栈元素个数公式:尾- 头;S(1:60),初始状态top=61,一系列出栈入栈后,top=1,现在栈中元素个数为60●设栈的储存空间为S(1:50),初始top1=51,经过出栈入栈,top2=20,则栈中元素个数为:top1-top2=31●变式:……(1::30),初始top=-1,最后top=30,则栈中元素个数为30(原来-1+1=0个元素)●S(1:m),初始状态top=m+1,则元素数为m-top+1=0●S(1:m),初始状态top=-1,则元素数为top+1=0●某带链栈的初始状态为top= bottom=NULL,过一系列正常的入栈与退栈操作后,top=bottom=20时,该栈中的元素个数为1,即top指针和bottom指针共同指向的那个节点中的元素。
◆不管是顺序栈还是带链的栈,操作过程中栈底指针都是动态变化的◆栈的顺序储存结构中,栈顶指针的动态变化决定栈中元素的个数◆在循环队列中,队头指针和队尾指针的动态变化决定队列的长度3.线性结构:有且只有一个根节点(有一个根节点的结构,或者只有一个根节点和叶子节点的结构不一定是线性结构);每个节点最多一个唯一前件、后件;有多个指针域的链表(多重链表)既可能是线性结构,也可能是非线性结构。
线性结构和非线性结构都可以是空的数据结构4.结构化程序的根本控制结构:顺序结构,选择结构,循环结构结构化程序设计原则:自顶向下,逐步求精,模块化,限制使用goto语句强调程序的易读性5.算法:复杂度:时间复杂度(计算工作量)和空间复杂度(内存空间);数据的储存结构影响算法的效率;时间复杂度与运行算法时特定的输入有关6.最坏情况下时间复杂度比较:二分查找法O(log2n)<堆排序O(nlog2n)<希尔排序O(n1.5)<简单选择排序,冒泡排序,快速排序n(n-1)/2队列的顺序存储结构一般采用循环队列的形式,查找二分法只适用于顺序存储的有序表7.软件:程序,数据和文档的集合定义阶段任务:可行性研究初步项目计划,需求分析(解决软件“做什么”的问题)开发阶段任务:总体设计(解决软件“怎么做”),详细设计,编码,测试运行维护阶段:使用,维护,退役软件测试步骤:单元测试,集成测试,验收或确认测试,系统测试软件测试用例:输入数据和预期输出结果分类:应用软件(事务处理软件,财务管理软件),系统软件(操作系统,数据库管理系统,编译程序,汇编程序,网络软件等),支撑软件(分析工具软件,设计工具软件,编码工具软件,测试工具软件,计划进度管理软件等)软件设计建模工具:程序流程图,N-S图,PAD图,HIPO图软件设计阶段产生的文档:概要设计说明书,详细设计说明书,设计测试初稿软件需求分析阶段的文档:需求规格说明书8.类:是同属性对象的集合,是对象的抽象;9.面向对象的基本特点:标识唯一性(对象唯一性),分类性,多态性(同一操作可以是不同对象),封装性(实现了数据和操作方法的结合),模块独立性好,继承性(体现复用),抽象性(类是对象的抽象)10.数据模型的三要素:数据结构,数据操作,数据约束数据库三级模式:内模式(物理模式)有一个,概念模式有一个,外模式(子模式或用户模式)若干个;有利于保持数据库的数据独立性关系数据库中,关系模型是用来记录用户的二维表;在关系数据库设计中,关系模式属于逻辑设计。
计算机二级C语言课件第2章算法-改
C程序设计(第四版)
用计算机语言表示算法 P32
• 计算机无法识别流 程图和伪代码,还 需转换成计算机语 言程序。
• 用计算机语言表示 算法必须严格遵守 所用的语言的语法 规则。
例2.18 求5!
例2.1 求1×2×3×4×5如。何求1×3×5×7×9×11?
原始方法
通用算法:设变量P为被乘数,i为乘数
S1:使P=1
S2:使i=23
S3:使P*i,乘积仍放在变量P中,表示为: P*i→ P
S4:使i的值加1,即i+12→ i 。 S5:若i≤51,1返回S3,否则结束。
问题:见P18
(若i>51,1 结束,否则,返回S3)
具有通用性、灵活性。(S3~S5组成一个循环)
C程序设计(第四版)
例 2.2 有50个学生,要求将他们中成绩在80分以上的
学号和成绩输出。用n表示学生学号,n1代表第一个学 生学号, ni代表第i个学生学号。用g代表学生成绩, gi代表第i个学生成绩。
算法:
归纳:
S1: 1 → i
P19
S2:如果gi≥80,则输出ni 和gi,否则不输出
(4)结构内不存在“死循环”(无终止的循环) 。
基本结构不一定只限于上面三种,只要具有上 述4个特点的都可以作为基本结构。
用N-S流程图表示见P29 图2-24、图2-25、图2-26 、图2-27
C程序设计(第四版)
2.4.5 用伪代码表示算法
伪代码是介于自然语言和计算机之间的文字和符号来描 述算法。 例2.16 求5! begin /*算法开始*/
二级分类公式
二级分类公式
二级分类公式是指在机器学习中,用于将数据分为两个或多个不同类别的数学公式。
常用的二级分类公式有逻辑回归、支持向量机、决策树等。
逻辑回归是一种常用的二级分类算法,其公式可以表示为:
h(x) = 1 / (1 + exp(-θ^T * x))
其中,h(x)表示预测的概率值,θ表示模型的参数,x表示输入的特征向量。
支持向量机是一种基于最大间隔的二级分类算法,其公式可以表示为:
f(x) = sign(θ^T * x + b)
其中,f(x)表示预测的类别,θ表示超平面的法向量,b表示超平面的截距,x表示输入的特征向量。
决策树是一种基于特征的二级分类算法,其公式可以表示为:
f(x) = leaf(x)
其中,f(x)表示预测的类别,leaf(x)表示根据输入的特征向量x在决策树上找到的叶子节点。
这些公式都是根据不同的算法原理和模型假设来计算预测值或类别的,通过与训练数据的比较来进行分类预测。
RNA二级结构建模算法及评价指标比较
RNA二级结构建模算法及评价指标比较RNA二级结构是指RNA分子中由碱基间的氢键形成的结构,它对于RNA的功能和稳定性起着重要的作用。
由于实验测序的成本较高,预测RNA二级结构的算法成为了研究RNA功能和结构的重要工具。
本文将介绍几种主要的RNA二级结构建模算法,并比较它们常用的评价指标。
一、动态规划算法动态规划算法是一种常用的RNA二级结构建模算法。
该算法通过构建一个二维矩阵来表示RNA序列的各个位置之间的相互关系。
矩阵中的每个元素表示了对应位置之间形成的碱基配对的可能性。
动态规划算法基于递推关系式,通过不断填充矩阵中的元素,最终得到RNA的二级结构。
动态规划算法在RNA二级结构预测中具有较高的准确性和可靠性,但在处理较长的RNA序列时,计算复杂度较高,运算速度较慢。
二、比较方法为了评价不同RNA二级结构预测算法的性能,科学家们提出了一系列的评价指标。
常见的评价指标包括敏感性、特异性、预测精度和Matthews相关系数等。
敏感性是指预测结果中与实际二级结构相符的碱基对数量占实际二级结构中的总碱基对数量的比例。
特异性是指预测结果中与实际无关的碱基对数量占实际无关的总碱基对数量的比例。
预测精度是指预测结果中与实际二级结构相符的碱基对数量占预测结果中的总碱基对数量的比例。
Matthews相关系数是综合考虑了敏感性和特异性的评价指标,其取值范围为-1到+1之间,0表示随机预测,+1表示完全一致预测,-1表示完全相反预测。
三、评价指标比较在比较评价指标时需要注意几个方面:首先,不同算法对RNA二级结构的定义和预测目标可能有所不同,因此同一个算法在不同数据集上的性能可能会有所不同。
其次,评价指标之间可能存在相互冲突的情况,例如敏感性和特异性往往呈现负相关关系,提高一个指标可能会降低另一个指标。
最后,评价指标的选择要根据具体研究目的和需求进行。
在实际研究中,通常会综合考虑多个评价指标来评估RNA二级结构预测算法的性能。
计算机二级常见解题方法
计算机二级常见解题方法计算机二级考试是一项对计算机基础知识和应用技能的评估,其中解题能力是其中的重要组成部分之一。
在考试中常常会遇到各种题目,需要我们掌握一些常见的解题方法。
本文将介绍一些常见的解题方法,并提供相应的实例,希望能对大家在计算机二级考试中提供一些帮助。
一、常见解题方法之逐步求解法逐步求解法是一种将复杂问题划分为多个简单步骤来解决的方法。
通过逐步求解,可以逐渐将问题分解为更小的子问题,进而解决整个问题。
这种方法常用于编程题目、算法设计等方面。
下面以一个简单的编程题为例来说明逐步求解法的应用。
例题:编写一个程序,输入一个正整数n,计算并输出1到n之间所有正整数的和。
解析和思路:1. 首先,我们需要输入一个正整数n,可以使用输入函数获取用户输入。
2. 接下来,我们需要计算1到n之间所有正整数的和。
可以使用循环语句来实现,例如使用for循环。
3. 在循环的每一步迭代中,将当前迭代的正整数累加到一个变量中。
4. 最后,输出结果。
代码示例:```pythonn = int(input("请输入一个正整数n:"))sum = 0for i in range(1, n+1):sum += iprint("1到n之间所有正整数的和为:", sum)```二、常见解题方法之问题拆解法问题拆解法是一种将复杂问题拆解为多个简单子问题来解决的方法。
通过对问题的拆解,可以更好地理解问题的本质和解题思路,同时也可以减小问题的难度,提高解题的效率。
下面以一个实践题为例来说明问题拆解法的应用。
例题:编写一个程序,判断一个字符串是否为回文串。
解析和思路:1. 首先,我们需要输入一个字符串,可以使用输入函数获取用户输入。
2. 接下来,我们需要判断该字符串是否为回文串。
回文串是指从左到右和从右到左读都一样的字符串。
3. 问题的拆解:判断一个字符串是否为回文串可以拆解为判断该字符串的前半部分和后半部分是否对称。
二级魔方复原公式
二级魔方复原公式
二级魔方复原公式是一种特定的算法,可以将打乱的二阶魔方恢复到初始的状态。
以下是常用的二级魔方复原公式:
1.步骤一:底层十字
R U R' U R U2 R'
2.步骤二:底角复位
R U R' U' R U' R'
3.步骤三:中层色块
U R U' L' U R' U' L
4.步骤四:顶层十字
F R U R' U' F'
5.步骤五:顶角排序
R U R' U' R' F R F'
以上是最常用的二级魔方复原公式。
如果你希望进一步拓展,可以学习更高级的魔方复原方法,如CFOP法、Roux法等。
这些方法都是基于特定的策略和公式,可以更快速地复原魔方。
另外,你还可以自行探索新的解法,发现更多有趣的解题思路和技巧。
江苏省计算机二级C语言常考算法
常考题型归纳:一:数值类题型1:素数问题素数:只能被自己与1整除的数,最小的素数是2,比如3,5,7等都是素数算法:任意输入一个数判断是否是素数#include <stdio.h>#include <conio.h>int prime(int n) //实现判断素数函数{for(int k=2;k<n;k++) //核心程序{if(n%k==0) return 0;}return 1;}void main(){int n;scanf(“%d”,&n);if(prime(n))printf(“%s”,”yes”);elseprintf(“%s”,”no”);getch(); clrscr(); //清屏}题型2:整数拆分整数拆分是将整数n的每一个数取出,在取数的过程中,不断使用”%”和”/”运算符号算法:输入整数n,求出n的各个位数相加之和,如输入3476,结果为20#include <stdio.h>main(){int n, x, sum=0;scanf(“%d”,&n);while(n!=0) //此while程序为关键{x=n%10;sum+=x;n=n/10;}printf(“%d\n”,sum);}题型3:回文数(反读与正读相同的数,比如121,313等)编程题:(1)在给定范围内查找k使得用公式k^2+k+17生成的整数满足以下条件:该数的十进制表示中低3位数字相同,去掉低3位后的整数是回文数。
例如,当k=461时用公式生成的整数是212999,该数满足所给条件。
【编程要求】1.编写函数int findnum(int n1,int n2,long a[][2])实现以下功能:k依次取n1~n2范围内的每个整数,分别用每个k及公式k^2+k+17生成整数y,若y满足给定条件,则将k值及y值保存到a指向的数组中,函数返回a数组中k的个数。
计算机二级/20个常考经典算法实例/好老师
计算机二级20个常考经典算法实例一、常用算法有8个方面:1、递推算法(级数、数列求和、二分法、梯形法、穷举法等)2、排序算法(选择法排序、冒泡法)3、查找算法(顺序查找、折半查找、统计、求和、计数)4、有序数列的插入、删除操作5、求解算法(最大数、最小数、素数、最大公约数、最小公倍数)6、矩阵的处理(生成矩阵、交换和基本运算)7、递归算法(求阶乘、最大公约数)8、字符串处理(插入、删除、连接和比较)二、常用算法的应用举例:(有21个程序)1、计算S=1+2+…+100的值。
(求和、统计)2、找出100~999之间的所有“水仙花数”(穷举法、统计)3、从键盘输入10个数,然后找出其中的最大值和最小值。
(找最大数、最小数)4、任意输入n个数,按由小到大的顺序排列并显示输出。
(排序算法--选择法排序)5、(对字符串排序处理)有5个英文单词,分别为:Word,Excel,Powerpoint,Type,Angle,要求设计出如下程序:(1)在键盘上输入数N(本例输入5),把英文单词放入名为X大小为N 的数组中(2)显示出X数组中的英文单词(3)对数组中的英文单词从小到大排序(4)显示出排序后X数组中英文单词6、求5的阶乘值(5!=?)7、计算t=1!+2!+……+10!(即求阶乘之和)。
计算t=1!+2!+……+10!即求阶乘之和(双循环)。
8、多项式S=1+2+22+23+……+232,请设计一个程序,求S的值。
9、除了1和它本身之外不能被任何一个整数所整除的自然数叫质数,除去2之外,其它质数都是奇数,又称为素数。
请设计一个程序,在屏幕上输出3——150之间的所有素数。
10、设计1个程序,要求是:(查找算法、统计、求和、找素数或质数)(1)在键盘上输入1个不小于3的自然数N(例输入10),求出其不到第N个自然数中奇数之和,并输出结果(2)输出1到第N自然数中所有质数的个数11、穷举法,整钱找零.prg程序如下:*(1)穷举法整钱找零.prg"、*整钱找零:100=x1*10+x2*5+x3*1*x1,x2,x3>=1,x1+x2+x3=20for x1=1to10for x2=1to20x3=20-x1-x2if100=x1*10+x2*5+x3*1and x3>0then?x1,x2,x3endifnext x2next x112、求级数.prg程序如下:*求级数1.prg"*s=1+1/2-1/3+1/4+....s=1d=1clearinput"输入N:"to nfor i=2to n。
计算机二级常用公式
计算机二级常用公式计算机技术的发展与普及,使得计算机二级证书越来越受到关注与重视。
在考试中,理解和掌握常用的计算机公式是非常重要的,因为它们可以在实际应用中提高计算效率和准确率。
本文将介绍一些常用的计算机二级公式,帮助读者更好地准备考试。
一、数据存储与计算公式1. 存储单位换算计算机中常用的存储单位有字节(Byte)、千字节(KB)、兆字节(MB)、吉字节(GB)等。
它们之间的换算关系如下:1 KB = 1024 Byte1 MB = 1024 KB1 GB = 1024 MB2. 存储空间利用率存储空间利用率可以用以下公式计算:利用率 = (已使用空间 / 总空间) × 100%3. 计算机性能评估指标计算机性能评估可以通过以下公式进行计算:性能 = 完成任务所需时间 / 理论最佳时间二、网络与通信公式1. 网络带宽计算网络带宽是指单位时间内从网络中传输的数据量,一般用比特率(bps)来表示。
带宽可以通过以下公式计算:带宽 = (传输速率 ×传输时间) / 传输的数据量2. 数据传输时间计算数据传输时间可以通过以下公式计算:传输时间 = 数据量 / 带宽三、数据库与数据管理公式1. 数据库中数据记录总数计算数据表中数据记录总数可以使用以下公式计算:数据记录总数 = 数据表中的数据记录总数2. 数据分页查询公式在进行数据分页查询时,可以使用以下公式来计算所需的页数:页数 = 数据记录总数 / 每页显示的记录数四、编程与算法公式1. 循环次数计算在进行循环操作时,可以使用以下公式计算循环次数:循环次数 = (终止条件 - 初始条件) / 步长 + 12. 求平均值计算一组数据的平均值可以使用以下公式:平均值 = 数据总和 / 数据个数五、安全与加密公式1. 密码强度评估密码强度可以通过以下公式进行评估:密码强度 = log2(密码字符数的可能组合数)2. 数据加密与解密常见的对称加密算法中,数据加密与解密可使用以下公式进行计算:密文 = 明文 ^ 密钥明文 = 密文 ^ 密钥六、操作系统与系统维护公式1. CPU利用率计算CPU利用率可以通过以下公式计算:CPU利用率 = (CPU繁忙时间 / 总时间) × 100%2. 磁盘存储空间计算磁盘存储空间的使用量可以使用以下公式计算:存储空间使用量 = 总空间 - 可用空间以上是计算机二级常用公式的一些介绍,掌握这些公式可以更好地理解和应用计算机技术。
计算机二级常用函数公式及解析
计算机二级常用函数公式及解析1.数学函数公式:1.1 平方根函数:y = sqrt(x)平方根函数用于计算一个数的平方根,其中x为待计算的数,y为计算结果。
例如,sqrt(16) = 41.2 对数函数:y = log(x, b)对数函数用于确定一个数在给定底数下的对数,其中x为底数,b为真实数。
例如,log(100, 10) = 2,表示在以10为底的情况下,100的对数为21.3 指数函数:y = exp(x)指数函数用于计算e(自然对数的底数)的x次方,其中x为指数。
例如,exp(2) = 7.389,表示e的平方为7.3891.4 绝对值函数:y = abs(x)绝对值函数用于计算一个数的绝对值,即该数与0之间的距离。
例如,abs(-5) = 51.5 取整函数:y = floor(x)取整函数用于将一个实数取整到不大于其值的最接近整数。
例如,floor(3.9) = 31.6 随机函数:y = rand随机函数用于生成一个0到1的随机数。
例如,rand( = 0.5732.逻辑函数公式:2.1 与函数:y = AND(x1, x2, ..., xn)与函数用于判断一组逻辑输入是否全部为真,其中x1, x2, ..., xn为逻辑输入值。
例如,AND(1, 0, 1) = 0,表示逻辑输入为1、0、1的情况下,与函数的计算结果为0。
2.2 或函数:y = OR(x1, x2, ..., xn)或函数用于判断一组逻辑输入是否至少有一个为真,其中x1,x2, ..., xn为逻辑输入值。
例如,OR(0, 1, 0) = 1,表示逻辑输入为0、1、0的情况下,或函数的计算结果为12.3非函数:y=NOT(x)非函数用于判断逻辑输入的反命题,即如果逻辑输入为真,则非函数的计算结果为假,反之亦然。
例如,NOT(1)=0。
2.4异或函数:y=XOR(x1,x2)异或函数用于判断两个逻辑输入是否不同,如果不同则计算结果为真,否则为假。
二级VB常用算法
(1)累加和连乘 (2)(2)最值问题 (5)(3)素数 (7)(4)进制转化 (11)(5)约数因子 (13)(6)排序 (16)(7)排序 (20)(8)排序 (24)(9)排序 (27)(10)字符处理 (30)计算机等级考试二级VB常用算法(1)累加和连乘1、算法说明累加形式:V=V+e连乘形式:V=V*e其中:V是变量,e是递增表达式。
累加和连乘一般通过循环结构来实现。
注意:需在执行循环体前对变量V赋初值。
一般的,累加时置初值0;连乘时置初值为1.举例求N!的结果。
Private Sub Command1_Click()Dim n%, i%, s&n = Val(InputBox("输入n"))s = 1For i = 1 To ns = s * iNext iPrint sEnd Sub错误的写法:Private Sub Command1_Click()Dim n%, i%, s&n = Val(InputBox("输入n"))For i = 1 To ns = 1 ‘赋初值语句位置不对!s = s * iNext iPrint s ‘输出s的值为n,而不是n!End Sub应用举例根据下列公式,求自然对数e的的近似值。
要求:误差小于0.00001Private Sub Command1_Click()Dim i%, n&, t!, e!e = 2i = 1t = 1Do While t > 0.00001i = i + 1t = t / ie = e + tLoopPrint "计算了"; i; "项目和是:"; ePrint Exp(1)‘与上句输出值进行对比以证明算法的正确性 End Sub解题技巧1)由于这类题目往往是根据精度要求来求值,因此我们不能预知具体循环次数,所以这类题目一般用Do循环,很少用For循环。
计算机二级数据结构与算法
计算机二级数据结构与算法在当今数字化的时代,计算机技术的应用无处不在,而要深入理解和掌握计算机编程,数据结构与算法无疑是至关重要的基础知识。
对于准备计算机二级考试的同学来说,这部分内容更是需要重点攻克的难关。
首先,让我们来了解一下什么是数据结构。
简单来说,数据结构就是指数据在计算机中的组织方式和存储形式。
想象一下,我们有一堆物品要整理存放,如果随意乱放,找起来就会很麻烦,但如果按照一定的规则和方式进行分类和排列,就能快速找到所需的物品。
在计算机中也是同样的道理,不同的数据结构有着不同的特点和适用场景。
常见的数据结构包括数组、链表、栈、队列、树和图等。
数组就像是一排连续的格子,每个格子都可以存放数据,通过下标可以快速访问其中的元素,但插入和删除操作可能会比较麻烦。
链表则是通过节点将数据连接起来,插入和删除操作相对容易,但访问特定元素就需要逐个节点遍历。
栈就像一个只有一端开口的容器,遵循“后进先出”的原则,常用于函数调用和表达式求值。
队列则类似于排队,遵循“先进先出”的原则,常用于任务调度和消息传递。
而树是一种分层的数据结构,比如二叉树,它的每个节点最多有两个子节点,在查找、插入和删除操作上都有较高的效率。
图则用于表示多对多的关系,比如地图中的各个地点之间的连接关系。
接下来,我们再谈谈算法。
算法可以理解为解决特定问题的一系列步骤和方法。
好的算法能够高效地利用计算机资源,快速准确地得到问题的解。
比如排序算法,常见的有冒泡排序、插入排序、选择排序、快速排序等。
冒泡排序就像水中的气泡,每次比较相邻的两个元素,将较大的元素“浮”到后面。
插入排序则是将待排序的元素逐个插入到已排序的部分中。
选择排序是每次从待排序的元素中选择最小的元素放到已排序的末尾。
快速排序则是通过选择一个基准元素,将数组分为小于基准和大于基准的两部分,然后对这两部分分别进行排序。
再比如搜索算法,顺序搜索是逐个元素依次查找,而二分搜索则是在有序数组中通过不断折半查找目标元素,大大提高了搜索效率。
二级VB常用算法汇总
'求两个正整数的最大公约数,最小公倍数Private Sub Command1_Click()'最大公约数(一)m = Val(InputBox("请输入一个正整数", , 8))N = Val(InputBox("请输入一个正整数", , 6))w = m * NIf m < N Then T = m: m = N: N = Tr = m Mod NDo While r '方法一,前测试型m = N '考点N = r '考点r = m Mod N '考点LoopPrint "最大公约数是"; N '考点Print "最小公倍数是"; w / N '考点End SubPrivate Sub Command2_Click()'最大公约数(二)m = Val(InputBox("请输入一个正整数", , 8))N = Val(InputBox("请输入一个正整数", , 6))w = m * NIf m < N Then T = m: m = N: N = TDor = m Mod N '考点m = N '考点N = r '考点Loop While r <> 0 '方法二,后测试型'考点Print "最大公约数是"; m '’'不是nPrint "最小公倍数是"; w / mEnd SubPrivate Sub Command3_Click()'素数的判断(P106方法一),循环变量的值与终值的关系x = Val(InputBox("请输入一个正整数"))k = Int(Sqr(x))For i = 2 To k Step 1If x Mod i = 0 ThenExit ForEnd IfNext iIf i > k Then '哪种情况下i > kPrint x; "是素数"ElsePrint x; "不是素数"End IfEnd SubPrivate Sub Command4_Click()'素数的判断(补充方法二,使用标记变量)Dim flag As Booleanx = Val(InputBox("请输入一个正整数"))k = Int(Sqr(x))flag = True '判断之前,假设是素数For i = 2 To k Step 1If x Mod i = 0 Thenflag = False '发现被整出,立刻改变标记,不是素数Exit ForEnd IfNext iIf flag = True Then '根据标记的变化判断是否为素数Print x; "是素数"ElsePrint x; "不是素数"End IfEnd SubPrivate Sub Command5_Click()'字符图形的输出(字符菱形),其实就是对字符Ascii的操作'两重循环,外循环控制行数,内循环控制列数'上下对称的,先打印上半部分;左右对称的,先打印左边部分Dim x As StringDox = InputBox("请输入一个大写字母")Loop Until x >= "A" And x <= "Z"N = Asc(x) - 64 '确定行数For i = 1 To N '上下对称的先打印上半部分Print Tab(N + 1 - i); '每行定位For j = 1 To i '左边Print Chr(64 + j);Next jFor j = i - 1 To 1 Step -1 '右边,注意步长为负数Print Chr(64 + j);Next jNext iFor i = N - 1 To 1 Step -1 '下半部分,注意步长Print Tab(N + 1 - i); '每行定位For j = 1 To i '左边Print Chr(64 + j);Next jFor j = i To 1 Step -1 '右边,注意步长为负数Print Chr(64 + j);Next jNext iEnd SubPrivate Sub Command6_Click()'字符图形的输出(字符等腰三角形)P110'两重循环,外循环控制行数,内循环控制列数'其实就是对字符Ascii的操作,注意26,32等数字C = UCase(InputBox("请输入一个字母"))N = Val(InputBox("请输入行数"))m = Asc(C) - 1 'Asc(c) - 66 'For i = 1 To NPrint Tab(15 - i); '定位For j = 1 To 2 * i - 1m = m + 1If m > 90 Then m = m - 26 'Ifm = 26 Then m = 0 'Print Chr(m); 'Print Chr(m + 65);Next jPrint '换行Next iEnd SubPrivate Sub Command7_Click()'冒泡法排序()Dim a(10) As IntegerFor i = 1 To 10a(i) = Int(Rnd * 90) + 10List1.AddItem a(i)Next iFor i = 1 To 10 '冒泡法排序'考点For j = 1 To 10 - i '考点If a(j) > a(j + 1) Then '考点T = a(j)a(j) = a(j + 1)a(j + 1) = TEnd IfNext j, iFor i = 1 To 10List2.AddItem a(i)Next iEnd SubPrivate Sub Command8_Click()'选择法排序(一)Dim a(10) As IntegerFor i = 1 To 10a(i) = Int(Rnd * 90) + 10List1.AddItem a(i)Next iFor i = 1 To 9 '选择法排序考点For j = i + 1 To 10 '考点If a(i) > a(j) Then '考点T = a(i)a(i) = a(j)a(j) = TEnd IfNext j, iFor i = 1 To 10List2.AddItem a(i)Next iEnd SubPrivate Sub Command20_Click()'选择法排序(二)Dim a(10) As IntegerFor i = 1 To 10a(i) = Int(Rnd * 90) + 10List1.AddItem a(i)Next iFor i = 1 To 9 '选择法排序考点k = i '考点For j = i + 1 To 10 '考点If a(k) > a(j) Then k = j '记下最小值的下标,考点Next jIf i <> k Then '考点T = a(i)a(i) = a(k)a(k) = TEnd IfNext iFor i = 1 To 10List2.AddItem a(i)Next iEnd SubPrivate Sub Command9_Click() '找最大/最小值Dim a(10) As IntegerFor i = 1 To 10a(i) = Int(Rnd * 90) + 10Print a(i);Next iMax = a(1) '假如第一个就是最大的k = 1 '记下位置For i = 1 To 10If Max < a(i) ThenMax = a(i) '改变最大变量的值k = i '记下位置End IfNext iPrint "最大值是:"; Max, "位置是:"; kEnd SubPrivate Sub Command10_Click()'顺序查找(一)'顺序查找P126:找满足条件的数'如有重复的,使用标志变量Dim f As BooleanDim aa = Array(90, 20, 20, 30, 25, 40, 8, -23, 20, 60)N = UBound(a) '数组A的下标上界x = Val(InputBox("请输入一个待查找的数:"))f = False '标志初始化For i = 1 To NIf x = a(i) ThenPrint x, if = True '找到标志'Exit For 因为有重复的数,所以不能使用Exit ForEnd IfNext iIf f = False Then Print "没有找到!"End SubPrivate Sub Command11_Click()'顺序查找(二)'顺序查找P126:找满足条件的数'没有重复的数,查找结束后以后,根据循环变量与终值的关系判断是否有结果Dim aa = Array(90, 20, 15, 30, 25, 40, 8, -23, 10, 60)N = UBound(a) '数组A的下标上界x = Val(InputBox("请输入一个待查找的数:"))For i = 1 To NIf x = a(i) ThenPrint x, iExit For '如果有重复的数,去掉End IfNext iIf i > N Then Print "没有找到!"End SubPrivate Sub Command12_Click()'二分查找'折半查找又叫二分查找法'前提:所查找的数据事先已经按升序或降序排列好.Dim f As Booleana = Array(10, 20, 30, 40, 50, 60, 70, 80, 90, 100)For i = 1 To 10Print a(i);Next iPrintx = Val(InputBox("输入一个要查找的数", , 15))Tp = 10bt = 1f = False '标志变量DoMd = Int((bt + Tp) / 2) '注意必须是整除!考点!If x = a(Md) ThenPrint "找到l!位置是"; Md; a(Md) '分号隔开,紧凑格式输出f = True '改变标志变量的值Exit Do '找到立即退出循环,优化算法.考点!End IfIf x < a(Md) Then Tp = Md - 1 '考点!If x > a(Md) Then bt = Md + 1 '考点!Loop While Tp >= bt And f = FalseIf f = False Then Print x; "没有找到!"End SubPrivate Sub Command13_Click()'R进制→10进制,本例是16进制转换为10进制x = Trim(Text1) '去掉左右两边的空格N = Len(x) '求长度m = InStr(x, ".") '找小数点的位置S = 0For i = 1 To NC = Mid(x, i, 1) '取字符If C >= "0" And C <= "9" ThenY = Val(C)End IfIf C >= "A" And C <= "Z" ThenY = Asc(C) - 55End IfIf i < m Then '整数部分S = S + Y * 16 ^ (m - 1 - i)End IfIf i > m Then '小数部分S = S + Y * 16 ^ (m - i)End IfNext iText2 = SEnd SubPrivate Sub Command14_Click()'10进制→R进制,本例是10进制→2进制x = Val(Text1)T = ""Dor = x Mod 2 '求余S = Int(x / 2) ' 或x \ 2 '求商,整数部分T = r & T '把余记下,用变量存起来x = S '把商赋值给被除数,以便下一次再除2 Loop Until S = 0Text2 = TEnd SubPrivate Sub Command15_Click()'删除一个数(一),用Array()给数组赋值Dim a() '数组必须是变体a = Array(10, 20, 30, 40, 50, 60, 70, 80, 90, 100)m = LBound(a)N = UBound(a)For i = m To N Step 1Print a(i);Next iPrintx = Val(InputBox("输入一个要删除的数", "有序数的删除", 50)) For i = m To N Step 1If x = a(i) Then Exit For '找到位置即退出Next iFor j = i To N - 1 Step 1 '''!!!!a(i) = a(i + 1)Next jk = N - m - 1 '容量减少一个ReDim Preserve a(k) '重定义容量,并保留原来的值For i = m To k Step 1Print a(i);Next iEnd SubPrivate Sub Command16_Click()'删除一个数(二),用循环给数组赋初值Dim a() As Integer '动态数组定义第一步N = 10 '动态数组定义第二步:确定容量ReDim a(N) '动态数组定义第三步:重定义For i = 1 To 10a(i) = Int(Rnd * 100)Print a(i);Next ix = Val(InputBox("输入一个要删除的数", "有序数的删除", 50)) For i = 1 To N Step 1If x = a(i) Then Exit For '找到位置即退出Next iFor j = i To N - 1 Step 1 '''!!!!a(i) = a(i + 1)Next jk = N - 1 '容量减少一个PrintReDim Preserve a(k) '重定义容量,并保留原来a(1)--a(9)的值For i = 1 To k Step 1Print a(i);Next iEnd SubPrivate Sub Command17_Click()'删除一个数(列表框)Dim a() As Integer '动态数组定义第一步N = 10 '动态数组定义第二步:确定容量ReDim a(N) '动态数组定义第三步:重定义For i = 1 To 10a(i) = Int(Rnd * 100)List1.AddItem a(i)Next ix = Val(InputBox("输入一个要删除的数", "有序数的删除", 70)) For i = 0 To List1.ListCount - 1If x = Val(List1.List(i)) ThenList1.RemoveItem i ''删除下标'Exit ForEnd IfNext iEnd SubPrivate Sub Command18_Click()'插入一个数(对普通数组操作)Dim a() '数组必须是变体a = Array(10, 20, 30, 40, 50, 60, 70, 80, 90, 100)m = LBound(a)N = UBound(a)For i = m To N Step 1Print a(i);Next iPrintk = N - m + 1 '数组容量ReDim Preserve a(k + 1) '增加一个容量x = Val(InputBox("输入一个要插入的数", "有序数的插入", 50)) For i = m To N Step 1If x < a(i) Then Exit For '找到插入的位置即退出Next iFor j = N To i Step -1 '''!a(j + 1) = a(j) '向后移位Next ja(i) = x 'x占据a(i) 的位置PrintFor i = m To N + 1 Step 1Print a(i);Next iEnd SubPrivate Sub Command19_Click()'插入一个数(对列表框操作)Dim a() As Integer '动态数组定义第一步N = 10 '动态数组定义第二步:确定容量ReDim a(N) '动态数组定义第三步:重定义For i = 1 To 10a(i) = i * 10List1.AddItem a(i)Next ix = Val(InputBox("输入一个要插入的数", "有序数的插入", 70))For i = 0 To List1.ListCount - 1If x < Val(List1.List(i)) ThenList1.AddItem x, i ''在第i个位置插入,后面的元素依次向下移Exit For '!!!!End IfNext iEnd SubPrivate Sub Command21_Click()'简单加密,比如原码:abc1324XYZ 加密为:def1324ABCx = Text1N = Len(x)S = ""For i = 1 To NC = Mid(x, i, 1)If UCase(C) >= "A" And UCase(C) <= "W" Then 'XYZ加密成ABC Y = Chr(Asc(C) + 3)ElseIf UCase(C) >= "X" And UCase(C) <= "Z" ThenY = Chr(Asc(C) - 23)Else '其他的字符不变End IfS = S & YNext iText2 = SEnd SubPrivate Sub Command22_Click()'简单解密,比如密码:def1324ABC 还原成:abc1324XYZx = Text2N = Len(x)S = ""For i = 1 To NC = Mid(x, i, 1)If UCase(C) >= "A" And UCase(C) <= "C" Then 'ABC还原成XYZY = Chr(Asc(C) + 23)ElseIf UCase(C) >= "D" And UCase(C) <= "Z" ThenY = Chr(Asc(C) - 3)Else '其他的字符不变Y = CEnd IfS = S & YNext iText1 = SEnd SubPrivate Sub Command23_Click()'二分法求任意一元高次方程F(X)=0在某一区间的根'首先将方程写成F(X)=0的形式'例,用二分法求F(X)=3*X^3-4*X^2-5*x+13=0在(-2,-1)区间的一个实根,'直到|X1 - X2|<0.00001为止Dim x1!, x2!, x0!x1 = -2x2 = -1k = 0 '累加之前先"清0",K为二分的次数Do While Abs(x1 - x2) >= 0.00001 '考点x0 = (x1 + x2) / 2 '考点F1 = 3 * x1 ^ 3 - 4 * x1 ^ 2 - 5 * x1 + 13 '考点F2 = 3 * x2 ^ 3 - 4 * x2 ^ 2 - 5 * x2 + 13 '考点F0 = 3 * x0 ^ 3 - 4 * x0 ^ 2 - 5 * x0 + 13 '考点If F0 * F1 < 0 Then 'Sgn(F0) <> Sgn(F1) Then 'Sgn符号函数,正数返回1,负数返回-1,0返回0x2 = x0 '考点F2 = F0 '考点x1 = x0 '考点F1 = F0 '考点End Ifk = k + 1 '计算二分次数(循环次数)Print k, x1, x2Loopx = (x1 + x2) / 2 '达到计算精度后方程的根'考点Print "方程的根为X="; x, "二分的次数N = "; kEnd SubPrivate Sub Command24_Click() '递归法求阶乘(主调过程)'递归就是一个过程调用过程的本身,在递归调用过程中,一个过程执行的某一步要用到它自身的上一步(或上几步)的结果.' 用递归求N!,N从键盘输入. ' N!=N*(N-1)!Dim N As IntegerN = Val(InputBox("输入一个整数,并求其阶乘", "输入", 5))f = fact(N)Print N; "!="; fPrint "N="; NEnd SubFunction fact(N As Integer) As Double '递归函数'注意:'(1) 递归就是在过程或函数里调用自身;'(2) 在使用递增归策略时,必须有递推进行的条件,有一个明确的递推结束条件,称为递归出口。
计算机二级公共基础知识(二级必过)
第1章数据结构与算法经过对部分考生的调查以及对近年真题的总结分析,笔试部分经常考查的是算法复杂度、数据结构的概念、栈、二叉树的遍历、二分法查找,读者应对此部分进行重点学习。
详细重点学习知识点:1.算法的概念、算法时间复杂度及空间复杂度的概念2.数据结构的定义、数据逻辑结构及物理结构的定义3.栈的定义及其运算、线性链表的存储方式4.树与二叉树的概念、二叉树的基本性质、完全二叉树的概念、二叉树的遍历5.二分查找法6.冒泡排序法1.1算法考点1算法的基本概念考试链接:考点1在笔试考试中考核的几率为30%,主要是以填空题的形式出现,分值为2分,此考点为识记内容,读者还应该了解算法中对数据的基本运算。
计算机解题的过程实际上是在实施某种算法,这种算法称为计算机算法。
1.算法的基本特征:可行性、确定性、有穷性、拥有足够的情报。
2.算法的基本要素:(1)算法中对数据的运算和操作一个算法由两种基本要素组成:一是对数据对象的运算和操作;二是算法的控制结构。
在一般的计算机系统中,基本的运算和操作有以下4类:算术运算、逻辑运算、关系运算和数据传输。
(2)算法的控制结构:算法中各操作之间的执行顺序称为算法的控制结构。
描述算法的工具通常有传统流程图、N-S结构化流程图、算法描述语言等。
一个算法一般都可以用顺序、选择、循环3种基本控制结构组合而成。
考点2算法复杂度考试链接:考点2在笔试考试中,是一个经常考查的内容,在笔试考试中出现的几率为70%,主要是以选择的形式出现,分值为2分,此考点为重点识记内容,读者还应该识记算法时间复杂度及空间复杂度的概念。
1.算法的时间复杂度算法的时间复杂度是指执行算法所需要的计算工作量。
同一个算法用不同的语言实现,或者用不同的编译程序进行编译,或者在不同的计算机上运行,效率均不同。
这表明使用绝对的时间单位衡量算法的效率是不合适的。
撇开这些与计算机硬件、软件有关的因素,可以认为一个特定算法"运行工作量"的大小,只依赖于问题的规模(通常用整数n表示),它是问题规模的函数。
rna二级结构算法
rna二级结构算法RNA二级结构算法RNA二级结构是指RNA分子中碱基之间的配对关系。
RNA二级结构的准确预测对于理解RNA的功能和特性具有重要意义。
目前,已经开发出多种算法用于预测RNA二级结构,其中包括动态规划算法、基于能量模型的方法和机器学习算法等。
本文将介绍其中一些常用的RNA二级结构算法。
1. 动态规划算法动态规划算法是一种常用的RNA二级结构预测算法。
它通过构建一个二维矩阵来存储RNA序列中各个碱基之间的配对情况,并利用递推关系来求解最优的二级结构。
动态规划算法的核心思想是将原始问题分解为一系列子问题,并通过求解子问题的最优解来得到原始问题的最优解。
在RNA二级结构预测中,动态规划算法可以通过计算最大化的碱基配对数来确定二级结构的稳定性。
2. 基于能量模型的方法基于能量模型的方法是另一种常用的RNA二级结构预测算法。
它基于RNA分子的稳定性原理,通过计算不同二级结构的自由能来评估它们的稳定性。
能量模型通常考虑了碱基配对的稳定性、环形结构的稳定性以及非配对碱基之间的相互作用等因素。
基于能量模型的方法可以通过寻找使总能量最小化的二级结构来预测RNA的二级结构。
3. 机器学习算法近年来,随着机器学习技术的发展,越来越多的研究者开始尝试将机器学习算法应用于RNA二级结构预测。
机器学习算法可以通过训练模型来学习RNA序列与其二级结构之间的关系,并利用学习到的模型来预测未知RNA序列的二级结构。
常用的机器学习算法包括支持向量机、随机森林和深度学习等。
机器学习算法的优势在于可以通过大量的训练数据来提高预测准确性。
4. RNA二级结构预测的挑战虽然已经有多种算法用于RNA二级结构的预测,但是仍然存在一些挑战。
首先,RNA分子的二级结构是动态的,它可以在不同的环境中发生变化。
因此,预测准确的RNA二级结构需要考虑到环境因素的影响。
其次,RNA二级结构的预测是一个NP完全问题,即在多个可能的二级结构中寻找最优解是一个计算上的挑战。
声音的计算公式计算机二级
声音的计算公式计算机二级我们来了解一下声音的计算公式中常用的参数。
声音的主要参数有频率、振幅、相位和声速等。
频率是指声音的振动周期,用赫兹(Hz)来表示。
振幅是指声音的振动幅度,用帕斯卡(Pa)来表示。
相位是指声音振动的起始位置,用弧度(rad)来表示。
声速是指声音在介质中传播的速度,用米/秒(m/s)来表示。
在音频处理中,声音计算公式被广泛应用于声音的合成、变声、滤波等方面。
例如,利用傅里叶变换可以将声音信号分解成各个频率成分,从而实现声音的合成和变声效果。
滤波则可以通过声音计算公式来实现对声音信号的去噪和增强。
此外,还可以利用声音计算公式来计算音频信号的能量、频谱等参数,从而对音频信号进行分析和处理。
在声音识别方面,声音计算公式可以用于声纹识别、语音识别等应用。
声纹识别是指通过声音的特征来进行身份验证或识别的技术。
声纹识别中常用的声音计算公式有MFCC(Mel Frequency Cepstral Coefficients)等。
MFCC通过对声音信号的频谱进行离散余弦变换得到声音的特征参数,然后利用这些参数进行声纹的识别。
语音识别是指将声音信号转化为文字的技术,声音计算公式在语音识别中起到了关键作用。
通过声音计算公式可以对声音信号进行特征提取和模式匹配,从而实现对声音的识别和转换。
在音频编码领域,声音计算公式被广泛应用于音频压缩和编码算法中。
音频编码是指将原始的音频信号经过处理后转化为数字化的编码形式,以减少存储和传输的数据量。
常用的音频编码算法有MP3、AAC等,这些算法利用声音计算公式对音频信号进行分析和处理,从而实现对音频信号的压缩和编码。
声音计算公式在计算机二级中具有重要的应用价值。
通过声音计算公式,我们可以对声音信号进行分析、处理和识别,从而实现对声音的合成、变声、滤波、识别和编码等功能。
声音计算公式的应用不仅在音频处理、声音识别和音频编码等领域有着广泛的应用,还在语音合成、语音增强、音频编辑等方面发挥着重要的作用。
计算机二级较难算法解析大全
较难算法解析1.求素数 (1)2.冒泡排序法:P147,例6.3 (2)3.选择排序法 (3)4.插入排序法 (5)5.二分查找法 (6)6.牛顿迭代法 (7)7.求最小公约数 (7)8.字符串匹配 (8)9.进制转换 (9)1.求素数定义:质数又称素数。
指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。
换句话说,只有两个正因数(1和自己)的自然数即为素数。
比1大但不是素数的数称为合数。
1和0既非素数也非合数。
方法一:当一个数只能被1和本身整除时即为素数。
方法二:当一个数x不能被区间[2,x/2]之内任何数整除时即为素数。
方法三:当一个数x不能被区间[2,sqrt(x)]之内任何数整除时即为素数。
真题精析:#include <stdio.h>#include <math.h>int fun(int bg,int fn){/**/解法一:int i,j,num=0,t;for(i=bg;i<=fn;i++) 用外循环将[bg,fn]区间内的数用i一个一个表示出来{for(t=0,j=1;j<i;j++) 对i的每个取值,要判断其是否为素数,判断方式此处用的是方法一,t用来记录1到i-1之间能被i整除的数的个数,1到i-1之间的数用j一一列举出。
若要用方法2或3则循环条件改为j<=i/2或j<=sqrt(i)即可if(i%j==0) t++;if(t==1) num++; 如果t的值为1说明i是素数}return num;解法二:int i,j,num=0;for(i=bg;i<=fn;i++) 用外循环将[bg,fn]区间内的数用i一个一个表示出来{for(j=2;j<i;j++)对i的每个取值,要判断其是否为素数,判断方式此处用的是方法一,2到i-1之间的数用j一一列举出,若这之间只要有一个数能整除i,则说明i不是素数,因此不需要判断其他数,于是break。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机等级考试二级VisualBasic常用算法汇总南通大学计算机科学与技术学院鲁松计算机等级考试二级VB常用算法(1):累加和连乘1、算法说明累加形式:V=V+e连乘形式:V=V*e其中:V是变量,e是递增表达式。
累加和连乘一般通过循环结构来实现。
注意:需在执行循环体前对变量V赋初值。
一般的,累加时置初值0;连乘时置初值为1.举例求N!的结果。
Private Sub Command1_Click()Dim n%,i%,s&n = Val(InputBox("输入n"))s = 1For i = 1 To ns = s * iNext iPrint sEnd Sub错误的写法:Private Sub Command1_Click()Dim n%,i%,s&n = Val(InputBox("输入n"))For i = 1 To ns = 1 …赋初值语句位置不对!s = s * iNext iPrint s …输出s的值为n,而不是n!End Sub应用举例根据下列公式,求自然对数e的的近似值。
要求:误差小于0.00001Private Sub Command1_Click()Dim i%,n&,t!,e!e = 2i = 1t = 1Do While t > 0.00001i = i + 1t = t / ie = e + tLoopPrint "计算了";i;"项目和是:"; ePrint Exp(1)…与上句输出值进行对比以证明算法的正确性End Sub解题技巧1)由于这类题目往往是根据精度要求来求值,因此我们不能预知具体循环次数,所以这类题目一般用Do循环,很少用For循环。
设定循环变量和通项变量,注意各变量的初值;2)分解通项表达式中各因子,并分别将各因子用循环变量表示;3)如果步骤2中有的因子比较复杂,难以直接用变量表示,此时可以考虑使用Function过程;4)根据步骤1、2、3,写出通项表达式;5)根据精度要求(往往是通项小于10负多少次方这样一个关系表达式),写出一条满足精度要求后跳出循环的语句。
通常是用:if 通项表达式>10^(-N)then exit do ,注意这句话一般需放在累加或者连乘式之前。
实例说明以2002年春上机试卷06编程题为例根据X值计算:n=1,2,……要求:n项绝对值小于等于10-6为止。
1、由于循环次数不确定,因此确定用Do循环结构并定义循环变量用n表示(初值1);用户输入的值用x表示;通项用dblCos表示;累加值用sum表示,初值为0;2、分解通项式的组成可以分解为三部分:可以表示为:(-1)^(n+1)可以表示为:x^(2*(n-1))比较复杂,难以直接表示3、由于步骤2中复杂,此时考虑使用过程。
于是定义过程,输入值是n,返回值是于是有:private Function comp(n as long)as longdim I as longdim result as longresult=1 …此处注意,由于是连乘,初值为1for I=1 to 2*(n-1)result=result*Inext Icomp=resultEnd Function注意:由于是参数按地址传递,因此对于本题,实参的值不能在过程中被改变!(也是改错题常考的地方!!)4、根据步骤1、2、3,写出通项dblCos的表达式:dblCos=(-1)^(n+1)* x^(2*(n-1))/comp(n)5、根据精度要求知:If abs(dblCos)<=10^(-6)then exit do最后程序为:Private Sub Command1_Click()Dim n As Long,dblCos As Double,x As Doublex = Val(Text1.Text)n = 1DodblCos = (-1)^ (n + 1)* x ^ (2 * (n - 1))/ comp(n)If Abs(dblCos)<= 10 ^ (-6)Then Exit DoSum = Sum + dblCosn = n + 1LoopPrint SumEnd SubPrivate Function comp(n As Long)As LongDim I As LongDim result As Longresult = 1 '此处注意,由于是连乘,初值为1For I = 1 To 2 * (n - 1)result = result * INext Icomp = resultEnd Function注意:如果调试运行时死循环,可以按Ctrl+Break中断死循环,不需要重新启动机器。
(或者Ctrl+Scroll Lock)2、实战练习1)补充代码(2003秋二(7))本程序的功能是求下面数列前n项之和。
S(x,n)=x/2+2!*x^3/2*4+3!*x^5/2*4*6+……+n!*x^2n-1/2*4*6……2nOption ExplicitPrivate Sub Command1_Click()Dim x As Single,s As SingleDim n As Integer,i As Integerx=InputBox("输入X:","求数列和",1)n=InputBox("输入N:","求数列和",1)For i=1 To ns=s+fun(x,i)Next iLabel1.Caption= _(1)_Text1=sEnd SubPrivate Function fun(x As Single,n As Integer)As Single__(2)__p=1For i=1 To n__(3)___Next ifun=x^(2*n-1)*pEnd Function2)编程题(2003春上机试卷03)按下列公式编写求积分余弦函数值的程序。
当通项绝对值小于10-5时停止计算。
计算机等级考试二级VB常用算法(2):最值问题1、算法说明在若干数中求最大值,一般先取第一个数为最大值的初值(即假设第一个数为最大值),然后,在循环体内将每一个数与最大值比较,若该数大于最大值,将该数替换为最大值,直到循环结束。
求最小值的方法类同。
求若干数平均值,实质上就是先求和,再除以这些数的个数。
应用举例随机产生n个1-100(包括1和100)的数,求它们的最大值、最小值和平均值。
Private Sub Command1_Click()Dim n As Integer, i As Integer, min As Integer, max As Integer, aver As Single, s As Integern = Val(InputBox("输入个数:"))s = Int(Rnd * 100) + 1max = smin = saver = sPrint "第1个数是:" & sFor i = 2 To ns = Int(Rnd * 100) + 1Print "第" & i & "个数是:" & sIf s > max Then max = sIf s < min Then min = saver = aver + sNext iaver = aver / nPrint "max="; max; "min="; min; "aver="; averEnd Sub解题技巧最大值、最小值、平均值类型题目往往和数组放在一起考!有的不仅求这些值,还要对具有最大值或者最小值的行或列或者某个元素进行处理,这时就要在记录最大、最小值时,同时记录该值所在的行号和列号。
2、实战练习1) 补充代码(2000春二(9))本程序的功能是在二维数组中查找鞍点元素,即该元素在所在行中为最大,且在所在列中为最小。
在一个数组中可能存在,也可能不存在这样的元素。
数组各元素的值从文件data.txt中读取。
Private Sub Form_Click()Dim a(3,3) As Integer,i As Integer,j As IntegerDim maxvr As Integer,col As Integer, As IntegerOpen data.txt For Input As #1For i=1 To 3For j=1 To 3Input #1,a(i,j)Print a(i,j);Next jPrintNext iFor i=1 To 3maxvr= (1)col=1For j=2 To 3If maxvrmaxvr= (2)col=jEnd IfNext jFor j=1 To 3If maxvr>a(j,col) Then (3)Next j计算机等级考试二级VB常用算法(3):素数1、算法说明素数(质数):就是一个大于等于2的整数,并且只能被1和本身整除,而不能被其他整数整除的数。
判别某数m是否是素数的经典算法是:对于m,从I=2,3,4,……,m-1依次判别能否被I整除,只要有一个能整除,m就不是素数,否则m 是素数。
Private Function sushu(ByVal n As Long) As BooleanDim i As LongFor i = 2 To n - 1If (n Mod i) = 0 Then Exit ForNext IIf I=n then sushu=TrueEnd Function很显然,实际上,我们可以改进上面For i = 2 To n – 1为:For i = 2 To int(sqr(m))这样可以很好的提高效率。
以上判断是否为素数的代码务必识记!应用举例求100-200之内素数。
Private Sub Command1_Click()Dim j As IntegerFor j = 100 To 200If sushu(j) = True ThenPrint jEnd IfNext jEnd Sub解题技巧识记判断素数的算法过程,根据题意,灵活调用!实例说明编程题(2002年春上机试卷04)找出10000以内所有可以表示为两个平方数和的素数。
思路:首先找10000以内的所有素数,对于每个素数判断其是否可以表示为两个平方数之和(即对于任意小于该素数shu的数I,如果I和shu-I均为平方数,则说明其可以表示为两个平方数之和。