C语言基础样例
一、我的环境
Eclispe+Cygwin!
网上应该有很多环境搭建资料的,多找找就成。Eclispe的话直接下C/C++版的就好。
二、样例内容
C程序设计那本书的所有例子,不包括后面的题目-_-!
内容的话可以先下附件的main.c看下,再决定是否下C_Samples.zip。
之后可运行C_Samples\Release\C_Samples.exe,输入ls即可看到列表了。再打其名称,就是跑相应例子的方法了!
三、后记
写的比较笨,将就下吧!
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);
- break;
- case 2:
- // 求1x3x5x7x9x11
- eg2_2_factorial(11);
- break;
- case 3:
- // 判断是否是闰年
- eg2_2_is_leap_year(2008);
- break;
- case 4:
- // 求1-1/2+1/3-1/4+...+1/99-1/100
- eg2_2_poly_sum(100);
- break;
- case 5:
- // 判断是否是素数
- eg2_2_is_prime(345);
- break;
- case 6:
- // 输入三角形的边长,求三角形的面积
- eg4_6_triangle_area(3, 4, 5);
- break;
- case 7:
- // 输入一个大写字母,要求改用小写输出
- eg4_6_to_lower('B');
- break;
- case 8:
- // 求ax^2+bx+c=0方程的根
- eg4_6_solve_equation(1, -4, 3);
- break;
- 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);
- break;
- case 10:
- // 运费计算
- eg5_5_freight(100, 20, 300);
- break;
- case 11:
- // 用PI/4=1-1/3+1/5-1/7+...公式求PI的近似值
- eg6_6_pi();
- break;
- case 12:
- // 求Fibonacci数列前40个数
- eg6_6_fibonacci();
- break;
- case 13:
- // 求100~200间的全部素数
- eg6_6_prime();
- break;
- case 14:
- // 译密码:英文字母变成其后4位
- eg6_6_secret_code();
- break;
- case 15:
- // 用数组来处理Fibonacci数列问题
- eg7_1_fibonacci();
- break;
- case 16:
- // 冒泡排序
- eg7_1_sort();
- break;
- case 17:
- // 矩阵转置
- eg7_2_matrix_transpose();
- break;
- case 18:
- // 求一个3x4矩阵中值最大的元素,及其行列号
- eg7_2_matrix_max();
- break;
- case 19:
- // 统计单词
- eg7_3_count_words();
- break;
- case 20:
- // 输入3个字符串,找出其中最大者
- eg7_3_string_max();
- break;
- case 21:
- // 实参求值顺序
- eg8_4_argument_order();
- break;
- case 22:
- // 函数嵌套调用:用弦截法求方程f(x)=x^3-5x^2+16x-80=0的根
- eg8_5_solve_equation();
- break;
- case 23:
- // 用递归方法求n!
- eg8_6_factorial();
- break;
- case 24:
- // Hanoi(汉塔)塔问题
- eg8_6_hanoi();
- break;
- case 25:
- // 数组元素比较统计
- eg8_7_compare();
- break;
- case 26:
- // 有一个一维数组score,内放10个学生成绩,求平均成绩
- eg8_7_average();
- break;
- case 27:
- // 形参数组不定义长度
- eg8_7_indefinite();
- break;
- case 28:
- // 用选择法对数组中10个整数按由小到大排序
- eg8_7_sort();
- break;
- case 29:
- // 用选择法对数组中10个整数按由小到大排序
- eg8_7_max();
- break;
- case 30:
- // 使用不带参数的宏定义
- eg9_1_one();
- break;
- case 31:
- // 在宏定义中引用已定义的宏名
- eg9_1_two();
- break;
- case 32:
- // 带参数的宏定义
- eg9_1_three();
- break;
- case 33:
- // 通过宏展开得到若干个结果
- eg9_1_four();
- break;
- case 34:
- // 用宏代表输出格式
- eg9_1_five();
- break;
- case 35:
- // 输入一个字母字符,进行条件编译
- eg9_3_six();
- break;
- case 36:
- // 通过指针变量访问整型变量
- eg10_2_visitInt();
- break;
- case 37:
- // 输入a和b两个整数,按先大后小的顺序输出a和b
- eg10_2_compare();
- break;
- case 38:
- // 指针类型的数据作为函数参数
- eg10_2_swap();
- break;
- case 39:
- // 输入a,b,c这3个整数,按大小顺序输出
- eg10_2_sort();
- break;
- case 40:
- // 输出数组中的全部元素
- eg10_3_arrayOut();
- break;
- case 41:
- // 将数组a中n个整数按相反顺序存放
- eg10_3_inverse();
- break;
- case 42:
- // 用选择法对10个整数按由大道小的顺序排序
- eg10_3_sort();
- break;
- case 43:
- // 输出二维数组有关的值
- eg10_3_printfValue();
- break;
- case 44:
- // 用指针变量输出二维数组元素的值
- eg10_3_printfValues();
- break;
- case 45:
- // 输出二维数组任一行任一列元素的值
- eg10_3_pValue();
- break;
- case 46:
- // 用函数average求总平均成绩,用函数search找出并输出第i个学生的成绩
- eg10_3_average();
- break;
- case 47:
- // 查找有一门以上课程不及格的学生,输出他们的全部课程成绩
- eg10_3_failure();
- break;
- case 48:
- // 将字符串a复制为字符串b(下标方法)
- eg10_4_strcopy();
- break;
- case 49:
- // 将字符串a复制为字符串b(指针方法)
- eg10_4_strcopy2();
- break;
- case 50:
- // 用函数调用实现字符串的复制
- eg10_4_strcopy3();
- break;
- case 51:
- // 用函数指针变量调用函数
- eg10_5_funcpointer();
- break;
- case 52:
- // 用指向函数的指针作函数参数
- eg10_5_funcparam();
- break;
- case 53:
- // 找出其中不及格课程的学生及其学号
- eg10_6_failedStu();
- break;
- case 54:
- // 将若干个字符串按字母顺序(由小到大)输出
- eg10_7_sortStrArray();
- break;
- case 55:
- // 使用指向指针的指针
- eg10_7_pt2pt();
- break;
- case 56:
- // 结构体数组:对候选人得票的统计程序
- eg11_5_voteCount();
- break;
- case 57:
- // 指向结构体数组的指针
- eg11_6_pt2Struct();
- break;
- case 58:
- // 用结构体变量和指向结构体的指针作函数参数
- eg11_6_arguStruct();
- break;
- case 59:
- // 建立一个简单链表,输出各结点中的数据
- eg11_7_simpleList();
- break;
- case 60:
- // 对表的综合操作
- eg11_7_handleList();
- break;
- case 61:
- // 共用体:两人员数据,放入同一个表
- eg11_8_union();
- break;
- case 62:
- // 枚举类型:5色球取出3个不同色的可能情况
- eg11_9_enum();
- break;
- case 63:
- // 取一个整数a从右端开始的4~7位
- eg12_2_getBit();
- break;
- case 64:
- // 循环移位
- eg12_2_moveBit();
- break;
- case 65:
- // 从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个“#”为止
- eg13_4_put();
- break;
- case 66:
- // 将一个磁盘文件中的信息复制到另一个磁盘文件中
- eg13_4_copy();
- break;
- case 67:
- // 从键盘输入4个学生的数据,并转存到磁盘文件
- eg13_4_save();
- break;
- case 68:
- // 从"stu_list"文件中读入数据,然后在屏幕上输出
- eg13_4_read();
- break;
- case 69:
- // rewind函数:使位置指针重新返回文件的开头
- eg13_5_rewind();
- break;
- case 70:
- // fseek函数和随机读写
- eg13_5_fseek();
- break;
- }
- }
附件:http://down.51cto.com/data/2359756
本文转自winorlose2000 51CTO博客,原文链接:http://blog.51cto.com/vaero/773819,如需转载请自行联系原作者