當前位置:首頁 » 編程語言 » 圖c語言實現

圖c語言實現

發布時間: 2022-05-13 10:19:58

『壹』 c語言怎樣實現圖中的功能,按任意鍵到第二張圖

在主函數中先調用函數繪制第一個界面,然後在該函數後面加上getch();語句,再在getch()語句後調用繪制第二個界面的函數即可。實現的原理是:getch()語句將屏幕停留在當前的視圖,並等待用戶按鍵,一旦按鍵之後,系統就會執行getch()語句之後的一條語句,此時,系統會執行第二個繪制界面的函數,即可完成所需功能

『貳』 如何利用c語言實現像素圖形的輸出

1、可以變成灰度圖也可以不變。這里假設你的圖像都是IPL_DEPTH_8U類型。

2、如果變成灰度圖,就是單通道圖像,獲取的就是每一個像素點的灰度值。
IplImage* img = cvLoadImage("test.bmp", 0);
for (int i = 0; i < img->height; i++)
{
for (int j = 0; j < img->width; j++)
{
//方法一:使用cvGet2D()函數間接訪問
CvScalar s = cvGet2D(img, i, j); //其中i代表y軸(第i行),即height;j代表x軸(第j列),即width。
printf("gray value=%f\n",s.val[0]);

//方法二:使用直接訪問
uchar val = ((uchar *)(img->imageData + i*img->widthStep))[j]; //i和j的意義同上
printf("gray value=%d\n",val);
}
}

3、如果不變成灰度圖,就是3通道圖像,獲取的就是每一個像素點的BGR值,然後分別獲取B值,G值和R值。
IplImage* img = cvLoadImage("test.bmp", 1);
for (int i = 0; i < img->height; i++)
{
for (int j = 0; j < img->width; j++)
{
//方法一:使用cvGet2D()函數間接訪問
CvScalar s=cvGet2D(img,i,j); //其中i代表y軸(第i行),即height;j代表x軸(第j列),即width。
printf("B=%f, G=%f, R=%f\n",s.val[0],s.val[1],s.val[2]); //注意是BGR順序

//方法二:使用直接訪問
int bVal = ((uchar *)(img->imageData + i*img->widthStep))[j*img->nChannels + 0]; // B
int gVal = ((uchar *)(img->imageData + i*img->widthStep))[j*img->nChannels + 1]; // G
int rVal = ((uchar *)(img->imageData + i*img->widthStep))[j*img->nChannels + 2]; // R
printf("B=%d, G=%d, R=%d\n",bVal,gVal,rVal); //注意是BGR順序
}
}

『叄』 如何利用C語言實現動畫

基於擦除法的C語言動畫設計與實現

Movie design implement in C language base on erasure way

東華理工學院計算機與通信系姜林何月順江西南昌330013

摘要:

本文介紹了程序設計語言中動畫設計的原理,在C語言中的動畫設計常用方法,並提出了在C語言中新的動畫設計方法――擦除法。闡述擦除法動畫設計的原理,並通過一個具體的實例詳細介紹了這種方法的設計實現,文中末尾總結了擦除法動畫設計的優點及適用的范圍。

關鍵字:擦除法;C語言;TurboC2.0;動畫設計;原理;實現

中圖分類號:TP312

Summary:

Through the principium of movie design in program design language, the thesis present movie design general way in C language, and bring forward new movie design way――erasure . The thesis also expatiate the principium of erasure way, particular describe the design implement of erasure by a instance. The end summarize the excellence and range of erasure way.

Key words: erasure way; C language ; TurboC 2.0; movie design; principium; implement

0. 引言

動畫技術是計算機圖形學中的重要內容,它廣泛用於游戲娛樂,輔助教學,科學實驗模擬等計算機輔助設計。用於動畫設計的程序設計語言有多種,並且有多種方法。其中C語言程序設計又廣泛用於各種軟體開發項目中。因此,掌握C語言的動畫設計方法對於軟體開發很有必要。

1. 程序設計中動畫原理

程序設計中動畫設計的原理類似電影的方法,它利用人的視覺具有暫留的生理特點,即人眼對動態圖像的變化僅能分辨出時間間隔為25毫秒左右的變化,如果圖像變化太快,則人眼無法分辨。在程序設計中我們可以在屏幕上畫出一張圖像,而將這張圖像在不同時間出現,然後一張張快速(時間間隔小於25毫秒)呈現在屏幕上,從視覺效果上看這些畫面就如同電影在連續變化一樣,給人以動的視覺感覺。

