41223209 cp2023

  • Home
    • SMap
    • reveal
    • blog
  • About
  • w5
  • w6
  • w7
  • w12
  • w13
  • w15
  • w16
  • ANSIC
  • c_ex
  • 教學影片
  • 倉儲與網站評分項目
  • Brython
w16 << Previous Next >> c_ex

ANSIC

檢查給定的數字是否為醜數

# include <stdio.h>
# include <string.h>

int main()
{
int n,x=0;
  printf("\n\n Check whether a given number is an ugly number:\n");
  printf("----------------------------------------------------\n");
  printf("Input an integer number: ");
  scanf("%d",&n);

      if (n <= 0) {  
            printf("Input a correct number.");  
        }
       while (n != 1) 
       {  
            if (n % 5 == 0) 
            {  
                n /= 5;  
            } 
            else if (n % 3 == 0) 
            {  
                n /= 3;  
            } 
            else if (n % 2 == 0) 
            {  
                n /= 2;  
            } 
            else 
            {  
                printf("It is not an ugly number.\n"); 
                x = 1;  
                break;  
            }  
        } 
		        if (x==0)
		        { 
                printf("It is an ugly number.\n");
                }
}

列印您的姓名、出生日期和手機號碼

#include <stdio.h>

int main()  
{
    // 列印姓名
    printf("Name   : Alexandra Abramov\n"); 
    
    // 列印出生日期
    printf("DOB    : July 14, 1975\n"); 
    
    // 列印手機號碼
    printf("Mobile : 99-9999999999\n"); 
    
    // 表示執行成功
    return(0); 
}

反轉給定整數的數字

#include <stdio.h>
int reverse(int n) {
    int d, y = 0;
    while (n) {
        d = n % 10;
        if ((n > 0 && y > (0x7fffffff - d) / 10) ||
            (n < 0 && y < ((signed)0x80000000 - d) / 10)) {
            return 0;  
        }
        y = y * 10 + d;
        n = n / 10;
    }
    return y;  
}

int main(void)
{
    int i = 123;
    printf("Original integer: %d  ",i);
    printf("\nReverse integer: %d  ",reverse(i));
    i = 208478933;
    printf("\nOriginal integer: %d  ",i);
    printf("\nReverse integer: %d  ",reverse(i));
    i = -73634;
    printf("\nOriginal integer: %d  ",i);
    printf("\nReverse integer: %d  ",reverse(i));
    return 0;
}

將字串轉換為無符號長整型

#include<stdio.h>
#include<stdlib.h>

int main ()
{
char buffer[123]; //定義一個字元數組“buffer”來儲存使用者輸入
unsigned long ul; // 定義一個unsigned long變數'ul'來儲存轉換後的值

    // 列印一則訊息,要求使用者輸入
printf ("\nInput an unsigned number: ");

    // 從標準輸入讀取使用者輸入並將其儲存在“緩衝區”中
fgets (buffer,123,stdin);

    // 使用基數 0 將「buffer」中的字串轉換為無符號長整數(自動偵測)
ul = strtoul (buffer,NULL,0);

    // 列印轉換後的值
printf ("Output: %lu\n\n",ul);

return 0; // 表明程式執行成功
}

將字串轉換為雙精度

#include<stdio.h>      // 包括標準輸入/輸出頭檔。
#include<stdlib.h>     // 包含標準庫頭檔。

int main ()          // 主函數開始。
{
char input[] = "8.0 2.0";  // 聲明一個字元數組“input”並用“8.0 2.0”對其進行初始化。
char * ptr_end;           //聲明一個指向字元“ptr_end”的指標。

double x, y;              // 聲明兩個雙精確度變數“x”和“y”。

    x = strtod (input,&ptr_end);   //將“input”的第一部分轉換為雙精度型,儲存在“x”中,並更新“ptr_end”。
    y = strtod (ptr_end,NULL);     // 將“input”的剩餘部分轉換為雙精度型,儲存在“y”中。

printf ("\nOutput= %.2lf\n\n", x/y);   // 印出 x/y 的結果,保留兩位小數。
return 0;   // 返回0表示程式執行成功。
}   // 主函數結束。

產生一個隨機數

