记录--Js基础练习题目

Posted 林恒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记录--Js基础练习题目相关的知识,希望对你有一定的参考价值。

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助

1.使用js,在页面中打印以下图案

提示:

 document.write可以在页面中打印内容
<br>html中代表换行, html中代码空格

 

for(var i=0;i<7;i++)
    // 空格部分
    for(var j=7;j>i;j--)
        document.write(" ");
    
    // *号区域1,正常排列,但被空格部分挤往右边,就会看着是往右靠了
    for(var j=0;j<=i;j++)
        document.write("*");
    
    // *号区域2
    for(var j=0;j<=i+1;j++)
        document.write("*");
    
    // 换行
    document.write("<br>");

2.有一个棋盘,有64个方格,在第一个方格里面放1粒芝麻重量是0.00001kg,第二个里面放2粒,第三个里面放4,第四个里面放8,棋盘上放的所有芝麻的重量

提示:使用循环第一层for循环控制方格,第二层for循环控制方格里面放的芝麻数量

 

var sum = 0;
for(var i=0;i<64;i++)
    var a = 1;//每当下面的for执行结束,sum加完之后重置a变量
    for(var j=0;j<i;j++)
        a = a * 2;
    
    // console.log(a);
    sum += a;

console.log(sum * 0.00001);

3.编写函数,实现任意个任意数字的和

提示:输入值为数组,执行方法后要返回数组里面的所有数值的和

function add(arguments)
var sum=0;
    for(var i=0;i<arguments.length;i++)
        sum+=arguments[i];
    
    return sum;

console.log(add([1,1,1,1,1]));

4.编写一个函数,计算两个数字的和/差/积/商 /余,要求:使用传参的方式

提示:使用switch分情况处理,输入类型和两个值后,方法要返回对应结果

function compute(n1, n2, sy) 
    switch (sy) 
        case "+": 
            return console.log(n1 + n2);
        
        case "-": 
            return console.log(n1 - n2);
        
        case "*": 
            return console.log(n1 * n2);
        
        case "/": 
            return console.log(n1 / n2);
        
        case "%": 
            return console.log(n1 % n2);
        
        default: 
            alert("运算符输入错误");
        
    

compute(1, 2, "+");
compute(1, 2, "-");
compute(1, 2, "*");
compute(1, 2, "/");
compute(1, 2, "%");

5.编写一个函数,通过循环制造一个5 x 5的二维数组,这个数组中的数据是hello

提示:二维数组双层循环

var arr1 = new Array();
for (var i = 0; i < 5; i++) 
    var arr2 = new Array();
    for (var j = 0; j < 5; j++) 
        arr2[j] = "hello";
    
    arr1[i] = arr2;

console.log(arr1);

6.编写一个函数has(arr , n), 判断数组中是否存在n这个元素,返回布尔类型

提示:循环遍历+判断(注意返回值return会结束当前执行语句)

function has(arr, data) 
    for (let i = 0; i < arr.length; i++) 
        if (arr[i] === data) 
            return true;
        //不能else然后return false,这样做的话会结束当前执行语句也就是结束循环语句
    
    return false;

var arr = [0, 1, 2, 3, 60];
console.log(has(arr, 60));

7.编写一个函数norepeat(arr) 将数组的重复元素去掉,并返回新的数组

提示:双循环遍历+判断

function norepeat(arr) 
    var arrNew = new Array();
    // 循环遍历原数组
    for (var i = 0; i < arr.length; i++) 
        // 判断原数组的数据在新数组中是否存在
        if (!(has(arrNew, arr[i]))) 
            // 最后新增数据放在新数组里
            // arrNew.push(arr[i]);
            arrNew[length++]=arr[i];
        
    
    return arrNew;

var arr = [1, 1, 1, 2, 3, 3, 4];
console.log(arr);
console.log(norepeat(arr));

8.编写一个函数实现将参数一中的字符串内容中符合参数二数组的部分去除掉,实现敏感词过滤

提示:循环遍历+replace裁剪

(function () 
"use strict"
var worldsList = ["西巴", "啊啊", "坏人"];
var str = "真的西巴,不是啊啊啊,坏人一个西巴啊啊坏人";
console.log(str);
// 循环遍历这个字符中的所有数据
for (var i = 0; i < str.length; i++) 
    // forEach遍历这个数组中的数据
    worldsList.forEach(function (val) 
        str = str.replace(val, "**");
    )

console.log(str);
// 完整的敏感词过滤需要用到正则表达式来完善
// 见9.2正则
)();

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

 

