中小学GoC编程示例

关于GoC编程

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

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

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

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

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

https://x.shiyancang.cn/

使用流程:

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

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

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

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

多边形外角和是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;
 }

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星卯教育tony

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值