#include<stdio.h>     // 包括標準輸入/輸出頭檔。
#include<stdlib.h>    // 包含標準庫頭檔。
#include<time.h>      // 包含用於產生隨機數的時間頭檔。
int main ()           // 主函數開始。
{
int number, input;   // 宣告兩個整數變數「number」和「input」。
srand ( time(NULL) );   // 使用當前時間初始化隨機種子。

number = rand() % 10 + 1;   // 產生 1 到 10 之間的隨機數並將其儲存在「number」中。

do {   // do-while 循環的開始。
printf ("\nGuess the number (1 to 10): ");   // 列印一則訊息,提示使用者猜測數字。
scanf ("%d",&input);    // 讀取用戶的輸入並將其儲存在“input”中。

if (number > input)   // 如果隨機數大於使用者輸入。
printf ("The number is higher\n");   // 列印一條訊息,表示該數字更大。

    } while (number!=input);   // 只要使用者的輸入不等於隨機數就繼續循環。

printf ("That is correct!\n\n");   // 列印一條訊息,表示用戶猜對了。

return 0;   // 返回0表示程式執行成功。
}   // 主函數結束。

簡單的函數結構

#include <stdio.h>

    int sum (int, int);//函數聲明
    int main (void)
    {
        int total;
		printf("\n\n Function : a simple structure of function :\n");
		printf("------------------------------------------------\n");	
        total = sum (5, 6);//函數呼叫
        printf ("The total is :  %d\n", total);
        return 0;
    }
    
    int sum (int a, int b) //函數定義
    {
	    int s;
		s=a+b;
        return s; //函數傳回一個值
    }

顯示前 10 個自然數

#include <stdio.h>  // 包括標準輸入/輸出頭檔。
int main() {
    int i;

    // 列印一條訊息,表示程式的意圖
    printf("The first 10 natural numbers are:\n");

    // 循環遍歷前 10 個自然數並列印每個自然數
    for (i = 1; i <= 10; i++) {
        printf("%d ", i);
    }

    // 返回0表示執行成功
    return 0;
}

列印前 50 個自然數

#include<stdio.h>
int  numPrint(int);
int main()
{
    int n = 1;
	printf("\n\n Recursion : print first 50 natural numbers :\n");
	printf("-------------------------------------------------\n"); 
	printf(" The natural numbers are :");
    numPrint(n);
    printf("\n\n");
    return 0;
}
int numPrint(int n)
{
    if(n<=50)
    {
         printf(" %d ",n);
         numPrint(n+1);
    }
}

檢查兩個整數是否相等

#include <stdio.h>   // 包括標準輸入/輸出頭檔。
void main()
{
    int int1, int2;   // 宣告兩個整數變數“int1”和“int2”。

    printf("Input the values for Number1 and Number2 : ");   // 提示使用者輸入 Number1 和 Number2 的值。
    scanf("%d %d", &int1, &int2);   // 讀取使用者的輸入並將其儲存在“int1”和“int2”中。
    if (int1 == int2)   // 檢查 Number1 是否等於 Number2。
        printf("Number1 and Number2 are equal\n");   // 如果 Number1 和 Number2 相等,則列印一則訊息。
    else
        printf("Number1 and Number2 are not equal\n");   //如果 Number1 和 Number2 不相等,則列印一則訊息。
}

刪除字串中的所有空格

#include <stdio.h>

#include <string.h>

#include <ctype.h>

// 移除字串中的空白字符,同時使用回調函數進行額外的修改
void remove_whitespace(char *str, void (*modify)(char *)) {
    int i, j = 0;
    for (i = 0; str[i] != '\0'; i++) {
        if (!isspace(str[i])) {
            str[j] = str[i];
            j++;
        } else {
            modify(&str[i]);
        }
    }
    str[j] = '\0';
}

// 將空白字符替換為 '\0' 的回調函數
void remove_space(char *ch) {
    *ch = '\0';
}

int main() {
    char str[100];
    printf("輸入一個字串:");
    fgets(str, sizeof(str), stdin);
    str[strcspn(str, "\n")] = '\0'; // 移除換行符號
    printf("原始字串:%s\n", str);

    // 使用回調函數移除空白字符
    remove_whitespace(str, remove_space);

    printf("沒有空白字符的字串:%s\n", str);

    return 0;
}

