c語言檢索樹實驗報告,c語言實驗報告總結

本文目錄一覽:

c語言_樹

我很奇怪,不用先序中序或者中序後序,你如何能確定一棵唯一的樹呢,不能確定樹如何來遍歷等等。。。。。。。。。。

參考一下

一、 實驗名稱:二叉樹的建立和遍歷

二、 實驗目的:練習遞歸算法

三、 實驗內容:在上一次實驗的基礎之上增加以下功能

a) 統計二叉樹深度

b) 統計二叉樹中葉子個數

c) 二叉樹中所有左右子樹交換

四、 實驗步驟

#includestdio.h

#includeiostream.h

#includestdlib.h

#define size 100

typedef struct BiTNode

{

char data;

struct BiTNode *lchild, *rchild;

} binode, *bitree;

typedef struct

{

bitree data[size];

int tag[100];

int top;

}sqstack;

void initstack(sqstack t)

{

t.top=-1;

}

int stackempty(sqstack t)

{

if(t.top==-1)

return 1;

else

return 0;

}

int gettop(sqstack t,bitree a)

{

if(t.top==-1)

return 0;

else

{

a=t.data[t.top];

t.top–;

return 1;

}

}

int push(sqstack t,bitree a)

{

if(t.top==size-1)

return 0;

else

{

t.data[++t.top]=a;

return 1;

}

}

int pop(sqstack t,bitree a)

{

if(t.top==-1)

return 0;

else

{

a=t.data[t.top–];

return 1;

}

}

void createbitree(bitree T,char a[],int la,int ha,char b[],int lb,int hb)

{

int m;

char c;

if(laha)

T=NULL;

else

{

if(!(T=(bitree)malloc(sizeof(binode))))

exit(0);

else

{

T-data=a[la];

m=lb;

while(b[m]!=a[la]) m++;

createbitree(T-lchild,a,la+1,la+m-lb,b,lb,m-1);

createbitree(T-rchild,a,la+m-lb+1,ha,b,m+1,hb);

}

}

}

int createbitree(bitree T)

{

char a[5], b[5];

int i, j, n;

char ch;

n=0;

printf(“abcd*badc\n”);

scanf(“%c”, ch);

while( ch!=’*’ ) { a[n++]=ch; scanf(“%c”, ch);}

for(i=0; in; i++) scanf(“%c”, b[i]);

createbitree(T, a, 0, n-1, b, 0, n-1);

}

int preorder (bitree p)

{

sqstack S;

initstack(S);

printf(“先序遍歷\n”);

while(!stackempty(S) || p!=NULL)

{

while(p!=NULL) //指向左子樹

{

printf(“%c “,p-data);

push(S,p); //非空時入棧

p=p-lchild;

}

pop(S,p); //指針出棧

p=p-rchild;

}

printf(“\n”);

}

int inorder (bitree p)

{

sqstack s;

initstack(s);

printf(“中序遍歷\n”);

while(!stackempty(s)||p)

{

if(p)

{

push(s,p);

p=p-lchild;

}

else

{

pop(s,p);

printf(“%c “,p-data);

p=p-rchild;

}

}

return 1;

}

void postorder(bitree p)

{

printf(“\n”);

sqstack s;

initstack(s);

printf(“後序輸出\n”);

while(p||!stackempty(s))

{

while(p)

{

s.top++;

s.data[s.top]=p; //子樹根結點進棧

s.tag[s.top]=0; //設此根結點標誌初始化為0,表示左右孩子都沒訪問,當訪問完左子樹 tag 變為1

p=p-lchild; //進入左子樹訪問。(左子樹根結點全部進棧)

}

while((s.top-1)(s.tag[s.top]==1))

{

p=s.data[s.top];

coutp-data” “; //沒有孩子的根結點,也就是它父親的左孩子或右孩子

s.top–;

}

if(s.top-1)

{

p=s.data[s.top];

s.tag[s.top]=1; //進入右子樹 前,標誌tag變為1

p=p-rchild; //進入右子樹

}

else

p=NULL;

}

}

void CountLeaf (bitree T, int count)

