从零开始学习C语言(1)

19 篇文章 0 订阅

C语言简介:

    BCPL->newB->C->UNIX->Minix->Linux->gcc

    C语言诞生于1970-1973年,在肯.汤普逊和丹尼斯.里奇的主导编写下完成,归属于美国贝尔实验室。

    C语言专门为了编写操作系统而诞生的语言,所以天生适合硬件编程,以运行速度快著称,也非常适合实现数据结构与算法。

    由于出现的时间过早,C语言是存在非常多缺陷,也没想到普通人也能使用C语言编程,因此就存在陷阱,但是前辈们总结了一些避免的经验《C语言的陷阱与缺陷》C语言三剑客

    C语言的语法很自由,也意味着危险,自由源于自律

    

    C89语法标准,gcc默认的语法标准

    C99语法标准,对C89标准的扩展和增强 -std=gnu99 

    C11语法标准,全新的升级

复习:

    1、常用的Linux命令

        ls cd pwd cat head tail more clear rm touch mv cp mkdir rmdir whoami ifconfig ping grep find chmod sudo man

        

        tar ftp ssh telnet vim

    2、vim文本编辑器

        vi是系统自带的文本编辑器,vim是它的增强版

        三大模式:正常、插入、行底

        切换方式:i Esc :

        正常模式下的操作:

            光标:gg G nG n- vim file +n

            删除:

                x nx dw dd ndd d$ d^ dG dgg

            复制:

                yy nyy p P

            替换:

                r cw R

            撤销:

                u ctrl+r

            进入插入模式:

                i\a\I\A\o\O

            ctrl+p  自动补全头文件、main

        插入模式下:

            jj Esc ctrl+c

            ctrl+z  保存并退出

            ctrl+p  自动补齐标识符

            ctrl+x  保存编译运行

        行底模式下:

            set nu  

            set nonu

            %s/old/new

            !cmd

            >n

            <n

            /key n向下 N向上

            w

            q

            wq  x

            X

    3、C语言简介

        美国贝尔实验室,1970-1973年,肯.汤普逊、丹尼斯.里奇

        C89 C99 C11 gcc默认C89 -std=gnu99

-----------------------------

一、第一个C程序

    #include <stdio.h>

    程序员所编写的代码并不是标准的C代码,需要一段程序把它翻译成标准的C代码,负责翻译的程序叫做预处理器,翻译的过程叫做预处理,被翻译的代码叫做预处理指令,以#开头的代码都是预处理指令

        #include  的功能是把一个头文件导入到当前文件中

        #include <> 从系统指定的路径下加载头文件

        #include "" 先从当前路径下加载头文件,如果找不到,再从系统指定的路径下加载头文件

        操作系统是通过设置环境变量来指定加载头文件的路径

    stdio.h

        头文件:以.h结尾,里面存储的是一些辅助性的代码,绝大部分是函数的声明

        源文件:以.c结尾,里面存储的是功能性的代码

        C语言标准委员会为C语言以函数的形式提供了一些基础功能,这些函数就被封装到了libc.so库文件中

        用很多头文件负责对库中的函数进行分类说明,stdio.h就是其中的一个,常用的还有stdlib.h string.h

        stdio.h 负责对输入输出功能的函数进行说明

        

    int main()

    {

        printf("Hello World!\n");

        return 0;

    }

    main函数:

    C语言以函数为单位来管理代码,是管理代码的最小单位,一个函数就是一段具有某项功能的代码段

    main函数是程序的执行入口,有且只有一个

    int 是一种数据类型,它表示main函数的执行结果是一个整数

    return 功能有两个:1、结束函数的执行 2、f返回一个数据给函数的调用者

    main函数是由操作系统调用,它的返回值给操作系统的,反映了程序是怎么样结束的,通常有三种情况:

        正数    出现异常   (别人的错误)

        0       一切正常

        负数    出现错误    (自己的错误)

    可以通过 echo $? 命令查看上一个程序的返回值

    printf/scanf 是标准库中的函数,负责输入、输出数据,用来调试代码

    printf("------------\n");

    转义字符:

        键盘上一些按键是没有符号的,用一些特殊的字符组合来表示,这些特殊字符组合就是转义字符,\n就是其中一个

        \n  换行

        \b  退一个字符

        \r  回到行首

        \t  制表符,用于对齐数据

        \a  铃响

        \\  表示一个\

        %%  表示一个%

    C语言以分号作为一行代码的结束,使用大括号划分代码区域

