3、流程语句相关练习
数学函数
/*
x的y次方
Math.pow(x, y)
*/
// alert(Math.pow(2, 3));
/*
Math.random()
【注】随机0~1的任意数。
[0, 1)
【注】随机0~9的任意整数。
*/
// alert(Math.random());
var num = parseInt(Math.random() * 10);
alert(num);
1、输入年月日,输出当前年第几天。2018.05.17 。month
var year = 2018;
var month = 5;
var date = 17;
var currentDay = 0;
switch(month){
case 12:
currentDay += 30;
case 11:
currentDay += 31;
case 10:
currentDay += 30;
case 9:
currentDay += 31;
case 8:
currentDay += 31;
case 7:
currentDay += 30;
case 6:
currentDay += 31;
case 5:
currentDay += 30;
case 4:
currentDay += 31;
case 3:
currentDay += 28;
case 2:
currentDay += 31;
case 1:
currentDay += date;
break;
default:
alert("error");
break;
}
if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0) {
if(month > 2){
alert(currentDay + 1);
}else{
alert(currentDay);
}
}else{
alert(currentDay);}
2、个人所得税
var salary = 20000;
var tax = 0;
// salary = salary - 3500;
salary -= 3500;
if(salary >= 0 && salary <= 500){
tax = salary * 0.05;
}else if(salary > 500 && salary <= 2000){
tax = salary * 0.1;
}else if(salary > 2000 && salary <= 5000){
tax = salary * 0.15;
}else if(salary > 5000 && salary <= 20000){
tax = salary * 0.2;
}else if(salary > 20000 && salary <= 40000){
tax = salary * 0.25 - 1;
}else if(salary > 40000 && salary <= 60000){
tax = salary * 0.3 - 3;
}else if(salary > 60000 && salary <= 80000){
tax = salary * 0.35 - 6;
}else{
tax = salary * 0.4 - 10;
}
alert(tax); //3300
3、循环习题
1、打印100–200之间所有能被3或者7整除的数
/*for(var i = 100; i <= 200; i++){
if(i % 3 == 0 || i % 7 == 0){
document.write(i + "<br />");
}
}*/
2、打印九九乘法表
/*for(var i = 1; i < 10; i++){
//输出九九乘法表的式子
for(var j = 1; j <= i; j++){
document.write(j + "X" + i + "=" + i * j + " ")
}
document.write("<br/>");
}*/
3、判断一个数是合数,还是质数。
var num = 6;
/*
分析:
肯定能被1和它本身整除。
2~6
*/
var isYes = false; //布尔值,记录是否是合数。
for(var i = 2; i < num; i++){
if(num % i == 0){
//判断出来是合数
isYes = true;
// alert(i);
break;
}
}
if(isYes == true){
alert("这是一个合数");
}else{
alert("这是一个质数");
}
4、求出1-1/2+1/3-1/4…..1/100的和 var i=1; i*-1*-1
var sum = 0;
for(var i = 1; i <= 100; i++){
if(i % 2 == 0){
sum -= 1 / i;
}else{
sum += 1 / i;
}
}
alert(sum);
5、输出20-30之间能被3整除的数,5个一行。
/*
var count = 0; //用于计数
for(var i = 30; i <= 80; i++){
if(i % 3 == 0){
//没找一个符合条件的元素,就计数一次
if(count % 4 == 0){
document.write("<br />");
}
document.write(i + " ");
count++;
}
}*/
6、打印1000-2000年,所有的闰年,四个一行输出。
var count = 0; //用于计数
for(var i = 1000; i <= 2000; i++){
if(i % 400 == 0 || i % 4 == 0 && i % 100 != 0){
if(count % 4 == 0){
document.write("<br />");
}
document.write(i + " ")
count++;
}
}
7、100-1000以内的水仙花数
/*
1、找出所有三位数
*/
for(var i = 100; i < 1000; i++){
//2、将每一位数取出 123
// 【注】关键点:将每一位取出
var a = i % 10;
// var b = parseInt(i / 10) % 10;
var b = parseInt(i % 100 / 10);
var c = parseInt(i / 100);
// var sum = a * a * a + b * b * b + c * c * c;
var sum = Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3);
if(i == sum){
//3、水仙花数
document.write(i + "<br/>");
}
}
8、宰相的麦子:相传古印度宰相达依尔,是国际象棋的发明者。
有一次,国王因为他的贡献要奖励他,问他想要什么
。达依尔说:“只要在国际象棋棋盘上(共64格)摆上这么些麦子就行了:
第一格一粒,第二格两粒,……,后面一格的麦子总是前一格麦子数的两倍,
摆满整个棋盘,我就感恩不尽了。”
国王一想,这还不容易,刚想答应,如果你这时在国王旁边站着,
你会不会劝国王别答应,为什么?
var tmp = 1; //每一格的麦子数
var sum = 0; //求和
for(var i = 0; i < 64; i++){
sum += tmp;
tmp *= 2;
}
alert(sum);
//18446744073709552000
9、打印1——100的所有数,除了7的倍数和带7的数。
关键点:取出个位和十位,去进行判断
除了7的倍数 或
带7的数
(1)/*for(var i = 1; i <= 100; i++){
//1、剔除7的倍数
var a = i % 10;
var b = parseInt(i / 10) % 10;
if((a == 7 || b == 7) || i % 7 == 0){
continue;
}
document.write(i + "<br/>");
}*/
(2)/*for(var i = 1; i <= 100; i++){
//1、剔除7的倍数
if(i % 7 == 0){
continue;
}
var a = i % 10;
var b = parseInt(i / 10) % 10;
if(a == 7 || b == 7){
continue;
}
document.write(i + "<br/>");
}*/
(3)找出7的倍数和带数字7的值
/*for(var i = 1; i <= 100; i++){
if(i % 7 == 0){
document.write(i + "<br />");
}else{
var a = i % 10;
var b = parseInt(i / 10) % 10;
if(a == 7 || b == 7){
document.write(i + "<br />");
}
}
}*/
10、求1!+2!+3!+4!+5!
1 + 2 + 6 + 24 + 1 20
分析:
1、加五次
2、每一次里面应该如何循环。
var sum = 0;
for(var i = 1; i <= 5; i++){
var amass = 1;
for(var j = 1; j <= i; j++){
amass *= j;
}
sum += amass;
}
alert(sum); //153
11、输入两个数,求两个数的最大公约数(*****)
//能够同时整除两个数的最大数
9 6 3
15 5 5
关键字
1.先找出两个数中最小的那个数
*/
var num1 = 15;
var num2 = 5;
//1、找出两个数中的较小数
/*var min = 0;
if(num1 < num2){
min = num1;
}else{
min = num2;
}
alert(min);*/
var min = num1 < num2 ? num1 : num2;
// alert(min);
while(1){
if(num1 % min == 0 && num2 % min == 0){
break;
}
min--;
}
// alert("最大公约数是:" + min);
12、输入两个数,求两个数的最小公倍数(****)
9 6 18
8 4 8
关键点
1. 先找出两个数中的最大数
2. 最大数++,找出能被两个数整除的数(退出循环)
var num1 = 15;
var num2 = 5;
var max = num1 > num2 ? num1 : num2;
while(1){
if(max % num1 == 0 && max % num2 == 0){
break;
}
max++;
}
// alert(max);
13、输入两个数n,a,如果n==3, a == 2;
输出 2 + 22 + 222 的值。(不用输出式子)(****)
如果n == 4, a == 3;
输出 3 + 33 + 333 + 3333的值。
1、n = 3,相加三次,每次相加比前一次相加的数,多一位
2、每次多的这个位数的值为a
*/
/*
3 + 33 + 333 + 3333
*/
var n = 4;
var a = 3;
var sum = 0;
var tmp = a; //关键点:每一次累加的数。
for(var i = 0; i < n; i++){
sum += tmp;
tmp = tmp * 10 + a;
}
// alert(sum);
14、五位数中,对称的数称为回文数,找出所有的回文数。
如12321(***)
关键点:将每一位数都取出来。
/*var num = 12321;
var a = num % 10;
var b = parseInt(num / 10) % 10;
var c = parseInt(num / 1000) % 10;
var d = parseInt(num / 10000);
if(a == d && b == c){
alert("这就是一个回文");
}*/
for(var i = 10000; i < 100000; i++){
var a = i % 10;
var b = parseInt(i / 10) % 10;
var c = parseInt(i / 1000) % 10;
var d = parseInt(i / 10000);
if(a == d && b == c){
document.write(i + "<br/>");
}
}