排序题

实现如下函数:int GetNthCount(const int *a , int len , int n)

其中,a为无序的int数组,len为a的长度,1<= n <len。

返回第n大的值在数组中出现的次数。

举例:假设a为{5,7,9,0,2,7},len=6,n=2,第n大的值是7,在数组中出现的次数是2,结果返回2。

 

我的代码

#include<iostream>
#include<set>
#include<map>
using namespace std;

int GetNthCount(const int *a , int len ,int n){
         map < int ,int> mp;
         for(int i =0; i < len ;i++){
            map<int , int>::iterator it = mp.find(a[i]);
            if(it != mp.end()){
                it->second++;
            }
            else{
                mp[a[i]] = 1;
            }
         }
         map<int , int>::iterator it1 = mp.end();
         for(int i = 0; i < n;i++){
            it1--;
         }
        return it1->second;
}

int main(){
   int a[] = {5,7,9,0,2,7,7};
   cout<<GetNthCount(a, 7 ,2)<<endl;
}

 

Vector

实现vector中的insert方法

template<class T>

class vector

{

//从pos位置开始插入,elems为插入元素的指针地址,len为elems指向的长度

bool insert(size_t pos,T * elems,size_t len = 1);

private:

T* __begin;//容器开始地址

T* __end;//容器有效元素的结束地址

size_t  __cap;//容器的容量

};

 

void insert(const_iterator iter,const T& t )
        {  
            int index=iter-begin();
            if (index<size_)
            {
                if (size_==capacity_)
                {
                    int capa=calculateCapacity();
                    newCapacity(capa);
                }
                memmove(buf+index+1,buf+index,(size_-index)*sizeof(T)); 
                buf[index]=t;
                size_++;
            } 
        }

 

字符串

给一个string,要求将里面的空格替换为特定字符后返回,如果空格在””里面则不需要替换。

示例:字符串为:zhuhai kingsoft office “wps et ppt”

将空格替换为逗号:”,”

替换后的字符串为:zhuhai,kingsoft,office,”wps et ppt”

 

我的代码

#include<iostream>
#include<cmath>
using namespace std;

string solution(string result){
    bool flag = false;
    for(int i = 0; i < result.length() ;i++){
          if(result[i] == '"'){
            flag = !flag;
          }
          if(flag){
            continue;
          }
          else if(result[i] == ' '){
            result[i] = ',';
          }
    }
    return result;
}

int main(){
    string str = "zhuhai kingsoft office \"wps et ppt\"";
    cout<<solution(str)<<endl;
}

指针应用场景1:交换两个变量的值

#include<iostream>
#include<cmath>
using namespace std;

void mySwap(int *a,int *b)
{
 int temp = *a;
 *a = *b;
 *b = temp;
}

int main()
{
 int a = 6;
 int b = 1;
 mySwap(&a,&b);
 cout<<"a="<<a<<endl;
 cout<<"b="<<b<<endl;
}

a和b的值通过指针进行了交换。

 

指针应用场景2a:函数返回多个值,某些值就只能通过指针返回,传入的参数实际上是需要保存带回的结果的变量。

#include<iostream>
#include<cmath>
using namespace std;

void myMinMax(int a[] , int len ,int *max ,int *min)
{
    *max = *min = a[0];
    for(int i = 1; i<len; i++)
    {
        if(a[i] > *max)
        {
            *max = a[i];
        }
        if(a[i] < *min)
        {
            *min = a[i];
        }
    }
}

int main()
{
    int a[] = {1,7,4,33,75,6,12};
    int min,max;
    myMinMax(a,sizeof(a)/sizeof(a[0]),&max,&min);
    cout<<"max="<<max<<endl;
    cout<<"min="<<min<<endl;
}

最大值和最小值通过指针max和min返回。

 

指针应用场景2b:函数返回运行的状态,结果通过指针返回

#include<iostream>
#include<cmath>
using namespace std;

bool divide(int a,int b,int *result)
{
    if(b == 0)
    {
        return false;
    }
    else
    {
        *result = a/b;
        return true;
    }
}

