<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 <stdio.h>
#include <string.h>
// 引号:先從源檔案目錄開始查找
#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 < 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 < 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,如需轉載請自行聯系原作者