2. C語言動畫設計常用方法C語言常用動畫設計方法[1]:

2.1利用動態開辟圖視口方法

在位置動態變化,但大小不變的圖視口中(用setviewpot()函數[2]),設置固定圖形,這樣呈現在觀察者面前的是當前圖視口位置在動態變化,因而在屏上看到的圖像就好像在動態變化一樣。

2.2 利用顯示頁和編輯頁交替變化

將當前顯示頁和編輯頁分開(用setvisualpage()和setactivepage()函數),在編輯頁上

畫好圖形後,立即令該頁變為顯示頁,然後在上次顯示頁上進行畫圖,畫好後,再交換,如此反復,在觀察者的視覺上,就出現了動畫的效果。

2.3 利用畫面存儲再重放的方法

如同製作幻燈片一樣,將整個動畫過程變成一個個片斷,然後存儲到顯示緩沖區內,當把它們按順序重放到屏幕上時,就出現了動畫效果。

2.4 直接對圖像動態存儲器進行操作

利用顯示適配器上控制圖像顯示的各種寄存器和圖像存儲器VRAM,對其進行直接操作和控制,從而可以高效快速的實現動畫效果。

上述4種方法均可以實現動畫效果,但其操作比較復雜,且在程序中要對圖像不斷進行存取操作,這需要耗費大量內存資源。下面的擦除法動畫設計可以解決上述問題。

3. 擦除法動畫設計原理

擦除法動畫設計方法在很多的動畫製作工具(如flash)中大量使用,但在程序設計中卻鮮有人用。它的設計原理是:利用同色原理,當圖形色與背景色相同時人眼不能感知。在動畫設計中,當在一個位置畫了一張圖像時,使圖像色與背景色相異,然後再到另一個位置畫一張圖像並使圖像色與背景色也相異,此時將先前畫的圖像在原位置再畫一張,並使圖像色與背景色相同,這樣人眼只能看到新畫的一張圖像而看不到先前畫的圖像,從而先前畫的圖像感覺被擦除了。這樣連續畫多張圖像並在每畫一張新的圖像,將原來的圖像擦除,從而在觀察者來看就實現了動畫的效果。

4. 擦除法的動畫設計實現

下面以一個上下翻滾的圓作為一個例子來講解在TurboC2.0開發環境下用C語言來實現動畫的設計過程,其中動畫設計的方法是擦除法。具體的實現步驟如下:

4.1 TC的圖形系統的初始化

TurboC2.0為用戶提供了一個功能強大的畫圖軟體庫,它包括圖形庫文件(graphics.lib),圖形頭文件(graphics.h)和許多圖形顯示器的驅動程序。在TurboC2.0開始進行圖形設計前必須對之進行初始化,使系統知道要用什麼類型的圖形顯示器的驅動程序,採用什麼模式的圖形方式,以及該適配器驅動程序的尋找路徑名。這個初始化的函數是initgraph()。在本程序中的初始化如下:
gdriver=DETECT;
initgraph(&gdriver, &gmode, "");//圖形顯示器、顯示模式、路徑自動檢測

4.2 畫圖
setcolor(LIGHTRED);//設置圓的線條顏色為淡紅色

setlinestyle(0,0,1);//設置線條為形狀為實線,線寬為一點寬
setfillstyle(1, 10);//設置圓的填充式樣為以實填充,填充色為淡綠色
circle(300, 10+10*y,15);//畫一個圓心在坐標(300,10+10y),半徑為15的圓
這個地方我們需要畫一個圓(用draw()函數實現),並且設置圓的圓周線條的顏色(用setcolor()函數),設置線條類型(用setlinestyle()函數),設置圓的填充色和填充模式(用setfillstyle()函數),設置圓的填充色(用floodfill()),最後是畫圓(用circle()函數)。在本程序(draw()函數)中的代碼如下:
floodfill(300, 10+10*y, 12);//給圓填充如上stfillstyle中的淡綠色

為了實現擦除操作需在同一個位置再畫一個圓(用clear()函數實現),該操作只需將上面的畫圓函數(draw()函數)改動兩個設置即可,如下示:

setcolor(BLUE);//設置圓的線條顏色為藍色(與背景色相同)
setfillstyle(1, 10);//設置圓的填充式樣為以實填充,填充色為淡綠色

