目录

一、C语言简介

二、Linux上第一个C语言程序

三、编译器

四、C代码变成可执行文件的详细过程:

五、C语言的文件类型:

六、存储空间的单位:

七、数据类型

八、变量与常量

九、格式化输入输出

十、运算符

十一、分支语句 if

十二、分支语句 switch开关分支语句

十三、循环语句 for

十四、循环语句 while

十五、循环语句 do-while

十六、循环嵌套


一、C语言简介

BCPL->new B->C语言->UNIX->Minix->Linux->gcc
    C语言诞生于1970~1973年,在肯.汤普逊和丹尼斯.里奇的编写下完成,归属于美国贝尔实验室。
    C语言是专门用于编写操作系统而发明的编程语言,所以天生适合对硬件编程,也以运行速度快而著称,也非常适合实现数据结构和算法
    由于出现的时间过早,有很多缺陷,已存在着很多的陷阱,但是我们的前辈给总结了一些避免陷阱的经验教训 《C陷阱与缺陷》
    C语言的语法很自由,但是也意味着危险
    自由源于自律

C89语法标准,默认是gcc编译器的语法标准
    C99语法标准,对C语言的扩展和增强
        Ubuntu 16.04 默认C99  
        -std=gnu99 指定为C99语法标准

C11语法标准,全新的升级

二、Linux上第一个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 <stdio.h>
        程序员所编写的代码不是标准C代码,需要一段程序把它翻译成标准C代码,负责翻译的程序叫做预处理器,翻译的过程叫做预处理,需要被翻译的代码叫做预处理指令,以#开头的代码叫做预处理指令
        #include 功能是导入头文件
            #include <xxx.h>
                <> 从系统指定路径查找头文件并导入
            #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 
                signed short    2       -32768~32767
                signed int      4       正负20亿
                signed long     4/8
                signed long long   8    正负9开头19位整数
            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位整数
            注意:signed不加就代表了加
                  由于定义无符号整型时比较麻烦,C标准库把这些类型重定义成一些新的简单的类型名:
                    需要导入头文件<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
            注意:小数点后六位有效
            注意:采用一定的算法对真实的浮点型数据到二进制数据进行转换,这个过程比存储、读取整型要慢得多,编程时尽量使用整型数据
    double num
    if(num < 0.000001 && num > -0.000001) 
        模拟型:
            字符型:char 
                字符就是符号或图案,在内存中存储的依然是整数,需要显示出字符时,会根据ASCII表中对应的关系显示出对应的字符或图案
                '\0'    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、见名知意 (功能、类型、作用范围...)
    
    使用:
        赋值:  变量名 = 10;
                num = 10;
        参与运算:  2+(变量名*10);
                2+(num*10);
        注意:C语言中变量的初始值是随机的,为了安全起见,一般在定义时初始化为0

变量的输出与输入:
        int printf(const char *format, ...);
        功能:输出数据
        format:"双引号包含的提示信息+占位符"
        ...:变量名列表
        返回值:输出字符个数

类型占位符:C语言中通过类型占位符传递变量的类型
        signed char  short  int  long  long long     
                %hhd  %hd   %d   %ld   %lld
        unsigned char  short  int  long  long long  
                %hhu  %hu     %u   %lu   %llu
        float   %f
        double  %lf
        long double %LF
        字符型 char %c

int scanf(const char *format, ...);
        功能:输入数据
        format:"双引号包含的占位符"
        ...:    变量地址列表
        返回值:成功输入的变量的个数
        注意:scanf需要提供变量的地址  
            &变量名 == 变量地址

什么是常量:程序运行期间数值不能改变的叫做常量
        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(表达式);  //单分支{//表达式为真(非零),则执行此处代码}if(表达式)  //双分支{//表达式为真(非零),则执行此处代码}else{//表达式为假(零),则执行此处代码}if(表达式1)  //多分支{//表达式1为真(非零),则执行此处代码}else if(表达式2){//表达式2为真,则执行此处代码}else if(表达式3){//表达式3为真,则执行此处代码}else{//如果以上所有表达式都为假,则最后执行此处代码}

十二、分支语句 switch开关分支语句

    switch(n) //n可以是数值、表达式,运算结果必须是整数{case val:   //如果val==n,则打开执行开关//val必须是常量...break;  //关闭执行开关,结束switch//如果每个case后都加break,形成了分支结构//switch中不能使用continue配合//case a ... b:  可以表示[a,b],但是只有GNU编译器才支持该语法,不建议使用case val1:...default://如果所有的case都没有打开,则最后打开default,并且放在任何位置都可以最后打开}

十三、循环语句 for

循环就是一种让代码反复执行的方法,到达你想要效果
    for循环是一种非常灵活、变样多样且危险(相比其他循环)的循环
    for一般使用一个变量来引导循环的执行,该变量叫做循环变量i

    for([1];[2];[3]){[4]}/*[1]、给循环变量赋初值,C99以上标准才可以在此处定义循环变量 -std=gnu99[2]、判断循环变量是否到达边界,如果没到达,进入循环[4]、被反复执行的代码,称为循环体[3]、改变循环变量,防止出现死循环,一般对循环变量进行自加、自减1、2、4、3、2、4、3...*/