{

if ( T )

{

if ((!T-lchild) (!T-rchild)) count++;

CountLeaf(T-lchild , count); //統計左子樹中葉子個數

CountLeaf(T-rchild ,count); //統計右子樹中葉子個數

}

}

int depthval=0,depthLeft=0, depthRight=0;

int Depth (bitree T )

{

if ( !T )

depthval = 0; // depthval是一個全程變量

else

{

depthLeft = Depth( T-lchild );

depthRight = Depth( T-rchild );

depthval = 1 + (depthLeft depthRight ? depthLeft : depthRight);

}

return depthval;

}

void change(bitree T)

{

bitree p,q;

if(T)

{

p=T-lchild;

T-lchild=T-rchild;

T-rchild=p;

change(T-lchild);

change(T-rchild);

}

}

void main()

{

bitree T;

int count=0;

createbitree(T) ;

preorder(T);

inorder(T);

postorder(T);

CountLeaf (T,count);

printf(“\n”);

printf(“葉子的個數是:%d\n”,count);

Depth ( T );

printf(“樹的深度是:%d\n”,depthval);

printf(“交換後。。。\n”);

change(T);

preorder(T);inorder(T);

postorder(T);

}

C語言 查找算法實現

#include

int main() {

int i,x,n,*result = NULL;

int a[10],low,high,mid;

scanf_s(“%d”,n);

// 確保輸入的數據是非遞減的

for(i = 0 ; i n i 10 ; i++) {

scanf_s(“%d”,a[i]);

}

fflush(stdin); // 如果輸入的數組元素多於10個,則廢棄

scanf_s(“%d”,x);

low = 0,high = n – 1;

while(low = high) {

mid = (low + high) / 2;

if(x == a[mid]) {

result = a[mid]; // 這裡給出的是查找到該元素的指針

break;

}

else if(x a[mid]) {

high = mid – 1;

}

else {

low = mid + 1;

}

}

if(result != NULL) {

printf(“%d\n”,*result);

}

else {

printf(“no result\n”);

}

return 0;

}

C語言實驗報告怎麼寫?

#include stdio.h

int main()

{

  unsigned long a;

  char c;

  printf(“Input a binary number:\n”);

  for(a=0;(c=getchar())!=’\n’;)

      a=a*2+c-‘0’;

  printf(“The number is %lu in decimal\n”,a);

  printf(“The number is %lo in octal\n”,a);

  printf(“The number is %lX in Hexadecimal\n”,a);

  return 0;

}

咋寫C語言實驗報告

c(c++)上機實驗報告格式:

⒈  實驗目的  

(1) 了解在具體的語言環境下如何編輯、編譯、連接和運行一個 C 程序。

⑵ 通過運行簡單的 C 程序,初步了解 C 源程序的特點。

⑶ 掌握 C 語言數據類型,熟悉如何定義一個整型、字符型和實型的變量,以及對它們賦值的方法。

⑷ 掌握不同的類型數據之間賦值的規律。

⑸ 學會使用 C 的有關算術運算符,以及包含這些運算符的表達式,特別是自加(++)和自減(–)運算符的使用。

2.實驗內容和步驟

⑴  檢查所用的計算機系統是否已安裝了 C 編譯系統並確定他所在的子目錄。

⑵ 進入所用的集成環境。

⑶ 熟悉集成環境的界面和有關菜單的使用方法。

⑷ 輸入並運行一個簡單的、正確的程序。

⒊ 實驗題目

⑴ 輸入下面的程序

# include 「stdio.h」 void main()

{ printf(「This is a c program.\n」); }

程序無誤,其運行的結果為:

有誰能夠告訴我c語言的實驗報告怎麼寫?

實驗題目:

編程實現:二叉樹採用二叉鏈表存儲,要求建立一棵二叉樹,並輸出要求的樹狀形式與結點編號。

結點結構為:

lchied Data num rchied

其中二叉樹的num編號域為整數類型,data數據域為字符類型,

要求生成二叉樹中編號,從1開始進行連續編號,每個結點的編號大於其左右子樹中孩子的編號,同一個結點的左右孩子中,其左孩子的編號小於其右孩子的編號,

請給出對二叉樹中結點的實現如上要求編號並按如下樹狀形式打印出相應點編號的程序。