int main()
{
    int a = 6;
    int b = 2;
    int c = 0;
    if(divide(a,b,&c))
    {
        cout<<a<<"/"<<b<<"="<<c;
    }
    else cout<<"Error!"<<endl;

}

结果通过result指针返回。

指针——可以是const

值——可以是const

 

指针是const

表示一旦得到了某个变量的地址,指针就不能再指向其他的变量了。

如:

int *const q = &i;//q是const
*q = 26;//OK
q++;//Error

 

指针所指的值是const

表示不能通过这个指针去修改那个变量(并不能使得那个变量变成const),可以通过别的指针去修改那个变量

如:

const int *p = &i;
*p = 26;//Error! (*p)是const
i = 26;//OK
p = &j;//OK

 

int i = 0;
const int* p1 = &i;
int const* p2 = &i;
int *const p3 = &i;

判断哪个被const了的标志是const在*的前面还是后面。

如果const在*前面,则指针指向的东西不能被修改。

如果const在*后面,则指针不能被修改。

 

const数组

const int a[] = {1,2,3,4,5,6};

数组变量其实已经是const的指针了,这里的const表明数组的每个单元都是const int,所以必须通过初始化进行赋值。

#include<iostream>
#include<cmath>
using namespace std;

int main(){
     int a = 6;
     cout<<"sizeof(a)="<<sizeof(a)<<endl;
     cout<<"sizeof(a++)="<<sizeof(a++)<<endl;
     cout<<"a="<<a<<endl;
}

在上述代码中,sizeof()运算符只会判断括号中的数据类型,并不会进行实际运算,所以最后输出的a是6。

一个人找另一个人,一句话找另一句话。知道你喜欢仪式感,本想和你一起度过漫长岁月,可惜没能如愿,并不是每一次主动伸出手都能和解呢。记得和你一起去漠河看到的初雪,记得和你在呼伦湖的牵手,记得和你去长春见熊黄黄,记得和你一起去成都拍摄大熊猫,记得我们一起漫步大海边,记得我们一起爬上了角山长城,记得我们曾经在一起的时光,那个时候我们真的互相喜欢过吧。当你参加高考考数学时我在上《离散数学》,我有给你祈祷啊!等待考上一个大学,后来没有实现。大学时等待每周的见面,那是17km的距离。每个早上醒来睡眼朦胧的拿起手机,隔着冰冷的屏幕想知道你睡得好不好。现在分开了,不知道该等什么了…也在想如果你是对的人,也许还会回来,只要是对的,哪怕晚一点,我可以等。想想真是有意思,人和人之间原来是这么熟悉起来的,不知道什么时候就开始习惯你在的生活了,没什么特殊的原因,只因为一起呆得久了。后知后觉可不是什么好东西,很多时候当你觉得事情不太对的时候其实已经无法挽回了。大家都是普通人,这些年爱也爱得乱七八糟的,恨也恨得乱七八糟的,可那又有什么办法呢。。。有些事情如果你做错了的话,自己也会厌弃自己的啊,曾经以为命运是能改的,我不信命!到头来却也只能认命,我爬不动了,不会再这么固执下去了吧。有些事,你改变不了,只能怨天尤人,想象总是美好的,命中注定的事,早点轮回吧,原来这就是自己,一个普普通通的家伙,仔细想想,我这辈子努力去做的事情好像都做错了,连死死抓住那么一点点小温馨都做不到,你就该静静地呆在没人知道的地方,静静地生长也静静地枯萎,像一株野蒲公英那样,最后留在记忆深处的总是些虚无缥缈的东西。以后啊,你还可以拿起相机拍摄你最爱的东西,你还可以一路走走逛逛吃遍全国,你还可以看着你最爱的吃播视频,你还可以天天和我分享着你的所见所闻,到你身边已经没有我的位置了。过了那么久,还是要来了,只能说有缘无分吧,认识你真的很开心,谢谢你,这段日子真的特别特别高兴,在遇见你之前,这个世界上没有值得我珍视的人,我孤立着一切,只想靠自己摆脱孤独,却堕落在无尽的深渊中,我活在彻头彻尾的寒冬中。认识你之后,夏天来了,那几年我的生活充满了阳光,我有了女朋友,有了奋斗的目标,心怀未来。第一次体会到原来自己的一举一动在另外一个人的世界里都是那么重要,她会闷不作声地跟着你走,就像你的尾巴一样,从未有过这么一个人那么需要你,你怎么能看着她消失呢?那时你在我心里是最重要的人啊,世界上只要有你,每一天都是幸福的,世界上只要有你,再大的困难我也能抗,这是我一生里最开心的时间,以前没有过,以后也不会有。往往就是这样,因为告别的时候忘了约定再见的时间,从此就天各一方,但如果他喜欢你,是会追着你到天涯海角的,在一个夏天夜晚,我失去了你,连带着光荣和梦想,我仿佛再度踏入了寒冬,我并不是什么大人物,我一样需要温暖,如果有温暖,我可以庸庸碌碌地活下去,我仍然能记起那种失去你再度陷入孤独的痛苦,很多人会轻易地说出放弃二字,只是因为他们并不懂我的过去。人一生能有多久,能拥有多少东西?以后啊,不要做会让自己后悔的事,不要让那些爱你的人难过,因为这个世界上,你爱的人固然很少,爱你的人也绝不会多。想努力把那两年人生扔进垃圾堆,觉得那是错误的时光,再也不愿回想,仔细想想,其实那两年里也有很多的好事情不是么?

