C语言学习笔记1——C语言程序

C语言简介:
BCPL ->newB ->C ->UNIX ->Minux ->Linux ->gcc

C语言诞生于1970-1973年,在肯·汤姆逊和丹尼斯·里奇的合作编写下完成,归属于美国贝尔实验室。
C语言是专门为了编写操作系统而诞生的语言,C语言天生适合对硬件编程,以速度快而著称,也非常适合编写数据结构与算法。
C语言由于出现时间过早,有很多缺陷,也没想到普通人也能使用C语言编程,因此存在着陷阱,但是前辈们总结了一些避免的经验《C陷阱和缺陷》   《C语言三剑客》 《C程序设计语言》
C语言的语法很自由,自由源于自律

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

一、第一个C语言程序:
#include
程序员所编写的代码不是标准C代码,需要一段程序把它翻译成标准C代码,负责翻译的程序叫做预处理器,翻译的过程叫做预处理,被翻译的语句叫做预处理指令,以#开头的语句都是预处理指令
#include 的功能是把一个头文件导入到当前文件中
#include <> 从系统指定的路径下查找头文件,找到加载导入
#include “” 先从当前目录查找头文件,如果没找到,再从系统指定的路径下查找头文件,找到加载导入
stdio.h
头文件:以.h
结尾的文件,里面储存的是一些辅助性的代码,绝大多数内容都是对函数的声明
源文件:以.c结尾的文件,里面主要是对和函数的实现,功能性的代码
由C语言标准委员会为C语言提供的一套常用的基础功能,以函数形式存在,这些函数都被封装在libc.so库中
会有很多的头文件负责对libc.so库中的代码进行声明,stdio.h是其中一个,其他string.h stdlib.h 等
stdio standard input & output 负责对输入输出功能函数进行声明

int main()
{
    printf("Hello World!\n");
    return 0;
}

main函数:
    C语言以函数为最小单位来管理代码,一个函数就是一段具有某一项功能的代码段
    main函数是程序的执行入口,有且只有一个
    int是一种数据类型,表示main函数的执行结果是一个整数
    return有两个功能:
        1、结束函数的执行
        2、返回一个数据给函数的调用者
    main函数是由操作系统调用的,所以main函数的执行结果返回给操作系统,该执行结果反映了程序是如何结束的:
        整数    出现异常    (别人的错误)
        0       一切正常
        负数    出现错误    (自己的错误)
    可以通过echo $? 查看操作系统获取到的执行结果

    printf/scanf是标准库中的输出/输入函数,负责输出、输入数据,一般作为程序测试使用
    转义字符:
        键盘上一些无法直接打印的符号,会用一些特殊的字符来表示,这种特殊字符就叫做转义字符,\n就是其中之一
        \n  换行
        \t  制表符Tab
        \b  退格键,退一个字符
        \a  铃响
        \r  回到行首
        \\  显示一个\
        %%  显示一个%

    C语言是以分号作为一行代码的结束,使用大括号作为划分代码区域
    注意:分号不能乱加,也不要出现中文格式的符号

二、编译器
负责把人能看得懂的用代码记录的文本文件,翻译成计算机能看懂的二进制文件,由预处理器、编译器、链接器
gcc是由gnu社区为了编译Linux内核代码而开发的一款免费的编译器,默认采用C89编译语法,-std=gnu99 可以设置为C99语法
gcc code.c -> a.out(可执行文件、二进制文件)
常用的参数:
-E 显示出预处理结果
-S 生成汇编代码
-c 只编译不链接
-o 设置编译结果的名字
-std= 设置编译语法
-I 指定头文件的加载路径
-l 指定要使用的库文件 例如-lm
-Wall 更严格地检查代码,尽可能多得产生警告
-Werror 把警告当错误处理

三、C代码源文件变成可执行文件的过程
1、预处理:把源文件翻译成预处理文件
gcc -E code.c 把预处理结果打印到终端
gcc -E code.c -0 code.i 生成以.i结尾的预处理文件
2、编译:把预处理文件翻译成汇编代码
gcc -E code.i 生成以.s结尾的汇编文件
3、汇编:把汇编文件翻译成二进制的目标文件
gcc -c code.s 生成以.o结尾的目标文件
4、链接:把若干个目标文件合并生成一个可执行文件
gcc a.o b.o c.o 默认生成a.out可执行文件
gcc a.o b.o c.o -o xxx 指定生成名为xxx的可执行文件

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

