教女友学编程-4-从打星星到面向对象

本文介绍了使用C语言实现星形图案打印的方法,并详细讲解了冒泡排序算法的具体步骤。此外,还通过机票购买的例子引入面向对象的概念,演示了类与对象的基本操作及多态性的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

打星星-变

如何实现一个如图的功能呢?

*
**
***
****
*****

我们可以用for语句实现,双层for

    for(int m=10;m>0;--m)
    {
        for (int n=0;n<m;++n)
        {

            printf("*");

        }
        printf("\n");

    }

总结最小的结构就是*,
我们通过使里面的for 循环的条件变化来达到控制每行输出个数的变化。
外面的for提供1-10的个数.

现在改变需求:用户需求自己定义输出多少个*

新函数 scanf用来接受用户输入和用户互动,_s表明这个函数是安全版函数.

    int in = 100000;
    //用户输入多少,我就产生多少行和列个*
    scanf_s("%d",&in);

    for(int m=in;m>0;--m)
    {
        for (int n=0;n<10;++n)
        {

            printf("n=%d *",n);

        }
        printf("\n");

    }

排队-排序

int k[]={4600,2320,10000,5000};
这几个是工资,现在要求排个队,从小向大。

开始一步一步描述冒泡算法的过程。



void sort()
{
    int a=1;
    int b=2;
    int c=55558;
//交换数字的过程需要说一下
    c=a;//c?1
    a=b;//a?2 b?2
    b=c;//a=2 b=1


    //从小到大
    int k[]={4600,2320,10000,5000};
    int ok= 4;
    for (int i=0;i<ok-1;++i)
    {
        for (int j=i+1;j<ok;++j)
        {
            if (k[i]>k[j])
            {
                int a=k[j];
                k[j] =k[i];
                k[i] = a;
            }
        }
    }
    for (int i=0;i<4;++i)
    {
        printf("\n%d ",k[i]);
    }
}

写一个从大到小的排序
她竟然写出来了。。。
推荐了《潭版C语言》

面向对象

我最近在重修设计相关,所以希望我的女友也能优雅的代码起步。
我先举了个设计模式里面的例子是:

买票:飞机票,火车票,汽车票
回家

她不太理解为什么要这样做。

这样的必要性何在。

我们一起从应聘网站看需求,不同的语言,她问:为什么有多种语言。
我开始找资料给她看并讲面向对象的优点:
结构化设计

  • 封装的好处-淘宝先付款后发货的逻辑
    • 保护逻辑
    • 隐藏复杂
    • 方便修改
  • 继承-代码重用的好处
  • 多态-没讲但是例子用到了

重在过程,我开始忘了写virtual,结果是调用的是默认函数,补了virtual,她问它是做什么的。

说了类默认是保护状态即private,接口需要特殊说明用public。她问:protected是什么,为了防止混乱回答以后再解释。

回顾一下
指针概念没有明确说明
没有解释公有继承和私有继承以及保护继承。但是直接用了public继承。

好了本节结束。和她讨论了会儿程序员维护代码的事情,以及程序员说:“不能实现”这种懒惰行为。

下面的代码就是演示程序,她说非常喜欢,她完成了bage鸟的定义,我用这个例子来说明,类帮助我们减少重复代码,她说:子类覆盖了父类。这真是自然啊。

class bird 
{
public:
virtual void eat()
    {
        printf_s("在吃\n");
    }
virtual void fly()
    {
        printf_s("飞来飞去\n");
    }
virtual void jiao()
    {
        printf_s("叫了一声\n");
    }
virtual void name()
    {
        printf_s("我是鸟\n");
    }

void start(){
    name();
    eat();
    fly();
    jiao();
    printf_s("\n");
}

};

class xique:public bird
{
public:
    void eat()
    {
        printf_s("吃虫子\n");
    }
    void name()
    {
        printf_s("我叫喜鹊哟\n");
    }
};


class haiou:public bird
{
public:
    void eat()
    {
        printf_s("吃鱼\n");
    }
    void jiao()
    {
        printf_s("欧欧欧\n");
    }
    void name()
    {
        printf_s("我叫海鸥哟\n");
    }
};

class bage:public bird
{
public:
    void eat()
    {
        printf_s("吃肉\n");
    }
    void jiao()
    {
        printf_s("会学人类说话\n");
    }
    void name()
    {
        printf_s("我叫八哥哟\n");
    }
};

int _tmain(int argc, _TCHAR* argv[])
{

    bird* a = new xique();
    a->start();
    bird* b = new haiou();
    b->start();
    bird* c = new bage();
    c->start();

    return 0;
}

如果你是新手,别觉得上面的代码多,我教我女友的时候是一步一步写完这个程序的。所以,它并不是那么复杂,如果你搞清楚它的逻辑。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值