4.3 動畫實現

本部分是核心部分,先設置背景色為藍色(用setbkcolor()函數),再在屏幕上畫一個填充色為淡綠色的圓(draw()函數)。設置一個循環控制語句實現在屏幕上不同的位置畫圓,同時在每畫一個圓後作一個時間的延遲(用delay()函數),再在延遲後實現擦除操作,即調用clear()函數。其流程圖及代碼如下:
setbkcolor(BLUE);//設置背景色為藍色

for(j=20;j>0;j=j-4)//控制動畫實現的次數為20次

{ for(i=j;i<30;i++)//實現動畫從上向下閃爍

{ draw(i);//畫圓

delay(100000);//延遲0.1秒

clear(i);//擦除已畫的圓

}

for(i=30;i>j;i--)//實現動畫從下向上閃爍

{ draw(i);//畫圓

delay(100000);//延遲0.1秒

clear(i);//擦除已畫的圓

}

}

動畫實現後的最後效果圖如下示。

4.4 關閉圖形系統

當圖形實現結束後需要關閉圖形系統,利用函數closegraph()即可實現。

5. 總結

擦除法動畫設計原理易於理解,便於操作。並且它的程序運行所需內存空間也比上述四種常用方法要少得多,因為它在程序執行過程中不需將圖形存入內存再從內存調出,這節省了大量的內存空間。如果程序運行在內存緊張的環境中,如嵌入式系統中,這種方法尤其適用

『肆』 C語言編寫程序實現圖的遍歷操作

樓主你好,下面是源程序!

/*/////////////////////////////////////////////////////////////*/
/* 圖的深度優先遍歷 */
/*/////////////////////////////////////////////////////////////*/
#include <stdlib.h>
#include <stdio.h>
struct node /* 圖頂點結構定義 */
{
int vertex; /* 頂點數據信息 */
struct node *nextnode; /* 指下一頂點的指標 */
};
typedef struct node *graph; /* 圖形的結構新型態 */
struct node head[9]; /* 圖形頂點數組 */
int visited[9]; /* 遍歷標記數組 */

/********************根據已有的信息建立鄰接表********************/
void creategraph(int node[20][2],int num)/*num指的是圖的邊數*/
{
graph newnode; /*指向新節點的指針定義*/
graph ptr;
int from; /* 邊的起點 */
int to; /* 邊的終點 */
int i;
for ( i = 0; i < num; i++ ) /* 讀取邊線信息,插入鄰接表*/
{
from = node[i][0]; /* 邊線的起點 */
to = node[i][1]; /* 邊線的終點 */

/* 建立新頂點 */
newnode = ( graph ) malloc(sizeof(struct node));
newnode->vertex = to; /* 建立頂點內容 */
newnode->nextnode = NULL; /* 設定指標初值 */
ptr = &(head[from]); /* 頂點位置 */
while ( ptr->nextnode != NULL ) /* 遍歷至鏈表尾 */
ptr = ptr->nextnode; /* 下一個頂點 */
ptr->nextnode = newnode; /* 插入節點 */
}
}

/********************** 圖的深度優先搜尋法********************/
void dfs(int current)
{
graph ptr;
visited[current] = 1; /* 記錄已遍歷過 */
printf("vertex[%d]\n",current); /* 輸出遍歷頂點值 */
ptr = head[current].nextnode; /* 頂點位置 */
while ( ptr != NULL ) /* 遍歷至鏈表尾 */
{
if ( visited[ptr->vertex] == 0 ) /* 如過沒遍歷過 */
dfs(ptr->vertex); /* 遞回遍歷呼叫 */
ptr = ptr->nextnode; /* 下一個頂點 */
}
}