2016-09-09 和你初次见面 余生多多指教

2016-09-15 心急的跑去你们学校 第一次去你们学校 差点走错了路 迷茫的走到了哈尔滨北站 不管过程如何 能见到你就很开心啦 这天是中秋节 月亮很圆 离别的时候差点忘了给你月饼 还好回头望你的时候想起来了 把所有月饼都给你了 只想把身心一切都掏给你

2016-09-30 和你错过了去齐齐哈尔的火车 但和你在一起我就很开心

2016-10-01 和你到达齐齐哈尔 前往漠河 傍晚火车上的风景真美 很想和你再体验一次

2016-10-02 和你去漠河 认识了一对北京的情侣 遇到了一个很好的大叔司机

2016-10-03 和你一起看漠河的初雪 太美了 漠河的一切都像一场美梦 我们买了两个套娃 一人一个

2016-10-05 和你去了满洲里婚礼宫 晚上的满洲里就是一座灯光的城堡

2016-10-06 和你去满洲里国门 套娃广场 呼伦湖 在呼伦湖牵手了

2016-10-07 和你去了哈尔滨索菲亚教堂 有人说”从他打的伞可以看出是真爱”

2016-11-12 和你去长春见到了台灯和熊黄黄 熊黄黄和你说看得出来我很喜欢你

2016-11-13 和你吃了黄焖鸡米饭 去了伪满洲国皇宫

2017-01-05 和你去了长沙五一广场 一起吃了很多东西

2017-01-06 和你去了橘子洲头 可惜没看到橘子洲头的烟花

2017-01-07 和你去湘潭湖南科技大学见了我的好朋友

2017-02-24 和你还有春香在武汉转车回哈尔滨 吃了武汉热干面 你们去看了电影

2017-04-01 你和春香去师大夜市 此刻我在上信息检索课 下课后我一路上跑啊跑 终于在师大夜市找到了你

2017-04-14 坐夜班公交车的人都很有很有故事 你室友又不懂你为何又一次急着来见我 因为你太想我了 此刻我也很想你 只有见到彼此才能把互相的心填满 我们一起去了滨江大桥 夜景的哈尔滨真是太美了

2017-04-20 黄焖鸡米饭 “待宝宝学会给你做”

2017-04-29 和你在沈阳

2017-04-30 沈阳

2017-05-01 和你一起去东北大学见到了春晚哥 我下棋输给了他