基本堆操作 - 插入、刪除、顯示

#include <stdio.h>          // 包含 printf 函數的標準輸入/輸出庫
#include <stdlib.h>         // 包含動態記憶體分配的標準庫

#define MAX_HEAP_SIZE 100   // 定義堆的最大大小

// 表示堆的結構
struct Heap {
    int arr[MAX_HEAP_SIZE]; // 儲存堆元素的數組
    int size;               // 堆的當前大小
};

// 交換堆中兩個元素的函數
void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

// 插入元素後維護最大堆屬性的函數
void heapifyUp(struct Heap *heap, int index) {
    int parent = (index - 1) / 2;  // 計算父索引

    // 向上移動堆,直到恢復最大堆屬性
    while (index > 0 && heap->arr[index] > heap->arr[parent]) {
        swap(&heap->arr[index], &heap->arr[parent]);  // 將目前節點與其父節點交換
        index = parent;
        parent = (index - 1) / 2;  // 更新父索引
    }
}

// 在堆中插入元素的函數
void insert(struct Heap *heap, int key) {
    if (heap->size >= MAX_HEAP_SIZE) {
        printf("Heap overflow\n");   // 如果堆已滿,則顯示錯誤訊息
        return;
    }

    heap->arr[heap->size] = key;     // 將鍵插入堆的末尾
    heap->size++;                    // 增加堆的大小
    heapifyUp(heap, heap->size - 1);  // 恢復最大堆屬性
}

// 刪除元素後維護最大堆屬性的函數
void heapifyDown(struct Heap *heap, int index) {
    int leftChild = 2 * index + 1;   // 計算左子索引
    int rightChild = 2 * index + 2;  // 計算右子索引
    int largest = index;              // 假設當前節點是最大的

    // 求當前節點、左子節點、右子節點中最大的元素
    if (leftChild < heap->size && heap->arr[leftChild] > heap->arr[largest]) {
        largest = leftChild;
    }

    if (rightChild < heap->size && heap->arr[rightChild] > heap->arr[largest]) {
        largest = rightChild;
    }

    // 如果最大的元素不是當前節點,則與最大的子節點交換並繼續向下堆
    if (largest != index) {
        swap(&heap->arr[index], &heap->arr[largest]);
        heapifyDown(heap, largest);
    }
}

// 從堆中刪除根元素(最大元素)的函數
int deleteMax(struct Heap *heap) {
    if (heap->size <= 0) {
        printf("Heap underflow\n");  // 如果堆為空,則顯示錯誤訊息
        return -1;                   // 返回-1表示錯誤或空堆
    }

    int maxElement = heap->arr[0];   // 儲存最大元素
    heap->arr[0] = heap->arr[heap->size - 1];  // 將根替換為最後一個元素
    heap->size--;                    // 減小堆的大小

    heapifyDown(heap, 0);            // 從根恢復最大堆屬性

    return maxElement;               // 傳回刪除的最大元素
}

// 顯示堆元素的函數
void display(struct Heap *heap) {
    printf("Heap elements: ");
    for (int i = 0; i < heap->size; i++) {
        printf("%d ", heap->arr[i]);  // 列印堆中的每個元素
    }
    printf("\n");
}

int main() {
    struct Heap heap;                 // 聲明堆結構
    heap.size = 0;                    // 初始化堆大小

    // 測試插入操作
    insert(&heap, 100);
    insert(&heap, 200);
    insert(&heap, 150);
    insert(&heap, 400);
    insert(&heap, 500);

    // 顯示堆疊
    display(&heap);

    // 測試刪除操作
    int maxElement = deleteMax(&heap);
    if (maxElement != -1) {
        printf("Deleted max element: %d\n", maxElement);
    }

    // 顯示更新後的堆
    display(&heap);

    return 0;                         // 返回0表示執行成功
}

從隨機數組和排序數組構造最大堆

#include <stdio.h>          // 包含 printf 函數的標準輸入/輸出庫
#include <stdlib.h>         // 包含動態記憶體分配的標準庫

#define MAX_HEAP_SIZE 100   // 定義堆的最大大小

// 交換堆中兩個元素的函數
void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