/****************************** 主程序******************************/
void main()
{
graph ptr;
int node[20][2] = { {1, 2}, {2, 1}, /* 邊線數組 */
{1, 3}, {3, 1},
{1, 4}, {4, 1},
{2, 5}, {5, 2},
{2, 6}, {6, 2},
{3, 7}, {7, 3},
{4, 7}, {4, 4},
{5, 8}, {8, 5},
{6, 7}, {7, 6},
{7, 8}, {8, 7} };
int i;
clrscr();
for ( i = 1; i <= 8; i++ ) /* 頂點數組初始化 */
{
head[i].vertex = i; /* 設定頂點值 */
head[i].nextnode = NULL; /* 指針為空 */
visited[i] = 0; /* 設定遍歷初始標志 */
}
creategraph(node,20); /* 建立鄰接表 */
printf("Content of the gragh's ADlist is:\n");
for ( i = 1; i <= 8; i++ )
{
printf("vertex%d ->",head[i].vertex); /* 頂點值 */
ptr = head[i].nextnode; /* 頂點位置 */
while ( ptr != NULL ) /* 遍歷至鏈表尾 */
{
printf(" %d ",ptr->vertex); /* 印出頂點內容 */
ptr = ptr->nextnode; /* 下一個頂點 */
}
printf("\n"); /* 換行 */
}
printf("\nThe end of the dfs are:\n");
dfs(1); /* 列印輸出遍歷過程 */
printf("\n"); /* 換行 */
puts(" Press any key to quit...");
getch();
}


/*//////////////////////////////////////////*/
/* 圖形的廣度優先搜尋法 */
/* ///////////////////////////////////////*/
#include <stdlib.h>
#include <stdio.h>
#define MAXQUEUE 10 /* 隊列的最大容量 */
struct node /* 圖的頂點結構定義 */
{
int vertex;
struct node *nextnode;
};
typedef struct node *graph; /* 圖的結構指針 */
struct node head[9]; /* 圖的頂點數組 */
int visited[9]; /* 遍歷標記數組 */
int queue[MAXQUEUE]; /* 定義序列數組 */
int front = -1; /* 序列前端 */
int rear = -1; /* 序列後端 */

/***********************二維數組向鄰接表的轉化****************************/
void creategraph(int node[20][2],int num)
{
graph newnode; /* 頂點指針 */
graph ptr;
int from; /* 邊起點 */
int to; /* 邊終點 */
int i;
for ( i = 0; i < num; i++ ) /* 第i條邊的信息處理 */
{
from = node[i][0]; /* 邊的起點 */
to = node[i][1]; /* 邊的終點 */
/* 建立新頂點 */
newnode = ( graph ) malloc(sizeof(struct node));
newnode->vertex = to; /* 頂點內容 */
newnode->nextnode = NULL; /* 設定指針初值 */
ptr = &(head[from]); /* 頂點位置 */
while ( ptr->nextnode != NULL ) /* 遍歷至鏈表尾 */
ptr = ptr->nextnode; /* 下一個頂點 */
ptr->nextnode = newnode; /* 插入第i個節點的鏈表尾部 */
}
}

/************************ 數值入隊列************************************/
int enqueue(int value)
{
if ( rear >= MAXQUEUE ) /* 檢查佇列是否全滿 */
return -1; /* 無法存入 */
rear++; /* 後端指標往前移 */
queue[rear] = value; /* 存入佇列 */
}

/************************* 數值出隊列*********************************/
int dequeue()
{
if ( front == rear ) /* 隊列是否為空 */
return -1; /* 為空,無法取出 */
front++; /* 前端指標往前移 */
return queue[front]; /* 從隊列中取出信息 */
}

/*********************** 圖形的廣度優先遍歷************************/
void bfs(int current)
{
graph ptr;
/* 處理第一個頂點 */
enqueue(current); /* 將頂點存入隊列 */
visited[current] = 1; /* 已遍歷過記錄標志置疑1*/
printf(" Vertex[%d]\n",current); /* 列印輸出遍歷頂點值 */
while ( front != rear ) /* 隊列是否為空 */
{
current = dequeue(); /* 將頂點從隊列列取出 */
ptr = head[current].nextnode; /* 頂點位置 */
while ( ptr != NULL ) /* 遍歷至鏈表尾 */
{
if ( visited[ptr->vertex] == 0 ) /*頂點沒有遍歷過*/
{
enqueue(ptr->vertex); /* 獎定點放入隊列 */
visited[ptr->vertex] = 1; /* 置遍歷標記為1 */
printf(" Vertex[%d]\n",ptr->vertex);/* 印出遍歷頂點值 */
}
ptr = ptr->nextnode; /* 下一個頂點 */
}
}
}

