栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言入门

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言入门

一、C语言简介

    BCPL->new B->C语言->UNIX->Minix->Linux->gcc

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

    C语言专门用于编写操作系统而发明的编程语言,所以天生适合对硬件编程,也以运行速度快而著称,也非常适合实现数据结构和算法

    由于出现的时间过早,有很多缺陷,也存在着很多的陷阱,但是我们的前辈给总结了一些避免陷阱的经验教训    《C陷阱与缺陷》

    C语言的语法很自由,但是也意味着危险

    自由源于自律

    C89语法标准,默认是gcc编译器的语法标准

    C99语法标准,对C语言的扩展和增强

        Ubuntu 16.04 默认C99  

        -sed=gnu99 指定为C99语法标准

    C11语法标准,全新的升级

二、第一个C语言程序

    1.vim xxx.c  创建.c源文件

    2、编写代码,并保存退出

    3、gcc  xxx.c  编译.c源文件,成功会得到a.out可执行文件

    4、./a.out  运行可执行文件

        注意:可以合并3、4

            gcc xxx.c && ./a.out

    #include

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

        #include 功能是导入头文件

            #include

                <>从系统指定路径查找头文件并导入

            #include "xxx.h"

                ""先从当前工作路径查找头文件,如果找不到再从系统指定路径查找并导入

            stdio.h

                头文件:以.h结尾,里面存放的是辅助性代码,绝大多数都是函数的说明

    int main()

    {

        printf("Hello World!n");

        return 0;

    }

    main函数:

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

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

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

        return 功能有两个:

            1、结束函数的执行

            2、返回一个结果给函数的调用者

        main函数的调用者是操作系统,它的返回值是给了操作系统的,它的值能反应出程序是如何结束的,一般有三类:

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

            0       一切正常

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

        printf/scanf    是标准库中的函数,负责输出数据、输入数据

            printf("想要输出的内容");

        转义字符:

            键盘上一些无法直接打印显示的符号,用一些特殊的字符组合来表示,这种特殊的字符组合称为转义字符,n就是其中之一

            r  回到行首

            t  制表符,相当于Tab,用于输出格式对齐

            b  退格键

            a  铃响

            \  表示一个

            %%  表示一个%

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

二、编译器

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

    gcc是由GNU社区为了编译Linux内核代码而开发的一款免费的编译器

    gcc常用的编译参数:

        -E  只显示预处理的结果到终端

        -std=gnu99  设置C99语法标准

        -c  只编译不链接

        -o  指定编译结果的名字  -oname  -o name

        -S  生成汇编代码

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

        -Wall   尽可以多地产生警告

        -Werror 把警告当错误处理

        -l  指定要加载的代码库  -lm 使用数学库

三、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语言文件类型:

    .c  源文件

    .h  头文件

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

    .i 预处理文件

    .s  汇编文件

    .o  目标文件

    .a  静态库文件

    .so 共享库文件

五、存储空间的单位:

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

    Byte    字节    八个二进制位,计算机存储器描述存储容量的基本单位

    KB      1024字节

    MB      1024KB

    GB      1024MB

    TB      1024GB

    PB      1024TB

六、数据类型

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

        1、现实生活中的数据本身就自带类别属性

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

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

        注意:运算符 sizeof 可以计算类型、变量的字节数

        整型:

            signed  有符号

                signed char     1       -128~127            %hhd

                signed short    2       -32768~32767        %hd

                signed int      4       正负20亿            %d

                signed long     4/8                         %ld

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

            unsigned    无符号

                unsigned char     1       0~255             %hhu

                unsigned short    2       0~65535           %hu

                unsigned int      4       0~40亿            %u

                unsigned long     4/8                       %lu

                unsigned long long    8   0~1开头20位整数   %llu

            注意:signed不加就代表了加

                    由于定义无符号整型是比较麻烦,C标准库把这些类型重定义成新的简单的类型名:

                        需要导入头文件

                        uint8_t uint16_t uint32_t uint64_t

                        int8_t int16_t int32_t int64_t

        浮点型:    有小数部分的类型

            float   单精度      4                           %f

            double  双精度      8                           %lf

            long double         12/16                       %Lf

            注意:小数点后六位有效

            注意:采用一定的算法对真实的浮点型数据到二进制数据进行转换,这个过程比存储、读取整型要慢得多。编程时尽量使用整型数据

    double num

    if(num < 0.000001 && num > -0.000001)

        模拟型:

            字符型:char    

                字符就是符号或图案,在内存中还是整数的依然是整数,需要显示出字符时,会根据ASCII表中对应的关系显示出对应的字符或图案

                ''    0   特殊字符

                '0'     48

                'A'     65

                'a'     97

            布尔型:bool

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

                    bool true false

