天天看點

C語言基礎樣例

 <b>C</b><b>語言基礎樣例</b>

<b>一、我的環境</b>

         Eclispe+Cygwin!

         網上應該有很多環境搭建資料的,多找找就成。Eclispe的話直接下C/C++版的就好。

<b>二、樣例内容</b>

         C程式設計那本書的所有例子,不包括後面的題目-_-!

         内容的話可以先下附件的main.c看下,再決定是否下C_Samples.zip。

         之後可運作C_Samples\Release\C_Samples.exe,輸入ls即可看到清單了。再打其名稱,就是跑相應例子的方法了!

<b>三、後記</b>

         寫的比較笨,将就下吧!

main.c

/* 

 * main.c 

 * 

 *  Created on: 2011-8-28 

 *      Author: Join 

 */ 

// 尖括号:先從系統類庫開始查找 

#include &lt;stdio.h&gt; 

#include &lt;string.h&gt; 

// 引号:先從源檔案目錄開始查找 

#include "mydef.h" 

// 控制台上輸入有問題,需要直接打開exe檔案。 

int main() { 

    // 函數聲明 

    int execute(char *in, char *method[], int len); 

    printf("This is a C program.\n"); 

    // 方法名稱數組 

    char *method[] = { "eg1_3_sum", "eg1_3_max", "eg2_2_factorial", 

            "eg2_2_is_leap_year", "eg2_2_poly_sum", "eg2_2_is_prime", 

            "eg4_6_triangle_area", "eg4_6_to_lower", "eg4_6_solve_equation", 

            "eg5_5_solve_equation", "eg5_5_freight", "eg6_6_pi", 

            "eg6_6_fibonacci", "eg6_6_prime", "eg6_6_secret_code", 

            "eg7_1_fibonacci", "eg7_1_sort", "eg7_2_matrix_transpose", 

            "eg7_2_matrix_max", "eg7_3_count_words", "eg7_3_string_max", 

            "eg8_4_argument_order", "eg8_5_solve_equation", "eg8_6_factorial", 

            "eg8_6_hanoi", "eg8_7_compare", "eg8_7_average", "eg8_7_indefinite", 

            "eg8_7_sort", "eg8_7_max", "eg9_1_one", "eg9_1_two", "eg9_1_three", 

            "eg9_1_four", "eg9_1_five", "eg9_3_six", "eg10_2_visitInt", 

            "eg10_2_compare", "eg10_2_swap", "eg10_2_sort", "eg10_3_arrayOut", 

            "eg10_3_inverse", "eg10_3_sort", "eg10_3_printfValue", 

            "eg10_3_printfValues", "eg10_3_pValue", "eg10_3_average", 

            "eg10_3_failure", "eg10_4_strcopy", "eg10_4_strcopy2", 

            "eg10_4_strcopy3", "eg10_5_funcpointer", "eg10_5_funcparam", 

            "eg10_6_failedStu", "eg10_6_sortStrArray", "eg10_7_pt2pt", 

            "eg11_5_voteCount", "eg11_6_pt2Struct", "eg11_6_arguStruct", 

            "eg11_7_simpleList", "eg11_7_handleList", "eg11_8_union", 

            "eg11_9_enum", "eg12_2_getBit", "eg12_2_moveBit", "eg13_4_put", 

            "eg13_4_copy", "eg13_4_save", "eg13_4_read", "eg13_5_rewind", 

            "eg13_5_fseek" }; 

    // 數組長度 

    int len = 71; 

    char str[20]; 

    do { 

        printf("\n$ "); 

        // 從控制台擷取字元串 

        scanf("%s", str); 

        /* 

         * 釋放緩沖區資料(防止之後的方法讀入\n直接結束) 

         * scanf()和getchar()函數是從輸入流緩沖區 中讀取值的,而并非從鍵盤(也就是終端)緩沖區讀取。 

         * 而讀取時遇到回車(\n)而結束的,這個\n會一起讀入輸入流緩沖區的, 

         * 是以第一次接受輸入時取走字 符後會留下字元\n,這樣第二次的讀入函數直接從緩沖區中把\n取走了, 

         * 顯然讀取成功了,是以不會再從終端讀取!是以後面隻要加上fflush(stdin)函數釋放緩沖區資料就可以了. 

         */ 

        // fflush(stdin); 

         * ps:在 scanf 函數後面加上‘fflush(stdin);’,把輸入緩沖清空掉,其實是錯的, 

         * 因為C和C++的标準裡從來沒有定義過 fflush(stdin)。 

         * 某些編譯器(如VC6)支援用 fflush(stdin) 來清空輸入緩沖, 

         * 但是并非所有編譯器都要支援這個功能(linux 下的 gcc 就不支援)。 

         * 

         * 是以最好:1、自己寫代碼來清空輸入緩沖區(見eg3.c注釋-其他-) 

         * 2、“空格符”來處理緩沖區殘餘資訊(見eg7_3_count_words) 

        // 執行處理 

        int result = execute(str, method, len); 

        if (0 == result) { 

            // 傳回0,跳出循環 

            break; 

        } else if (-1 == result) { 

            // 傳回-1,提示如下資訊 

            printf("找不到您輸入的方法!\n"); 

        } 

    } while (1); 

    return EXIT_SUCCESS; 

// 由輸入字元判斷執行相應處理 

int execute(char *in, char *method[], int len) { 

    // 輸入等于"exit",傳回0 

    char *exit = "exit"; 

    if (0 == strcmp(in, exit)) { 

        return 0; 

    } 

    int i = 0; 

    // 輸入等于"ls",顯示所有方法名稱 

    char *ls = "ls"; 

    if (0 == strcmp(in, ls)) { 

        for (i = 0; i &lt; len; i++) { 

            printf("%-22s", method[i]); 

            if (2 == i % 3) { 

                printf("\n"); 

            } else { 

                printf(" "); 

            } 

        if (len % 3 != 0) { 

            printf("\n"); 

        return 1; 

    void do_method(int i); 

    // 周遊key數組,比較字元串 

    for (i = 0; i &lt; len; i++) { 

        if (0 == strcmp(in, method[i])) { 

            do_method(i); 

            return 1; 

    return -1; 

// 執行相應方法 

void do_method(int i) { 

    switch (i) { 

    case 0: 

        // 求兩數之和 

        eg1_3_sum(123, 456); 

        break; 

    case 1: 

        // 求2個數中較大者 

        eg1_3_max(123, 456); 

    case 2: 

        // 求1x3x5x7x9x11 

        eg2_2_factorial(11); 

    case 3: 

        // 判斷是否是閏年 

        eg2_2_is_leap_year(2008); 

    case 4: 

        // 求1-1/2+1/3-1/4+...+1/99-1/100 

        eg2_2_poly_sum(100); 

    case 5: 

        // 判斷是否是素數 

        eg2_2_is_prime(345); 

    case 6: 

        // 輸入三角形的邊長,求三角形的面積 

        eg4_6_triangle_area(3, 4, 5); 

    case 7: 

        // 輸入一個大寫字母,要求改用小寫輸出 

        eg4_6_to_lower('B'); 

    case 8: 

        // 求ax^2+bx+c=0方程的根 

        eg4_6_solve_equation(1, -4, 3); 

    case 9: 

        // 求ax^2+bx+c=0方程的解 

        eg5_5_solve_equation(1, 2, 1); 

        eg5_5_solve_equation(1, 2, 2); 

        eg5_5_solve_equation(2, 6, 1); 

    case 10: 

        // 運費計算 

        eg5_5_freight(100, 20, 300); 

    case 11: 

        // 用PI/4=1-1/3+1/5-1/7+...公式求PI的近似值 

        eg6_6_pi(); 

    case 12: 

        // 求Fibonacci數列前40個數 

        eg6_6_fibonacci(); 

    case 13: 

        // 求100~200間的全部素數 

        eg6_6_prime(); 

    case 14: 

        // 譯密碼:英文字母變成其後4位 

        eg6_6_secret_code(); 

    case 15: 

        // 用數組來處理Fibonacci數列問題 

        eg7_1_fibonacci(); 

    case 16: 

        // 冒泡排序 

        eg7_1_sort(); 

    case 17: 

        // 矩陣轉置 

        eg7_2_matrix_transpose(); 

    case 18: 

        // 求一個3x4矩陣中值最大的元素,及其行列号 

        eg7_2_matrix_max(); 

    case 19: 

        // 統計單詞 

        eg7_3_count_words(); 

    case 20: 

        // 輸入3個字元串,找出其中最大者 

        eg7_3_string_max(); 

    case 21: 

        // 實參求值順序 

        eg8_4_argument_order(); 

    case 22: 

        // 函數嵌套調用:用弦截法求方程f(x)=x^3-5x^2+16x-80=0的根 

        eg8_5_solve_equation(); 

    case 23: 

        // 用遞歸方法求n! 

        eg8_6_factorial(); 

    case 24: 

        // Hanoi(漢塔)塔問題 

        eg8_6_hanoi(); 

    case 25: 

        // 數組元素比較統計 

        eg8_7_compare(); 

    case 26: 

        // 有一個一維數組score,内放10個學生成績,求平均成績 

        eg8_7_average(); 

    case 27: 

        // 形參數組不定義長度 

        eg8_7_indefinite(); 

    case 28: 

        // 用選擇法對數組中10個整數按由小到大排序 

        eg8_7_sort(); 

    case 29: 

        eg8_7_max(); 

    case 30: 

        // 使用不帶參數的宏定義 

        eg9_1_one(); 

    case 31: 

        // 在宏定義中引用已定義的宏名 

        eg9_1_two(); 

    case 32: 

        // 帶參數的宏定義 

        eg9_1_three(); 

    case 33: 

        // 通過宏展開得到若幹個結果 

        eg9_1_four(); 

    case 34: 

        // 用宏代表輸出格式 

        eg9_1_five(); 

    case 35: 

        // 輸入一個字母字元,進行條件編譯 

        eg9_3_six(); 

    case 36: 

        // 通過指針變量通路整型變量 

        eg10_2_visitInt(); 

    case 37: 

        // 輸入a和b兩個整數,按先大後小的順序輸出a和b 

        eg10_2_compare(); 

    case 38: 

        // 指針類型的資料作為函數參數 

        eg10_2_swap(); 

    case 39: 

        // 輸入a,b,c這3個整數,按大小順序輸出 

        eg10_2_sort(); 

    case 40: 

        // 輸出數組中的全部元素 

        eg10_3_arrayOut(); 

    case 41: 

        // 将數組a中n個整數按相反順序存放 

        eg10_3_inverse(); 

    case 42: 

        // 用選擇法對10個整數按由大道小的順序排序 

        eg10_3_sort(); 

    case 43: 

        // 輸出二維數組有關的值 

        eg10_3_printfValue(); 

    case 44: 

        // 用指針變量輸出二維數組元素的值 

        eg10_3_printfValues(); 

    case 45: 

        // 輸出二維數組任一行任一列元素的值 

        eg10_3_pValue(); 

    case 46: 

        // 用函數average求總平均成績,用函數search找出并輸出第i個學生的成績 

        eg10_3_average(); 

    case 47: 

        // 查找有一門以上課程不及格的學生,輸出他們的全部課程成績 

        eg10_3_failure(); 

    case 48: 

        // 将字元串a複制為字元串b(下标方法) 

        eg10_4_strcopy(); 

    case 49: 

        // 将字元串a複制為字元串b(指針方法) 

        eg10_4_strcopy2(); 

    case 50: 

        // 用函數調用實作字元串的複制 

        eg10_4_strcopy3(); 

    case 51: 

        // 用函數指針變量調用函數 

        eg10_5_funcpointer(); 

    case 52: 

        // 用指向函數的指針作函數參數 

        eg10_5_funcparam(); 

    case 53: 

        // 找出其中不及格課程的學生及其學号 

        eg10_6_failedStu(); 

    case 54: 

        // 将若幹個字元串按字母順序(由小到大)輸出 

        eg10_7_sortStrArray(); 

    case 55: 

        // 使用指向指針的指針 

        eg10_7_pt2pt(); 

    case 56: 

        // 結構體數組:對候選人得票的統計程式 

        eg11_5_voteCount(); 

    case 57: 

        // 指向結構體數組的指針 

        eg11_6_pt2Struct(); 

    case 58: 

        // 用結構體變量和指向結構體的指針作函數參數 

        eg11_6_arguStruct(); 

    case 59: 

        // 建立一個簡單連結清單,輸出各結點中的資料 

        eg11_7_simpleList(); 

    case 60: 

        // 對表的綜合操作 

        eg11_7_handleList(); 

    case 61: 

        // 共用體:兩人員資料,放入同一個表 

        eg11_8_union(); 

    case 62: 

        // 枚舉類型:5色球取出3個不同色的可能情況 

        eg11_9_enum(); 

    case 63: 

        // 取一個整數a從右端開始的4~7位 

        eg12_2_getBit(); 

    case 64: 

        // 循環移位 

        eg12_2_moveBit(); 

    case 65: 

        // 從鍵盤輸入一些字元,逐個把它們送到磁盤上去,直到輸入一個“#”為止 

        eg13_4_put(); 

    case 66: 

        // 将一個磁盤檔案中的資訊複制到另一個磁盤檔案中 

        eg13_4_copy(); 

    case 67: 

        // 從鍵盤輸入4個學生的資料,并轉存到磁盤檔案 

        eg13_4_save(); 

    case 68: 

        // 從"stu_list"檔案中讀入資料,然後在螢幕上輸出 

        eg13_4_read(); 

    case 69: 

        // rewind函數:使位置指針重新傳回檔案的開頭 

        eg13_5_rewind(); 

    case 70: 

        // fseek函數和随機讀寫 

        eg13_5_fseek(); 

<a href="http://down.51cto.com/data/2359756" target="_blank">附件:http://down.51cto.com/data/2359756</a>

     本文轉自winorlose2000 51CTO部落格,原文連結:http://blog.51cto.com/vaero/773819,如需轉載請自行聯系原作者

繼續閱讀