C语言基础样例

一、我的环境
         Eclispe+Cygwin!
 
         网上应该有很多环境搭建资料的,多找找就成。Eclispe的话直接下C/C++版的就好。
 
二、样例内容

         C程序设计那本书的所有例子,不包括后面的题目-_-!

 
         内容的话可以先下附件的main.c看下,再决定是否下C_Samples.zip。
         之后可运行C_Samples\Release\C_Samples.exe,输入ls即可看到列表了。再打其名称,就是跑相应例子的方法了!
 
三、后记
         写的比较笨,将就下吧!
 
 
main.c
 

  1. /* 
  2.  * main.c 
  3.  * 
  4.  *  Created on: 2011-8-28 
  5.  *      Author: Join 
  6.  */ 
  7.  
  8. // 尖括号:先从系统类库开始查找 
  9. #include <stdio.h> 
  10. #include <string.h> 
  11.  
  12. // 引号:先从源文件目录开始查找 
  13. #include "mydef.h" 
  14.  
  15. // 控制台上输入有问题,需要直接打开exe文件。 
  16. int main() { 
  17.  
  18.     // 函数声明 
  19.     int execute(char *in, char *method[], int len); 
  20.  
  21.     printf("This is a C program.\n"); 
  22.  
  23.     // 方法名称数组 
  24.     char *method[] = { "eg1_3_sum""eg1_3_max""eg2_2_factorial"
  25.             "eg2_2_is_leap_year""eg2_2_poly_sum""eg2_2_is_prime"
  26.             "eg4_6_triangle_area""eg4_6_to_lower""eg4_6_solve_equation"
  27.             "eg5_5_solve_equation""eg5_5_freight""eg6_6_pi"
  28.             "eg6_6_fibonacci""eg6_6_prime""eg6_6_secret_code"
  29.             "eg7_1_fibonacci""eg7_1_sort""eg7_2_matrix_transpose"
  30.             "eg7_2_matrix_max""eg7_3_count_words""eg7_3_string_max"
  31.             "eg8_4_argument_order""eg8_5_solve_equation""eg8_6_factorial"
  32.             "eg8_6_hanoi""eg8_7_compare""eg8_7_average""eg8_7_indefinite"
  33.             "eg8_7_sort""eg8_7_max""eg9_1_one""eg9_1_two""eg9_1_three"
  34.             "eg9_1_four""eg9_1_five""eg9_3_six""eg10_2_visitInt"
  35.             "eg10_2_compare""eg10_2_swap""eg10_2_sort""eg10_3_arrayOut"
  36.             "eg10_3_inverse""eg10_3_sort""eg10_3_printfValue"
  37.             "eg10_3_printfValues""eg10_3_pValue""eg10_3_average"
  38.             "eg10_3_failure""eg10_4_strcopy""eg10_4_strcopy2"
  39.             "eg10_4_strcopy3""eg10_5_funcpointer""eg10_5_funcparam"
  40.             "eg10_6_failedStu""eg10_6_sortStrArray""eg10_7_pt2pt"
  41.             "eg11_5_voteCount""eg11_6_pt2Struct""eg11_6_arguStruct"
  42.             "eg11_7_simpleList""eg11_7_handleList""eg11_8_union"
  43.             "eg11_9_enum""eg12_2_getBit""eg12_2_moveBit""eg13_4_put"
  44.             "eg13_4_copy""eg13_4_save""eg13_4_read""eg13_5_rewind"
  45.             "eg13_5_fseek" }; 
  46.     // 数组长度 
  47.     int len = 71; 
  48.  
  49.     char str[20]; 
  50.     do { 
  51.         printf("\n$ "); 
  52.  
  53.         // 从控制台获取字符串 
  54.         scanf("%s", str); 
  55.  
  56.         /* 
  57.          * 释放缓冲区数据(防止之后的方法读入\n直接结束) 
  58.          * scanf()和getchar()函数是从输入流缓冲区 中读取值的,而并非从键盘(也就是终端)缓冲区读取。 
  59.          * 而读取时遇到回车(\n)而结束的,这个\n会一起读入输入流缓冲区的, 
  60.          * 所以第一次接受输入时取走字 符后会留下字符\n,这样第二次的读入函数直接从缓冲区中把\n取走了, 
  61.          * 显然读取成功了,所以不会再从终端读取!因此后面只要加上fflush(stdin)函数释放缓冲区数据就可以了. 
  62.          */ 
  63.         // fflush(stdin); 
  64.         /* 
  65.          * ps:在 scanf 函数后面加上‘fflush(stdin);’,把输入缓冲清空掉,其实是错的, 
  66.          * 因为C和C++的标准里从来没有定义过 fflush(stdin)。 
  67.          * 某些编译器(如VC6)支持用 fflush(stdin) 来清空输入缓冲, 
  68.          * 但是并非所有编译器都要支持这个功能(linux 下的 gcc 就不支持)。 
  69.          * 
  70.          * 所以最好:1、自己写代码来清空输入缓冲区(见eg3.c注释-其他-) 
  71.          * 2、“空格符”来处理缓冲区残余信息(见eg7_3_count_words) 
  72.          */ 
  73.  
  74.         // 执行处理 
  75.         int result = execute(str, method, len); 
  76.         if (0 == result) { 
  77.             // 返回0,跳出循环 
  78.             break
  79.         } else if (-1 == result) { 
  80.             // 返回-1,提示如下信息 
  81.             printf("找不到您输入的方法!\n"); 
  82.         } 
  83.     } while (1); 
  84.  
  85.     return EXIT_SUCCESS; 
  86.  
  87. // 由输入字符判断执行相应处理 
  88. int execute(char *in, char *method[], int len) { 
  89.  
  90.     // 输入等于"exit",返回0 
  91.     char *exit = "exit"
  92.     if (0 == strcmp(in, exit)) { 
  93.         return 0; 
  94.     } 
  95.  
  96.     int i = 0; 
  97.     // 输入等于"ls",显示所有方法名称 
  98.     char *ls = "ls"
  99.     if (0 == strcmp(in, ls)) { 
  100.         for (i = 0; i < len; i++) { 
  101.             printf("%-22s", method[i]); 
  102.             if (2 == i % 3) { 
  103.                 printf("\n"); 
  104.             } else { 
  105.                 printf(" "); 
  106.             } 
  107.         } 
  108.         if (len % 3 != 0) { 
  109.             printf("\n"); 
  110.         } 
  111.         return 1; 
  112.     } 
  113.  
  114.     // 函数声明 
  115.     void do_method(int i); 
  116.     // 遍历key数组,比较字符串 
  117.     for (i = 0; i < len; i++) { 
  118.         if (0 == strcmp(in, method[i])) { 
  119.             do_method(i); 
  120.             return 1; 
  121.         } 
  122.     } 
  123.  
  124.     return -1; 
  125.  
  126. // 执行相应方法 
  127. void do_method(int i) { 
  128.     switch (i) { 
  129.     case 0: 
  130.         // 求两数之和 
  131.         eg1_3_sum(123, 456); 
  132.         break
  133.     case 1: 
  134.         // 求2个数中较大者 
  135.         eg1_3_max(123, 456); 
  136.         break
  137.     case 2: 
  138.         // 求1x3x5x7x9x11 
  139.         eg2_2_factorial(11); 
  140.         break
  141.     case 3: 
  142.         // 判断是否是闰年 
  143.         eg2_2_is_leap_year(2008); 
  144.         break
  145.     case 4: 
  146.         // 求1-1/2+1/3-1/4+...+1/99-1/100 
  147.         eg2_2_poly_sum(100); 
  148.         break
  149.     case 5: 
  150.         // 判断是否是素数 
  151.         eg2_2_is_prime(345); 
  152.         break
  153.     case 6: 
  154.         // 输入三角形的边长,求三角形的面积 
  155.         eg4_6_triangle_area(3, 4, 5); 
  156.         break
  157.     case 7: 
  158.         // 输入一个大写字母,要求改用小写输出 
  159.         eg4_6_to_lower('B'); 
  160.         break
  161.     case 8: 
  162.         // 求ax^2+bx+c=0方程的根 
  163.         eg4_6_solve_equation(1, -4, 3); 
  164.         break
  165.     case 9: 
  166.         // 求ax^2+bx+c=0方程的解 
  167.         eg5_5_solve_equation(1, 2, 1); 
  168.         eg5_5_solve_equation(1, 2, 2); 
  169.         eg5_5_solve_equation(2, 6, 1); 
  170.         break
  171.     case 10: 
  172.         // 运费计算 
  173.         eg5_5_freight(100, 20, 300); 
  174.         break
  175.     case 11: 
  176.         // 用PI/4=1-1/3+1/5-1/7+...公式求PI的近似值 
  177.         eg6_6_pi(); 
  178.         break
  179.     case 12: 
  180.         // 求Fibonacci数列前40个数 
  181.         eg6_6_fibonacci(); 
  182.         break
  183.     case 13: 
  184.         // 求100~200间的全部素数 
  185.         eg6_6_prime(); 
  186.         break
  187.     case 14: 
  188.         // 译密码:英文字母变成其后4位 
  189.         eg6_6_secret_code(); 
  190.         break
  191.     case 15: 
  192.         // 用数组来处理Fibonacci数列问题 
  193.         eg7_1_fibonacci(); 
  194.         break
  195.     case 16: 
  196.         // 冒泡排序 
  197.         eg7_1_sort(); 
  198.         break
  199.     case 17: 
  200.         // 矩阵转置 
  201.         eg7_2_matrix_transpose(); 
  202.         break
  203.     case 18: 
  204.         // 求一个3x4矩阵中值最大的元素,及其行列号 
  205.         eg7_2_matrix_max(); 
  206.         break
  207.     case 19: 
  208.         // 统计单词 
  209.         eg7_3_count_words(); 
  210.         break
  211.     case 20: 
  212.         // 输入3个字符串,找出其中最大者 
  213.         eg7_3_string_max(); 
  214.         break
  215.     case 21: 
  216.         // 实参求值顺序 
  217.         eg8_4_argument_order(); 
  218.         break
  219.     case 22: 
  220.         // 函数嵌套调用:用弦截法求方程f(x)=x^3-5x^2+16x-80=0的根 
  221.         eg8_5_solve_equation(); 
  222.         break
  223.     case 23: 
  224.         // 用递归方法求n! 
  225.         eg8_6_factorial(); 
  226.         break
  227.     case 24: 
  228.         // Hanoi(汉塔)塔问题 
  229.         eg8_6_hanoi(); 
  230.         break
  231.     case 25: 
  232.         // 数组元素比较统计 
  233.         eg8_7_compare(); 
  234.         break
  235.     case 26: 
  236.         // 有一个一维数组score,内放10个学生成绩,求平均成绩 
  237.         eg8_7_average(); 
  238.         break
  239.     case 27: 
  240.         // 形参数组不定义长度 
  241.         eg8_7_indefinite(); 
  242.         break
  243.     case 28: 
  244.         // 用选择法对数组中10个整数按由小到大排序 
  245.         eg8_7_sort(); 
  246.         break
  247.     case 29: 
  248.         // 用选择法对数组中10个整数按由小到大排序 
  249.         eg8_7_max(); 
  250.         break
  251.     case 30: 
  252.         // 使用不带参数的宏定义 
  253.         eg9_1_one(); 
  254.         break
  255.     case 31: 
  256.         // 在宏定义中引用已定义的宏名 
  257.         eg9_1_two(); 
  258.         break
  259.     case 32: 
  260.         // 带参数的宏定义 
  261.         eg9_1_three(); 
  262.         break
  263.     case 33: 
  264.         // 通过宏展开得到若干个结果 
  265.         eg9_1_four(); 
  266.         break
  267.     case 34: 
  268.         // 用宏代表输出格式 
  269.         eg9_1_five(); 
  270.         break
  271.     case 35: 
  272.         // 输入一个字母字符,进行条件编译 
  273.         eg9_3_six(); 
  274.         break
  275.     case 36: 
  276.         // 通过指针变量访问整型变量 
  277.         eg10_2_visitInt(); 
  278.         break
  279.     case 37: 
  280.         // 输入a和b两个整数,按先大后小的顺序输出a和b 
  281.         eg10_2_compare(); 
  282.         break
  283.     case 38: 
  284.         // 指针类型的数据作为函数参数 
  285.         eg10_2_swap(); 
  286.         break
  287.     case 39: 
  288.         // 输入a,b,c这3个整数,按大小顺序输出 
  289.         eg10_2_sort(); 
  290.         break
  291.     case 40: 
  292.         // 输出数组中的全部元素 
  293.         eg10_3_arrayOut(); 
  294.         break
  295.     case 41: 
  296.         // 将数组a中n个整数按相反顺序存放 
  297.         eg10_3_inverse(); 
  298.         break
  299.     case 42: 
  300.         // 用选择法对10个整数按由大道小的顺序排序 
  301.         eg10_3_sort(); 
  302.         break
  303.     case 43: 
  304.         // 输出二维数组有关的值 
  305.         eg10_3_printfValue(); 
  306.         break
  307.     case 44: 
  308.         // 用指针变量输出二维数组元素的值 
  309.         eg10_3_printfValues(); 
  310.         break
  311.     case 45: 
  312.         // 输出二维数组任一行任一列元素的值 
  313.         eg10_3_pValue(); 
  314.         break
  315.     case 46: 
  316.         // 用函数average求总平均成绩,用函数search找出并输出第i个学生的成绩 
  317.         eg10_3_average(); 
  318.         break
  319.     case 47: 
  320.         // 查找有一门以上课程不及格的学生,输出他们的全部课程成绩 
  321.         eg10_3_failure(); 
  322.         break
  323.     case 48: 
  324.         // 将字符串a复制为字符串b(下标方法) 
  325.         eg10_4_strcopy(); 
  326.         break
  327.     case 49: 
  328.         // 将字符串a复制为字符串b(指针方法) 
  329.         eg10_4_strcopy2(); 
  330.         break
  331.     case 50: 
  332.         // 用函数调用实现字符串的复制 
  333.         eg10_4_strcopy3(); 
  334.         break
  335.     case 51: 
  336.         // 用函数指针变量调用函数 
  337.         eg10_5_funcpointer(); 
  338.         break
  339.     case 52: 
  340.         // 用指向函数的指针作函数参数 
  341.         eg10_5_funcparam(); 
  342.         break
  343.     case 53: 
  344.         // 找出其中不及格课程的学生及其学号 
  345.         eg10_6_failedStu(); 
  346.         break
  347.     case 54: 
  348.         // 将若干个字符串按字母顺序(由小到大)输出 
  349.         eg10_7_sortStrArray(); 
  350.         break
  351.     case 55: 
  352.         // 使用指向指针的指针 
  353.         eg10_7_pt2pt(); 
  354.         break
  355.     case 56: 
  356.         // 结构体数组:对候选人得票的统计程序 
  357.         eg11_5_voteCount(); 
  358.         break
  359.     case 57: 
  360.         // 指向结构体数组的指针 
  361.         eg11_6_pt2Struct(); 
  362.         break
  363.     case 58: 
  364.         // 用结构体变量和指向结构体的指针作函数参数 
  365.         eg11_6_arguStruct(); 
  366.         break
  367.     case 59: 
  368.         // 建立一个简单链表,输出各结点中的数据 
  369.         eg11_7_simpleList(); 
  370.         break
  371.     case 60: 
  372.         // 对表的综合操作 
  373.         eg11_7_handleList(); 
  374.         break
  375.     case 61: 
  376.         // 共用体:两人员数据,放入同一个表 
  377.         eg11_8_union(); 
  378.         break
  379.     case 62: 
  380.         // 枚举类型:5色球取出3个不同色的可能情况 
  381.         eg11_9_enum(); 
  382.         break
  383.     case 63: 
  384.         // 取一个整数a从右端开始的4~7位 
  385.         eg12_2_getBit(); 
  386.         break
  387.     case 64: 
  388.         // 循环移位 
  389.         eg12_2_moveBit(); 
  390.         break
  391.     case 65: 
  392.         // 从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个“#”为止 
  393.         eg13_4_put(); 
  394.         break
  395.     case 66: 
  396.         // 将一个磁盘文件中的信息复制到另一个磁盘文件中 
  397.         eg13_4_copy(); 
  398.         break
  399.     case 67: 
  400.         // 从键盘输入4个学生的数据,并转存到磁盘文件 
  401.         eg13_4_save(); 
  402.         break
  403.     case 68: 
  404.         // 从"stu_list"文件中读入数据,然后在屏幕上输出 
  405.         eg13_4_read(); 
  406.         break
  407.     case 69: 
  408.         // rewind函数:使位置指针重新返回文件的开头 
  409.         eg13_5_rewind(); 
  410.         break
  411.     case 70: 
  412.         // fseek函数和随机读写 
  413.         eg13_5_fseek(); 
  414.         break
  415.     } 
  416.