鱼C论坛

 找回密码
 立即注册
查看: 3419|回复: 18

[见证历程] 励志学习历程2015年2月7日开始

[复制链接]
发表于 2015-2-7 01:37:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 小咒 于 2015-3-30 19:51 编辑

2015/2/7  暂定目标:C++入门,汇编入门(其实已经入门了只是win32的汇编还没学),OD等逆向  <等学完某一门再追加目标>

历程记录:2015/3/30 还是在C++入门中,发现光看一本书是不够的一本普通的书只能带你初级的入门一些普通的写法,有很多东西还是需要自己多打代码多理解的!,今天自己建议了一个博客用来记录学习的东西(相当与网络笔记一样吧也可以分享给大家)有兴趣的可以来看看。
博客地址:http://www.cnblogs.com/BlackCat86/
博客的话会比帖子更新的快,因为会经常记录一些自己所学会的概念等等,一起学习一起交流,坚持2-3年!









初中英语课都没上过我不懂英文,所以我知道我学起来可能要比懂英文的人难上N+1倍,就是要不怕困难坚持向前;

2013年7月的时候入的鱼C,学了1个多月的汇编,随后因为某些不可抗拒的因素离开了鱼C,终止学习;
2015年2月一年半后继续回到鱼C学习(不可抗力已经消除),看了一下自己以前的汇编笔记大致上还是了解当初学的汇编的;

现在开始的目标是C++,汇编,逆向等,有可能某些学习的点不是从鱼C入手的,比如现在已经在学的C++,是自己看《C++程序设计(第二版)》谭浩强的,因为小甲鱼这里暂时没有C++的入门,只有一个建立在C基础上的C++快速入门,所以我决定不学C直接C++,买了这本书开始学习!

几乎每天都会学习,开这个帖子是想记录自己的学习历程和监督一下自己,因为有时候会比较懒3天不敲键盘什么的,开了此贴就2天之内必敲键盘!

几乎每天帖子都会更新,也会说上我的学习方法,希望大家一起学习一起进步;







想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-2-7 01:51:29 | 显示全部楼层
本帖最后由 小咒 于 2015-2-7 01:53 编辑

第一章:C++的初步认识

这里我没有多看,只是粗略的看了一下,因为自己本身就稍微会一点,笔者这里也是只让我们初步认识C++而已。

最简单的C++程序,所有的书上所写的程序不要光照抄,你可以灵活的变化它的某一项值从而了解具体的作用。

#include <iostream>                 //这是一个头文件iostream
using namespace std;                //这里是c++的命名空间std

int main()
{
        //↓这个程序我们只是在屏幕上输出了以下的这句话↓
        cout<<"我们要了解我们学习编程的最终目标是什么\n";
        return 0;
}
随后可以直接进入第二章的学习,第一章只是让你走马看花的了解C++


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-7 01:59:46 | 显示全部楼层
本帖最后由 小咒 于 2015-2-7 02:01 编辑

第二章数据类型和表达式



2.1)C++的数据类型。

我这里没有去背它的类型,只是自己也设置了一个表格在自己的笔记程序里。


1.jpg


在写程序的时候需要什么类型,打开笔记找到类型即可,多打程序多用自然而然就记住了,不用死记硬背这些值域。


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-7 02:22:30 | 显示全部楼层
2.2)常量

首先我们必须知道常量的值是不可以被更改的,一个数字它可以是一个常量,一个字符它也可以是一个常量。
关于如何去定义一个常量,这里书貌似是没有说到。


整型常量(整数)的类型
这里其实好简单的,可以先看之前的数据类型的值域表【int】【 short int】【long int】【unsigned int】【unsigned short】【unsigned long】这些都是整型数。

然后以上的6种都是整数类型,它们的值域我们可以看图片。比如当你需要用到一个有负数和正数的值时我们可以选择long型。它的值域是【 -2147483648~2147483647】。

这时候我觉得有的疑问宝宝或者聪明的小伙伴就会发现long型与int型的占用字节数一样,值域也一样,为什么要分int与long呢?
答案:16位系统中int=2字节 long=4字节    32位系统中int=4字节 long=4字节   64位系统中int=4字节 long=8字节
当然现在我们已经没有人在使用16位系统了,通常都为32位或者64位了!




想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-7 04:40:36 | 显示全部楼层
本帖最后由 小咒 于 2015-2-7 18:12 编辑

