c语言自学路线?如何自学编程
大家好,如果您还对c语言自学路线不太了解,没有关系,今天就由本站为大家分享c语言自学路线的知识,包括如何自学编程的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!
C语言入门怎么自学 需要哪些资料
参考我的自学路线:
0.选定了C就别放弃。入门C可能需要一个多月的连续学习时间,但其他听上去更“厉害”的编程语言会花费更长的时间,并且它们需要有C的基础才能深入学习。
1.一台笔记本或平板,不推荐在手机上编程。
2.如果是windows操作系统,下载安装mingw,在命令行下熟悉了“编辑—编译—链接—执行”这个基本流程之后,就可以尝试VS2017 community或者Code::Blocks或者其他任何C/C++的集成开发环境。
想学好就不要直接用IDE!在从命令行转到IDE之前,你甚至可以花半个小时的时间熟悉一下Makefile,不学这个也没事。
3.一本《C Primer Plus》实体书,简单详细,入门经典。不推荐看电子版,伤眼睛。
4.一支笔,如果不想在书上记笔记,则你还需要一本笔记本。
5.最重要的:受得了枯燥。知识点不弄懂不跳过。看书的时候不做一些不相干的事:看电影,聊天,玩游戏……
我在过去的四个月里看完了《C Primer Plus》和《C++ Primer》,为了学好编程彻底放弃了玩游戏、听音乐(一听歌就会跟着唱,没办法认真学习)。
说实话,完整地看完第一遍是一个很痛苦的过程,不过现在再复习起来,最多也就是两天一遍。每次复习都能巩固新知识。
自学C语言教程
没有基础可以入门,通过努力可以达到初、中级程序员的程度,但再往上走,就比较困难了。后面需要不少算法、英文和数学知识。
教程的话可以参考下面两本教程:
谭浩强:《C语言程序设计》
李铭城黄中豪陈宇芬:《资料结构 C》
英文的话,进入初级之前都不怎么需要。但是进入中级后,需要读一些英文资料。不过现在翻译比较厉害,绝大部分的资料都有翻译。但是要进入高级,就必须要学习英文了,因为最新最核心的资料都是英文的,翻译的往往都会有错误。
另外数学在早期影响不大,但是进入中级后就必须要了。因为估算算法时间复杂度、空间复杂度、图、树等等,都涉及不少数学知识。当然如果只是做简单应用或者驱动的话,这方面要求就不会太高。
最后给一个学习大概的路线图:
入门级的学习,只要能够掌握:代码三大结构(循环、分支、顺序)、流程图、C语言关键字和语法、输入输出、文件操作、套接字操作。就算是初级满级了。
初级程序员:数据结构和算法(排序,查找)、了解软件开发模型(瀑布模型、敏捷模型、原型模型等等)、了解UML、系统常用API、网络通信、编译和SDK环境搭建
中级程序员:设计模式、多线程编程、网络通信(服务器、客户端)、面向对象编程、掌握UML、系统网络/文件/互斥/线程/事件/安全API、STL、相关法律法规、知道一些常用软件架构(MVC等)
c语言编写路线
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define MAX 100
#define MAXNUM 10000000
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语言自学路线和如何自学编程的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。