美文网首页程序员程序园scratch 编程启蒙
【编程】中小学GoC编程示例

【编程】中小学GoC编程示例

作者: zhyuzh3d | 来源:发表于2019-07-06 22:09 被阅读8次

    欢迎关注我的专栏( つ•̀ω•́)つ【人工智能通识】
    更多相关文章请点击2019年6月专题

    小孩子能学编程吗?我说的编程不是Scratch那种,而是真正的写代码,C++代码。


    驯兽师网站截图

    关于GoC编程

    GoC是C语言的扩展,是专门针对小学和初中学生开发的趣味编程入门语言。

    GoC由从事中小学信息学教学30多年的江涛老师开发,他也是国内最著名的奥林匹克信息学教练之一。

    GoC的特点就是简单易上手,并且保留了C/C++的全部语法结构。

    关于GoC编程,可以淘宝购买江涛老师撰写的《魔法学院的奇幻之旅》一书,内容有趣易学。

    关于驯兽师网站

    驯兽师学院 hourofcode.cn

    驯兽师学院

    这是基于江涛老师GoC语言Web版开发的在线学习平台,功能简单,专注于让小孩子能够快速上手GoC编程,接触到真正的代码概念。

    使用流程:

    • 注册登录,然后马上开始。
    • 代码管理,新建文件。
    • 打开文件,编写代码。
    • 点击运行,查看执行效果。
    在线编写代码并运行

    点击保存按钮保存当前代码,或者点击查看命令浏览常用命令。

    学习编程的目的是驯服计算机,控制计算机,掌握计算机,利用计算机这个强大的工具增强青少年的学习能力、认知能力、逻辑能力。

    下面是一些简单的入门案例,如果您和孩子都没有正式的编程基础,建议参考《魔法学院的奇幻之旅》进行学习和练习。

    目前驯兽师学院网站的视频教程正在制作中,很快就会上线了,而且是全免费开放。

    多边形外角和是360度

    int main() {
        p.moveTo(-150,0);
        for(int i=0;i<10;i++){
            p.fd(300).bk(250);//修改250查看变化
            p.rt(360/10);
        }
    }
    

    绘制五角星

    int main() {
        p.moveTo(-200,200);
        p.rt(90);
        for(int i;i<5;i++){
            p.fd(500);
            p.rt(360/5*2);
        }
        return 0;
     }
    

    绘制多角星

    int main() {
        int n=17;//角数
        int len=150;//每条线长度
        int jiao=15;//角a    
        p.moveTo(0,len);
        
        for(int i=0;i<n;i++){
           p.rt(jiao).fd(len).rt(180-jiao*2).fd(len).lt(180-jiao);
           p.rt(360.0/n); 
        }
        
        return 0;
     }
    

    绘制内连多角星

    int main() {
        int len1=300;
        int len2=150;
        int n=6;    
        for(int i=0;i<n;i++){
            double banjiao=180.0/n;
            p.lt(banjiao).fd(len2);
            double px1=p.getX();
            double py1=p.getY();
            p.bk(len2).rt(banjiao).fd(len1);
            double px2=p.getX();
            double py2=p.getY();
            p.lineTo(px1,py1).lineTo(px2,py2).bk(len1);
            p.rt(banjiao).fd(len2);
            double px3=p.getX();
            double py3=p.getY();
            p.lineTo(px2,py2).lineTo(px3,py3).bk(len2).rt(banjiao); 
        }
        return 0;
     }
    

    彩色方块阵列

    int gezi(int size,int n){
        int offset=size*n/2-size/2;
        for(int col=0;col<n;col++){
            for(int row=0;row<n;row++){
                int px=row*size+1-offset;
                int py=offset-col*size+1;
                p.moveTo(px,py);
                p.c(rand()%15);
                p.rr(size-2,size-2);
            }
        }
    }
    int main() {
        p.speed(9);
        gezi(100,5);
        return 0;
     }
    

    数点计算圆周率

    int main()
    {
        p.hide();
        p.rr(200*2, 200*2, 8); //在这里简书400是敏感词,所以改为200*2
        for(int i=0;i<200;i++){
            p.moveTo(rand()%400-200,rand()%400-200);
            p.oo(10,5);
        }
        p.moveTo(0,0).o(200,12); 
    }
    

    数格子计算圆周率

    int main()
    {
        p.rr(200*2,200*2,8);
        p.oo(200,12);   
        int gezi=20; //每个格子的边长大小
        int huafen=400/gezi; //横向、竖向划分多少格子
        for(int x=0;x<huafen;x++){
            for(int y=0;y<huafen;y++){
                p.moveTo(-200+gezi/2+x*gezi,200-gezi/2-y*gezi);
                p.r(gezi,gezi,0);
                p.oo(2,1);
            }
        }
    }
    

    多边形边长计算圆周率

    int main(){
     double px=-300;
     double py=0;
     p.moveTo(px,py);
     int n=10;//修改这个边数提高计算精度
     int len=80;
     p.rt(90.00/n);
     for(int a=0;a<n;a++){    
        p.fd(len); 
         p.rt(180.00/n);
     }
     double zhijing=p.getX()-px;
     double zhouchang=n*len*2;
     p.text(zhouchang/zhijing);    
    }
    

    树枝

    int aa(double len){
        if(len>10){
            double len2=len*0.7; //简书中7和five在一起是敏感词,所以这里用7
            double dis=len*0.25;
            p.fd(len).bk(dis);
            p.rt(30).fd(len2).o(dis);
            p.bk(len2);
            p.lt(60).fd(len2).o(dis);
            p.bk(len2);
            p.rt(30).fd(dis).rt(10);
            aa(len2);
        }
    }
    
    int main() {
        p.moveTo(0,-300);
        p.speed(10);
        p.hide();
        aa(200);    
        return 0;
     }
    

    分形树

    int aa(double len){
        if(len>20){
            double a=25*(0.5+rand()%100/100.0*0.5);
            double len2=len*(0.7+rand()%100/100.0*0.1);
            p.fd(len);
            p.rt(a).fd(len2);
            aa(len2);
            p.bk(len2);
            p.lt(a*2).fd(len2);
            aa(len2);
            p.bk(len2);
            p.rt(a);
            p.bk(len);//一定要回到原点
        }
    }
    
    int main() {
        p.speed(1000);
        p.moveTo(0,-300);
        aa(120);    
        return 0;
     }
    

    谢尔宾斯基三角

    int sierp(double len){
        for(int n=0;n<3;n++){
            p.fd(len).rt(120);   
        }
        if(len>30){
            double len2=len/2.0;
            sierp(len2);//左下三角形
            p.fd(len2);
            sierp(len2);//左上三角形
            p.rt(120).fd(len2).lt(120);
            sierp(len2);//右侧三角形
            p.lt(120).fd(len2).rt(120);//回到原点
        }
    }
    int main() {
        p.speed(9);
        p.moveTo(-200,-200);
        sierp(500);
        return 0;
     }
    

    科赫雪花

    int koch(double len){
        if(len>30){
            double len2=len/3.0;
            koch(len2);
            p.lt(60);
            koch(len2);
            p.rt(120);
            koch(len2);
            p.lt(60);
            koch(len2);
        }else{
            p.fd(len);
        }
    }
    int main() {
        p.speed(6);
        p.moveTo(-200,100).rt(90);
        for(int n=0;n<3;n++){
            koch(400);
            p.rt(120);
        }
        return 0;
     }
    

    更多文章可以观看我的小文集青少年编程


    欢迎关注我的专栏( つ•̀ω•́)つ【人工智能通识】
    更多相关文章请点击2019年6月专题


    每个人的智能新时代

    如果您发现文章错误,请不吝留言指正;
    如果您觉得有用,请点喜欢;
    如果您觉得很有用,欢迎转载~


    END

    相关文章

      网友评论

        本文标题:【编程】中小学GoC编程示例

        本文链接:https://www.haomeiwen.com/subject/pibmhctx.html