2017-05-05 你和春香一起来黑大夜市

2017-05-06 你来和我一起看房 我们在新主楼发现一个不错的房子 就去看了 租下来了

2017-05-07 你和我去服装城买被子 因为错过了时间一起淋了一场雨 签好了合同 我们有一个小家啦

2017-07-11 考完了最后一门 我们一起坐火车去成都

2017-07-13 早上我们到了成都站 休息了一会儿我们就去了武侯祠 锦里 在春熙路见到了小疼疼

2017-07-14 去了大熊猫基地 在环球中心一起等到了墨想 一起去广都站那边吃火锅 小疼疼也来了 一起去了墨想家 晚上你买了一副墨镜

2017-07-15 我们和墨想一起去了水上乐园 见到了仰慕豪和黑骑之魂 黑骑之魂被蚊子咬得好惨 我们一起打了乒乓球 我们5个还去仰慕豪家玩了奇怪的一种牌

2017-07-16 我们起晚了 我买了回家的无座 最后我在成都东站等你 没有上回家的火车 我们一起去了南充 我见到了北邮的SC哥哥 在南充转车去岳池 你好朋友过生日 你把我的箱子放在你家 你婆婆看到了我的背影 我一个人在岳池一中逛 走过你生活的校园 最后躺在足球场 太阳落山了 有点孤单 被一个小孩子用足球踢到了眼镜 他家长把他带走了 我等啊等 终于等到了你 你居然带我去了你家 见到了你姐姐 还吃到了你给我下的面 很幸福啊 半夜我们跑出去吃冰粉 走了好远好远到达时代酒店 4点多 天还没亮 你怕你婆婆发现你不在家 又打车回家了 发消息给我让我不要担心你

2017-07-17 我们一起去吃了冰粥 打包了一份炒河粉 一起去了你经常去的电影院坐着 最后一起去岳池站 那天火车晚点了很久 我们从5点等到8点多 临走前你还怕我挨饿给我买了很多吃的 我9点多到重庆北站转车踏上了回家的路

2017-08-25 你来哈尔滨站接我回我们的小家

2017-09-09 在一起一周年啦 我们发现了一家重庆小面 那儿有我最爱的冰粉

2017-09-28 看完巴萨的欧冠之后 我就出发啦 你的手机屏幕不小心全部摔碎了 我走到了哈尔滨西站 乘上了最早的一班动车 在你学校图书馆门口和你相见 把我的小米2S借给你用 一起去吃了早餐 等你上完早自习我们又在一起待了一会儿 我好舍不得离开你啊 但是你要上课 我也要上课 你去上课后我跑去哈尔滨北站坐动车到哈尔滨西站 遇到拉肚子在厕所上了个厕所 上了31路公交车 堵车堵车堵车 10:10才到学校门口 一路飞奔去新主楼 只迟到了几分钟 是陈宜冬老师的网络设备课 课上几乎睡了过去 下课后就直接回去睡觉啦

2017-09-30 早上我去上课 我的Macbook 你的iPhone6s都到啦 晚上出发前往大连 车上遇到有人打架

2017-10-01 我们在大连站外面走丢了 我在原地等你 终于等到了你 后来吵架了 你上公交车 我没零钱没上 可是你给我投钱了 我不知道 像个孩子一样蹲在地上难过 你在下一站下车跑过来找我 你对我真好 美团意外的丢失了订单 我们找错了酒店 折腾了一上午 下午我们睡了一下午 晚上醒来的时候随便吃了点东西 一起玩王者荣耀玩到很晚

2017-10-02 我们都是第一次见到大海 在大连的星海公园 拍了很多海景照 你真可爱 下午我们去了大连的威尼斯水城 找到了猫的天空之城那家书店

2017-10-03 我们去金州站坐火车 只买了到大石桥的火车 补票到北戴河站 吃了烧烤 还在北戴河的刘庄那条街溜达了很久

2017-10-04 上午一起去爬了联峰山 下午一起去了老虎石海上公园 你在沙滩上写了蓉蓉兔生日快乐 写了王紫欣 写了帆帆i love u 你说甜六度苦四分

