H5 实训课 Day 3

来源:互联网 发布:每天计划软件 编辑:程序博客网 时间:2024/06/01 09:18

Day 2作业:1)求解一元二次方程的根

                           1、接收用户输入二次项系数a

                           2、接收用户输入一次项系数b

                           3、接收用户输入常数项c

                            4、判断是否有实根,delta=b2-4ac

                            5、如果delta<0,则方程的虚根为

                            6、如果delta=0,则方程的根为

                            7、如果delta>0,则方程的根为

                            8、打印输出结果

var a = Number(prompt("请输入二次项系数"));
var b =Number(prompt("请输入一次项系数"));
var c =Number(prompt("请输入常数项系数"));
var delta=b *b - 4* a * c;
if(a!=0) {
    if (delta< 0){
        alert("该方程无实根");
    } else if(delta== 0) {
        var x1= (-b+Math.sqrt(delta))/ (2* a);
        var x2= (-b-Math.sqrt(delta))/ (2* a);
        alert("该方程有两个相同的实根x1=x2="+ x1);
    } else {
        var x1= (-b+Math.sqrt(delta))/ (2* a);
        var x2= (-b-Math.sqrt(delta))/ (2* a);
        alert("两个根分别为"+ "x1= " + x1 + "   "+ "x2= " + x2);
    }
}else{
    alert("对不起,您输入的不是一元二次方程");
}

 

2)计算献血量(献血量与血红蛋白和体重有关)

Hb < 30    7ml/kg

Hb 30-60  10ml/kg

Hb >60    15ml/kg

var weight = Number(prompt("请输入您的体重"));
var hb =Number(prompt("请输入血红蛋白含量"));
var blood;
if(hb <30){
    blood =7* weight;
}else if(hb <60){
    blood =10* weight;
}else{
    blood =15* weight;
}
alert("最大献血量为"+ blood + "ml");


例:制作一个四则运算器,要求用户输入一个数再输入一个算数运算符再输入一个数,计算出相应的结果。

var num1=Number(prompt("请输入第一个数"));
var op =prompt("请输入四则运算中的一个(+-*/");
var num2=Number(prompt("请输入第二个数"));
var result =0;
if(op =="+") {
    result= num1+ num2;
}else if(op =="-"){
        result= num1-num2;
}else if(op =="*"){
        result= num1*num2;
}else if(op =="/") {
    if (num2 != 0) {
        result= num1/ num2;
    } else {
        alert("除法运算时c不为0");
    }
}else{
    alert("运算符输入有误");
}
alert(result);



多分支选择结构

Switch(x){

Case a;

Case b;

Break;

Case c;

Default;

}


它的执行效率比if()快很多,它会将所有可能放在内存当中,case就是标号,当条件满足这个标号时直接进入这个情况里面。

例:四则运算器的完善

var num1=Number(prompt("请输入第一个数"));
var op =prompt("请输入四则运算中的一个(+-*/");
var num2=Number(prompt("请输入第二个数"));
var result =0;
 switch(op){
     case "+":
         result= num1+num2;
         break;
     case "-":
         result= num1-num2;
         break;
     case "*":
         result= num1*num2;
         break;
     case "/":
         result =num1/num2;
         break;
 }
alert(result);


switch优点:

1、结构清晰,一目了然

2、运行速度相对较快


Switch执行逻辑:

从switch后面的小括号里面的变量与后面case中的常量相等的地方开始执行,然后依次执行后面的指令,一直到指令结束。

Case:并不会参与运算,不起条件判断作用,只起到一个标号的作用。只是执行指令的入口。

Default就是除了case以外的情况。

 

Break并不是switch语法中的内容,不属于switch只是一个辅助工具,用于跳出当前结构。

 

例:最大献血量案例改写(switch中将区间问题转化为离散问题)

var weight=Number(prompt("请输入您的体重"));
var hb =Number(prompt("请输入血红蛋白含量"));
var blood;
var H =Math.floor(hb/30);
switch(H){
    case 0:
    blood= 7 * weight;
        break;
    case 1:
    blood= 10 * weight;
        break;
    default:
    blood= 15 * weight;
}
alert("最大献血量为"+ blood +"ml");

 