C基础练习题

记录看到过的c基础题目:

#include<iostream>
#include<string.h>

using namespace std;

void arraysize(char arr[]){
    
    printf("the size of arr[] is %d\n", sizeof(arr));
}

int main(void){
    
    char tmp[20] = "I love you";
    char *str = "I love you";

    char* p = tmp;
    
    printf("The size of char* is %d\n", sizeof(char *));
    arraysize(tmp);
    printf("The size of char* p=tmp is %d\n", sizeof(p));
    
    printf("The size of char array tmp is %d\n", sizeof(tmp));
    
    printf("strlen of tmp : %d\n", strlen(tmp));
    printf("strlen of str %d\n", strlen(str));
    return 0;
}

 

  数组名在赋值和函数参数传递中不能将数组类型传递给赋值的指针变量和函数参数,而蜕变成单纯的指针。对于p=tmp,指针p就没有数组的“内涵",仅仅是个char的指针而已。同样地,数组当作函数参数传入时,传入的只是一个指针值,也不具备数组”内涵“了。

  在我计算机中运行的结果是8  8  8  20 10 10。说明在我电脑(64位)上char指针大小为8个·字节,数组地址被赋值或传递给其他的变量或函数后,不在是数组类型数据性质的东西。

  所谓的数组”内涵“就是指针是不是数组这种数据类型。失去”内涵“就是指针已经不能代表数组数据类型了,变成一个单纯的指针类型。

  这里要搞清楚sizeof是用来干什么的,sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。返回数据类型所占内存大小啊。

  sizeof(1)==sizeof(int)

  sizeof(1.1)==sizeof(double)

  sizeof(p)==sizeof(char*)

  sizeof(str)==sizeof(char*)

  sizeof(tmp)==sizeof(tmp)

  虽然我们知道数组名是一常量指针,但是别忘了数组也是一种数据类型。所以当p=tmp后,p仍然是char*类型,而不能异想天开“=”就数组数据类型都赋给了p。sizeof就是用来计算数据类型所占的内存大小的操作符,所以sizeof(p)==8。当sizeof(tmp)的时候,就会计算出数组数据类型占内存多少个字节,一算发现占用了20个字节。

  在函数中,数组名当作实参传入函数,传入的也只是一个单纯的指针。我们设计了这样的程序:

int main(void){

  str[]="I love you";

  str++;

  return 0;

}

上面程序 指定编译错的,因为数组名是个常量指针,但是你按下面写就是正确的。

void fun(char str[]){

  str++;

}

int main(void){

  str[]="I love you";

  fun(str);

}

说明数组名传递进去就不在有数组的“味道”了。

 

  strlen是一个函数,而非sizeof那样是个操作符。他就是计算从当前位置到‘\0‘有多少个字符。sizeof则是计算数据类型占多少内存。是两个差异迥然的东西。可能产生模糊的事例:

  str1[] = "I love you";

  sizeof(str1) == 11

  strlen(str1)==10

  字符数组是一种数据类型,占用10+1(‘\0‘)内存。所以用sizeof(数据类型)=所占内存大小11;而strlen就是一个函数,就是数一下指针当前位置到‘\0‘有多少个字符。确切的说就是字符串的长度,‘\0’是人为加入的控制符,它占内存但是不属于字符串本身。故I love you字符串长度就为10。

  strlen(str1+1)==9,可以很清楚的看出strlen就是一个当前指针到‘\0‘有多少个字符(不包含‘\0‘)。

数组这东西,作为一种数据类型,就会简单的是一个常数指针+一段内存,指定在编译上作了处理(我猜的)。

1)sizeof()计算数据类型所占内存大小

2)strlen()计算当前指针位置到‘\0‘有字符(不含‘\0‘)

3)数组是一种数据类型,赋值和函数传递不会携带数组数据类型这个特征,而是单纯的指针。

 

本人是外行人,自发学习c语言,记录一下,可能有很多错误想法。

以上是关于记录--Js基础练习题目的主要内容,如果未能解决你的问题,请参考以下文章

Java基础语法(练习)

C基础练习题

07_Java基础语法_第7天(练习)_讲义

JS基础练习:奇偶数质数闰年水仙花数完美数累加累乘多位数拆分等

学习日志

实现备忘录的todoList——[js练习]