2017-10-05 清早踏着朝阳我们去了鸽子窝公园 你的手机掉了 好在遇到了好心人失而复得 一起喝了老北京酸奶 中午我们坐动车从北戴河到了山海关 下午我们去看了天下第一关 爬了角山长城 在山上遇到了老外问我问题 我让你和他交流 好像问的山顶上是什么 以及有多远 晚上 我们踏上了回哈尔滨的火车 火车上遇到两个俄罗斯人

2017-10-07 我的20岁生日 我们去吃了自助餐 你买了可妮兔和布朗熊的蛋糕送我 最快乐的一个生日有你陪我

2017-12-28 你和春香从哈尔滨飞回重庆了 感觉哈尔滨只剩下我孤零零的一个人了

2018-02-28 科目二挂了 但是有你在 所以不可怕 我下次一定要考过

2018-03-04 努力转车 只为离你近一点 早上我终于在哈尔滨西站见到了你 虽然哈尔滨还被冰雪覆盖着 但我心里暖暖的 然后各回学校

2018-03-09 想给你更好的生活 我决定去金山赚钱 买了好几本面试的书 努力努力再努力

2018-04-15 飞往长沙 参加金山春招长沙站笔试 那一周我是无比的想念你

2018-04-22 飞回哈尔滨 终于回到了你在的城市

2018-04-28 得到了金山HR的3面通知 和你去黑大夜市吃东西 还买了我们都喜欢的西米露

2018-05-03 收到了金山的正式实习offer 努力就是有结果的啊 因为有你在 所以我得变优秀 为我们创造更好的未来

2018-05-04 你陪我去办了银行卡作为工资卡

2018-05-11 抽血 我最怕了 但是抽完血就能见到你啦

2018-05-12 汶川大地震十周年 你的手机外屏碎了 我们一起去给你手机换外屏 然后吃了韩盛烤肉 吃得很撑

2018-05-14 拿到了体检报告 身体有点小问题 为了你 我得好好注意自己的身体才行

2018-05-18 很想把你介绍给Final,老司机,小帅,还有海绵宝宝,但是你好像不太想,我就和他们去吃火锅告别,回来得很晚

2018-05-19 和你一起去找吉他包装 遇到了好心人把外包装免费送给我们 把我送你的吉他寄回了你家 在黑龙江省京剧院旁边的那个桥上对你发火了 把雪碧狠狠地摔在地上 对不起 我没控制好自己的情绪 你一定对我非常失望吧

2018-05-20 520 下午把大部分东西都寄走了 祝贺RNG夺得了MSI冠军

2018-05-21 离开哈尔滨 前往金山 相同的分别地方 相同的大叔 不敢看此刻的你 我哭了

2018-05-22 到达金山,金山很棒

2018-06-12 被训话了 我真差劲

2018-06-15 下班后马上出发 没有买票就到了唐家湾站 努力努力再努力 只为能在你20岁那天见到你 幸运的买到了想去的行程 珠海-广州-岳阳-武汉-哈尔滨

2018-06-17 终于见到你啦!我们去吃了上次没吃成的那家鱼 宝贝20岁生日快乐!

2018-06-22 考完晚上一门的我见到了你

2018-06-23 我们去了韩盛烤肉 去逛了松雷商业大厦 到处都是世界杯的主题

2018-06-24 我们去了哈理工 又去了你学校 时隔那么久我终于又去了你学校 我很喜欢你学校 更喜欢你学校的你 我们在玩吃鸡 还遇到一对很可爱的男孩子 游戏只是娱乐 然后我们都饿了 一起去杉杉奥特莱斯吃逃课吃串串 我最喜欢成都风格的美食了 也很喜欢成都这座城市 最后我们经过了哈师大 回到了你学校 你最好了 最后我们还是分别了 你想送我 我怕你一个人危险 让你回去了 离开你学校 突然泪目 我不知道我什么时候还能来你学校

