【源码解读】【BA070WS1屏源码】【屏幕自动识别软件源码在哪】指针的艺术源码

2024-12-26 04:10:05 来源:比特币 源码 编译 分类:综合

1.软件开发初学者应该看什么书
2.c语言编写路线
3.学习C语言 必看的书籍

指针的艺术源码

软件开发初学者应该看什么书

       ã€€ã€€å­¦ä¹ è½¯ä»¶å¼€å‘都需要看《c和指针》、《c缺陷和陷阱》、《c专家编程》,这三本书是一个初级C程序员必看的三本书,同时也是应届新员工必须好好学习的教材,非常适合刚毕业的大学生学习 。

       ã€€ã€€å¦å¤–还有:

       ã€€ã€€C++语言提升:

       ã€€ã€€ã€ŠEffective C++:改善程序与设计的个具体做法》

       ã€€ã€€ã€ŠMore Effective C++:个改善编程与设计的有效方法(中文版)》

       ã€€ã€€ã€ŠC++沉思录》

       ã€€ã€€ã€ŠC++Templates中文版》

       ã€€ã€€ã€Šæ·±åº¦æŽ¢ç´¢ C++ 对象模型》

       ã€€ã€€ã€Šæ³›åž‹ç¼–程与STL》

       ã€€ã€€ä¸€ä¸ªç”±C转向C++的程序员,从来没有系统的学习过C++的语法,往往是用到的什么学习什么。如果要系统入门,《C++ primer》倒是不错。

       ã€€ã€€è®¾è®¡ç±»ã€Šä»£ç å¤§å…¨ã€‹ï¼š

       ã€€ã€€ã€Šé‡æž„-改善既有代码的设计》

       ã€€ã€€ã€Šä»£ç æ•´æ´ä¹‹é“》

       ã€€ã€€ã€Šå®žçŽ°æ¨¡å¼ã€‹

       ã€€ã€€ã€Šç¨‹åºå‘˜åº”该知道的件事》

       ã€€ã€€è¿™å‡ æœ¬ä¹¦ä¸€èˆ¬è®²çš„是函数以及更低层次的设计。《代码大全》完完整整的读完过,而且做了很多的笔记,获益良多。《重构》就不必说了,其他几本书前面大致看了一下,也非常不错,计划有时间要好好学习一下。

       ã€€ã€€æž¶æž„:

       ã€€ã€€ã€Šè½¯ä»¶ä½“系结构的艺术》

       ã€€ã€€ã€Šé¢†åŸŸé©±åŠ¨è®¾è®¡:软件核心复杂性应对之道》

       ã€€ã€€ã€Šè½¯ä»¶æž¶æž„师应该知道的件事》

       ã€€ã€€ã€Šä¼ä¸šåº”用架构模式》

       ã€€ã€€ã€Šé¢å‘模式的软件体系结构卷1:模式系统》

       ã€€ã€€ã€Šè½¯ä»¶æž¶æž„设计》

       ã€€ã€€ã€Šæž¶æž„师需要知道的件事》

       ã€€ã€€æ•æ·å¼€å‘:

       ã€€ã€€ã€Šæµ‹è¯•é©±åŠ¨å¼€å‘》

       ã€€ã€€ã€Šæ•æ·è½¯ä»¶å¼€å‘——原则、模式与实践》

       ã€€ã€€ã€ŠScrum敏捷项目管理》

       ã€€ã€€ã€Šç¡çƒŸä¸­çš„Scrum和XP——我们如何实施Scrum》

       ã€€ã€€ã€Šæ•æ·è½¯ä»¶å¼€å‘》

