在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++等。
#include
using namespace std
#define Twoto1(i,j,w) i*w+j
void createimage(unsigned char *&img, int w, int h)
{img = new unsigned char[w*h]}
void delateimage(unsigned char*img)
{delete []img}
void readimage(unsigned char*img, int w, int h, char *fname)
{
FILE *fp
fopen_s(&fp,fname, "rb")
if (fp == NULL){ cout <<"error" <<endlreturn}
size_t result
result=fread(img , sizeof(unsigned char), w*h, fp)
if (result != w*h)
{
cout <<"Reading error" <<endl
return
}
else
cout <<"Reading Ok!" <<endl
fclose(fp)
}
void mobanjuanji(unsigned char image, unsigned char*image1, int w, int h, float moban[5][5])
{
for (int i = 0i for (int j = 0j if (iw - 3 || j>h - 3)
image1[Twoto1(i,j,w)] = 0
else
{
float temp = 0
for (int m = 0m<5m++)
for (int n = 0n<5n++)
{
temp += (image[Twoto1(i-2+m,j-2+n,w)] moban[m][n])
}
if (temp>255) image1[Twoto1(i, j, w)] = 255
else if (temp<0) image1[Twoto1(i, j, w)] = 0
else image1[Twoto1(i, j, w)] = temp
}
}
void saveimage(unsigned char *img, int w, int h, char *fname)
{
FILE *fp
fopen_s(&fp, fname, "wb")
if (fp == NULL) { cout <<"error" <<endlreturn}
size_t result
result = fwrite(img, sizeof(unsigned char), w*h, fp)
if (result != w*h)
{
cout <<"Write error" <<endl
return
}
else
cout <<"Write Ok!" <<endl
fclose(fp)
}
void main()
{
unsigned char *img
unsigned char *img1
float moban[5][5] = { {0,0,0,0,0},{0, -1, 0, 1, 0 }, { 0, -2, 0, 2, 0 }, { 0, -1, 0, 1, 0 }, { 0,0,0,0,0 } }
//float moban[5][5] = { 0 }
int w = 512, h = 512
createimage(img, w, h)
createimage(img1, w, h)
readimage(img, w, h, "E:\ss.raw")
mobanjuanji(img, img1,w, h, moban)
saveimage(img, w, h, "E:\ss_1.raw")
saveimage(img1, w, h, "E:\ss_2.raw")
delateimage(img)
delateimage(img1)
}
扩展资料
C语言实现一个图片的读出和写入
#include <stdlib.h>
#include <windows.h>
int file_size(char* filename)//获取文件名为filename的文件大小。
{
FILE *fp = fopen(filename, "rb")//打开文件。
int size
if(fp == NULL) // 打开文件失败
return -1
fseek(fp, 0, SEEK_END)//定位文件指针到文件尾。
size=ftell(fp)//获取文件指针偏移量,即文件大小。
fclose(fp)//关闭文件。
return size
}
int main ()
{
int size=0
size=file_size("qw")
printf("%d\n",size)
FILE * pFile,*qw
char *buffer=(char*)malloc(sizeof(char)*size)
qw =fopen("qw","r")
pFile = fopen ( "qwe" , "wb" )
printf("%d==\n",pFile)
printf("%d\n",size)
fread(buffer,1,size,qw)
fwrite (buffer , sizeof(byte), size , pFile )
fclose (pFile)
rename("qwe","Groot.jpg")
return 0
}
framebuffer(帧缓冲)。
帧的最低数量为24(人肉眼可见)(低于24则感觉到画面不流畅)。
显卡与帧的关系:由cpu调节其数据传输速率来输出其三基色的配比。
三基色:RGB(红绿蓝)。
在没有桌面和图形文件的系统界面,可以通过C语言的编程来实现在黑色背景上画图!
用下面的代码,在需要的地方(有注释)适当修改,就能画出自己喜欢的图形!
PS:同样要编译运行后才能出效果。
#include <stdio.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <linux/fb.h>
#include <stdlib.h>
#define RGB888(r,g,b) ((r &0xff) <<16 | (g &0xff) <<8 | (b &0xff))
#define RGB565(r,g,b) ((r &0x1f) <<11 | (g &0x3f) <<5 | (b &0x1f))
int main()
{
int fd = open("/dev/fb0", O_RDWR)
if(fd <0){
perror("open err. \n")
exit(EXIT_FAILURE)
printf("xres: %d\n", info.xres)
printf("yres: %d\n", info.yres)
printf("bits_per_pixel: %d\n", info.bits_per_pixel)
size_t len = info.xres*info.yres*info.bits_per_pixel >>3
unsigned long* addr = NULL
addr = mmap(NULL, len, PROT_WRITE|PROT_READ, MAP_SHARED, fd, 0)
if(addr == (void*)-1){
perror("mmap err. \n")