2018-06-25 忍不住去了你学校 可是你在写论文太忙了 我在你学校逛了好久好久 多么希望能够见到你的背影啊

2018-06-27 回珠海了 我会想你的

2018-07-03 终于凑够了钱可以送你一台你最想要的ipad啦 下一个目标 带你去jay或者eason的演唱会

2018-07-18 被告知被解雇了 你一直在安慰我 很想抱着你埋头痛哭 此刻的我很脆弱

2018-07-20 正式离职 不知道未来会如何 但我应该会找到下一份工作吧

2018-07-24 分手

2018-07-26 未知的未来 可是我别无选择 想去找你 可是你不愿意见我

2018-07-27 一个人坐在空空的车厢里,听着布拉格广场,望着逐渐变黑的天空,心里特没底,你现在会在干嘛呢?

2018-07-28 我逃到了成都 这是一个好地方 但我没有心安 我失败了

2018-10-01 国庆节你来探望了我一下午,晚上我们在足球场谈了很多,分别的时候你还送了我一盒酸奶,你让我失去了自我,为了你,我好像把原来的那个我完全抛弃了。不知道自己是对还是错,我这样做只是为了你,我很怕失去你,你讲几句重话,我就手足无措了,这样的我,我简直觉得不可思议,我简直有点轻视我自己了,太没出息了。

2018-10-04 我们一起去KTV唱歌啦!你还送了我一个生日蛋糕,超开心超开心的!最后很舍不得分别,眼看你越走越远,我的心似乎跟着你一起走了,想到此后,我每天会在无尽的相思里度过,我就不寒而栗了,但愿我能把每一丝每一缕的相思织成天罗地网,网住你,保护你,让你不会受到伤害。记住,要保护自己,因为我在等你,等你,等你。

2018-10-13 你约我晚上出来散步,开心,坐下来写下这些字的时候,我才明白是给自己心里写的一个安慰。
很开心的是,此刻我还有时间写下自己的心情,让自己开心一点。
最近一段时间,对我来说是一个十足的低谷,身体、学业、爱情、工作,还有心理,所有的这一切都是自己一手造成的。
直到现在我才知道自己不是一个聪明的人,其实最笨的人才是自己,很笨很笨的那种,丢失了最爱的人,丢失了曾经的梦想,丢失了最珍贵的一切。
不过还是要说:所有的苦难都将是一笔财富。

2018-11-03 陪你去考了一天的教师资格证,一起逛了商场,给你拍了照,在商场里的书店里发现了你超喜欢的猫王收音机,好贵好贵啊,等我有钱了一定送你一个,慢慢发现和你分手已经三个多月了,这漫长的三个月,对我像漫长的三个世纪,每一天怎么活过来的,自己都弄不清楚,你的冷漠让我痛彻心扉,我整天关在家里,不能思想,不能分析,脑子里一片空白与麻木,午夜梦回,我在窗边呼唤你的名字,一遍又一遍,一次又一次,直到天亮了,你说的那些话,每一字每一句,就像一把锐利的刀,切割着我的全身,千言万语我只想和你说一句话,我爱你,全心全意的爱着你。

(未完待续)

你最好了。

 

原地址:https://weibo.com/ttarticle/p/show?id=2309404275311117213990

1.创建远程仓库。

Project name:项目名称

Project description (optional):项目介绍

Visibility Level :项目的访问权限

2.创建完成后操作,终端cd 到你需要克隆到的文件夹目录下:

a. cd <你本地文件夹目录>

b.git clone <你自己刚创建的远程仓库目录>

c.把代码导入你clone 下来的目录下

3.提交代码

a. git add *

b.git commit -m”<注释>”

c.git push origin master

以上就是简单的代码上传过程。

注:你自己也可以在终端创建远程仓库

4.打开git命令窗口:
git clone 远程代码仓库的地址
cd (git clone的文件夹路径)

git pull origin master//更新 必须做的操作

// git remote add origin 你刚才建立的项目连接
git add .
git commit -m ‘注释’
git push -u origin master 将代码推送到gitlab端

