文章目录
1.数据类型介绍
1.1 字符型
1 char
1.2 整型
1 short int
2 int
3 long int
4 long long int //c99中引入
1.3 浮点型
1 float
2 double
3 long double
1.4 布尔类型
1 _Bool //c99中引入布尔类型,专门表示真假的
布尔类型的使用得包含头文件<stdbool.h>
布尔类型变量的取值是:true或者false
1 #define bool _Bool
2
3 #define false 0
4 #define true 1
1.5 各种数据类型的长度
1.5.1 sizeof操作符
- sizeof是一个关键字,也是操作符,专门是用来计算sizeof的操作符数的类型长度,单位是字节
- sizeof操作符的操作数可以是类型也可以是变量或者表达式
1 sizeof(类型)
2 sizeof 表达式
- sizeof的操作数如果不是类型,是表达式的时候,可以省略后边的括号
- sizeof后边的表达式是不真实参与运算的,根据表达式的类型来得出大小
- sizeof的计算结果是size_t 类型
- sizeof运算符的返回值,C语言只规定是无符号整数,并没有规定具体的类型,而是留给系统自己去决定
1.5.2 数据类型长度
1 #include <stdio.h>
2
3 int main()
4 {
5 printf("%zd\n",sizeof(char));
6 printf("%zd\n", sizeof(_Bool));
7 printf("%zd\n", sizeof(short));
8 printf("%zd\n", sizeof(int));
9 printf("%zd\n", sizeof(long));
10 printf("%zd\n", sizeof(long long));
11 printf("%zd\n", sizeof(float));
12 printf("%zd\n", sizeof(double));
13 printf("%zd\n", sizeof(long double));
14 return 0;
}
对应的输出
1 1
2 1
3 2
4 4
5 4
6 8
7 4
8 8
9 8
补充:sizeof(long) >= sizeof(int)
2.signed和unsigned
- C语言使用signed和unsigned关键词修饰字符型和整型类型的
- signed 关键词,表示一个类型带有正负号,包含复值;
- unsigned关键词,表示该类型不带有正负号哦,只能表示0和正整数
- 对于int 类型,默认是带有正负号的,也就是说int 等同于 signed int
1 signed int a;
2 //等同于 int a;
3 unsigned int a;//表示非负整数
4 //等同于 unsigned a;
整数变量声明为unsigned 的好处是:同样长度的内存能够表示的最大整数值,增大了一倍
1 signed char c;//范围为-128~127
2 unsigned char c;//范围为0~225
注意:
C语言规定char类型是否带有正负号,由当前系统决定
3.数据类型的取值范围
类型 | 取值范围 |
---|---|
unsigned char | 0 ~255 |
char | -128 ~ 127 |
int | -2^31 ~(2^31-1) |
short int | -32768 ~32767 |
long int | -2^31 ~(2^31-1) |
long long int | -2^63 ~(2^63-1) |
unsigned int | 0 ~(2^32-1) |
unsigned short int | 0 ~65535 |
unsigned long int | 0 ~(2^32-1) |
unsigned long long int | 0 ~(2^64-1) |
float | -3.4x10^(-38) ~3.4x10^38 |
double | -1.7x10^(-308) ~1.7x10^308 |
4.变量
4.1 变量的创建
变量创建的语法形式:
1 date_type name;
2 | |
3 | |
4 数据类型 变量名
1 int age;//整型变量
2 char c;//字符变量
3 double a;//浮点型变量
变量在创建时就给一个初始值,就叫初始化
1 int age =18;
2 char c='w';
3 double a=3.14;
补充:
1.变量名尽量有意义
2.变量名的组成只能由字母,数字,下划线,并且数字不能开头
3.变量名不能是关键字
4.2 变量的分类
- 全局变量:在大括号外部定义的变量就是全局变量,全局变量使用广泛
- 局部变量:在大括号内部定义的变量就是局部变量,局部变量的使用比较局限,只能在自己所在的局部范围内使用
1 #include <stdio.h>
2 int b=1;//全局变量
3 int main()
4 {
5 int a = 12;//局部变量
6 printf("%d\n",a);
7 printf("%d\n",b);
8 return 0;
9 }
如果局部和全局变量名字相同时,局部变量优先
1.局部变量存放在栈区
2.全局变量存放在静态区
5.算术操作符:+ - * / %
算术运算符是双目操作符
5.1 /
除号两端如果是整数,执行的是整数除法,得到的结果也是整数
1 #include <stdio.h>
2 int main()
3 {
4 float x=6/4;
5 int y=6/4;
6 printf("%f\n",x);//输出1.000000
7 printf("%d\n",y);//输出1
8 return 0;
9 }
成员里面的整数除法是整除,只会返回整数部分,丢弃小数部分
如果想得到浮点数,两个运算数必须至少一个是浮点数
1 #include <stdio.h>
2 int main()
3 {
4 float x=6.0/4;//也可以写成6/4.0
5 printf("%f\n",x);//输出1.500000
6 return 0;
7 }
5.2 %
运算符%表示求模运算,即返回两个整数相除的余数。%只能用于整数
负数求模规则是:结果的正负号由第一个运算数的正负号决定
1 #include <stdio.h>
2 int main()
3{
4 printf("%d\n",11%-5);//1
5 printf("%d\n",-11%-5);//-1
6 return 0;
7}
6.赋值操作符:=和复合赋值
在变量创建的时候给一个初始值叫初始化,在变量创建好了后,再给一个值,这就叫赋值
1 int a=100;//初始化
2 a=200;//赋值,这里使用的是赋值操作符
赋值操作符也可以连续赋值,但写出的代码不容易理解
C语言中提供了复合赋值符,方便我们写代码:
1 += -=
2 *= /= %=
3 >>= <<=
4 &= != ^=
7.单目操作符:++ – + -
7.1 ++ 和–
++是一种自增的操作符,又分为前置++和后置++,–是一种自减的操作符,也分为前置–和后置–
(前置++与前置–相似,后置++与后置–相似)
7.1.1 前置++
1 int a=10;
2 int b=++a;
3 printf("a=%d,b=%d\n",a,b);//a=11,b=11
计算方法:先+1,后使用
等同于
1 int a=10;
2 a=a+1;
3 int b=a;
4 printf("a=%d,b=%d\n",a,b);
7.1.2 后置++
1 int a=10;
2 int b=a++;
3 printf("a=%d,b=%d\n",a,b);//a=11,b=10
计算方法:先使用,后+1
7.2 +和-
这里 + 是正号,- 是负号,都是单目操作符
运算符+对正负没有影响
运算符- 用来改变一个值的正负号,负数的前面加上 - 就会得到正数
8.强制类型转换
1 (类型)
1 int a=3,14;
2 //a是int类型,3.14是double类型,两边类型不一样,编译器会报警告
3 int a=(int)3.14;
4 //这里将3.14强制类型转换成int类型,只取整数部分3
9.scanf和printf介绍
9.1 printf
9.1.1基本用法
1 #include <stdio.h>
2 int main()
3 {
4 printf("hello word!");
5 return 0;
6 }
屏幕上会输出一行文字“hello word!”
printf()不会在行尾自动添加换行符,运行结束后就停留在输出结束的位置
printf( )在使用前必须在,必须在源码文件头部引入 stdio.h这个头文件
printf返回的是打印在屏幕上的字符的个数
1 printf("%d", printf("%d", printf("%d", 43)));
第三个printf打印43,在屏幕上打印2个字符,再返回2
第二个printf打印2,在屏幕上打印1个字符,再返回1
第一个printf打印1
所以屏幕上最终打印:4321
9.1.2 占位符
printf( )可以在输出文本中指定占位符
所谓“占位符”,就是这个位置可以用其他值代入
9.1.3 占位符列举
- %c:字符
- %d:十进制整数
- %f:小数(包含float和double类型)
- %ld:十进制long int类型
- %o:八进制整数
- %p:指针
- %s:字符串
- %x:十六进制整数
- %zd:size_t类型
9.1.4 输出格式
9.1.4.1 限定宽度
printf( )允许限定占位符的最小宽度
1 #include <stdio.h>
2 int main()
3 {
4 printf("%5d\n",123);//输出“ 123”
5 return 0;
%5d表示这个占位符的宽度至少为5位。如果不满5位,对应的值的前面会添加空格。输出的值默认是右对齐;如果想要改成左对齐,可以在占位符的%的后面插入一个 - 号
1 printf("%-5d\n",123);//输出“123 ”
对于小数
1 #include <stdio.h>
2 int main()
3 {
4 printf("%12f\n", 123.45);//输出“ 123.450000”
5 return 0;
6 }
9.1.4.2 限定小数位数
输出小数时,有时希望限定小数的位数。举例来说希望小数点后面只保留两位小数,占位符可以写成%.2f
1 printf("%.2f\n",0.5);//输出“0.50”
9.1.4.3 输出部分字符串
%s 占位符用来输出字符串,默认全部输出。如果只想输出开头部分,可以用%.[m]s 指定输出长度,其中[m]代表一个数字,表示所要输出的长度
1 #include <stdio.h>
2 int main()
3 {
4 printf("%.5s\n","hello word");//输出hello
5 return 0;
6 }
占位符%.5s 表示只输出字符串"hello word" 的前5个字符,即"hello"
9.2 scanf
我们需要给变量输入值就可以使用scanf 函数。此函数需要引入头文件stdio.h
9.2.1 基本用法
scanf( )函数用于读取用户的键盘输入
1 int a;
2 scanf("%d",&a);//必须要加&
scanf( )处理数值占位符时,会自动过滤空白字符,包括空格,制表符,换行符等
9.2.2 scanf的返回值
scanf( )的返回值是一个整数,表示成功读取的表里个数
如果没有成功读取任何项,或者匹配失败,就返回0.如果在成功读取任何数据之前,发生了读取错误或者遇到读取到文件结尾,则返回常量EOF
1 #include <stddio.h>
2 int main()
3 {
4 int a,b;//输入1 2 3.14
5 flaot f;
6 int r=scanf("%d %d %f",&a,&b,&f);
7 printf("a=%d b=%d f=%f\n",a,b,f);//a=1 b=2 f=3.140000
8 printf("r=%d\n",r);//r=3
9 return 0;
10 }
9.2.3 占位符
scanf( )常见的占位符如下,与printf( )的占位符基本一致
- %c:字符
- %d:整数
- %f: float类型浮点数
- %lf: double 类型浮点数
- %Lf: long double 类型浮点数
- %s: 字符串
上面的占位符中,除了%c 以外,都会自动忽略起首的空白字符。
特别说下%s: - 从当前第一个非空白字符开始读起,直到遇到空白字符(即空格,换行符,制表符等)为止
- %s 不会包含空白字符,所以无法用来读取多个单词
- scanf( )遇到%s占位符,会在字符串变量末尾存储一个空字符\0