算了之前学过的那些就不写了,偷懒了>_<~
每天利用自己学到学会的东西来用自己的逻辑写一个小程序(当然目前还是在黑框框内),很期待自己什么时候可以跳出黑框框也必须入门以后了吧~要到MFC才能跳出黑框框-。-~
高手们说过多敲代码自己实践才是高手之道,书可以只看1-2遍但是书中每一课的代码自己可以换着方式来实现,书看100遍代码只敲1遍永远成不了高手~

先自己写一个很简单的小程序,只是用来训练自己逻辑的
while循环加if嵌套的小程序
#include <iostream>
using namespace std;

int main()
{
        int monsterhp=8888;//怪物的血量
        int atk=158;//人物的攻击
        int mp=30;//人物的mp
        int skill=5;//技能伤害倍数
        int skillmp=19;//技能需要消耗的mp
        while(true)
        {
                if (monsterhp<0)
                {
                        cout<<"怪物死亡\n";
                        break;
                }
                else if(mp<19)
                {
                        cout<<"没有mp了吃蓝瓶恢复mp+100\n";
                        mp=mp+100;
                }
                else
                {
                        monsterhp=monsterhp-(atk*skill);
                        mp=mp-skillmp;
                        cout<<"怪物血量:"<<monsterhp<<"\t";
                        cout<<"攻击伤害:"<<atk*skill<<"\t";
                        cout<<"剩余mp:"<<mp<<endl;
                }
        }
        return 0;
}
我再换一种循环语句,把外层while换成for,他们的实际效果是一样的!
#include <iostream>
using namespace std;

int main()
{
        int monsterhp=8888;//怪物的血量
        int atk=158;//人物的攻击
        int mp=30;//人物的mp
        int skill=5;//技能伤害倍数
        int skillmp=19;//技能需要消耗的mp
        int a=0;
        for(monsterhp=8888;monsterhp>=0;monsterhp=monsterhp-(atk*skill))
        {
                if (mp<19)
                {
                        cout<<"没有mp了吃蓝瓶恢复mp+100\n";
                        mp=mp+100;
                }
                else
                {
                        mp=mp-skillmp;
                        cout<<"怪物血量:"<<monsterhp<<"\t";
                        cout<<"攻击伤害:"<<atk*skill<<"\t";
                        cout<<"剩余mp:"<<mp<<endl;
                }
        }
            cout<<"怪物死亡\n";
        return 0;
}


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-2-7 11:30:05 | 显示全部楼层
学好一样再去学其他的建议先汇编
千万不要平行学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-2-7 12:18:05 | 显示全部楼层
小咒 发表于 2015-2-7 04:40
算了之前学过的那些就不写了,偷懒了>_

不错,实践确实是学习的好方法。像这样的控制台程序,可以在dos界面显示吗?你是什么系统?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-7 16:24:04 | 显示全部楼层
牡丹花下死做鬼 发表于 2015-2-7 11:30
学好一样再去学其他的建议先汇编
千万不要平行学习

当然是一样一样学,不会平行学习的。
我是有汇编基础的,了解寄存器与堆栈等以前看过小甲鱼的汇编,只是win32汇编还没学,先学C++学完后考虑是否需要WIN32汇编一步一步深入先~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-7 16:28:04 | 显示全部楼层
kitefall 发表于 2015-2-7 12:18
不错,实践确实是学习的好方法。像这样的控制台程序,可以在dos界面显示吗?你是什么系统?

WIN32控制台应用程序是EXE的不能在DOS内运行的吧~
我是WIN7,软件VC++6.0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-9 23:57:52 | 显示全部楼层
一个非常简单的计算小程序,每天坚持学习并且敲代码,终有一天会成大牛。
#include <iostream>
using namespace std;
//vip1-10的合成公式;基础合成成功率为50,每一级增加3%
int jichu=50;int vip=3;int lv=0;

int hecheng(int level)
{
        lv=jichu+(vip*level);
        
        return lv;
}

int main()
{
        int a,b;
ls:
        cin>>a;
        if(a>10||a<0)
        {
                cout<<"您的VIP等级不正常\n";
                goto ls;
        }
        else
        {
                b=hecheng(a);
                cout<<"您的成功率为:"<<b<<endl;
        }

        return 0;
}





想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-12 01:32:53 | 显示全部楼层
第一次接触函数递归调用,感觉挺有意思的
#include <iostream>
using namespace std;
 

int age(int);

int main()
{
        cout<<age(5)<<endl;
        return 0;
}

int age(int n)
{
        int c;
        if(n==1)c=10;
        else c=age(n-1)+2;
        return c;
}


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-25 23:26:31 | 显示全部楼层
过年休息了好几天,今天继续开始~一个字符转换小程序~3月份就能脱离黑框框啦~~
#include <iostream>
#include <string>
using namespace std;

