在C语言编程中,图的创建和遍历:
#include<stdio.h>
#define N 20
#define TRUE 1
#define FALSE 0
int visited[N]
typedef struct /*队列的定义*/
{
int data[N]
int front,rear
}queue
typedef struct /*图的邻接矩阵*/
{
int vexnum,arcnum
char vexs[N]
int arcs[N][N]
}
graph
void createGraph(graph *g) /*建立一个无向图的邻接矩阵*/
void dfs(int i,graph *g) /*从第i个顶点出发深度优先搜索*/
void tdfs(graph *g) /*深度优先搜索整个图*/
void bfs(int k,graph *g) /*从第k个顶点广度优先搜索*/
void tbfs(graph *g) /*广度优先搜索整个图*/
void init_visit() /*初始化访问标识数组*/
void createGraph(graph *g) /*建立一个无向图的邻接矩阵*/
{ int i,j
char v
g->vexnum=0
g->arcnum=0
i=0
printf("输入顶点序列(以#结束):
")
while((v=getchar())!='#')
{
g->vexs[i]=v /*读入顶点信息*/
i++
}
g->vexnum=i /*顶点数目*/
for(i=0i<g->vexnumi++) /*邻接矩阵初始化*/
for(j=0j<g->vexnumj++)
g->arcs[i][j]=0
printf("输入边的信息:
")
scanf("%d,%d",&i,&j) /*读入边i,j*/
while(i!=-1) /*读入i,j为-1时结束*/
{
g->arcs[i][j]=1
g->arcs[j][i]=1
scanf("%d,%d",&i,&j)
}
}
void dfs(int i,graph *g) /*从第i个顶点出发深度优先搜索*/
{
int j
printf("%c",g->vexs[i])
visited[i]=TRUE
for(j=0j<g->vexnumj++)
if((g->arcs[i][j]==1)&&(!visited[j]))
dfs(j,g)
}
void tdfs(graph *g) /*深度优先搜索整个图*/
{
int i
printf("
从顶点%C开始深度优先搜索序列:",g->vexs[0])
for(i=0i<g->vexnumi++)
if(visited[i]!=TRUE)
dfs(i,g)
}
void bfs(int k,graph *g) /*从第k个顶点广度优先搜索*/
{
int i,j
queue qlist,*q
q=&qlist
q->rear=0
q->front=0
printf("%c",g->vexs[k])
visited[k]=TRUE
q->data[q->rear]=k
q->rear=(q->rear+1)%N
while(q->rear!=q->front)
{
i=q->data[q->front]
q->front=(q->front+1)%N
for(j=0j<g->vexnumj++)
if((g->arcs[i][j]==1)&&(!visited[j]))
{
printf("%c",g->vexs[j])
visited[j]=TRUE
q->data[q->rear]=j
q->rear=(q->rear+1)%N
}
}
}
void tbfs(graph *g) /*广度优先搜索整个图*/
{
int i
printf("
从顶点%C开始广度优先搜索序列:",g->vexs[0])
for(i=0i<g->vexnumi++)
if(visited[i]!=TRUE)
bfs(i,g)
printf("
")
}
void init_visit() /*初始化访问标识数组*/
{
int i
for(i=0i<Ni++)
visited[i]=FALSE
}
int main()
{
graph ga
int i,j
createGraph(&ga)
printf("无向图的邻接矩阵:
")
for(i=0i<ga.vexnumi++)
{
for(j=0j<ga.vexnumj++)
printf("%3d",ga.arcs[i][j])
printf("
")
}
init_visit()
tdfs(&ga)
init_visit()
tbfs(&ga)
return 0
}
C语言编程,顾名思义,就是用C语言来进行计算机编程工作。
C语言是国际上广泛流行的,很有发展前途的计算机高级语言.它适合作为系统描述语言,即可用来编写系统软件,也可用来编写应用软件.
C语言是一种引用广泛,并且实现灵活的一种计算机编程语言,用C语言编出来的程序,可以在很多平台上运行,可移植性强。具体的C语言编程内容请参加C或者C++等。
任何知识的学习没有太多捷径,但有经验、方法及教训
(1)基础教材选择-系统又通俗易懂,最好有该书配套免费视频
建议选择系统正统的大学教材,尽量不要选择“多少天精通C语言”等吸引眼球的教程,相信一点C语言学习没有速成。这里给大家推荐一本不错的入门教程:清华大学出版社-孙海洋-C语言程序设计,讲解很透彻、知识点很全面、例程较多且通俗易懂。优酷“孙海洋课题”还有全书免费教学视频,便于自学。
(2)动起手来--立马安装VC++6.0或VS开发环境
C语言是特别注重动手实操能力的课程!!动起手来,现在开始安装VC++6.0开发环境,从第一个经典程序“Hello,world!”开始,每一个例题及知识点均通过开发环境验证、理解深化。多做每一章小型实验操作(网上多得很)。提升代码调试能力。
(3)有了基础后,一般可以有两个发展方向可供选择
(i)转向项目实战
建议购买一本C语言项目教程,在实践项目中强化理论知识的学习。
(ii)继续深入理论学习
建议购买国外经典深入学习C语言的教程,人民邮电出版社-C Primer Plus(第5版),或者 机械工业出版社-C程序设计语言(第2版.新版)
下定信心,坚持下去!希望对你有所帮助。
下面是转载的 孙海洋 版 C语言程序设计 部分内容截图。
答案选D.
第一行定义了一个int变量k,并初始化为15(十进制)
第二行输出k,限定了格式一个是%o 另一个是%x
%o要求把一个数按八进制的形式显示出来,15(十进制)转化为八进制就是17(八进制)
%x要求把一个数按16进制的形式显示出来,涉及字母要小写,15(十进制)转化为16进制就是 f(16进制)
------------
15(10进制)转8进制,15÷8,做一个短除法,得17(8进制)
具体转换方法:10进制8进制互转
10进制转16进制,请看这里:10进制转16进制