目录
1. 数据类型介绍
2. signed 和unsigned
3. 数据类型的取值范围
4. 变量
5. 算术操作符:+、-、*、/、%
6. 赋值操作符:=和复合赋值
7. 单⽬操作符:++、--、+、
8. 强制类型转换
9. scanf和printf介绍
1. 数据类型介绍(内置类型)
1.1字符型character
字符的英文单词是character,在C语言中使用char表示字符类型
1.2整型integer
1.3浮点型float
float double long double1.4布尔型bool(C99中引入)
布尔值:表示真假
_Bool使用时要包含头文件:<stdbool.h>
代码演示:
1.5各种数据类型的长度
每⼀种数据类型都有⾃⼰的⻓度,使⽤不同的数据类型,能够创建出⻓度不同的变量,变量⻓度的不 同,存储的数据范围就有所差异。
1.5.1sizeof
sizeof是关键字也是操作符,专门用来计算sizeof的的操作数的类型长度,单位是字节
sizeof的计算结果是size_t类型的,要打印出来可以使用%zu的占位符
sizeof(数据类型) sizeof 表达式1.5.2数据类型长度
x64环境:
1.5.3sizeof 中表达式不计算
2. signed 和unsigned
C语⾔使⽤signed 和 unsigned关键字修饰字符型和整型类型的。
signed关键字,表⽰⼀个类型带有正负号,包含负值;
unsigned关键字,表⽰该类型不带有正负号,只能表⽰零和正整数。
对于int 类型,默认是带有正负号的,也就是说 由于这是默认情况,关键字int 等同于 signed int。signed ⼀般都省略不写,但是写了也不算错。
整数变量声明为unsigned的好处是,同样⻓度的内存能够表⽰的最⼤整数值,增⼤了⼀倍。 ⽐如,16位的signed short int的取值范围是:-32768~32767,最⼤是32767;⽽unsigned shortint的取值范围是:0~65535,最⼤值增⼤到了65535。32位的 signed int 的取值范围可以参看 limits.h 中给出的定义。
下⾯的定义是VS2022环境中,limits.h中相关定义:
char与int 不同:
3. 数据类型的取值范围
怎么打开limits.h这个文件呢?(float.h同理)
在电脑上去官网下载一个Everything即可
limits.h
float.h
4. 变量
4.1变量的创建
了解清楚了类型,那么类型是用来干什么的呢?类型是用来创建变量的;
变量顾名思义就是变化的量,与之概念相对的就是常量
那变量的命名规则是?(给变量起名还应该尽量使它的名字有意义)
- 不能以数字开头
- 只能由字母(区分大小写)、数字和下划线(‘_’)组成
- 长度不能超过63个字符
- 变量名区分大小写
- 变量名不能是关键字
data_type name | | | | 变量类型 变量名初始化:
即变量创建的时候给它一个值
int age=18; float weight=55.5; char ch='w';4.2变量的分类
4.2.1全局变量
在⼤括号外部定义的变量就是全局变量 全局变量的使⽤范围更⼴,整个⼯程中想使⽤,都是有办法使⽤的。
4.2.2局部变量
在⼤括号内部定义的变量就是局部变量 局部变量的使⽤范围是⽐较局限,只能在⾃⼰所在的局部范围内使⽤的。
*当全局变量与局部变量冲突的时候局部变量优先
全局变量和局部变量在内存中存储在哪⾥呢?
⼀般我们在学习C/C++语⾔的时候,我们会关注 内存中的三个区域:栈区、堆区、静态区
1.局部变量是放在内存的栈区
2.全局变量是放在内存的静态区
3.堆区是⽤来动态内存管理的
变量创建的本质是在内存中开辟空间
5. 算术操作符:+、-、*、/、%
在写代码时候,⼀定会涉及到计算。
C语⾔中为了⽅便运算,提供了⼀系列操作符,其中有⼀组操作符叫:算术操作符。分别是:+、-、*、/、%,这些操作符都是双⽬操作符(操作符左右两边各有一个操作数。例如:操作数1+操作数2。)。
注:操作符也被叫做:运算符,是不同的翻译,意思是⼀样的。
5.1+和-
5.2*
int main() { printf("%d\n",4*5); return 0; }5.3/
除号的两端如果是整数,执⾏的是整数除法,得到的结果也是整数。
上⾯⽰例中,尽管变量 x 的类型是 float (浮点数),但是 6 / 4 得到的结果是 1.0 ,⽽不是 1.5 。原因就在于C语⾔⾥⾯的整数除法是整除,只会返回整数部分,丢弃⼩数部分。
如果希望得到浮点数的结果,两个运算数必须⾄少有⼀个浮点数,这时C语⾔就会进⾏浮点数除法
5.4%
运算符 % 表⽰求模(余)运算,即返回两个整数相除的余值。这个运算符只能⽤于整数,不能⽤于浮点 数。
负数求模的规则是,结果的正负号由第⼀个运算数的正负号决定.
6. 赋值操作符:=和复合赋值
在变量创建的时候给⼀个初始值叫初始化,在变量创建好后,再给⼀个值,这叫赋值。
int a=0;//初始化 a=10; //赋值6.1连续赋值
连续赋值,从右向左依次赋值
int c=1; int a=0; int b=0; a=b=c+1;//连续赋值6.2复合赋值
以上只是C语言中的部分复合赋值操作符,后续还会学习到更多。
7. 单⽬操作符:++、--、+、-
前⾯介绍的操作符都是双⽬操作符,有2个操作数的。C语⾔中还有⼀些操作符只有⼀个操作数,被称 为单⽬操作符。++ 、-- 、 +( 正 ) 、-( 负 )就是单⽬操作符的。
7.1++和--
++是⼀种⾃增的操作符,⼜分为前置++和后置++,--是⼀种⾃减的操作符,也分为前置--和后置--.
如果想让变量a自增1有几种方法?
int a=0; a=a+1;//1 a+=1;//2 a++;//3 ++a;//4--用法与++同理
7.2+和-
这⾥的+是正号,-是负号,都是单⽬操作符。
运算符+对正负值没有影响,是⼀个完全可以省略的运算符,但是写了也不会报错。
运算符-⽤来改变⼀个值的正负号,负数的前⾯加上 就会得到正数,正数的前⾯加上 会得到负数。
8. 强制类型转换
在操作符中还有⼀种特殊的操作符是强制类型转换,语法形式很简单,形式如下:
(类型)int a=3.14; //这里a是int类型,而3.14是double类型,如果强行将3.14赋值给int的编译器会报警告 //为了消除警告,强制类型转换就派上用场了使用强制类型转换之后的代码:
int a=(int)3.149. scanf和printf介绍
9.1printf
9.1.1基本用法
printf()的作⽤是将参数⽂本输出到屏幕。它名字⾥⾯的 f 代表 format,表示可以定制输出⽂本的格式。
#include<stdio.h> int main() { pfintf("Hello woeld"); return 0; }上⾯命令会在屏幕上输出⼀⾏⽂字“HelloWorld”。
printf() 不会在⾏尾⾃动添加换⾏符,运⾏结束后,光标就停留在输出结束的地⽅,不会⾃动换 ⾏。
为了让光标移到下⼀⾏的开头,可以在输出⽂本的结尾,添加⼀个换⾏符\n
#include<stdio.h> int main() { printf("Hello world\n"); return 0; }printf()是在标准库的头⽂件 stdio.h定义的。使⽤这个函数之前,必须在源码⽂件头部引⼊这 个头⽂件。
9.1.2占位符
printf() 可以在输出⽂本中指定占位符。
所谓“占位符”,就是这个位置可以⽤其他值代⼊。(可以理解为大学生拿课本占座)
printf("%d",1)输出⽂本⾥⾯可以使⽤多个占位符
printf("%s is %d years old",小明,18);9.1.3占位符列举
%a :⼗六进制浮点数,字⺟输出为⼩写。
%A :⼗六进制浮点数,字⺟输出为⼤写。
%c :字符。//char
%d :⼗进制整数(有符号的10进制整数)。//int
%e :使⽤科学计数法的浮点数,指数部分的 e 为⼩写。
%E :使⽤科学计数法的浮点数,指数部分的 E 为⼤写。
%i :整数,基本等同于 %d 。
%f :⼩数(包含 float 类型和 double 类型)。//float%f double-%lf
%g :6个有效数字的浮点数。整数部分⼀旦超过6位,就会⾃动转为科学计数法,指数部分的 e 为⼩写。
%G :等同于 %g ,唯⼀的区别是指数部分的 E 为⼤写。
%hd :⼗进制shortint类型。
%ho :⼋进制shortint类型。
%hx :⼗六进制shortint类型。
%hu :unsignedshortint类型。
%ld :⼗进制longint类型。
%lo :⼋进制longint类型。
%lx :⼗六进制longint类型。
%lu :unsignedlongint类型。
%lld :⼗进制longlongint类型。
%llo :⼋进制longlongint类型。
%llx :⼗六进制longlongint类型。
%llu :unsignedlonglongint类型。
%Le :科学计数法表⽰的longdouble类型浮点数。
%Lf :longdouble类型浮点数。
%n :已输出的字符串数量。该占位符本⾝不输出,只将值存储在指定变量之中。
%o :⼋进制整数。
%p :指针(⽤来打印地址)。
%s :字符串。
%u :⽆符号整数(unsignedint)。
%x :⼗六进制整数。
%zd : size_t 类型。
%% :输出⼀个百分号
9.1.4输出格式
printf()可以定制占位符的输出格式
9.1.4.1限定宽度
printf() 允许限定占位符的最⼩宽度。
上⾯⽰例中, %5d 表⽰这个占位符的宽度⾄少为5位。如果不满5位,对应的值的前⾯会添加空格。 输出的值默认是右对⻬,即输出内容前⾯会有空格;如果希望改成左对⻬,在输出内容后⾯添加空 格,可以在占位符的% 的后⾯插⼊⼀个 -号。
9.1.4.2总是显示正负号
默认情况下, printf() 不对正数显⽰ + 号,只对负数显⽰ 号。如果想让正数也输出 + 号,可 以在占位符的 % 后⾯加⼀个 +。
9.1.4.3限定小数位数
输出⼩数时,有时希望限定⼩数的位数。举例来说,希望⼩数点后⾯只保留两位,占位符可以写 成%.2f。
这种写法可以与限定宽度占位符,结合使⽤
最⼩宽度和⼩数位数这两个限定值,都可以⽤ * 代替,通过 printf() 的参数传⼊。
9.1.4.4输出字符串
%s 占位符⽤来输出字符串,默认是全部输出。如果只想输出开头的部分,可以⽤%.[m]s指定输出的⻓度,其中[m]代表⼀个数字,表⽰所要输出的⻓度。
9.2scanf
当我们有了变量,我们需要给变量输⼊值就可以使⽤ scanf 函数 ,如果需要将变量的值输出在屏幕上的时候可以使⽤ printf 函数。
9.2.1基本用法
scanf() 函数⽤于读取⽤⼾的键盘输⼊。 程序运⾏到这个语句时,会停下来,等待⽤⼾从键盘输⼊。 ⽤⼾输⼊数据、按下回⻋键后, scanf() 就会处理⽤⼾的输⼊,将其存⼊变量。 它的原型定义在头⽂件 stdio.h。 scanf() 的语法跟 printf() 类似。
int i=0; scanf("%d"&i);9.2.2返回值
scanf() 的返回值是⼀个整数,表⽰成功读取的变量个数。 如果没有读取任何项,或者匹配失败,则返回 0。 如果在成功读取任何数据之前,发⽣了读取错误或者遇到读取到⽂件结尾,则返回常量EOF(-1)。
EOF-endoffile ⽂件结束标志.
9.2.3占位符
scanf() 常⽤的占位符如下,与 printf() 的占位符基本⼀致。
%c :字符。
%d :整数。
%f : float 类型浮点数。
%lf : double 类型浮点数。
%Lf : long double 类型浮点数。
%s :字符串。
%[] :在⽅括号中指定⼀组匹配的字符(⽐如 %[0-9] ),遇到不在集合之中的字符,匹配将会停⽌。
上⾯所有占位符之中,除了%c以外,都会⾃动忽略起⾸的空⽩字符。 %c 不忽略空⽩字符,总是返 回当前第⼀个字符,⽆论该字符是否为空格。
9.2.4赋值忽略符
有时,⽤⼾的输⼊可能不符合预定的格式.
上⾯⽰例中, %*c 就是在占位符的百分号后⾯,加⼊了赋值忽略符 * ,表⽰这个占位符没有对应的 变量,解读后不必返回。
10.我的gittee仓库(可查阅以上代码)
https://gitee.com/lei-zefan/breake.c/blob/master/