七、变量与常量

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

    定义:  类型名 变量名;

            int num;    

            取名规则:

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

            2、不能以数字开头

            3、不能与C语言32个关键字重名,能默写

        printf scanf bool true sizeof

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

            int sum_s_i

    使用:

        赋值:  变量名 = 10;

                num =10;

        参与运算:  2+(变量名*10);

                2+(num*10);

        注意:C语言中变量的初始值是随机的,为了安全起见,一般在定义是初始化为0

    变量的输出与输入

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

        功能:输出数据

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

        ...:变量名列表

        返回值:输出字符个数

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

        signed      %hhd %hd %d %ld %lld

        unsigned    %hhu %hu %u %lu %llu

        float   %f

        double  %lf

        long double %Lf

        字符型 char %c

        练习1:定义各种类型的变量并初始化,使用printf显示它们各自的值

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

        功能:输入数据

        format:"双引号包含的占位符"

        ...:   变量地址列表

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

        注意:scanf需要提供变量的地址  

            &变量名 == 变量地址

        练习2: 定义各种类型的变量并初始化,使用printf显示它们各自的值,使用scanf输入,使用printf显示

   

    什么是常量:程序运行期间数值不能发生改变的叫做常量

        100     默认int类型

        100l    long

        100ll   long long

        100u    unsigned int

        100lu   unsigned long

        100llu  unsigned long long

        3.14    默认double

        3.14f   float

        3.14l   long double

八、格式化输入输出

    %nd     显示n个字符宽度,不够则补充空格,右对齐

    %-nd    显示n个字符宽度,不够则补充空格,左对齐

    %0nd    显示n个字符宽度,不够则补充0,右对齐

    %n.mf   显示n个字符宽度(小数点也算一位),不够则补充空格,m表示小数点后几位(四舍五入,不够补0),右对齐

    %g      不显示小数点后多余的0

九、运算符

    自变运算符:++/--   使变量的值自动加1或者减1

        前自变:++num/--num 立即生效

        后自变:num++/num-- 下一行语句才生效

        注意:不要在一行代码中多次使用自变运算符

    算术运算符:+ - * / %

        整数/整数   结果还是整数,没有小数点,只保留整数部分

            10/3    -> 3

            10%3    -> 1

        / % 除数不能为0,否则就会浮点数例外、(核心已转储),这是个运行报错,一旦产生程序立即停止,后面不再执行

    关系运算符: >  <   >=  <=  ==  !=

        比较的结果0(不成立)或1(成立),比较的结果可以继续参与后续的运算

        int n = -100;

        if(10 < n < 100)

        结果永远为真,与数学运算规则不同

        注意:== 建议常量放左边

   

    逻辑运算符:    &&  ||  !

        先把运算对象转换成逻辑值,0转换为假,非零转换为真

        A  &&  B    一假即假

        A  ||  B    一真即真

        !A          求反

        && || 短路特性:

            当左边部分的值可以确定整个表达式的结果时,右边部分就不执行计算

    三目运算符:运算对象有三个部分

        A ? B : C

        判断A的值如果为真则执行B,否则执行C

    赋值运算符

        a =10;

        a += 10;        a=a+10;

        a -= 10;

        a *= 10;

        a /= 10;

        a %= 10;

    位运算符:   &   |   ~   ^   <<  >>

十、分支语句

    if(表达式)  //单分支

    {

        //表达式为真(非零),则执行此处代码

    }

    if(表达式)  //双分支

    {

        //表达式为真(非零),则执行此处代码

    }

    else

    {

        //表达式为假(零),则执行此处代码

    }

    if(表达式1)  //多分支

    {

        //表达式1为真(非零),则执行此处代码

    }

    else if(表达式2)

    {

        //表达式2为真,则执行此处代码

    }

    else if(表达式3)

    {

        //表达式3为真,则执行此处代码

    }

    else

    {

        //如果以上所有表达式都为假,则最后执行此处代码

    }

    1、输入三个整数,从小到大显示

    2、输入一个年份,判断是否是闰年?

        四闰百不闰,四百闰

    3、输入一个年份和月份,判断该月有多少天?

    4、输入一个成绩,判断等级

        [90,100]    A

        [80,89]     B

        [70,79]     C

        [60,69]     D

        [0,59]      E

        other       成绩有误

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1010034.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号