/*********************** 主程序 ************************************/
/*********************************************************************/
void main()
{
graph ptr;
int node[20][2] = { {1, 2}, {2, 1}, /* 邊信息數組 */
{6, 3}, {3, 6},
{2, 4}, {4, 2},
{1, 5}, {5, 1},
{3, 7}, {7, 3},
{1, 7}, {7, 1},
{4, 8}, {8, 4},
{5, 8}, {8, 5},
{2, 8}, {8, 2},
{7, 8}, {8, 7} };
int i;
clrscr();
puts("This is an example of Width Preferred Traverse of Gragh.\n");
for ( i = 1; i <= 8; i++ ) /*頂點結構數組初始化*/
{
head[i].vertex = i;
head[i].nextnode = NULL;
visited[i] = 0;
}
creategraph(node,20); /* 圖信息轉換,鄰接表的建立 */
printf("The content of the graph's allist is:\n");
for ( i = 1; i <= 8; i++ )
{
printf(" vertex%d =>",head[i].vertex); /* 頂點值 */
ptr = head[i].nextnode; /* 頂點位置 */
while ( ptr != NULL ) /* 遍歷至鏈表尾 */
{
printf(" %d ",ptr->vertex); /* 列印輸出頂點內容 */
ptr = ptr->nextnode; /* 下一個頂點 */
}
printf("\n"); /* 換行 */
}
printf("The contents of BFS are:\n");
bfs(1); /* 列印輸出遍歷過程 */
printf("\n"); /* 換行 */
puts(" Press any key to quit...");
getch();
}


『伍』 C語言編程 圖的創建與遍歷

在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=0;i<g->vexnum;i++) /*鄰接矩陣初始化*/

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

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=0;j<g->vexnum;j++)

if((g->arcs[i][j]==1)&&(!visited[j]))

dfs(j,g);

}

void tdfs(graph *g) /*深度優先搜索整個圖*/

{

int i;

printf("

從頂點%C開始深度優先搜索序列:",g->vexs[0]);

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

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=0;j<g->vexnum;j++)

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=0;i<g->vexnum;i++)

if(visited[i]!=TRUE)

bfs(i,g);

printf("

");

}

void init_visit() /*初始化訪問標識數組*/

{

int i;

for(i=0;i<N;i++)

visited[i]=FALSE;

}

int main()