// 插入元素後維護最大堆屬性的函數
void heapifyDown(int arr[], int size, int index) {
    int leftChild = 2 * index + 1;   // 計算左子索引
    int rightChild = 2 * index + 2;  // 計算右子索引
    int largest = index;              // 假設當前節點是最大的

    // 求當前節點、左子節點、右子節點中最大的元素
    if (leftChild < size && arr[leftChild] > arr[largest]) {
        largest = leftChild;
    }

    if (rightChild < size && arr[rightChild] > arr[largest]) {
        largest = rightChild;
    }

    // 如果最大的元素不是當前節點,則與最大的子節點交換並繼續向下堆
    if (largest != index) {
        swap(&arr[index], &arr[largest]);
        heapifyDown(arr, size, largest);
    }
}

// 從數組建立最大堆的函數
void buildMaxHeap(int arr[], int size) {
    // 從最後一個非葉節點開始,向下堆化到根
    for (int i = size / 2 - 1; i >= 0; i--) {
        heapifyDown(arr, size, i);
    }
}

// 顯示數組元素的函數
void display(int arr[], int size) {
    printf("Array elements: ");
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);  // 列印數組中的每個元素
    }
    printf("\n");
}

int main() {
    // 使用隨機數組進行測試
    int randomArray[] = {6, 8, 12, 7, 1};               // 聲明一個隨機數組
    int randomSize = sizeof(randomArray) / sizeof(randomArray[0]);  // 計算數組的大小

    printf("Original Random Array:\n");
    display(randomArray, randomSize);  // 顯示原始隨機數組

    // 從隨機數組建立最大堆
    buildMaxHeap(randomArray, randomSize);

    printf("Max Heap from Random Array:\n");
    display(randomArray, randomSize);  // 顯示隨機數組中的最大堆

    // 使用排序數組進行測試
    int sortedArray[] = {19, 12, 8, 6, 2};              // 聲明一個排序數組
    int sortedSize = sizeof(sortedArray) / sizeof(sortedArray[0]);  // 計算數組的大小

    printf("\nOriginal Sorted Array:\n");
    display(sortedArray, sortedSize);  // 顯示原始排序數組

    // 從排序數組建立最大堆
    buildMaxHeap(sortedArray, sortedSize);

    printf("Max Heap from Sorted Array:\n");
    display(sortedArray, sortedSize);  // 顯示排序數組中的最大堆

    return 0;                         // 返回0表示執行成功
}

從隨機數組和排序數組構造最小堆

#include <stdio.h>

// 用於堆化以節點 i 為根的子樹的函數,該節點是 arr[] 中的索引
void minHeapify(int arr[], int n, int i) {
    int smallest = i;  // 將最小的初始化為 root
    int left = 2 * i + 1;  // 左子節點
    int right = 2 * i + 2; // 右子節點

    // 如果左子節點小於根
    if (left < n && arr[left] < arr[smallest])
        smallest = left;

    // 如果右子節點小於目前為止最小的子節點
    if (right < n && arr[right] < arr[smallest])
        smallest = right;

    // 如果最小的不是根
    if (smallest != i) {
        // 將找到的最小元素與根交換
        int temp = arr[i];
        arr[i] = arr[smallest];
        arr[smallest] = temp;

        // 遞歸地堆化受影響的子樹
        minHeapify(arr, n, smallest);
    }
}

// 從數組建立最小堆的函數
void buildMinHeap(int arr[], int n) {
    // 從最後一個非葉子節點開始,以相反的順序堆疊所有節點
    for (int i = n / 2 - 1; i >= 0; i--)
        minHeapify(arr, n, i);
}

// 列印數組的函數
void printArray(int arr[], int n) {
    for (int i = 0; i < n; ++i)
        printf("%d ", arr[i]);
    printf("\n");
}