c语言编写路线

       #include <stdio.h>

       #include <malloc.h>

       #include<stdlib.h>

       #define MAX

       #define MAXNUM

       int previous[MAX-1];// 求路径需要

       int pp[MAX-1];// 记录最短路径

       typedef struct graphnode

       {

        int vexnum; //顶点

        int arcnum; //弧

        int gra[MAX][MAX]; //邻接矩阵表示0或1

       }Graph;

       int dist[MAX]; // 最短距离

       int arc[MAX][MAX]; // 权

       int main()

       {

        void Dijkstra(Graph *g,int v);

        int i,j,n,m;

        int v; //源点

        Graph *G;

        G=(Graph *)malloc(sizeof(Graph));

        printf("vexnum:\n");

        scanf("%d",&G->vexnum);

        printf("arcnum:\n");

        scanf("%d",&G->arcnum);

        printf("graph:\n");

        for(i=0;i<G->vexnum;i++)

        for(j=0;j<G->vexnum;j++)

        {

        scanf("%d",&G->gra[i][j]);

        }

        for(i=0;i<G->vexnum;i++)

        for(j=0;j<G->vexnum;j++)

        {

        if(G->gra[i][j]==1)

        {

        printf("请输入%d到%d的权值:",i,j);

        scanf("%d",&arc[i][j]);//若有弧 则输入i到j直接的权

        }

        else

        arc[i][j]=MAXNUM;

        }

        printf("请输入源点v的值:");

        scanf("%d",&v);

        Dijkstra(G,v);

        printf("请输入源点所要到达的点:\n");

        scanf("%d",&n);

        pp[0]=0;

        i=1;

        m=n;// 记录n的值

        while(n!=0)// 求0到其他点路径

        {

        pp[i]=previous[n];

        i++;

        n=previous[n];

        }

        printf("Path:0 -> ");

        for(j=G->vexnum-1;j>=0;j--)

        if(pp[j]!=0)

        printf(" %d -> ",pp[j]);

        printf("%d\n",m);

        return 0;

       }

       void Dijkstra(Graph *G,int v)

       {

        int previous[MAX-1];

        int newdist;

        bool sign[MAX];

        if(v<0||v>MAX-1)

        {

        printf("该源点不存在!\n");

        return;

        }

        for(int i=0;i<G->vexnum;i++) //初始化

        {

        dist[i]=arc[v][i];

        sign[i]=false;

        if(dist[i]==MAXNUM)

        previous[i]=0;

        else

        previous[i]=v;

        }

        dist[v]=0;

        sign[v]=true;

        for(i=0;i<G->vexnum;i++) // i<n-1 待定

        {

        float temp=MAXNUM;

        int u=v; //u 中间变量

        for(int j=0;j<G->vexnum;j++)

        if((!sign[j])&&(dist[j]<temp))

        {

        u=j;

        temp=dist[j];

        }

        sign[u]=true;

        for(j=0;j<G->vexnum;j++)

        if((!sign[j])&&(arc[u][j]<MAXNUM))

        {

        newdist=dist[u]+arc[u][j];

        if(newdist<dist[j])

        {

        dist[j]=newdist;

        previous[j]=u;

        }

        }

        }

        for(i=0;i<G->vexnum;i++)

        if(dist[i]!=MAXNUM)

        printf("从%d到%d的最短路径是 %d\n",v,i,dist[i]);

        else

        printf("从%d到%d无最短路径\n",v,i);

        printf("\n");

       }

       è¿™æ˜¯Dijkstra算法求单源最短路径算法 上程序中 假定顶点从0开始,搜索整个图,然后求出0到其他各点的最短距离,存放在dist数组中,main函数后面几行是求0到其他各点的路径 基本上能满足你的要求了