5,创建并切换分支本地分支并推送到远程服务器;

git branch : 查看我们的git仓库有几个分支,而我们目前工作处于那个分支,前面有个*号的就为我们目前所处的分支。

git branch -a : 查看远程分支。

git branch name : 创建分支,而这个分支的指针就指向最新的commit对象,也就和HEAD指向同一对象。如git branch test,表示创建本地test分支。
git checkout name : 切换到目的分支,我们默认的主分支为master。
git checkout –b name:创建并切换分支。
git push origin name: 将本地name分支推送到远程服务器。

git status : 查看文件更改状态。在添加文件之前或之后,我们会用git status 查看有变化的文件(一般有变化的文件会以红色显示出来)。

//设置显示隐藏文件夹
defaults write com.apple.finder AppleShowAllFiles YES

6,遇到的问题,即解决办法:
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to ‘git@github.com:******/Demo.git’
hint: Updates were rejected because the tip of your current branch is behind

1.使用强制push的方法:

$ git push -u origin master -f

这样会使远程修改丢失,一般是不可取的,尤其是多人协作开发的时候。

2.push前先将远程repository修改pull下来

$ git pull origin master

$ git push -u origin master

3.若不想merge远程和本地修改,可以先创建新的分支:

$ git branch [name]

然后push
$ git push -u origin [name]

方法一很暴力,但很实用,可以轻易本地文件同步到远程服务器端。
多人协作使用,慎用!

7.tag 的简单使用

1. git push –tags 把本地的tag推送到远程

2.git fetch origin tag <tagname> 获取远程tag

任务要求:自学P188的有关显示显存、显示字符串的学习材料,在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串“welcome  to masm”。

一、分析设计想法

这个题目的本质是循环读取字符,将字符复制到寄存器中并放到指定的显存内存单元中,并控制好字符的属性字节即可,非常有趣,能比较直观的控制显存。

二、程序的设计

 

 

assume cs:codesg

data segment

  db 'welcome to masm!'

data ends

 

 stack segment

  

 stack ends

 

codesg segment

 

start:

     mov ax,data

        mov ds,ax

        mov ax,0B800H

        mov es,ax;将显存的位置放入es

        

        mov cx,16

        mov si,0

        mov di,12*160+64 ;屏幕中央

s0:

     mov al,ds:[si]

        mov ah,00000010B   ;黑底绿色

        mov es:[di],ax ;将数据段的字符放入附加段(即显存中)

        inc si

        add di,2

        loop s0

        

        add di,160-32   ;下一行

        mov si,0

        mov cx,16

        

s1:

     mov al,ds:[si]

        mov ah,00100100B    ;绿底红字

        mov es:[di],ax;将数据段的字符放入附加段(即显存中)

        inc si

        add di,2

        loop s1

        

        add di,160-32   ;下一行

        mov si,0

        mov cx,16

        

s2:

     mov al,ds:[si]

        mov ah,01110001B    ;白底蓝色

        mov es:[di],ax; 将数据段的字符放入附加段(即显存中)

        inc si

        add di,2

        loop s2

        

        mov ax,4c00H

        int 21H

         

  codesg ends

  end start

 

三、程序的结果

四、心得体会

通过自学汇编程序设计有关显示显存、显示字符串的学习材料,我了解了显存在内存地址空间中的位置是B8000H~BFFFFH共32KB的空间,并且知道了如何将字符输出到屏幕中央,举一反三,我可以随心所欲的将我想要输出的内容输出到屏幕上的任何一个地方,并能控制字符颜色,字符背景颜色以及字符是否闪烁和是否高亮,学习了许多新的知识,开扩了自己的眼界。

任务说明:某公司从1975成立一直到1995年的基本情况如下:

年份 收入(千美元) 雇员(人) 人均收入(千美元)
1975 16 3 ?
1976 22 7 ?
1977 382 9 ?
1978 1356 13 ?
1979 2390 28 ?
8000 38 ?
1995 5937000 17800 ?