大括号问题:
        1、建议上下对齐
        2、如果循环体中只有一行代码,大括号可以省略
            但是不利于扩展,一般的商业代码都要求大括号不能省略
    for循环各种写法:

   for(;;){//  死循环}int i=0;for(; i<10; i++){}for(int i=0; ; i++){if(i >= 10){break;}}for(int i=0; i<10;){...i++;}

十四、循环语句 while

while(表达式)
    {
        // 循环体
    }
    当表达式为真时执行循环体,执行完后重新判断表达式,以此类推,直到表达式为假,结束循环
    while相当于for的精简版本    for(;表达式;)
    for循环专门负责解决明确知道循环次数的问题
    while循环专门负责解决不确定循环次数的问题

十五、循环语句 do-while

do{
        //  循环体
    }while(表达式); //表达式为真循环继续,为假结束循环
    先执行循环体,再判断循环条件,该循环体至少执行一次
    适合先干活、后检查的特殊情况,例如输入密码、文件内容判断
    
    问:for\while\do-while 区别?

十六、循环嵌套

循环语句中包含了循环语句
    外层循环执行一次,内存循环执行n次

C语言学习day1、2相关推荐

  1. 谭浩强C语言学习day1

    第一章 代码例子及重点 #include<stdio.h> 编译预处理指令 每一个C语言程序都必须要有一个main函数,函数类型为void时,内容体里可以没有return返回函数,换成别的 ...

  2. C语言学习Day1 字符串

    概念:C语言中没有字符串数据类型,对于字符串的存储是通过 字符数组 来实现的.可以理解为一个以'\0'字符结尾的字符数组,而'\0'表示字符串的结束. 1.字符串的初始化 字符串定义时可以使用 &qu ...

  3. C++语言学习(十二)——C++语言常见函数调用约定

    C++语言学习(十二)--C++语言常见函数调用约定 一.C++语言函数调用约定简介 C /C++开发中,程序编译没有问题,但链接的时候报告函数不存在,或程序编译和链接都没有错误,但只要调用库中的函数 ...

  4. 微软提出CLIPBERT:通过稀疏采样的视频语言学习

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 论文是学术研究的精华和未来发展的明灯.小白决心每天为大家带来经典或 ...

  5. c语言错误的等式,C语言学习中几个常见典型错误分析.docx

    C语言学习中几个常见典型错误分析 打开文本图片集 摘要:C语言是一门优秀,应用广泛的结构化程序设计语言,是中职计算机.机电和电子技术等专业一门理论和实践相结合的课程,教学实践中,学生常觉得c语言难学, ...

  6. 二级C语言学习宝典下载,二级C语言学习宝典

    二级C语言学习宝典app是一款专注于全国二级计算机等级C语言学习所开发的应用软件,它能够给你带来全新的功能板块,让你轻松掌握超多优质的考试训练,享受到手机端做题刷题的畅快体验,让你轻松备考,而且在该软 ...

  7. php7做了哪些优化,PHP语言学习之PHP7做了哪些优化

    本文主要向大家介绍了PHP语言学习之PHP7做了哪些优化,通过具体的内容向大家展示,希望对大家学习php语言有所帮助. 一  zval使用栈内存 在Zend引擎和扩展中,经常要创建一个PHP的变量,底 ...

  8. C语言学习趣事_之_大数运算_加法

    C语言学习趣事_大数运算_之加法 1.引子    在C语言中,因为预定义的自然数类型的大小是有上下限度的,这就决定了在进行数的运算的时候,必然受到限制,同时因为C语言是最接近汇编的一种程序设计语言,并 ...

  9. 攻破c语言笔试与机试难点,如何攻破C语言学习、笔试与机试的难点.doc

    如何攻破C语言学习.笔试与机试的难点 第一节??C语言编程中的几个基本概念1.1? ?? ?#include< >与#include" "? 1.? ?#include ...

最新文章

  1. Swift2.0语言教程之下标脚本
  2. 超郁闷的本地连接故障解决过程!!!
  3. 36.迷宫(广度优先搜索)
  4. Burpsuite中宏的使用
  5. python每天定时9点执行_[求助]关于twisted框架,如何每天定时执行一个scrapy爬虫...
  6. 跨域获取后台数据undefined_同源策略amp;JSONP跨域
  7. 安卓最好的浏览器_今日软件 | AI一键抠图、隐私保护工具、全能下载器、安卓启动器、茄子快传、迅雷、批量字符替换、傲游浏览器、全局负一屏...
  8. 华为研发雄起加拿大!
  9. 1048. 数字加密(20)-浙大PAT乙级真题
  10. 巧用iptables五招免费搞定SYN洪水攻击
  11. shiro身份验证失败捕获的异常对应信息
  12. hive的hql怎么运行_在Ubuntu上安装Apache Hive并运行HQL查询
  13. 【经验分享】用PS如何将图片的四角做成圆弧角
  14. 使用word完成海报制作说明书
  15. 不将visio的白色背景复制到ppt上
  16. Apache POI 合并单元格
  17. AI热门应用的案例集:学会工程化思维
  18. 常用国名与首都(英文)
  19. 程序员必备的chrome插件:体验极佳的CSDN插件
  20. 计算机管理删除卷灰色,win10磁盘上的“删除卷”按钮是灰色无法删除怎么解决...

热门文章

  1. countly 处理用户行为数据方案
  2. 计算机网络实验路由器,计算机网络路由器配置实验.doc
  3. wan状态dns服务器,路由器的wan口dns和dhcp区别是什么?
  4. OCA/OCP Oracle 数据库12c考试指南读书笔记:第31章:Multitenant Container and Pluggable Database Architecture
  5. 土壤湿度遥感监测 - 植被指数/地表温度与土壤湿度
  6. [BZOJ2754][SCOI2012]喵星球上的点名(后缀数组+莫队)
  7. 磨皮美白搞笑图片处理
  8. 数据库设计之实体E-R图
  9. java游戏boss是冰龙_炉石传说冒险模式冰龙区Boss技能及过关卡牌奖励
  10. go语言打印日期_ZEBRA打印机前置USB 直连扫描枪打印