C语言简介

C语言简介:

BCPL > new B >  C  > UNIX > Minix > Linux
C语言诞生 1970-1973年之间, 肯.汤姆逊 ;丹尼斯.里奇主导下编写完成
归属于美国的贝尔实验室★
C语言的诞生 专门用于编写操作系统,所以天生适合硬件编程,速度快,
非常适合实现数据结构和算法。
由于出现时间很早,有很多的缺陷,由于没想到普通人也能使用C语言编程
存在着很多缺陷,前辈已经总结了一些可以避免陷阱的经验。
C语言的语法很自由,自由也意味着危险,自由源于自律

C89语法标准 ,也是gcc默认的语法标准
C99语法标准 ,对c语言的扩展和增强 -std=gnu99 
C11语法标准 ,全新的升级

一、第一个c程序:

程序员写的代码不是标准c代码,需要一个程序进行翻译成标准c代码负责翻译
的程序叫做预处理器,翻译的过程叫做预处理,被翻译的代码被叫做预处理指令,
以#开头的都是预处理指令。
#include 的功能就是把一个头文件导入到当前文件中
#include <xxx.h>:从系统指定的目录下加载头文件xxx.h
#include "xxx.h":先从当前目录下加载xxx.h,如果找不到,再从系统指定的目录加载
stdio.h 标准输入输出库函数
    头文件:以.h结尾的文件,里面存储一些辅助性的代码,绝大多数都是函数的声明
    源文件:以.c结尾的文件,里面记录的是功能性的代码
    c语言标准委员会为c语言以函数的形式提供了一些基础的功能,这些函数都会
    封装在libc.so库中。
    很多的头文件负责对库中的代码进行说明,stdio.h就是其中一个
    string.h  stdlib.h
    


c语言以函数的形式来管理代码,是管理代码的最小单位,一个函数就是一段代码的集合。
main函数是c程序的主函数,是整个程序的执行入口和出口★有且只有一个。
int是一种数据类型,表示main函数的返回数值类型是一个整数。
main函数的返回值返回给操作系统,main函数是由操作系统所调用的,反应了该程序
是如何结束的,通常有三种情况:
    0   一切正常
    正数    出现异常(别人的错误)
    负数    出现错误(自己的错误)
    echo $? 可以获取上一个程序的返回值(可以不理解)

#include<stdio.h>
int main()
{
printf(“hello world\n”);
return 0;
}

printf/scanf都是标准库中的函数,负责输入输出数据,用来调试程序
转义字符:键盘上没有的符号,用一些特殊的字符来表示,这些特殊的字符就是转义字符
\n是其中之一。
    \n 换行
    \t 制表符,Tab,用于对齐数据
    \r 光标回到行首
    \a 铃响
    \b 退一个字符
    %% 表示一个%号
    \\ 表示\
c语言中以分号作为一行代码的结束标志,大括号来划分区域

二、编译器

负责把人能看懂的代码组成的文本文件,翻译成计算机就能看懂的二进制文件,由预处理器lia
编译器、链接器组成。
gcc是GNU社区为了编译Linux代码而开发的一款免费的编译器,默认采用c89语法标准,
-std=gnu99 可以设置成c99语法
    常用的参数: 
    -E 显示预处理的结果
    -c 只编译不链接
    -o 指定输出结果的名字
    -I 指定头文件的记载路径
    -X 生成编代码
    -l 指定要使用的库文件
    -Wall 尽可能多的产生警告
    -Werror 把警告当作错误处理
    -std 指定编译语法

三、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 code.o a.o c.o 等等,默认生成一个a.out的可执行文件

四、c文件类型:

.h:头文件
.h.gch 头文件的编译结果,优先使用
.c 源文件
.i 预处理文件
.s 汇编文件
.o 目标文件
.a 静态库
.so 共享库

五、数据的储存单位:

Bit     比特    一个二进制位,只能存0或1,计算机中存储数据的最小单位
Byte    字节    8个二进制位,计算机中存储数据的基本单位  
KB      1024字节
以此1024类推

六、数据类型

为什么要对数据分类:
    1、现实生活中的数据都是自带类别的属性
    2、对数据分类能够节约存储的空间,提高运行的效率