//书本课题按照规则来转换让A=Z B=Y C=X

void bijiao(char b[]);
int a=65;

int main()
{
        char b[30];
        cin>>b;

        bijiao(b);
        return 0;
}

void bijiao(char b[])
{
        int i,c,m;

        for(i=0;i<30;i++)
        {
                c=25;
                for (a=65;a<90;a++)
                {
                        if(a==b[i])
                        {
                                b[i]=a+c;
                                break;
                        }
                        c=c-2;
                }
        }
        cout<<"破译的密码为:";
        cout<<b<<endl;
}


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-2 22:42:29 | 显示全部楼层
强烈支持楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-3 14:10:57 | 显示全部楼层
   楼主 ,   我想跟你一起学,  我也是初中英语都没过。。。。。。。。。当时   懒   单词都没背,  后来 刚下学 想学电脑的,    我能不能跟你一起学呀~   我qq    941119834    — —    我们可以一起么。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-22 12:22:04 | 显示全部楼层
一起学习一起进步真是难得给力的帖子啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-24 09:02:53 | 显示全部楼层
行百里者半九十, 如果此贴楼主能坚持写三年, 必成大牛!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-25 17:17:01 | 显示全部楼层
本帖最后由 小咒 于 2015-3-25 19:30 编辑

今天3月25日~从2月初开始已经陆陆续续的经过了一个多月了,可惜的事我暂时还在黑框框重徘徊-。-
不过基础的C++已经快基本学玩了,在学习C++的过程中我知道了一些事情,就是C++的入门要比C难的多。因为C++在C的基础上多了一些东西,我可能还是会去学一下C。
现在以我接触到的知识来讲C/C++共通比较方便以后的实际运用。
这里我也比较庆幸以前花过一个多月的时间学过汇编(虽然已经忘记的差不多了不过拿出当年的笔记来看还是大致看的懂)。
汇编对我学习C++是有帮助的在学习(指针,堆,栈)等概念的时候我真庆幸我学过汇编了解内存概念。
还有一些循环语句上面也比较容易理解等等,继续坚持,我知道后面的windows编程方面api方面是对于我来说最难的地方,因为所有的windows系统函数基本上只有微软提供的英文的函数说明教材(我英文真的很烂我到现在连false都很容易记成fales)。
既然学了就不要怕了,最近学习到链表,静态动态等等,不说咯我继续学习去了,希望大家也能坚持的学习下去!

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-25 17:21:38 | 显示全部楼层
本帖最后由 小咒 于 2015-3-25 18:47 编辑

一个动态链表的创建机制,代码中可能还有很多地方可以简化,这也是书本上有的按照书本上写过一次,随后不看书自己再写了一遍。
学习的时候就是这样,你光看书写是没有用的,必须离开书后你也要会写!
#include <iostream>
#include <string>
using namespace std;

class A
{
public:
        int level;
        string name;
        int money;
        A        *next;
};

A *head=NULL;//动态链表头指针
bool checkmoney(string str);//差金钱函数
bool checklevel(string str);//查等级函数
int level();//输入等级函数
int money();//输入金钱函数
string name();//输入名称函数
void print(A *head);//输出函数
void Delete(A *head);//删除函数
void insert(A *head);//插入函数
A *ranking()//创建动态链表函数
{
        A *p1,*p2;
        p1=new A;
        head=p1;
        p2=p1;
        cout<<"请输入角色等级:";
        p1->level=level();
        if(p1->level!=0)
        {
                cout<<"请输入角色名称:";
                p1->name=name();
                cout<<"请输入角色金钱:";
                p1->money=money();
        }
        else
        {
                cout<<"您输入了0,程序结束\n";
                delete p1; return head;
        }

        while(true)
        {
                p2=p1;
                p1=new A;
                cout<<"请输入角色等级:";
                p1->level=level();
                if(p1->level==0)
                {
                        delete p1; p2->next=NULL;p2=NULL;p1=NULL;
                        break;
                }
                cout<<"请输入角色名称:";
                p1->name=name();
                cout<<"请输入角色金钱:";
                p1->money=money();
                p2->next=p1;
        }
        return head;
}

void main()
{
        bool l=true;
        int x;
        while(l)
        {
                cout<<"1:创建\t 2:删除\t 3:插入\t 4:查询\t 5:退出\n";
                cin>>x;
                switch(x)
                {
                case 1:ranking();
                        break;
                case 2:Delete(head);
                        break;
                case 3:insert(head);
                        break;
                case 4:print(head);
                        break;
                case 5:l=false;
                        break;
                default:cout<<"输入错误请重新输入\n";
                        break;
                }
        }
}