// 測試堆構造函數
int main() {
    // 使用隨機數組進行測試
    int randomArray[] = {4, 10, 3, 5, 1};
    int n1 = sizeof(randomArray) / sizeof(randomArray[0]);

    printf("Original Random Array: ");
    printArray(randomArray, n1);

    // 建構堆
    buildMinHeap(randomArray, n1);

    printf("Min Heap from Random Array: ");
    printArray(randomArray, n1);

    printf("\n");

    // 使用排序數組進行測試
    int sortedArray[] = {8, 7, 5, 4, 2};
    int n2 = sizeof(sortedArray) / sizeof(sortedArray[0]);

    printf("Original Sorted Array: ");
    printArray(sortedArray, n2);

    // 建構堆
    buildMinHeap(sortedArray, n2);

    printf("Min Heap from Sorted Array: ");
    printArray(sortedArray, n2);

    return 0;
}

使用最大堆實現堆排序

#include <stdio.h>

// 用於堆化以節點 i 為根的子樹的函數,該子樹是 arr[] 中的索引
void maxHeapify(int arr[], int n, int i) {
    int largest = i;  // Initialize largest as root
    int left = 2 * i + 1;  // left child
    int right = 2 * i + 2; // right child

    // 如果左子節點大於根
    if (left < n && arr[left] > arr[largest])
        largest = left;

    // 如果右子節點大於迄今為止最大的子節點
    if (right < n && arr[right] > arr[largest])
        largest = right;

    // 如果最大的不是根
    if (largest != i) {
        // Swap the found largest element with the root
        int temp = arr[i];
        arr[i] = arr[largest];
        arr[largest] = temp;

        // 遞歸地堆化受影響的子樹
        maxHeapify(arr, n, largest);
    }
}

// 對數組執行堆排序的函數
void heapSort(int arr[], int n) {
    // 建造最大堆
    for (int i = n / 2 - 1; i >= 0; i--)
        maxHeapify(arr, n, i);

    // 從堆中一一提取元素
    for (int i = n - 1; i > 0; i--) {
        // 將根(最大元素)與最後一個元素交換
        int temp = arr[0];
        arr[0] = arr[i];
        arr[i] = temp;

        // 在減少的堆上呼叫 maxHeapify
        maxHeapify(arr, i, 0);
    }
}

// 列印數組的函數
void printArray(int arr[], int n) {
    for (int i = 0; i < n; ++i)
        printf("%d ", arr[i]);
    printf("\n");
}

int main() {
    // 測試陣列
    int array[] = {14, 10, 0, 9, 15, 5, 7};
    int n = sizeof(array) / sizeof(array[0]);

    printf("Original Array: ");
    printArray(array, n);

    // 執行堆疊排序
    heapSort(array, n);

    printf("Sorted Array: ");
    printArray(array, n);

    return 0;
}

實作並測試Heapify功能

#include <stdio.h>

// 用於堆化以節點 i 為根的子樹的函數,該節點是 arr[] 中的索引
void heapify(int arr[], int n, int i) {
    int largest = i;  // Initialize largest as root
    int left = 2 * i + 1;  // left child
    int right = 2 * i + 2; // right child

    // 如果左子節點大於根
    if (left < n && arr[left] > arr[largest])
        largest = left;

    // 如果右子節點大於迄今為止最大的子節點
    if (right < n && arr[right] > arr[largest])
        largest = right;

    // 如果最大的不是根    if (largest != i) {
        // 將找到的最大元素與根交換
        int temp = arr[i];
        arr[i] = arr[largest];
        arr[largest] = temp;

        // 遞歸地堆化受影響的子樹
        heapify(arr, n, largest);
    }
}

// 列印數組的函數
void printArray(int arr[], int n) {
    for (int i = 0; i < n; ++i)
        printf("%d ", arr[i]);
    printf("\n");
}

int main() {
    // 測試陣列
    int array[] = {14, 10, 18, 7, 5};
    int n = sizeof(array) / sizeof(array[0]);

    printf("Original Array: ");
    printArray(array, n);

    // 使用堆中的不同位置測試 heapify 函數
    for (int i = n / 2 - 1; i >= 0; i--) {
        printf("Heapify at position %d: ", i);
        heapify(array, n, i);
        printArray(array, n);
    }

    return 0;
}



鏡像的二元樹鏡像

// 包括必要的頭文件
#include <stdio.h>
#include <stdlib.h>

// 二元樹節點的結構
struct TreeNode {
    int data;
    struct TreeNode* left;
    struct TreeNode* right;
};