学习C语言 必看的书籍

       Brian W.Kernighan, Dennis M.Ritchie,《C程序设计语言》

        清华影印版、习题集;机械译文版(新版、老版):习题集

        这是迄今为止在所有程序设计语言书籍中最广受尊敬的一部经典,是任何一名C程序员的必读之作。因为出自C语言的设计者Dennis M.Ritchie和著名的计算机科学家Brian W.Kernighan之手,它被昵称为“K&R C”。是它首先引入了“Hello World!”程序,这个程序几乎成了后来任何一本入门性程序设计语言书籍中的第一个例子。

        如同C语言本身简洁紧凑而极具威力一样,这本书轻薄短小而极富张力。通过简洁的描述和典型的示例,它全面、系统、准确地讲述了C语言的各个特性以及C程序设计的基

       æ³•ï¼Œå†…容涵盖基本概念、类型和表达式、控制流、函数与程序结构、指针与数组、结构、输入与输出、UNIX系统接口以及标准库等内容。

        简洁清晰是这本书最大的特色。这本小书可以教给你许多比它厚几倍的“大部头”的知识。我认为那些动辄洋洋洒洒拼凑出好几百页乃至上千页的技术作者应该好好向K&R学一学。对于中、高级程序员而言,如果希望迅速获得C语言的严肃知识而又不愿意多花费哪怕一丁点时间,这本书就是首选。

        顺便说一句,这本书的索引制作非常出色,极具实用价值,这可能首先要归功于正文部分的简明扼要。此外,尽管它看上去很像一本教程,但其实更是一本写给专业程序员的指南。如果你不具备任何其他语言程序设计背景或基本的C语言知识,这本书也许并不适合用作你的C语言启蒙读物。

        2. Perter Van Der LinDen,《C专家编程》

        C专家编程

        C语言是严肃的程序员语言,但这并不意味着C语言书籍必须板着面孔说教。在这本被C程序员昵称为“鱼书”(封面上有一条“丑陋的”腔棘鱼)的著作中,作为SUN公司编译器和操作系统核心开发组成员之一,Peter淋漓尽致地展示了其深厚的技术沉淀、丰富的项目经验、高超的写作技巧以及招牌式的幽默。在这部作品中,作者以流畅的文字、诙谐的笔法将逸闻典故、智慧和幽默自然地融入技术描述中,读来宛若一本小说,极富趣味。 本书讲述了C语言的历史、语言特性、声明、数组、指针、连接、运行时以及内存使用等知识,揭示了C语言中许多隐晦之处,尤其深入解析了声明、数组和指针、内存使用等方面的细节。要想成为一名专家级C程序员,这些内容都是必须掌握的。和其他满是抽象例子的C语言书籍不同,这本书充满了大量的来自真实世界的C程序设计实例,它们对C程序员具有很高的参照价值。另外,每一章都以极富趣味的“轻松一下”收尾,而附录A“程序员工作面试的秘密”则是任何语言的程序员在应聘工作前增强自信的好材料。

       æˆ‘怀疑真正的C专家可能用不着看这本书 ——从内容到组织方式到行文风格都决定了这是一本轻松愉快的“从菜鸟到高手”的进阶读本,所以,它理应拥有更广泛的读者群。初级程序员往往更需要热情的鼓励,在阅读这本书的过程中,你定会深深地被作者对编程的激情所感染。

        世间并无完美。我认为这本书的缺陷在于,和大多数平庸的C语言书籍一样,它画蛇添足地加入了一章关于C++的描述。在今天看来,这个描述既不全面也有失公允。不过,鉴于作者是在年从一名C程序员的角度去观察C++,这一点也就不足为奇了。 3. Samuel P. Harbison, Guy L. Steele,《C语言参考手册(第五版)》

        影印版(机械工业出版社)、中文版(机械工业出版社)

        在C语言参考手册类书籍里,Samuel P. Harbison 和Guy L. Steele合著的C: A Reference Manual是非常出色的一本。这本手册的第五版新增了对C标准的介绍,以便满足新时期C语言学习的需要。全书共分为两大部分,第一部分专注于C语言特性,第二部分则全面讨论了C标准库。本书涵盖C、C、传统的C、所有版本的C运行库以及编写与C++兼容的C代码等一切知识。

        这本手册只是中等厚度,但它比“比它更厚”的其他参考手册更清晰地描述了C语言的现在和过去的方方面面。整本手册技术细节描述精确,组织条理清楚,内容完备详尽而又简明扼要。可以这么说,它在广度、深度和精度方面都是出类拔萃的。对于中、高级C程序员而言,这本手册值得常备案头,它几乎肯定要比K&R的著作使用频率更高。

        4. David Hanson,《C语言接口与实现:创建可重用软件的技术》,机械工业出版社

        C语言接口与实现:创建可重用软件的技术

        C语言能够历经三十多年而不衰,一个重要的原因在于它的适应能力。在这“复用”、“面向对象”、“组件”、“异常处理”等先进机制漫天飞舞的年代,C语言仍然能够凭借它小而优雅的语言特性,在相当程度上满足现代软件体系架构提出的要求。只不过,想要达到这个程度,必须要在C的应用功力上达到最高层次。在嵌入式、系统软件以及对性能要求极高的系统开发中,开发人员必须达到这样的层次,熟练掌握C语言的高级特性,才能够同时满足效率和灵活性、复用性的要求。可惜,虽然C语言技术图书汗牛充栋,但是关注这个峰顶之域的作品却是屈指可数。David Hanson的C Interfaces and Implementations就是个中翘楚。

        David Hanson是业内大名鼎鼎的自由编译器lcc的合作者。在这个项目中,他负责提供高度可复用的基础架构。在不断的实践中,他完全使用ANSI C形成了一整套可复用组件库。这套组件库架构清晰,性能优异,而且提供了很多高级的特性,比如类Win SEH的异常处理机制、可移植的线程库、高性能的内存池、丰富的可复用数据结构组件。David Hanson把他在创作这些组件的过程中所积累的心得以及对其源码的精致剖析原原本本地写在了这本书里。这样的著作,当然堪称C语言领域里的铭心绝品。难怪已故著名技术作家Richard Stevens对此书赞不绝口,他说:“这本书中的技术,对于大部分C程序员来说,已经遗忘得太久了。”对于希望能在C语言应用上达到最高层次的核心程序员而言,这本书是难得的必读之作。

        其他除了以上四本书以外,我还乐意推荐Andrew Koenig的著作《C陷阱和缺陷》(人民邮电出版社)和Deitel父子合著的C How to Program两本书。

       C专家编程

        Andrew Koenig是世界上屈指可数的C++专家,他的这本书可能是最薄的一本C语言经典。它简明扼要地讲述了C程序设计中的陷阱和缺陷,包括词法陷阱、语法陷阱、语义陷阱、连接、库函数、预处理器以及可移植性缺陷等,最后一章还给出了关于如何减少程序错误的建议以及前面各章问题的参考答案。尽管这个小册子成书于C标准制定之前,然而,即使到了C早已颁布的今天,书中提到的大多数陷阱和缺陷一如十五年前那样使我们警醒。

        C程序设计教程

        Deitel父子合著的C How to Program一直是非常好的C语言入门教程,我手头的中译本名为《C程序设计教程》(机械工业出版社出版,原书第二版)。除了对技术的正规描述(辅以许多简明扼要的例子)外,每一章后面都带有小结、术语、常见的程序设计错误、良好的程序设计习惯、性能忠告、可移植性忠告、软件工程评述、自我测验练习及答案等。整书内容清晰,组织良好,易于阅读和理解。值得一提的是,有许多入门书读完一遍即可扔掉,而这一本是个例外。

        结语以上这几本书很大程度上局限于描述C语言及标准库本身,如果希望学习更专业的、领域相关的C程序设计技术,你可以在选择阅读这几本书的基础上继续查阅专门书籍。此外,在C语言书籍领域,水平不相上下的作品有很多,这几本只是根据我自身的阅读体验

本文地址:http://581.net.cn/html/64a337796558.html 欢迎转发