已知程序中的数据按下面的方式定义:

 

assume cs:codesg,ds:datasg,es:table

datasg segment

 db '1975','1976','1977','1978','1979','1980','1981','1982','1983'

db '1984','1985','1986','1987','1988','1989','1990','1991','1992'

db '1993','1994','1995'

       ;以上是表示21年的21个字符串

 dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514

 dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000

dd 5937000

           ;以上是公司21年总收入

dw 3,7,9,13,28,38,130,220,476,78,1001,1442,2258,2793,4037,5635,8226

dw 11542,14430,15257,17800

以上表示21年每年雇佣人数

dataend

table segment

           db 21 dup ('year summ ne ?? ')

table ends

 

编程,将data段中的数据按如下格式写入到table段中,并计算21年中的人均收入(取整),结果也按照下面的格式保存在table段中

年份(4字节) 空格 收入(4字节) 空格 雇员数

(2字节)

空格 人均收入(2字节) 空格
行内

地址

1年

1行

每行的始址

0 1 2 3 4 5 6 7 8 9 A B C D E F
Table:0H ‘1975’ 16 3 ?
Table:10H ‘1976’ 22 7 ?
Table:20H ‘1977’ 382 9 ?
Table:30H ‘1978’ 1356 13 ?
Table:40H ‘1979’ 2390 28 ?
…. 8000 38 ?
Table:140H ‘1995’ 5937000 17800 ?

 

一、分析设计想法

这个题目的本质是循环读取字符串,将字符串复制到寄存器中并放到指定的内存单元中,同时用到了除法,只要一步一步稳扎稳打的进行,一般是不会出现错误的。

 

二、程序的设计

 

assume cs:codesg

data segment

  db '1975','1976','1977','1978','1979','1980','1981','1982','1983'

  db '1984','1985','1986','1987','1988','1989','1990','1991','1992'

  db '1993','1994','1995'

  dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514

  dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000

  dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226

  dw 11542,14430,15257,17800

 

  data ends

 

 table segment

    db 21 dup ('year summ ne ?? ');首先覆盖掉空的内存单元,方便查看结果

 table ends

 

 stack segment

   dw 0,0,0,0,0,0,0,0;定义堆栈段

 stack ends

 

codesg segment

 

start:

          mov ax,table

          mov es,ax

          mov ax,data

          mov ds,ax

         

          mov bx,0 ;存年份偏移

          mov si,0 ;存人数偏移

          mov di,0 ;存table段中偏移

         

          mov cx,21 ;循环21年

 

       s0:

          ;将数据段中的年份复制到附加段中

          mov ax,[bx]

          mov es:[di],ax

          mov ax,[bx+2]

          mov es:[di+2],ax

         

          ;将数据段中的收入复制到附加段中

          mov ax,[bx+84]

          mov es:[di+5],ax

          mov ax,[bx+86]

          mov es:[di+7],ax

 

       ;将数据段中的人数复制到附加段中

       mov ax,[si+168]

       mov es:[di+10],ax

         

          ;通过除法计算出人均收入

          mov ax,[bx+84];低位

          mov dx,[bx+86];高位

          div word ptr [si+168];商存在ax中

          mov es:[di+13],ax

         

       add bx,4

          add si,2

          add di,16

     loop s0

        

 

  mov ax,4c00H

  int 21H

 
  codesg ends

  end start

 

三、程序的结果

四、心得体会

通过这个大作业程序的设计,我进一步掌握了堆栈段,数据段和附加段的简单使用,并且学会了如何在汇编语言中使用除法,在除法的过程中分别用哪些存储器存储数据,并通过格式化的控制,能够存储较为整齐的数据,在学习汇编语言程序设计的过程中,我常常会遇到自己没有思绪的程序,完全不知道该怎么写,或者按照我思考的样子却写不出我想要的结果,但是慢慢修改,慢慢积累,遇到的坑多了,也就不容易遇到坑了,写不好没关系,哪怕再小的程序,多写多改,慢慢地我就会提高的。