// 建立新節點的函數
struct TreeNode* createNode(int value) {
    struct TreeNode* newNode = (struct TreeNode*)malloc(sizeof(struct TreeNode));
    if (newNode != NULL) {
        newNode->data = value;
        newNode->left = NULL;
        newNode->right = NULL;
    }
    return newNode;
}

// 向二元樹插入節點的函數
struct TreeNode* insertNode(struct TreeNode* root, int value) {
    if (root == NULL) {
        return createNode(value);
    }

    if (value < root->data) {
        root->left = insertNode(root->left, value);
    } else if (value > root->data) {
        root->right = insertNode(root->right, value);
    }

    return root;
}

// 執行有序遍歷和列印元素的函數
void inOrderTraversal(struct TreeNode* root) {
    if (root != NULL) {
        inOrderTraversal(root->left);
        printf("%d ", root->data);
        inOrderTraversal(root->right);
    }
}

// 建立二元樹鏡像的函數
struct TreeNode* mirrorTree(struct TreeNode* root) {
    if (root == NULL) {
        return NULL;
    }

    // 交換左右子樹
    struct TreeNode* temp = root->left;
    root->left = mirrorTree(root->right);
    root->right = mirrorTree(temp);

    return root;
}

// 釋放為二元樹分配的記憶體的函數
void freeTree(struct TreeNode* root) {
    if (root != NULL) {
        freeTree(root->left);
        freeTree(root->right);
        free(root);
    }
}

int main() {
    struct TreeNode* root = NULL;
    int nodeValue;
    char choice;

    // 將節點插入二元樹
    do {
        printf("Input a value to insert into the binary tree (enter 0 to stop): ");
        scanf("%d", &nodeValue);

        if (nodeValue != 0) {
            root = insertNode(root, nodeValue);
        }

    } while (nodeValue != 0);

    //列印原始二元樹
    printf("\nOriginal Binary Tree (In-order Traversal): ");
    inOrderTraversal(root);
    printf("\n");

    // 建立並列印二元樹的鏡像
    struct TreeNode* mirroredRoot = mirrorTree(root);
    printf("\nMirrored Binary Tree (In-order Traversal): ");
    inOrderTraversal(mirroredRoot);
    printf("\n");

    // 釋放分配的記憶體
    freeTree(root);
    freeTree(mirroredRoot);

    return 0;
}

Postfix 表達式和求值的表達式樹

// 包括必要的頭文件
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

// 表達式樹中節點的結構
struct TreeNode {
    char data;
    struct TreeNode* left;
    struct TreeNode* right;
};

// 建立新節點的函數
struct TreeNode* createNode(char value) {
    struct TreeNode* newNode = (struct TreeNode*)malloc(sizeof(struct TreeNode));
    if (newNode != NULL) {
        newNode->data = value;
        newNode->left = NULL;
        newNode->right = NULL;
    }
    return newNode;
}

// 檢查字元是否為運算符的函數
int isOperator(char c) {
    return (c == '+' || c == '-' || c == '*' || c == '/');
}

// 從後綴表達式建立表達式樹的函數
struct TreeNode* buildExpressionTree(char postfix[]) {
    struct TreeNode* stack[100];
    int top = -1;

    for (int i = 0; postfix[i] != '\0'; i++) {
        struct TreeNode* newNode = createNode(postfix[i]);

        if (isdigit(postfix[i])) {
            stack[++top] = newNode;
        } else if (isOperator(postfix[i])) {
            newNode->right = stack[top--];
            newNode->left = stack[top--];
            stack[++top] = newNode;
        }
    }

    return stack[top];
}

// 計算表達式樹的函數
int evaluateExpressionTree(struct TreeNode* root) {
    if (root->data == '+') {
        return evaluateExpressionTree(root->left) + evaluateExpressionTree(root->right);
    } else if (root->data == '-') {
        return evaluateExpressionTree(root->left) - evaluateExpressionTree(root->right);
    } else if (root->data == '*') {
        return evaluateExpressionTree(root->left) * evaluateExpressionTree(root->right);
    } else if (root->data == '/') {
        return evaluateExpressionTree(root->left) / evaluateExpressionTree(root->right);
    } else {
        return root->data - '0'; // Convert character to integer
    }
}