測試數據:輸入 AB∪D∪∪CE∪F∪∪∪ (其中符號「∪」表示空格(space)字符)

實驗分析:

本題的考察點:二叉樹遍歷應用。本題主要涉及到對二叉樹的創建,二叉樹的打印,以及在遍歷的時候順便給每個節點編號,這樣打印的時候順便就把節點的序號也打印出來了。下面分別給出三個算法。

二叉樹的創建算法:

二叉樹的打印算法:

給結點的編號算法:

另外在這裡也闡明一下二叉樹的結構:

結合上面的四個算法,這個問題自然也就迎刃而解了,這樣也就能得到這個問題的完整程序。

完整程序如下:

#includestdio.h

#includestdlib.h

typedef struct BiTNode

{

int num;

char data;

struct BiTNode *LChild,*RChild;

}BiTNode,*BiTree;

void CreateBiTree(BiTree *BT)

{

char ch;

ch=getchar();

if (ch==’ ‘) (*BT)=NULL; /* #代表空指針*/

else

{

(*BT)=(BiTree) malloc(sizeof(BiTNode));/*申請結點 */

(*BT)-data=ch; /*生成根結點 */

CreateBiTree(((*BT)-LChild)); /*構造左子樹 */

CreateBiTree(((*BT)-RChild)); /*構造右子樹 */

}

}

void print(BiTree root,int nlayer)

{

int i;

if(root==NULL)return;

print(root-RChild,nlayer+4);

for(i=0;inlayer;i++)

printf(” “);

printf(“%c%d\n”,root-data,root-num);

print(root-LChild,nlayer+4);

}

void num(BiTree bt)

{

static int i=1; //定義靜態全局變量

if(bt!=NULL)

{

num(bt-LChild);

num(bt-RChild);

bt-num=i;

i++;

}

}

int main()

{

BiTree bt;

printf(“請輸入相關字符以創建一個二叉樹:\n”);

CreateBiTree(bt);

num(bt);

print(bt,1);

return 0;

}

程序的測試結果:

實驗總結:

在解決具體的實驗問題時,我們要分析問題,將一個大的問題細分為一個個小的問題,再去分析解決一個個小的問題,這樣就能很好的解決問題了。在平時的實驗過程中,要注重培養自己的分析問題及解決問題的能力。

大致一個流程和格式是這樣的,具體的可以自己添加。。。。

c語言實驗報告總結怎麼寫

c語言實驗報告總結這樣寫:

在科技高度發展的今天,計算機在人們之中的作用越來越突出。而c語言作為一種計算機的語言,我們學習它,有助於我們更好的了解計算機,與計算機進行交流,因此,c語言的學習對我們尤其重要。

在這個星期里,我們專業的學生在專業老師的帶領下進行了c語言程序實踐學習。在這之前,我們已經對c語言這門課程學習了一個學期,對其有了一定的了解,但是也僅僅是停留在了解的範圍,對裏面的好多東西還是很陌生,的在運用起來的時候還是感到很棘手,畢竟,萬事開頭難嘛。

由於時間的關係,我們的這次實踐課程老師並沒有給我們詳細的介紹,只是給我們簡單的介紹了幾個比較重要的實際操作。包括了程序模塊處理.簡單界面程序.高級界面程序.程序的添加修改.用程序做一元線性回歸處理以及用c語言程序來畫粒度分佈圖等這幾樣比較重要的時間操作。

上機實驗是學習程序設計語言必不可少的實踐環節,特別是c語言靈活、簡潔,更需要通過編程的實踐來真正掌握它。對於程序設計語言的學習目的,可以概括為學習語法規定、掌握程序設計方法、提高程序開發能力,這些都必須通過充分的實際上機操作才能完成。

學習c程序設計語言除了課堂講授以外,必須保證有不少於課堂講授學時的上機時間。因為學時所限,課程不能安排過多的統一上機實驗,所以希望學生有效地利用課程上機實驗的機會,儘快掌握用c語言開發程序的能力,為今後的繼續學習打下一個良好的基礎。

