美文网首页
【C语言 初级篇】快速入门

【C语言 初级篇】快速入门

作者: Linz先森 | 来源:发表于2018-06-05 21:39 被阅读0次
              持续更新...          持续更新...         持续更新...
    

    第一章

        1. 什么是计算机语言?

    计算机语言(Computer Language)指用于人与计算机之间通讯的语言。计算机语言是人与计算机之间传递信息的媒介。计算机系统最大特征是指令通过一种语言传达给机器。为了使电子计算机进行各种工作,就需要有一套用以编写计算机程序的数字、字符和语法规划,由这些字符和语法规则组成计算机各种指令(或各种语句)。这些就是计算机能接受的语言。

    如今通用的编程语言有两种形式:汇编语言和高级语言。

        汇编语言和机器语言实质是相同的,都是直接对硬件操作,只不过指令采用了英文缩写的标识符,容易识别和记忆。源程序经汇编生成的可执行文件不仅比较小,而且执行速度很快。
        高级语言是绝大多数编程者的选择。和汇编语言相比,它不但将许多相关的机器指令合成为单条指令,并且去掉了与具体操作有关但与完成工作无关的细节,例如使用堆栈、寄存器等,这样就大大简化了程序中的指令。同时,由于省略了很多细节,编程者也就不需要有太多的专业知识。

    归根结底编程语言可以分为两大类:解释类和编译类。

        (1)解释类:执行方式类似于我们日常生活中的“同声翻译”,应用程序源代码一边由相应语言的解释器“翻译”成目标代码(机器语言),一边执行,因此效率比较低,而且不能生成可独立执行的可执行文件,应用程序不能脱离其解释器,但这种方式比较灵活,可以动态地调整、修改应用程序。
        (2)编译类:编译是指在应用源程序执行之前,就将程序源代码“翻译”成目标代码(机器语言),因此其目标程序可以脱离其语言环境独立执行,使用比较方便、效率较高。但应用程序一旦需要修改,必须先修改源代码,再重新编译生成新的目标文件(*.OBJ)才能执行,只有目标文件而没有源代码,修改很不方便。如今大多数的编程语言都是编译型的,例如VisualBasic、VisualC++、VisualFoxpro、Delphi等。

    C语言是Dennis Ritchie在七十年代创建的,它功能更强大且与ALGOL保持更连续的继承性,而ALGOL则是COBOL和FORTRAN的结构化继承者。C语言被设计成一个比它的前辈更精巧、更简单的版本,它适于编写系统级的程序,比如操作系统。在此之前,操作系统是使用汇编语言编写的,而且不可移植。C语言是第一个使得系统级代码移植成为可能的编程语言。

        优点:有益于编写小而快的程序。很容易与汇编语言结合。具有很高的标准化,因此其他平台上的各版本非常相似。
        缺点:不容易支持面向对象技术。语法有时会非常难以理解,并造成滥用。
        移植性:C语言的核心以及ANSI函数调用都具有移植性,但仅限于流程控制、内存管理和简单的文件处理。其他的东西都跟平台有关。比如说,为Windows和Mac开发可移植的程序,用户界面部分就需要用到与系统相关的函数调用。这一般意味着你必须写两次用户界面代码,不过还好有一些库可以减轻工作量。

        2. C语言程序的结构

    //例1.2-1
    /*****头文件引用区********/
    #include <stdio.h>
    #include <string.h>
    /************************/
    /*******声明定义区********/
    char name[]="Linz";
    void country(char str[]);
    /************************/
    /*********主函数区********/
    int main()
    {
        printf("Hello World, I am %s!\n", name);
        country(name);
        return 0;
    } 
    /************************/
    /*******其他函数区********/
    void country(char str[])
    {
        if(!strcmp(name, "Linz"))
            printf("I come from China!\n");
    }
    /************************/
    

    通用结构总结为:头文件引用区(必要),声明定义区(可选),主函数区(必要)和其他函数区(可选)。

        3. 编译与运行

    无排名先后的常见开发环境

    1、Microsoft Visual C++
    2、Microsoft Visual Studio
    3、Win-TC
    4、Turbo C
    5、GCC
    6、DEV C++
    7、C-Free

    Linux下推荐使用GCC,Windows下推荐使用DEV C++。

        4. 什么是算法?

    算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。

    一个算法应该具有以下五个重要的特征:

    有穷性(Finiteness)
        算法的有穷性是指算法必须能在执行有限个步骤之后终止;
    确切性(Definiteness)
        算法的每一步骤必须有确切的定义;
    输入项(Input)
        一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件;
    输出项(Output)
        一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;
    可行性(Effectiveness)
        算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成(也称之为有效性)。

    算法可以宏泛的分为三类:

    有限的,确定性算法:这类算法在有限的一段时间内终止。他们可能要花很长时间来执行指定的任务,但仍将在一定的时间内终止。这类算法得出的结果常取决于输入值。
    有限的,非确定算法:这类算法在有限的时间内终止。然而,对于一个(或一些)给定的数值,算法的结果并不是唯一的或确定的。
    无限的算法:是那些由于没有定义终止定义条件,或定义的条件无法由输入的数据满足而不终止运行的算法。通常,无限算法的产生是由于未能确定的定义终止条件。

    详细来说可以大致分出以下类别:

    基本算法、数据结构的算法、数论与代数算法、计算几何的算法、图论的算法、动态规划以及数值分析、加密算法、排序算法、检索算法、随机化算法、并行算法,厄米变形模型,随机森林算法。


    第二章

        1. 数据类型简析

    由ANSI标准定义的C语言关键字共32个:

    • auto
    • double
    • int
    • struct
    • break
    • else
    • long
    • switch
    • case
    • enum
    • register
    • typedef
    • char
    • extern
    • return
    • union
    • const
    • float
    • short
    • unsigned
    • continue
    • for
    • signed
    • void
    • default
    • goto
    • sizeof
    • volatile
    • do
    • if
    • while
    • static

    根据关键字的作用,可以将关键字分为数据类型关键字流程控制关键字两大类。

    数据类型关键字

    A.基本数据类型(5个)
    void:声明函数无返回值或无参数,声明无类型指针,显式丢弃运算结果
    char:字符型类型数据,属于整型数据的一种
    int:整型数据,通常为编译器指定的机器字长
    float:单精度浮点型数据,属于浮点数据的一种
    double:双精度浮点型数据,属于浮点数据的一种
    B .类型修饰关键字(4个)
    short:修饰int,短整型数据,可省略被修饰的int。
    long:修饰int,长整形数据,可省略被修饰的int。
    signed:修饰整型数据,有符号数据类型
    unsigned:修饰整型数据,无符号数据类型
    C .复杂类型关键字(5个)
    struct:结构体声明
    union:共用体声明
    enum:枚举声明
    typedef:声明类型别名
    sizeof:得到特定类型或特定类型变量的大小
    D .存储级别关键字(6个)
    auto:指定为自动变量,由编译器自动分配及释放。通常在栈上分配
    static:指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部
    register:指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数
    extern:指定对应变量为外部变量,即标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。
    const:与volatile合称“cv特性”,指定变量不可被当前线程/进程改变(但有可能被系统或其他线程/进程改变)
    volatile:与const合称“cv特性”,指定变量的值有可能会被系统或其他进程/线程改变,强制编译器每次从内存中取得该变量的值

    流程控制关键字

    A .跳转结构(4个)
    return:用在函数体中,返回特定值(或者是void值,即不返回值)
    continue:结束当前循环,开始下一轮循环
    break:跳出当前循环或switch结构
    goto:无条件跳转语句
    B .分支结构(5个)
    if:条件语句,后面不需要放分号
    else:条件语句否定分支(与if连用)
    switch:开关语句(多重分支语句)
    case:开关语句中的分支标记
    default:开关语句中的“其他”分支,可选。
    C .循环结构(3个)
    for:循环结构,for({表达式1}; {表达式2}; {表达式3}) {表达式4};的执行顺序为{表达式1} -> {表达式2} -> {表达式4} -> {表达式3} -> {表达式2}...循环,其中{表达式2}为循环条件。在整个for循环过程中,{表达式1}只计算一次,{表达式2}和{表达式3}则可能计算多次,也可能一次也不计算。循环体可能多次执行,也可能一次都不执行。
    do:循环结构,do {表达式1} while({表达式2});的执行顺序是{表达式1} -> {表达式2} -> {表达式1}...循环,{表达式2}为循环条件
    while:循环结构,while({表达式1}) {表达式2};的执行顺序是{表达式1} -> {表达式2} -> {表达式1}...循环,{表达式1}为循环条件

    32位的系统上:
    short占据的内存大小是2个byte;
    int占据的内存大小是4个byte;
    long占据的内存大小是4个byte;
    float占据的内存大小是4个byte;
    double占据的内存大小是8个byte;
    char占据的内存大小是1个byte;

    64位的系统上:
    short占据的内存大小是2个byte;
    int占据的内存大小是4个byte;
    long占据的内存大小是8个byte;
    float占据的内存大小是4个byte;
    double占据的内存大小是8个byte;
    char占据的内存大小是1个byte;

    如何定义变量?

    {数据类型} + {变量名[=初始值]} + ;(半角分号)
        int a = 0;
        int b;

    变量名规则:

    在程序设计中,变量名、函数名、数组名等统称为标识符。简单地说,标识符就是一个名字。C语言规定,标识符只能由字母(a~z,A~Z)、数字 (0~9)、下划线(_)组成,并且标识符的第一个字符必须是字母或下划线,不能以数字开头。C语言不限制标识符的长度,但它受各种C语言编译器的限制, 同时也受到具体机器的限制。例如,在某编译器中规定标识符前8位有效,当两个标识符前8位相同时,则被认为是同一个标识符。所以建议变量名的长度最好不要超过 8个字符。

    以下标识符是合法的:
    i、a、count、number_of_book、BOOK_NUMBER、sum100、_total
    以下标识符是非法的
    3com:以数字开头
    char:这是C语言的一个数据类型,是关键字,不能作为标识符
    a*b:星号不能作为标识符的字符。
    number of book:标识符中不能有空格。
    注意:C语言是区分大小写的,如Count与count被认为是两个不同的标识符。

        2. 赋值语句

    //例2.2-1
    #include <stdio.h>
    #include <stdlib.h>
    
    void sort(int* a, int len)
    {
        if(len <= 1) return;
        int i=0, j=len-1, temp=a[0];
        while(i < j)
        {
            while(a[j]>temp && i<j) j--; a[i] = a[j];
            while(a[i]<=temp && i<j) i++; a[j] = a[i];
        }
        a[i] = temp;
        sort(a, i);
        sort(a+i+1, len-i-1);
        return;
    }
    
    int main(void) 
    {
        int i, n;
        
        printf("Please import the amount of numbers:");
        scanf("%d", &n);
        if(n < 1) exit(0);
        
        int *numbers=NULL;
        numbers = (int*)malloc(n * sizeof(int));
        if(numbers == NULL) exit(0);
        
        printf("Please import %d numbers, which are separated by space:", n);   
        for(i=0; i<n; i++)
        {
            scanf("%d", &numbers[i]);
        }
        
        sort(numbers, n);
        
        for(i=0; i<n; i++)
        {
            printf("%d ", numbers[i]);
        }
        
        free(numbers);
        
        return 0;
    }
    

    以上这个例子是相对比较复杂的,它的功能是让数字按照小到大的顺序排列。

    实际运行效果
    其中的赋值语句:
    int i=0, j=len-1, temp=a[0];
    a[i] = a[j];
    a[j] = a[i];
    a[i] = temp;
    int *numbers=NULL;
    numbers = (int*)malloc(n * sizeof(int));
    总结一下,赋值语句就是通过等号将右边的内容赋值给左边的变量。
    需要注意的是,等号左边不能出现只读变量(常量)、表达式、数值!

        3. 数据的交互

    当计算机运行程序的时候,编程人员可以发出指令控制该程序的运行,而不是程序单方面执行下去,程序在接受到编程人员相应的指令后而相应地做出反应,这一过程及行为,我们称之为交互

    所以在这里数据的交互主要指:
        如何向程序填充一些数据?
        如何在屏幕上、打印机上或任意文件中显示一些数据?

    a. scanf() 和 printf() 函数

    这两个函数主要用于格式化的输入与输出情况下,也是C语言程序交互中最常见的两个函数。通过这两个函数用户可以按照一定格式进行数据输入,程序也可以依据一定格式进行数据输出。
    函数原型:
        int scanf(const char *format, ...)
        函数从标准输入流stdin读取输入,并根据提供的 format 来浏览输入。
        int printf(const char *format, ...)
        函数把输出写入到标准输出流stdout,并根据提供的格式产生输出。
    如何使用:

    //例2-3.1
    #include <stdio.h>
    
    char name[]="Linz";
    float n=3.1415;
    int a=2, b=22;
    
    int main()
    {
        printf("Hello World!\n");
        printf("Hello World, I am %s!\n", name);
        printf("%.2f, %.4f\n", n, n);
        printf("%d, %d, ()\n", b, b);
        printf("%2d, %d, ()\n", a, a);
        printf("%2d, %-2d, ()\n", a, a);
    
        return 0;
    }
    
    //例2-3.2
    #include <stdio.h>
    
    char name[1];
    float n;
    int a,  b;
    
    int main()
    {
        scanf("the number is %d .", &a);
        fflush(stdin);
        printf("%d\n", a);
        scanf("my name is %s .", name);
        fflush(stdin);
        printf("%s\n", name);
        scanf("%d%s", &b, name);
        fflush(stdin);
        printf("%d, %s\n", b, name);
        
        return 0;
    }
    
    格式符 解析方式
    %hd 有符号十进制短整数(short)
    %hu 无符号十进制短整数(unsinged short)
    %d 有符号十进制整数(int或者long)
    %lld 有符号十进制整数(long long)
    %o 无符号八进制整数
    %x/%X 无符号十六进制整数
    %u 无符号十进制整数
    %llu 无符号十进制整数(long long)
    %c 字符
    %s 字符串
    %p 指针地址
    %f 浮点数
    %a 十六进制浮点数
    %e/%E 指数形式的浮点数
    %g 与f和e相比宽度更小的浮点数
    b. getchar() & putchar() 函数

    这两个函数主要用于读入或输出一个字符的情况下使用的,getchar从标准输入缓冲区读取一个字符,putchar则是输出一个字符到终端上。
    函数原型:
        int getchar(void);
        函数从标准输入流stdin读取输入一个字符。
        int putchar(int c);
        函数把一个字符输出写入到标准输出流stdout中。
    如何使用:

    //例2-3.3
    #include <stdio.h>
    
    int main() 
    { 
        char c,d,e,f; 
        printf("please input two characters:\n"); 
        c = getchar(); 
        putchar(c); 
        putchar('\n'); 
        d = getchar(); 
        putchar(d); 
        putchar('\n'); 
        e = getchar(); 
        putchar(e); 
        putchar('\n'); 
        f = getchar(); 
        putchar(f); 
        putchar('\n'); 
        printf("c= %c\n",c); 
        printf("d= %c\n",d); 
        printf("e= %c\n",e); 
        printf("f= %c\n",f); 
    
        return 0;
    } 
    
    c. 其他输入输出函数:

    gets() & puts() 函数
    fgets() & fputs() 函数
    fread() & fwrite() 函数


    第三章

        1. if选择结构入门

        2. if选择结构进阶

        3. 条件运算符和条件表达式

        4. switch多分支选择结构


    第四章

        1. for循环结构入门

        2. for循环结构 进阶

        3. 其他循环实现的方式

        4. 如何改变循环执行的状态


    第五章

        1. 怎样定义函数

        2. 怎样调用函数

        3. 函数的返回值

        4. 局部变量和全局变量

        5. 函数的嵌套调用


    第六章

        1. 一维数组的定义和使用

        2. 字符数组的定义和使用

        3. 字符串的定义和使用

        4. 二维数组的定义和使用


    第七章

        1. 头文件结构

        2. 头文件的引用

        3. 多文件函数定义与调用

        4. 外部函数与内部函数


        By Linz

    相关文章

      网友评论

          本文标题:【C语言 初级篇】快速入门

          本文链接:https://www.haomeiwen.com/subject/utamsftx.html