C语言-数据类型和变量(速学!)
数据类型
凡是生活中的东西要摄入计算机,那就称之为数据,而数据有很多种,从而计算机中就有了数据类型
字符:
[signed] char//有符号字符
unsigned char//无符号字符
- signed 和 unsigned
C语言使用 signed 和 unsigned 关键字修饰字符(char)和整型(int)类型的。
signed 关键字,表示一个类型带有正负号,包含负值;
unsigned 关键字,表示该类型不带有正负号,只能表示零和正整数。
C 语言规定 char 类型默认是否带有正负号,由当前系统决定。
整形:
- signed 和 unsigned
对于 int 类型,默认是带有正负号的,也就是说 int 等同于 signed int 。默认情况,关键字 signed ⼀般都省略不写,int 类型也可以不带正负号,只表示非负整数。unsigned int 里面的 int 可以省略,。 - 短整型
short [int]
[signed] short [int]
unsigned short [int]
- 整型
int
[signed] int
unsigned int
- 长整型
long [int]
[signed] long [int]
unsigned long [int]
- 更长的整型
C99中引入
long long [int]
[signed] long long [int]
unsigned long long [int]
浮点型:
float(单精度)
double(双精度)
long double
布尔型:
0表示假
非零表示真
值为true或false
数据类型的取值范围
每⼀种数据类型有自己的取值范围,也就是存储的数值的最大值和最小值的区间。
为了代码的可移植性,需要知道某种整数类型的极限值时,应该尽量使用这些常量:
- SCHAR_MIN , SCHAR_MAX :signed char 的最小值和最大值。
- SHRT_MIN , SHRT_MAX :short 的最小值和最大值。
- INT_MIN , INT_MAX :int的最小值和最大值。
- LONG_MIN , LONG_MAX :long 的最小值和最大值。
- LLONG_MIN , LLONG_MAX :long long 的最小值和最大值。
- UCHAR_MAX :unsigned char 的最大值。
- USHRT_MAX :unsigned short 的最大值。
- UINT_MAX :unsigned int 的最大值。
- ULONG_MAX :unsigned long 的最大值。
- ULLONG_MAX :unsigned long long 的最大值。
变量
类型是用来创建变量的。C语言中把经常变化的值称为变量,不变的值称为常量。
变量创建的语法形式是这样的:
数据类型+变量名
data_type name;
int age;//整形变量
int age = 18;//初始化
变量分类
- 全局变量(放在内存的静态区)
在大括号外部定义的变量就是全局变量
全局变量的使用范围更广,整个工程中想使用,都是有办法使用的。 - 局部变量 (放在内存的栈区)
在大括号内部定义的变量就是局部变量
局部变量的使用范围是比较局限,只能在自己所在的局部范围内使用的。
#include <stdio.h>
int global = 2023;//全局变量
int main()
{
int local = 2018;//局部变量
printf("%d\n", local);
printf("%d\n", global);
return 0;
}
局部变量和全局变量同名的时候,局部变量优先使⽤,遵循就近原则
算术操作符:+、-、*、/、%
+(加法)、-(减法)
#include <stdio.h>
int main()
{
int x = 4 + 22;
int y = 61 - 23;
printf("%d\n", x);
printf("%d\n", y);
return 0;
}
*(乘法运算)
#include <stdio.h>
int main()
{
int num = 5;
printf("%d\n", num * num); // 输出 25
return 0;
}
/(除法运算)
#include <stdio.h>
int main()
{
float x = 6 / 4;
int y = 6 / 4;
printf("%f\n", x); // 输出 1.000000
printf("%d\n", y); // 输出 1
return 0;
}
C 语言里面的整数除法是整除,只会返回整数部分,丢弃小数部分。
如果希望得到浮点数的结果,两个运算数必须至少有⼀个浮点数
#include <stdio.h>
int main()
{
float x = 6.0 / 4; // 或者写成 6 / 4.0
printf("%f\n", x); // 输出 1.500000
return 0;
}
%(求模运算,即返回两个整数相除的余值)
#include <stdio.h>
int main()
{
printf("%d\n", 11 % -5); // 1
printf("%d\n",-11 % -5); // -1
printf("%d\n",-11 % 5); // -1
return 0;
}
负数求模的规则是,结果的正负号由第一个运算数的正负号决定。
赋值运算符
在变量创建的时候给一个初始值叫初始化,在变量创建好后,再给一个值,这叫赋值。
int a = 100;//初始化
a = 200;//赋值,这⾥使⽤的就是赋值操作符
- 连续赋值
int a = 3;
int b = 5;
int c = 0;
c = b = a+3;//连续赋值,从右向左依次赋值的。
- 复合赋值
int a = 10;
a = a+3;
a = a-2;
这样代码C语⾔给提供了更加⽅便的写法:
int a = 10;
a += 3;
a -= 2;
以下这些都是赋值运算符
+= -= *= /= %= >>= <<= &= |= ^=
单目操作符: ++、- -、+(正)、-(负)
- ++是一种自增的操作符,又分为前置++和后置++,- -是一种自减的操作符,也分为前置- -和后置- -.
前置++:先+1,后使用;
后置++:先使用,后+1;
前置- -:先-1,后使用;
后置- -:先使用,后-1;
强制类型转换
int a = (int)3.14;//意思是将3.14强制类型转换为int类型,这种强制类型转换只取整数部分
scanf函数
给变量输入值就可以使用scanf 函数
#include <stdio.h>
int main()
{
int score = 0;
printf("请输⼊成绩:");
scanf("%d", &score);
printf("成绩是:%d\n", score);
return 0;
}
scanf() 提供了⼀个赋值忽略符(assignment suppression character)*。只要把 * 加在任何占位符的百分号后⾯,该占位符就不会返回值,解析后将被丢弃。
printf()函数
printf() 的作用是将参数⽂本输出到屏幕。它名字里面的 f 代表 format (格式化),表示可以定制输出文本的格式。
#include <stdio.h>
int main()
{
printf("Hello World\n");
return 0;
}
占位符
printf() 可以在输出⽂本中指定占位符。
所谓 “占位符”,就是这个位置可以⽤其他值代⼊。
#include <stdio.h>
int main()
{
printf("There are %d apples\n", 3);//%d就是占位符
return 0;
}
其他的占位符
- %a :十六进制浮点数,字母输出为小写。
- %A :十六进制浮点数,字母输出为大写。
- %c :字符。
- %d :十进制整数。
- %e :使用科学计数法的浮点数,指数部分的 e 为小写。
- %E :使用科学计数法的浮点数,指数部分的 E 为大写。
- %i :整数,基本等同于 %d 。
- %f :小数(包含 float 类型和 double 类型)。
- %g :6个有效数字的浮点数。整数部分一旦超过6位,就会自动转为科学计数法,指数部分的 e
为小写。 - %G :等同于 %g ,唯一的区别是指数部分的 E 为大写。
- %hd :十进制 short int 类型。
- %ho :八进制 short int 类型。
- %hx :十六进制 short int 类型。
- %hu :unsigned short int 类型。
- %ld :十进制 long int 类型。
- %lo :八进制 long int 类型。
- %lx :十六进制 long int 类型。
- %lu :unsigned long int 类型。
- %lld :十进制 long long int 类型。
- %llo :八进制 long long int 类型。
- %llx :十六进制 long long int 类型。
- %llu :unsigned long long int 类型。
- %Le :科学计数法表示的 long double 类型浮点数。
- %Lf :long double 类型浮点数。
- %n :已输出的字符串数量。该占位符本身不输出,只将值存储在指定变量之中。
- %o :八进制整数。
- %p :指针。
- %s :字符串。
- %u :无符号整数(unsigned int)。
- %x :十六进制整数。
- %zd : size_t 类型。
- %% :输出一个百分号。