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

标准C语言01

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

标准C语言01

C语言简介

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

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

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

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

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

Ubuntu 16.04 默认C99 -std=gnu99 指定为C99语法标准

C11语法标准,全新的升级

一、第一个C语言程序

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

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

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

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

*注意:可以合并3、4

gcc xxx.c && ./a.out

#include

int main()

{ 

printf("Hello,World!n");

return 0;

}

#include

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

翻译的过程叫做预处理,需要被翻译的代码叫做预处理指令,以#开头的代码叫做预处理指令

#include 功能是导入头文件

#include

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

#incldue"xxx.h"

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

stdio.h

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

mian()函数:

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

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

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

return 功能有两个:

1、结束函数的执行

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

mian函数的调用者是操作系统,它的返回值是给了操作系统的,它的值能反应出程序是如何结束

的,一般有三类:

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

  • 0 一切正常

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

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

printf(“想要输出的内容”);

转义字符:

​ 键盘上一些无法直接打印显示的符号,用一些特殊的字符组合来表示,这种特殊的字

​ 符组合称为转义字符,n就是其中之一

​ 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字节     正负20亿  

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字节     0~正负40亿  

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

注意:signed不加就代表了加

由于定义无符号整型时比较麻烦,C标准库把这

些类型重定义成一些新的简单的类型名:

需要导入头文件

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’ 48

‘A’ 65

‘a’ 97

布尔型:bool

先有C语言后有的bool类型,所以C语言中没不可能有真正的布尔类型,在

头文件stdbool.h中对布尔类型进行了模拟

bool true false

七、变量与常量

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

定义: 类型名 变量名;

int num;

取名规则:

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

2、不能以数字开头

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

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

使用:

赋值: 变量名 = 10;

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

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

变量的输出与输入:

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

功能:输出数据

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

…:变量名列表

返回值:输出字符个数

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


float %f

double %lf

long double %LF

字符型 char %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  

​ 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.md 显示n个字符宽度(小数点也算一位),不够则补充空格,m表示小数点后几位(四舍五入,不够补0),右对齐

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

九、运算符 自变运算符:

++/--

  • 前自变:

    ++num/–num 立即生效

  • 后自变:

    num++/num-- 下一行语句才有效

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

算术运算符:

+ - * / %

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

10/3 ->3

10%3 ->1

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

关系运算符:

> < >= <= == !=

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

int n=-100;

if(10

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

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

逻辑运

&& || !

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

A && B 一假即假

A || B 一真即真

!A 求反

&& || 短路特性

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

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

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

赋值运算符

a = 10; a=a+10;

a+=10;

a-=10;

a*=10;

a/=10;

a%=10;

位运算符:

& | ~ ^ << >>
A & B 按位相与

00110010 0x32

11001010 0xCA

00000010 0x02

A | B 按位相或

00110010 0x32

11001010 0xCA

11111010 0xFA

~A 按位求反

00110010 0x32

11001101 0xCD

A ^ B 按位异或 相同为0,相异为1

00110010 0x32

11001010 0xCA

11111000 0xf8

A << n 把A的补码左移n位,左边丢弃,右边补0

0x32 << 3 左移*2

00110010 0x32

10010000 0x90

A >> n 把A的补码右移n位,右边丢弃,左边补符号位

0x32 >> 3 右移/2

10110010 0x32

11110110 0xf6

十、类型转换

只有相同类型的数据才能运算,如果类型不相同的类型需要先转换

相同类型后再进行计算。

自动转类型转换:

​ 转换规则:

​ 以不丢失数据为基础,可以适当地牺牲一些空间

​ 1、字节少的向字节多的转

​ 2、有符号的向无符号的转

​ 3、整型向浮点型转

注意:char short 如果与不同类型的数据运算时,会先提升为int类型后参与运算

强制类型转换:

​ (新类型名)数据;

​ 这种方式有可能会丢失数据,慎重使用

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

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

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