void insert(A *head)
{
        A *p1,*p2;
        p1=new A;
        cout<<"请输入角色等级:";
        p1->level=level();
        cout<<"请输入角色名称:";
        p1->name=name();
        cout<<"请输入角色金钱:";
        p1->money=money();
        if(p1->level>head->level)
        {
                p1->next=head;
                ::head=p1;
                return;
        }

        while(head->next!=NULL)
        {
                p2=head;
                head=head->next;
                if(p1->level>head->level)
                {
                        p2->next=p1;
                        p1->next=head;
                        cout<<"成功插入到中间\n";
                        return;
                }

                if(head->next==NULL)
                {
                        head->next=p1;
                        p1->next=NULL;
                        cout<<"成功插入最后\n";
                        return;
                }
                
        }
}

void Delete(A *head)
{
        int level;
        cout<<"请输入你要删除的:";
        cin>>level;
        A *temp;
        if(head->level==level)
        {
                temp=head;
                ::head=head->next;
                delete temp;
                return;
        }

        while(head)
        {
                if(head->next==NULL)
                {
                        cout<<"没有找到要删除的数据\n";
                        return;
                }

                if(head->next->level==level)
                {
                        temp=head->next;
                        head->next=temp->next;
                        delete temp;
                        return;
                }
                head=head->next;
        }
        
}

void print(A *head)
{
        while(head)
        {
                cout<<head->level<<"**"<<head->name<<"**"<<head->money<<endl;
                head=head->next;
        }
}

string name()
{
        int i=0;
        string name;
        while(true)
        {
                cin>>name;
                i=name.length();
                if(i>3&&i<30)
                {
                        break;
                }
                cout<<"请重新输入角色名长度必须是4-30个字符\n";
        }
        return name;
}

int money()
{
        bool xx=false,mm=true;
        string x;
        while(mm)
        {
                cin>>x;
                xx=checkmoney(x);
                if(xx==true)
                {
                        mm=false;
                }
                else cout<<"请重新输入\n";
        }
        return atoi(x.c_str());
}

int level()
{
        bool xx=false,mm=true;
        string x;
        while(mm)
        {
                cin>>x;
                xx=checklevel(x);
                if(xx==true)
                {
                        mm=false;
                }
                else cout<<"请重新输入\n";
        }
        return atoi(x.c_str());
}

bool checklevel(string str)
{
        int level=0,i=0;
        for(i=0;i<str.length();i++)
        {
                if(str[i]>='0'&&str[i]<='9')
                {
                        level=atoi(str.c_str());
                        if(level>=0&&level<=100)
                        {
                                return true;
                        }
                        else
                        {
                                return false;
                        }
                }
                else
                {
                        return false;
                }
        }
}

bool checkmoney(string str)
{
        int level=0,i=0;
        for(i=0;i<str.length();i++)
        {
                if(str[i]>='0'&&str[i]<='9')
                {
                        level=atoi(str.c_str());
                        if(level>=0&&level<=210000000)
                        {
                                return true;
                        }
                        else
                        {
                                return false;
                        }
                }
                else
                {
                        return false;
                }
        }
}


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-29 14:16:30 | 显示全部楼层
类中的静态成员变量与静态成员函数的使用规则;
//创建一个静态成员变量  注:静态成员变量在没有任何对象的时候就存在,属于一个全局变量,该类的任何对象都可以共享它的数据。
//如果把一个静态成员变量设置为公有的话,调用时可以不用创建任何的对象可以直接使用成员名限定符来操作它,但是如果设置为私有的话,在调用它的时候是必须创建一个对象。
//我们要在一个类中的所有对象间共享某种数据,如不将该数据声明为静态成员变量。
//你不想让该类之外的所有函数都可以访问该数据的话可以将其设置为私有成员,但访问之前必须建立一个该类的对象。
#include <iostream>
using namespace std;

class A
{
public:
        A(int xx):money(xx){moneymax=moneymax+xx;kucun++;}
        int get(){return money;}
        static int maxget(){return moneymax;}
        static int kucunget(){return kucun;}
private:
        int money;
        static int moneymax;
        static int kucun;
};

int A::moneymax=0;
int A::kucun=0;

void main()
{
        const int max=5;
        int i=0,j;
        A *p[max];
        for(i=0;i<max;i++)
        {
                cout<<"正在进货第"<<i+1<<"箱的价格为:";
                cin>>j;
                p[i]=new A(j);
                cout<<"现在库存为"<<A::kucunget()<<"箱";
                cout<<"库存总价为"<<A::maxget()<<endl;
        }
        system("pause");
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 11:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表