计算机软件编程基础
问题:求阶乘n!的值。 现在要求n!的值,我们的思路是:主程序负责处理输入n值,自定义一个jc()函数,专门计算n!的值。 var n,N=0; n=parseInt(WScript.StdIn.ReadLine()); jc(n); WScript.StdOut.WriteLine(N); 可以看到,主程序是非常简单的。下面我们来看jc(n)这个函数如何编写。 function jc(n) { if (n>1) N=n*jc(n-1); else N=1; return N; } 我们以n=5为例,算一下5的阶乘。 5>1,真 N=5*jc(5-1) 4>1,真 N=4*jc(4-1) 3>1,真 N=3*jc(3-1) 2>1,真 N=2*jc(2-1) 1>1,假 N=1 1 2 3 4 5,返回1 6,返回2*1=2 7,返回3*2=6 8,返回4*6=24 9,返回5*24=120 从不符合 条件到符 合条件 四、关于编程题的解答 小题题型主要是一些涉及概念的考查,又或者是一些小程序的求解。 如: 请选出符合 false || ( )为真的选项。 A、”5==5” B、2>3 C、false D、5==5 答案是D。A是一个字符串,不存在真与假的问题;B明显是假;C也是假;D为真,故选D。 判断:JavaScript允许在一个函数的函数体中调用另一个函数。 正确?错误? 明显正确。详见“嵌套、递归”。 下面哪一个语句定义了一个名为pageNumber的变量并将它的值赋为240? [A]var PageNumber=240 [B]pagenumber=240 [C]var pageNumber=240 [D]var int named pageNumber=240 A定义的是PageNumber;B定义的是pagenumber;D多了int named ;正确答案是C 表达式123%7的计算结果是_____。[A]2 [B]3 [C]4 [D]5 答案: C (123÷7=17……4) 下面的哪一个表达式将返回真?[A](3==3)&&(5<1) [B]!(17<=20) [C](3!=3)||(7<2) [D](1==1)||(2<0) A:真 && 假?假;B:!(真)?假 C:假 || 假?假;D:真 || 假?真 故选D 目前,编程题的大题题型主要有: 完善程序:给出问题和(或)答案,以及大部分程序,但关键部分留空,待答题者填上,我在免修试中只遇到过这种。 编写程序求解问题:给出一个人脑不可能在短时间内解决只能通过编程让计算机求解的问题,让答题者求出答案 读程序写结果:要求答题者读完程序后笔算出结果,我们考试是机试,所以一般不出这种题型。 下面我们来举几个例子,首先是前面用递归解决的n!问题,现在我们想一想,能不能不用递归解决吗?答案是可以的,但是递归思想是有它的先进性的,对于编程解决许多问题是很有帮助的。 好,回到正题,类似这种其中一个变量是以1递增(1*2*3……)的问题。我们是毫不犹豫地选择“循环”。 仿照1+2+3……设计的“sum作累加i作递增”的思路,我们用s作累乘器,i作递增。那么,思路就出来了。 s的初始值是1,i的初始值是1; s=s*i,i=i+1; i递增到由用户输入的n为止。 写成程序,如下 var s=1,i,n; n=parseInt(WScript.StdIn.ReadLine()); for (i=1;i<=n;i++) { s=s*i; } WScript.StdOut.WriteLine(s); 完善程序题:参照书本P206的第20题的式子,计算Pi的值。程序以给出。 var Pi,i,n; n=parseInt(WScript.StdIn.ReadLine()); for (……1……) { if (…2…) Pi=Pi-1/(2*i-1); else Pi=Pi+1/(2*i-1); } WScript.StdOut.WriteLine(…3…); 明显第三空填的是:4*Pi。 第一个空是循环条件。很自然,我们知道,i的初始值是1,直到n结束,i=i+1。所以,第一空填的是:i=1;i<=n;i++ 接着,是一个判断结构。条件为真则Pi=Pi-1/(2*i-1),为假则Pi=Pi+1/(2*i-1)。那么条件应该是什么呢?应该是奇数项执行+,偶数项执行-,但是,并没有一个指令用来判断奇偶啊,怎么办呢? 我们知道,奇偶的本质是:偶数能被2整除,而奇数不能被2整除而且余数肯定是1。余数?想到什么了?对了,是除取余%!我们可以通过除取余%来判断