例:百分制转化为4分制

       A  80以上

       B 70-80

       C 60-70

       D 60以下

 

设计步骤:

                 1、接收学生输入的成绩score

                 2、将成绩除以10取整 flag

                 3、判断flag的值

                 4、8,9,10都是A

                 5、7是B

                 6、6是C

                 7、其余是D

                 8、打印结果

var score=Number(prompt("请输入成绩"));
var score1=Math.floor(score/10);
var res =" ";
switch(score1){
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        res= "D";
        break;
    case 6:
        res= "C";
        break;
    case 7:
        res= "B";
        break;
    default:
        res= "A";
}
alert(res);

 

例:今年是当年的第几天。(不考虑闰年)

如:3.14  一月份  31+二月份  28+14

       5.16 

var month=Number(prompt("接受月份"));
var date =Number(prompt("接受日期"));
var dates=0;
switch(month-1) {
    case 11:
        dates+= 31;
    case 10:
        dates+= 31;
    case 9:
        dates+= 30;
    case 8:
        dates+= 31;
    case 7:
        dates+= 31;
    case 6:
        dates+= 30;
    case 5:
        dates+= 31;
    case 4:
        dates+= 30;
    case 3:
        dates+= 31;
    case 2:
        dates+= 28;
    case 1:
        dates+= 31;
}
dates += date;
alert("是第"+dates+"");

 

 

例:四年一闰  百年不闰  四百年再闰

       分析:这个数是4的倍数不是100的 倍数

var year= Number(prompt("接受年份"));
var month=Number(prompt("接受月份"));
var date =Number(prompt("接受日期"));
var dates=0;
switch(month-1) {
    case 11:
        dates+= 30;
    case 10:
        dates+= 31;
    case 9:
        dates+= 30;
    case 8:
        dates+= 31;
    case 7:
        dates+= 31;
    case 6:
        dates+= 30;
    case 5:
        dates+= 31;
    case 4:
        dates+= 30;
    case 3:
        dates+= 31;
    case 2:
        if((year%4==0&& year%100!=0) || (year%400==0)){
            dates +=29;
        }else{
            dates+=28;
        }
    case 1:
        dates+= 31;
}
dates += date;
alert("是第"+dates+"");

错误与调试

错误分为两种:

1)语法错误

2)逻辑错误

 

语法错误:

var a = 3;
alert(a);
a++;
aletr(a)

将alert 错写成了aletr

 

如何调试:右击浏览器选择检查 或者F12进入开发者工具。错误信息会在console窗口下提示

上面的步骤同时进一步说明了解释型语言的特点。翻译一条执行一条。遇到错误的时候才终止。

 

逻辑错误:

var b = a + 3;
alert(b);

 

如何调试逻辑错误:

语法没有问题,得到的结果与期望得到的结果不符合。并不会在console的窗口下面去提示错误信息。

在source下面可以看到js代码,在里面可以设置断点。

代码执行到断点处就暂停执行(在代码左侧单击即可)

可以让代码单步执行快捷键F10

同事可以查看代码中任意一个表达式或者变量的值

1)手动添加watch

2)选中表达式右击选择添加到watch

 

通过以上的方式可以看到代码每一步的执行结果,当遇到与期望值不符合时就是那一行代码有问题。能够帮助我们定位到错误的位置。根据自己的经验和知识,分析出错误的原因,然后解决它。

循环结构

While(满足的条件){

当满足条件时执行的内容

}

 

循环的特点:

有条件的重复执行一件事,每次做的事情不同,但是类似。

var num = 100;
while(num < 1000) {
var num1 = Math.floor(num/100);
var num10 = Math.floor(num/10 )% 10;
var num100 = num % 10;
var res ="";
    if (num == num1* num1 * num1+ num10 *num10 * num10 + num100 * num100* num100){
        res =num+ "这个数为水仙花数";
        alert(res);
    }
    num ++;
}

 


今天讲完了选择结构,循环结构开了个小头,明日继续更博!

原创粉丝点击