作业:验证8-10000以内的数字是否满足哥德巴赫猜想。(哥德巴赫猜想:任何一个大于6的偶数都可以拆分为两个素数的和。)
//哥德巴赫猜想:任何一个大于6的偶数都可以拆分为两个素数的和
var isGDBH=false;
for (var i =8; i<10000;i+=2) {//遍历8-10000的所有偶数,去判断每一个偶数是两个素数的和
for( var j=2;j<i;j++) {
var k=i-j;
var isPrime1=true;
for(var num1=2;num1<j;num1++) {//判断j是不是素数
if (j%num1==0) {
var isPrime1=false;
}
}
var isPrime2=true;
for(var num2=2;num2<k;num2++){
if(k%num2==0){
var isPrime2=false;
}
}
if(isPrime1 && isPrime2){
var isGDBH=true;
break;
}else{
continue;
}
}
if(isGDBH){
document.write(i+"满足哥德巴赫猜想"+j+"+"+k+"</br>");
}else{
document.write(i+"不满足哥德巴赫猜想"+"</br>");
}
}
4 函数和数组
函数的功能
函数的名字
函数的参数
函数的返回值
例:输出100以内的素数:
方法一:循环的嵌套
for( var j=2;j<100;j++){
var isPrime=true;
for (var i =2; i <j; i++){
if (j % i ==0) {
varisPrime = false;
break;
}
}
if (isPrime) {
document.write(i+" ");
}
}
方法二:函数法
for(var num=2;num<100;num++){
if(isPrime(num)){
document.write(num+"是素数</br>");
}
}
/*
*函数的功能:判断一个数是不是素数
* 函数的名字:isprime
* 函数的参数:一个待判断的数
* 函数的返回值:true/false
*/
function isPrime(num){
var flag=true;
for(var i=2;i<num;i++) {
if (num%i==0) {
varflag = false;
break;
}
}
return flag
}
这种解决问题的方法可以将复杂的问题简单化。用量化处理大的问题。如果你遇到了问题,可以一直这样分解下去直到你认为简单为止。
定义和用法
定义:
关键字 function+函数的名字isprime(+函数的参数num){
。。。
返回的结果
}
Funtion isprime(num){
…
Return…
}
Isprime就是函数的名字
Num叫做形参
Return就是返回结果
注意:设计比实现更重要。在后面的抽象函数中要求写上函数的设计
函数的调用:
函数只有调用了之后才会运行
函数名+要传递的参数
Isprime(2)
2就是实参
//哥德巴赫猜想:任何一个大于6的偶数都可以拆分为两个素数的和
for (var i=8; i<10000;i+=2){//遍历8-10000的所有偶数,去判断每一个偶数是两个素数的和
if (isGDBH(i)) {
document.write(i +"满足哥德巴赫猜想" + "</br>");
} else {
document.write(i +"不满足哥德巴赫猜想" + "</br>");
}
}
function isPrime(n){
var isPrime=true;
for (var j = 2; j< n; j++) {
if(n % j == 0) {
var isPrime = false;
break;
}
}
returnisPrime;
}
function isGDBH(num){
var flag=false;
for(var i=2;i<num;i++){
vark=num-i;
if(isPrime(i) && isPrime(k)) {
var flag = true;
break;
} else{
continue;
}
}
returnflag;
}
设计并实现一个函数验证角股定理
任意一个数如果是偶数将他除以二,如果为奇数就乘以3+1,最终一点能得到1.
,验证100以内是否都满足角谷定理。
function isjgdl(i) {
while (i!=1) {
if (i% 2 == 0) {
vari= i / 2;
document.write(i*2+"="+i*2+"/2="+i+"</br>");
} else{
vari= 3 *i + 1;
document.write((i-1)/3+"="+(i-1)/3+"*3+1="+i+"</br>");
}
}
returntrue;
}
for(var num=1;num<100;num++) {
if (isjgdl(num)) {
document.write(num+"满足角谷定理");
}
}
函数满足高内聚、低耦合。一个函数最好就实现一个功能。
例:设计并实现一个函数,实现对一个三位数个位进行重新排列得到最大值
function getmax(num) {
var a = Math.floor(num / 100);
var b = Math.floor(num / 10) % 10;
var c=num%10;
var max = Math.max(a, b, c);
var min = Math.min(a, b, c);
var middle = Middle(a,b,c);
var res = max * 100 + middle * 10 + min;
return res;
}
function Middle(a,b,c) {
if (a= Math.max(a,b, c)) {
returnMath.max(b,c);
} else {
if (b= Math.max(a,b, c)) {
returnMath.max(a,c);
} else{
if(c = Math.max(a, b, c)) {
return Math.max(a, b);
}
}
}
}
var num=Number(prompt("输入任意一个三位数"));
alert(getmax(num));
函数就是一个数据加工黑盒子。也叫做实现某个独立功能的代码段。要忽略细节问题。我们只关心返回的结果,并不关心具体的步骤。
参数的传递
传递的方式有两种,值传递和引用传递。
值传递:
var a=2;
function changeA(a){
var a=3;
}
changeA(a);
alert(a) //2
引用传递:
var a={
value:2
};
function changeA(b){
b.value++;
};
changeA(a);
alert(a.value); //3
引用传递有什么作用?
在函数设计的时候,只能返回一个结果,但是有时需要同时返回多个结果。
这个时候可以用对象。在函数的外面定义一个对象,然后在函数里面去改变这个对象的值。最终这个结果在函数执行之后,返回到原来的对象当中。
作业:设计并实现一个函数,将一个四位数进行重新排列同时得到最大值和最小值。
function getmax(num) {
var a = Math.floor(num / 1000);//千位
var b = Math.floor(num / 100) %10;//百位
var c=Math.floor(num / 10) % 10;//十位
var d=num%10;//个位
var max = Math.max(a, b, c,d);
var min = Math.min(a, b, c,d);
var middle1 = Middle1(a,b,c,d);
var middle2 = Middle2(a,b,c,d);
var res = max*1000+middle1*100+middle2*10+min;
return res;
}
function getmin(num) {
var a = Math.floor(num / 1000);//千位
var b = Math.floor(num / 100) %10;//百位
var c=Math.floor(num /10) % 10;//十位
var d=num%10;//个位
var max = Math.max(a, b, c,d);
var min = Math.min(a, b, c,d);
var middle1 = Middle1(a,b,c,d);
var middle2 = Middle2(a,b,c,d);
var res = min*1000+middle2*100+middle1*10+max;
return res;
}
function Middle1(a,b,c,d) {
if (a==Math.max(a,b, c,d)) {
returnMath.max(b,c,d);
} else {
if (b==Math.max(a,b, c,d)) {
returnMath.max(a,c,d);
} else{
if(c==Math.max(a, b, c,d)) {
return Math.max(a, b,d);
}else{
if (d==Math.max(a, b, c,d)) {
return Math.max(a, b, c);
}
}
}
}
}
function Middle2(a,b,c,d) {
if (a==Math.min(a,b, c,d)) {
returnMath.min(b,c,d);
} else {
if (b==Math.min(a,b, c,d)) {
return Math.min(a,c,d);
} else{
if(c==Math.min(a, b, c,d)) {
return Math.min(a, b,d);
}else{
if (d==Math.min(a, b, c,d)) {
return Math.min(a, b, c);
}
}
}
}
}
var num=Number(prompt("输入任意一个四位数"));
alert(getmax(num));
alert(getmin(num));