C语言中数据分为两大类:自建(程序员自己设计,例如结构、联合、类)
                      内建(C语言中自带的)
    可以使用sizeof计算类型的字节数大小 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    无符号
            unsigned char     1     0~255
            unsigned short    2     0~65535
            unsigned int      4     0~40亿
            unsigned long     4或者8    
            unsigned long long    8     1开头的20位正整数
            注意:由于麻烦,标准库把这些无符号的类型重新定义成以下类型:
                需要包含一个头文件 <stdint.h>
            uint8_t uint16_t uint32_t
    浮点型:
        float       4
        double      8
        long double    12/16
        注意:采用科学计数法存储,二进制与真实的数据之间需要翻译转换,
              因此浮点型的运算速度比整形慢,编程时尽量采用整形。
              小数点后6位有效    
    模拟
        字符型:
            char字符其实就是符号或者图案,但是在内存中储存的是整数,需要显示
            字符时会根据ASCII码表中对应关系来显示相应的符号或者图案。
            0  ''特殊字符 表示什么都没有
            48 '0'     65  'A'     97   'a'
        布尔型: bool
            由于先有C语言后才有了bool类型,所以c语言不可能有真正的bool类型,
            使用stdbool.h头文件,该文件是对布尔类型做的模拟。

七、变量与常量

什么是变量:程序运行期间数值可以发生改变的叫做变量,相当于储存数据的盒子。
定义: 类型 变量名;
       int  num;
       取名规则:
            1、字母、数字、下划线组成
            2、不能以数字开头
            3、不能与32个关键字重名
            4、见名知意【功能、类型、作用域。。。】
使用:
    赋值:num = 100; 把右边的值给左边
    参与运算:num*10;
    注意:C语言中变量默认是随机的,为了安全,一般都初始化为0
变量的输入输出:
     int printf(const char *format, ...);
     功能:输出数据  
     format:"双引号包含的格式信息(提示信息+占位符)"
     ... :要输出的变量的列表
     返回值:输出的字符的个数


     int scanf(const char *format, ...);
     功能:输入数据
     format:"由双引号包括的格式信息(占位符)"
     ... :要接收的变量的列表
    返回值:成功输入的变量的个数
     注意:scanf需要的是变量的类型、变量的地址,变量的地址= &变量名


    练习1:定义各种类型的变量并初始化,使用scanf输入,用printf显示
            int main(){
                int num = 0;
                printf("请输入num的值");
                scanf("%d",num);
                printf("num=%d\n",num)
            }



类型占位符:C语言通过占位符来传递变量的类型
    signed:  %hhd  %hd  %d  %ld  %lld
    unsigned:%hhu  %hu  %u  %lu  %llu
              %f  %lf  %LF 

什么是常量:程序运行期间是指绝对不能改变的叫常量
    字面值常量
    枚举常量
    宏常量
    100 默认是有符号的int
    100l long
    100u unsignde int
    3.14  默认是double            
    3.14f float 

八、格式化输入输出

%nd  显示n个字符宽度,不够则补空格,右对齐
%-nd 显示n个字符宽度,不够则补空格,左对齐
%0nd 显示n个字符宽度,不够则补0,右对齐
%n.mf  显示n个字符宽度,小数点也算一位,不够补空格,m表示显示小数点后几位
%g   不显示小数点后面多余的0

九、运算符

自变运算符:前后++/--,使变量的值自动的加一或减一
    前自变:立即有效
    后自变:下一句语句有效
    注意:  不要在一行语句中多次使用自变运算符
算术运算符: + - * / %
    / % 除数不能为0,如果为0会造成浮点数例外,核心已转储,程序直接死掉
    整数/整数  结果没有小数部分
关系运算符:>  <  >=  <=  ==  !=
    比较的结果是0(假)或1(真),运算结果可以继续参与计算
逻辑运算符: &&  ||  !
    比较对象转换为逻辑值,0转换成假,非0转换为真
    A && B:一假为假
    A || B:一真为真
    !A:   求反
    &&、||具有短路特性:当左边的表达式可以确定整个表达式的结果是,右边不计算
三目运算符:有三个运算对象
    A?B:C  先判断A表达式真假,如果为真执行B;如果为假执行C
    注意:该语句不能使用流程控制语句,因为必须要有运行结果
赋值运算符: =  += -=  *=  /=
位运算符: &  |   ~  ^   <<  >>

十、类型转换

自动类型转换:
    只有相同类型的数据才能进行运算,不同类型的数据自动转换成相同类型再进行计算
        转换规则:以不丢失数据为基础,可以适当的牺牲一些空间
            1、字节少的向字节多的转
            2、有符号的向无符号的转
            3、整型向浮点型转

强制类型转换:
    (想要转成的类型) 原来的数据; 
    有丢失数据的风险,慎重使用

十一、分支语句:

if(表达式)  //单分支语句
{
    如果表达式的值为真,执行此处代码
}

if(表达式) //双分支
{
    如果表达式的值为真,执行此处代码
}
else
{
    如果表达式的值为假,执行此处代码
}


if(表达式1)
{
    如果表达式1的值为真,执行此处代码
}
else if(表达式2)
{
    如果表达式2的值为真,执行此处代码
}
else
{
    当表达式12都为假时 执行此处代码
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值