五、存储空间的单位:
Bit 比特 一个二进制位,只能存储0或者1,计算机存储数据的最小单位
Byte 字节 八个二进制位,计算机存储数据的基本单位
Kb 1024字节
Mb 1024Kb
Gb 1024Mb
Tb 1024Gb
Pb 1024Tb

六、数据类型
为什么要对数据进行分类?
1、现实社会中的数据自带类别属性
2、对数据进行分类可以节约存储空间、提高运行效率
C语言中数据分为两个大类:自建(程序员自己设计的:结构、联合、类)和内建(C语言自带)

整型:
    signed 有符号
        类型                字节数       表示范围
        signed char         1           -128~127
        signed short        2           -32768~32767
        signed int          4           正负20亿
        signed long         4/8         正负20亿/正负9开头的19位整数
        signed long long    8           正负9开头的19位整数
        注意:32位系统下signed long是4字节,64位是8字节
        注意:signed 默认添加

    unsigned 无符号
        类型                字节数       表示范围
        unsigned char         1           0~255
        unsigned short        2           0~65535
        unsigned int          4           0~40亿
        unsigned long         4/8         0~40亿/0~1开头的20位整数
        unsigned long long    8           0~1开头的20位整数
        注意:由于定义无符号数据时名字麻烦,标准库把这些类型重新定义以下类型:
            需要包含头文件
            uint8_t uint16_t uint32_t uint64_t
            int8_t int16_t int32_t int64_t

浮点型:
    float                     4
    double                    8
    long double               12/16
注意:采用科学计数法,换算真实数据与二进制数据,因此计算浮点型数据时要比整型数据慢得多,编程时尽量使用整型
注意:关注浮点型的精度,小数点后六位有效

模拟:
    字符型:%c
    char 字符就是符号或者图案,在内存中存储的是整数,需要显示出符号或图案时,计算机会根据ASCII码表中的对应关系显示出相应的符号或图案。
    '\0'== 0
    '0' == 48
    'A' == 65
    'a' == 97

    布尔型:bool
        先有C语言之后才有bool类型,所以C语言是没有真正的bool类型,在stdbool.h 头文件中用整数进行模拟
        bool true false
可以使用sizeof运算符 计算类型、变量占用的字节数
例如:sizeof(int)

七、变量与常量
什么是变量:
在程序运行期间数值可以发生变化的叫变量,相当于存放数据的盒子
定义:
类型 变量名;
int num;
变量名取名规则:
1、由字母、数字、下划线组成
2、不能以数字开头
3、不能与32个C语言关键字重名,能默写
4、见名知意(功能+类型+作用域)
注意:变量的默认值是随机的,为了安全起见,一般都初始化为0

使用:
    赋值:变量名 = 数据;   num = 100;
    运算:变量名*10;       num*10;
变量的输出、输入:
    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:"双引号包含的占位符"
...:变量的地址列表  &num
返回值:成功输入的变量的个数
注意:scanf需要的是变量的类型和变量的地址
    变量地址 = &变量名


什么是常量:
    程序运行期间数值不能发生变化的叫做常量
    100     默认是 signed int
    100l    signed long
    100ll   signed long long
    100u    unsigned int
    100lu   unsigned long
    100llu  unsigned long long
    3.14    默认是 double
    3.14f   float
    3.14l   long double
    问:定义一个表示100年有多少秒的宏常量?(忽略润平年)
    #define SEC (60*60*24*365*100u)

八、格式化输入输出
%nd 显示n个字符宽度,不够则补空格,右对齐
%0nd 显示n个字符宽度,不够则补0,右对齐
%-nd 显示n个字符宽度,不够则补空格,左对齐
%n.mf 显示n个字符宽度(小数点也算),不够则补空格,m表示显示小数点后几位(五舍六入)
%g 显示浮点型数据,不显示小数点后多余的0

你可能感兴趣的:(C语言学习笔记,c语言,c++)