二、编译器

    负责把人能看得懂的记录了代码的文本文件,翻译成计算机能看懂的二进制文件,由预处理器、编译器、链接器

    gcc是由GNU组织为了编译Linux内核代码而开发的一款免费、开源的编译器,默认采用c89标准,-std=gnu99可以设置语法标准

        常用的参数:

            -E 显示预处理的结果

            -S  生成汇编代码

            -c  只编译不链接

            -o  设置编译结果的名字

            -I  指定头文件的加载路径 

            -l  指定要使用的库文件 -lm 

            -Wall   以更严格的标准来检查代码,尽可能多地显示警告

            -Werror 把警告当错误处理

三、C代码变成可执行程序的过程

    1、预处理   把源文件翻译成预处理文件

        gcc -E code.c   显示预处理结果

        gcc -E code.c -o code.i 生成以.i结尾的预处理文件

    2、编译     把预处理文件翻译成汇编文件

        gcc -S code.i   生成以.s结尾的汇编文件

    3、汇编     把汇编文件翻译成二进制的目标文件

        gcc -c code.s   生成以.o结尾的目标文件

    4、链接     把若干个目标文件合并成一个可执行文件

        gcc A.o B.o C.o...  默认生成一个a.out的可执行文件

    

    C语言的文件类型:

        .h  头文件

        .h.gch  头文件的编译结果,它会被优先使用

        .c  源文件

        .i  预处理文件

        .s  汇编文件

        .o  目标文件

        .a  静态库文件

        .so 共享库文件

四、数据类型

    为什么要对数据进行分类:

        1、现实社会中的数据就是自带类别属性

        2、对数据进行分类可以节约存储空间、提高运行效率

    

    存储空间的单位:

    Bit 比特 一个二进制位,只能存储0或者1,计算机存储数据的最小单位

    Byte 字节 八个二进制位,计算机存储数据的基本单位

    Kb  1024字节

    Mb  1024Kb

    Gb  1024Mb

    Tb  1024Gb

    Pb  1024Tb

    c语言中数据分为两大类:自建(程序员自己设计的:结构、联合、类)和内建(c语言自带的)

    注意:可以使用sizeof运算符计算类型的字节数

    整型:

        有符号 signed

            signed char         1      -128~127 

            signed short        2   -32768~32767

            signed int          4      正负20亿

            signed long         4/8

            signed long long    8   正负9开头19位整数

        

        注意:signed 不加就代表加

        无符号 unsigned

            unsigned char         1     0~255

            unsigned short        2     0~65535

            unsigned int          4     0~40亿

            unsigned long         4/8   

            unsigned long long    8     0~以1开头的20位整数

        注意:由于定义无符号数据时比较麻烦,标准库把这些无符号的类型重新定义成了以下类型:

            使用时需要包含头文件:stdint.h

            uint8_t uint16_t uint32_t uint64_t

            int8_t  int16_t int32_t int64_t

    浮点型: 

        float          4        

        double         8

        long double   12/16

        注意:采用科学计算方法,二进制与真实数据之间需要进行换算,因此浮点型数据耗时要比整型数据多得多,编程时尽量选择整型

        小数点后六位有效

        

        time ./a.out 计算程序运行时间

    模拟型:

        字符型char

            字符其实就是符号或图案,内存中存储的是整数,当需要显示成字符时会根据ASCII码表中对应的关系显示出相应的符号或图案

            '\0'    0

            '0'     48

            'A'     65

            'a'     97

        布尔型bool

            先有了C语言之后才有了bool类型,所以c语言中是不可能有真正的布尔类型,stdbool.h头文件对布尔类型进行了模拟

            bool true false

五、变量与常量

    什么是变量:程序在运行期间数据可以变化的叫做变量,相当于存储数据的盒子

    定义: 

        类型 变量名;    

        int num;

        取名规则:

        1、由字母、数字、下划线做成

        2、不能以数字开头

        3、不能与32个关键字重名

        4、见名知意(功能、类型、范围...)

        printf scanf bool sizeof 

    

    使用:

        赋值:   num = 100;  

        参与运算:num * 10;

    

    注意:变量的默认值是随机的,为了安全起见要进行初始化,一般初始化为0

    

    变量的输入、输出:

        int printf(const char *format, ...);

        功能:输出数据

        format:"双引号包含的格式信息(提示信息+占位符)"

        ... : 变量列表

        返回值:输出字符的个数

        类型占位符:C语言通过类型占位符的方式来传递变量的类型

        %hhd %hd %d %ld %lld        有符号

        %hhu %hu %u %lu %llu        无符号

        %f  %lf  %LF

        %c  

    

       

    

        int scanf(const char *format, ...);

        功能:输入数据

        format: "双引号包含的格式信息(占位符)"

        ... :   变量地址列表  

        返回值:成功输入的变量个数

        注意:scanf需要的是变量类型、变量地址 

            变量地址 = &变量名

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值