為此,我們結合課堂講授的內容和進度,安排了12次上機實驗。課程上機實驗的目的,不僅僅是驗證教材和講課的內容、檢查自己所編的程序是否正確,課程安排的上機實驗的目的可以概括為如下幾個方面:

1、加深對課堂講授內容的’理解

課堂上要講授許多關於c語言的語法規則,聽起來十分枯燥無味,也不容易記住,死記硬背是不可取的。然而要使用c語言這個工具解決實際問題,又必須掌握它。

通過多次上機練習,對於語法知識有了感性的認識,加深對它的理解,在理解的基礎上就會自然而然地掌握c語言的語法規定。對於一些內容自己認為在課堂上聽懂了,但上機實踐中會發現原來理解的偏差,這是由於大部分學生是初次接觸程序設計,缺乏程序設計的實踐所致。

學習c語言不能停留在學習它的語法規則,而是利用學到的知識編寫c語言程序,解決實際問題。即把c語言作為工具,描述解決實際問題的步驟,由計算機幫助我們解題。只有通過上機才能檢驗自己是否掌握c語言、自己編寫的程序是否能夠正確地解題。

通過上機實驗來驗證自己編製的程序是否正確,恐怕是大多數同學在完成老師作業時的心態。但是在程序設計領域裏這是一定要克服的傳統的、錯誤的想法。因為在這種思想支配下,可能你會想辦法去”掩蓋”程序中的錯誤,而不是儘可能多地發現程序中存在的問題。

自己編好程序上機調試運行時,可能有很多你想不到的情況發生,通過解決這些問題,可以逐步提高自己對c語言的理解和程序開發能力。

2、熟悉程序開發環境、學習計算機系統的操作方法

一個c語言程序從編輯、編譯、連接到運行,都要在一定的外部操作環境下才能進行。所謂”環境”就是所用的計算機系統硬件、軟件條件,只有學會使用這些環境,才能進行程序開發工作。

通過上機實驗,熟練地掌握c語言開發環境,為以後真正編寫計算機程序解決實際問題打下基礎。同時,在今後遇到其它開發環境時就會觸類旁通,很快掌握新系統的使用。

3、學習上機調試程序

完成程序的編寫,決不意味着萬事大吉。你認為萬無一失的程序,實際上機運行時可能不斷出現麻煩。如編譯程序檢測出一大堆錯誤。有時程序本身不存在語法錯誤,也能夠順利運行,但是運行結果顯然是錯誤的。

開發環境所提供的編譯系統無法發現這種程序邏輯錯誤,只能靠自己的上機經驗分析判斷錯誤所在。程序的調試是一個技巧性很強的工作,對於初學者來說,儘快掌握程序調試方法是非常重要的。有時候一個消耗你幾個小時時間的小小錯誤,調試高手一眼就看出錯誤所在。

通過這次為數不多的幾天計算機實踐學習,我們了解了一些關於c語言的知識,理解鞏固了我們c語言的理論知識,着對我們將來到社會工作將會有莫大的幫助。同時它讓我知道,只要你努力,任何東西都不會太難!

原創文章,作者:IGMZ,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/149926.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
IGMZ的頭像IGMZ
上一篇 2024-11-05 16:54
下一篇 2024-11-05 16:54

相關推薦

  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • Python語言實現人名最多數統計

    本文將從幾個方面詳細介紹Python語言實現人名最多數統計的方法和應用。 一、Python實現人名最多數統計的基礎 1、首先,我們需要了解Python語言的一些基礎知識,如列表、字…

    編程 2025-04-28
  • Python爬蟲文檔報告

    本文將從多個方面介紹Python爬蟲文檔的相關內容,包括:爬蟲基礎知識、爬蟲框架及常用庫、爬蟲實戰等。 一、爬蟲基礎知識 1、爬蟲的定義: 爬蟲是一種自動化程序,通過模擬人的行為在…

    編程 2025-04-28
  • Python作為中心語言,在編程中取代C語言的優勢和挑戰

    Python一直以其簡單易懂的語法和高效的編碼環境而著名。然而,它最近的發展趨勢表明Python的使用範圍已經從腳本語言擴展到了從Web應用到機器學習等廣泛的開發領域。與此同時,C…

    編程 2025-04-28

發表回復

登錄後才能評論