{

graph ga;

int i,j;

createGraph(&ga);

printf("無向圖的鄰接矩陣:

");

for(i=0;i<ga.vexnum;i++)

{

for(j=0;j<ga.vexnum;j++)

printf("%3d",ga.arcs[i][j]);

printf("

");

}

init_visit();

tdfs(&ga);

init_visit();

tbfs(&ga);

return 0;

}

『陸』 C語言實現無向圖

可以用鄰接矩陣表示法:

#define max 100
typedef struct
{
int vex[max];//存儲頂點值,類型可以變
int edge[max][max];//存儲頂點之間的關系,以1或者0表示,1為有邊,0為無
int e,v;//vertex存儲頂點數,edge存儲邊的條數,所以無向圖1的個數是邊的個數的兩倍,謝謝。
}m;

『柒』 如何用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" << endl; return; }

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 = 0; i for (int j = 0; j if (iw - 3 || j>h - 3)

image1[Twoto1(i,j,w)] = 0;

else

{

float temp = 0;

for (int m = 0; m<5; m++)

for (int n = 0; n<5; n++)

{

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" << endl; return; }

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);

}

(7)圖c語言實現擴展閱讀

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 ",size);

FILE * pFile,*qw;

char *buffer=(char*)malloc(sizeof(char)*size);

qw =fopen("qw","r");

pFile = fopen ( "qwe" , "wb" );

printf("%d== ",pFile);

printf("%d ",size);

fread(buffer,1,size,qw);

fwrite (buffer , sizeof(byte), size , pFile );

fclose (pFile);

rename("qwe","Groot.jpg");

return 0;

}

『捌』 圖 (c語言)

我來做,等等

/*編寫無向圖的鄰接矩陣類AdjMWGraph,實現無向圖的廣度遍歷和深度遍歷。
其中,圖中頂點數據類型為字元。Input第一行圖中頂點的個數n(4<=n<=26)
第二行是圖中邊的條數m(3<=m<=351) 第三行是頂點信息(全為大寫字母)
後面的輸入數據是依附於一條邊的兩個頂點,有多少條邊,就輸入多少組信息。
注意:根結點都為A;並且所給字元連續,也就是說A B C D ……。
Output廣度優先搜索序列。 深度優先搜索序列。
Sample Input
7
6
A B C D E F G
A B
A C
B D
B E
C F
C G
Sample Output
A B C D E F G
A B D E C F G
*/

#include <stdio.h>#include <stdlib.h>
unsigned char arrMap[26][26] = {0};
int nV = 0;
void deep_prior_scan(int j);
void spread_prior_scan(int j);

void GetResult()
{
int nL = 0;//存儲邊數
int i;
char arrV[26] = {0};
char temp, pairV[2];

//輸入過程
printf("\n請輸入頂點數:");
scanf("%d", &nV);
printf("\n請輸入邊數:");
scanf("%d", &nL);
printf("\n請依次輸入頂點:\n");
for (i = 0, temp = 'A'; i < nV; )
{
temp = getchar();
if (temp >= 'A' && temp <= 'Z')
{
arrV[i++] = temp;
}
}

printf("\n請依次輸入邊:\n");
for (i = 0; i < nL*2; )
{
temp = getchar();
if (temp >= 'A' && temp <= 'Z')
{
pairV[i%2] = temp;
if (i%2 == 1)
{
arrMap[pairV[0] - 'A'][pairV[1] - 'A'] = 1;
}
++i;
}
}

//printf("\n廣度優先遍歷:\n");
//spread_prior_scan(0);
//printf("\n");
printf("\n深度優先遍歷:\n");
deep_prior_scan(0);
printf("\n");
}

int main()
{
GetResult();
system("pause");
return 0;
}

void deep_prior_scan(int j)
{
int i;
printf("%c ", j + 'A');
for (i = 0; i < nV; i++)
{
if (arrMap[j][i] != 0)
{
arrMap[j][i] = 0;
deep_prior_scan(i);
}
}
}
void spread_prior_scan(int j)
{
int i;
if (j == 0)
{
printf("\nA ");
}
if (j >= 26)
{
printf("\nj=%d\n", j);
}
for (i = 0; i < nV; i++)
{
if (arrMap[j][i] != 0)
{
printf("%c ", i + 'A');
}
}

for (i = 0; i < nV; i++)
{
if (arrMap[j][i] != 0)
{
arrMap[j][i] = 0;
spread_prior_scan(i);
}
}
}

因為懶得復制數組,所以兩種遍歷方法要分開運行,你可以通過打開和關閉對相應函數的注釋來得到兩次的結果

『玖』 請問下c語言如何實現插入圖片功能

  1. C語言寫控制台程序是無法加圖片的,只能用命令行輸出,最多就是設置下背景和字體,顏色之類的。如果開發API窗口程序,完全依賴於操作系統的函數庫。C語言本身並不提供這類函數。

  2. 下面是windows系統下實現的函數代碼,第一個參數是圖片的存放的位置,第二個參數是窗口句柄。

  3. HRESULTShowPic(char*lpstrFile,HWNDhWnd)
    {
    HDChDC_Temp=GetDC(hWnd);
    IPicture*pPic;
    IStream*pStm;
    BOOLbResult;
    HANDLEhFile=NULL;
    DWORDdwFileSize,dwByteRead;
    //打開圖形文件
    hFile=CreateFile(lpstrFile,GENERIC_READ,
    FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
    if(hFile!=INVALID_HANDLE_VALUE)
    {
    dwFileSize=GetFileSize(hFile,NULL);//獲取文件位元組數
    if(dwFileSize==0xFFFFFFFF)
    returnE_FAIL;
    }
    else
    {
    returnE_FAIL;
    }
    //分配全局存儲空間
    HGLOBALhGlobal=GlobalAlloc(GMEM_MOVEABLE,dwFileSize);
    LPVOIDpvData=NULL;
    if(hGlobal==NULL)
    returnE_FAIL;
    if((pvData=GlobalLock(hGlobal))==NULL)//鎖定分配內存塊
    returnE_FAIL;
    ReadFile(hFile,pvData,dwFileSize,&dwByteRead,NULL);//把文件讀入內存緩沖區
    GlobalUnlock(hGlobal);
    CreateStreamOnHGlobal(hGlobal,TRUE,&pStm);
    //裝入圖形文件
    bResult=OleLoadPicture(pStm,dwFileSize,TRUE,IID_IPicture,(LPVOID*)&pPic);
    if(FAILED(bResult))
    returnE_FAIL;
    OLE_XSIZE_HIMETRIChmWidth;//圖片的真實寬度,單位為英寸
    OLE_YSIZE_HIMETRIChmHeight;//圖片的真實高度,單位為英寸
    pPic->get_Width(&hmWidth);
    pPic->get_Height(&hmHeight);
    //轉換hmWidth和hmHeight為pixels距離,1英寸=25.4毫米
    intnWidth=MulDiv(hmWidth,GetDeviceCaps(hDC_Temp,LOGPIXELSX),2540);
    intnHeight=MulDiv(hmHeight,GetDeviceCaps(hDC_Temp,LOGPIXELSY),2540);
    //將圖形輸出到屏幕上(有點像BitBlt)
    bResult=pPic->Render(hDC_Temp,0,0,nWidth,nHeight,0,hmHeight,hmWidth,-hmHeight,NULL);
    hmHeight,NULL);
    pPic->Release();
    CloseHandle(hFile);//關閉打開的文件
    if(SUCCEEDED(bResult))
    {
    returnS_OK;
    }
    else
    {
    returnE_FAIL;
    }
    }

『拾』 用C語言編程實現圖的遍歷演算法

圖的遍歷是指按某條搜索路徑訪問圖中每個結點,使得每個結點均被訪問一次,而且僅被訪問一次。圖的遍歷有深度遍歷演算法和廣度遍歷演算法,最近阿傑做了關於圖的遍歷的演算法,下面是圖的遍歷深度優先的演算法(C語言程序):
#include<stdio.h>
#include<malloc.h>
#define MaxVertexNum 5
#define m 5
#define TRUE 1
#define NULL 0
typedef struct node
{
int adjvex;
struct node *next;
}JD;
typedef struct EdgeNode
{
int vexdata;
JD *firstarc;
}TD;
typedef struct
{
TD ag[m];
int n;
}ALGRAPH;
void DFS(ALGRAPH *G,int i)
{
JD *p;
int visited[80];
printf("visit vertex:%d->",G->ag[i].vexdata);
visited[i]=1;
p=G->ag[i].firstarc;
while(p)
{
if (!visited[p->adjvex])
DFS(G,p->adjvex);
p=p->next;
}
}
void creat(ALGRAPH *G)
{
int i,m1,j;
JD *p,*p1;
printf("please input the number of graph\n");
scanf("%d",&G->n);
for(i=0;i<G->n;i++)
{
printf("please input the info of node %d",i);
scanf("%d",&G->ag[i].vexdata);
printf("please input the number of arcs which adj to %d",i);
scanf("%d",&m1);
printf("please input the adjvex position of the first arc\n");
p=(JD *)malloc(sizeof(JD));
scanf("%d",&p->adjvex);
p->next=NULL;
G->ag[i].firstarc=p;
p1=p;
for(j=2 ;j<=m1;j++)
{
printf("please input the position of the next arc vexdata\n");
p=(JD *)malloc(sizeof(JD));
scanf("%d",&p->adjvex);
p->next=NULL;
p1->next=p;
p1=p;
}
}
}
int visited[MaxVertexNum];
void DFSTraverse(ALGRAPH *G)
{
int i;
for(i=0;i<G->n;i++)
visited[i]=0;
for(i=0;i<G->n;i++)
if(!visited[i])
DFS(G,i);
}
int main()
{
ALGRAPH *G;
printf("下面以臨接表存儲一個圖;\n");
creat(G);
printf("下面以深度優先遍歷該圖 \n");
DFSTraverse(G);
getchar();
}

熱點內容
伺服器少個陣列卡盤符怎麼找出來 發布:2025-05-11 02:34:07 瀏覽:635
鬥地主源碼開發 發布:2025-05-11 02:24:07 瀏覽:366
雲伺服器怎麼設置攻擊 發布:2025-05-11 02:22:09 瀏覽:826
python嵌套for循環 發布:2025-05-11 01:51:44 瀏覽:228
安卓怎麼取消後台限制 發布:2025-05-11 01:45:45 瀏覽:258
一鍵搭建sk5伺服器 發布:2025-05-11 01:40:09 瀏覽:514
鴻業acs加密鎖模擬器 發布:2025-05-11 01:38:49 瀏覽:938
神廟逃亡2安卓版怎麼玩 發布:2025-05-11 01:38:05 瀏覽:163
凱傑都什麼配置 發布:2025-05-11 01:38:04 瀏覽:472
php微信開源系統源碼 發布:2025-05-11 01:37:54 瀏覽:814