// 執行表達式樹中序遍歷的函數
void inOrderTraversal(struct TreeNode* root) {
    if (root != NULL) {
        inOrderTraversal(root->left);
        printf("%c ", root->data);
        inOrderTraversal(root->right);
    }
}

// 釋放為表達式樹分配的記憶體的函數
void freeExpressionTree(struct TreeNode* root) {
    if (root != NULL) {
        freeExpressionTree(root->left);
        freeExpressionTree(root->right);
        free(root);
    }
}

int main() {
    char postfixExpression[100];
    
    // 輸入後綴表達式
    printf("Enter a postfix expression: ");
    scanf("%s", postfixExpression);

    // 建構表達式樹
    struct TreeNode* root = buildExpressionTree(postfixExpression);

    // 顯示表達式樹的中序遍歷
    printf("In-order Traversal of the Expression Tree: ");
    inOrderTraversal(root);
    printf("\n");

    // 評估並顯示結果
    int result = evaluateExpressionTree(root);
    printf("Result: %d\n", result);

    // 釋放分配的記憶體
    freeExpressionTree(root);

    return 0;
}

找出兩個數字之間的最大數字

#include <stdio.h>
#include <stdlib.h>

int main() {
    int fno, sno, *ptr1 = &fno, *ptr2 = &sno;

    printf("\n\n Pointer : Find the maximum number between two numbers :\n");
    printf("------------------------------------------------------------\n");

    printf(" Input the first number : ");
    scanf("%d", ptr1); // 讀取使用者的第一個數字並使用 ptr1 儲存它
    printf(" Input the second number : ");
    scanf("%d", ptr2); // 從用戶那裡讀取第二個數字並使用 ptr2 儲存它

    // 比較ptr1和ptr2指向的值,找出最大數
    if (*ptr1 > *ptr2) {
        printf("\n\n %d is the maximum number.\n\n", *ptr1); // 列印最大數量
    } else {
        printf("\n\n %d is the maximum number.\n\n", *ptr2); //列印最大數量
    }
	return 0;
}

儲存和檢索數組中的元素

#include <stdio.h>

int main() {
    int arr1[25], i, n;
    printf("\n\n Pointer : Store and retrieve elements from an array :\n");
    printf("------------------------------------------------------------\n");

    printf(" Input the number of elements to store in the array :");
    scanf("%d", &n); // 讀取要儲存在數組中的元素數量

    printf(" Input %d number of elements in the array :\n", n);
    for (i = 0; i < n; i++) {
        printf(" element - %d : ", i);
        scanf("%d", arr1 + i); // 使用指標算術讀取並儲存數組 arr1 中的“n”個元素
    }

    printf(" The elements you entered are : \n");
    for (i = 0; i < n; i++) {
        printf(" element - %d : %d \n", i, *(arr1 + i)); // 使用指標顯示儲存在陣列中的元素
    }
    return 0;
}

使用動態記憶體分配查找最大元素

#include <stdio.h>
#include <stdlib.h>

int main() {
    int i, n;
    float *element; // 指向float類型的指標來儲存元素

    printf("\n\n Pointer : Find the largest element using Dynamic Memory Allocation :\n");
    printf("-------------------------------------------------------------------------\n");

    // 輸入元素總數
    printf(" Input total number of elements (1 to 100): ");
    scanf("%d", &n);

    element = (float *)calloc(n, sizeof(float)); // 為“n”個元素分配內存

    if (element == NULL) {
        printf(" No memory is allocated."); // 如果記憶體分配失敗
        exit(0);
    }

    printf("\n");

    // 輸入“n”個數字並將它們動態儲存在分配的記憶體中
    for (i = 0; i < n; ++i) {
        printf(" Number %d: ", i + 1);
        scanf("%f", element + i);
    }

    // 求'n'個元素中最大的元素
    for (i = 1; i < n; ++i) {
        if (*element < *(element + i)) {
            *element = *(element + i); // 將最大元素儲存在第一個記憶體位置
        }
    }

    printf(" The Largest element is :  %.2f \n\n", *element); // 顯示找到的最大元素
    return 0;
}




w16 << Previous Next >> c_ex

Copyright © All rights reserved | This template is made with by Colorlib