目录
1.数据类型介绍
C语言提供了很多种数据类型来描述生活中的各种数据。
比如:使用整型类型来描述整数,使用字符类型来描述字符,使用浮点数类型来描述小数。
所谓“类型”,就是相似的数据所拥有的共同特征,编译器只有知道数据的类型,才能知道怎么操作数。
C语言提供的数据类型有:
1.1字符型
1 char
2 signed char //有符号的
3 unsigend char //无符号的
1.2 整型
1 //短整型
2 short //分有符号和无符号
3 //整型
4 int //分有符号和无符号
5 //长整型
6 long int //分有符号和无符号
7 //更长的长整型
8 long long [int] //分有符号和无符号
1.3 浮点数
1 float
2 double
3 long double
1.4 布尔类型
1 _Bool
在没有布尔类型之前,使用整数0表示假,非零值表示真
作用:用来表示真假。
使用要包含头文件<stdbool,h>
取值:true或者false
1.5 各种数据类型的长度
每种数据类型都有自己的长度,变量长度的不同,存储的数据范围就有所差异。
1.5.1 sizeof操作符
sizeof是一个关键字,也是一个操作符,专门用来计算sizeof的操作数的类型长度的,单位是字节。
sizeof操作符的操作数可以是类型,也可以是变量或者表达式。
sizeof后面的表达式是不参与计算的,根据表达式的类型来得出大小。
sizeof在代码进行编译的时候,就根据表达式的类型确定了,而表达式的执行却要在程序执行期间才能执行。
sizeof (类型)
sizeof 表达式 //a=b+1 如果a是整型,则计算结果为四个字节,与b+1无关
sizeof的计算结果是size_t类型。
size_t表示无符号整数。
1.5.2 数据类型长度
int main()
{
printf("%zd\n", sizeof(int));
printf("%zd\n", sizeof(unsigned int));
printf("%zd\n", sizeof(short));
printf("%zd\n", sizeof(char));
printf("%zd\n", sizeof(unsigned char));
printf("%zd\n", sizeof(float));
printf("%zd\n", sizeof(double));
printf("%zd\n", sizeof(long long));
printf("%zd\n", sizeof(_Bool));
return 0;
}
运行结果:
2.signed和unsignd
C语言使用signed和unsigned关键字修饰字符型和整形类型。
signed表示有符号,而unsigned表示无符号。
1 signed int //取值范围:-32768~32767
2 unsigned int // 取值范围:0~65535
整型变量声明为unsigned的好处是,同样的长度的内存能表示的最大整数值,增大了一倍。
字符类型:
1 signed char //范围为:-128~127
2 unsigned char //范围为:)0~255
在VS2022上,char表示signed char。
4.变量
4.1 变量的创建
C语言中把变化的值称为变量,不变的值称为常量。
创建变量的语法形式如下:
data_type name;
| |
数据类型 变量名
比如:
1 int a; //整型变量
2 cahr ch; //字符变量
3 double d; //浮点型变量
变量在创建的时候要给一个初始值,叫初始化。
1 int age=20;
2 char ch=‘w’;
3 double w=120.0;
4.2 变量的分类
- 全局变量:再打括号外部定义的变量就是全局变量,全局变量的适用范围更广,整个工程都可以使用
- 局部变量:在大括号内部定义的变量就是局部变量,局部变量使用范围比较局限,只能在自己所在的局部范围内使用
#include<stdio.h >
int b=0; //全局变量
int main()
{
int a=0; //局部变量
return 0;
}
当局部变量和全局变量同名时,局部变量优先使用。
内存中分为三个区域:栈区,堆区,静态区。
局部变量存放在内存的栈区。
全局变量存放在内存的静态区。
4.算术操作符:+,-,*,/,%
我们在写代码的时候,一定会涉及到计算。
而在C语言中为了方便运算,提供了一系列操作符,其中有一组操作符叫:算术操作符。分别是:+,-,*,/,%,这些操作符都是双目操作符。(操作符也叫做运算符)。
4.1 +和-
分别完成加法和减法功能,都有2个操作数。
int a = 1+!;
int b = 2-1;
printf("%d\n",a);
printf("%d\n",b);
4.2 *和/
分别完成乘法和除法功能。除非需要特别注意:如果除法两端操作数是整数,则结果也是整数;如果有一个操作数是浮点数,则结果是浮点数。
int a = 3*3;
printf("%d\n",a);
int b = 4/2;
float c =8.0/2; //结果是:4.0
float d=6/4; //结果是:1.0而不是1.5,因为两个操作都是整数,所以只返回整数部分!
4.3 %
表示求模运算,即返回两个整数相除的余值。这个运算符只能用于整数,不能用于浮点数。
负数求模规则是,结果的正负号由第一个运算数的正负号决定。
int a = 6%4; //结果为:2
int b = -11%5; //结果为:-1
int b = 11%-5; //结果为:1
5.赋值操作符:=和复合赋值
变量创建的时候给一个初始值叫初始化,在变量创建好后,再给一个值,这叫赋值。
int a = 100; //初始化
a = 200; //赋值
赋值操作符 = 是一个随时可以给变量赋值的操作符。
5.1 连续赋值
int a = 3;
int b = 4;
int c = 0;
c = b =a+3;//连续赋值
C语言虽然支持连续赋值,但是写出的代码不容易理解,建议拆开来写,方便观察代码的执行细节。
5.2 复合赋值符
在写代码的时候,会经常对一个数进行自增,自减的操作
int a = 1;
a = a+3;
a = a-1;
//为了方便我们可以写成
a +=3;
a -=1;
C语言提供了复合赋值符,方便我们编写代码,有如下;
1 += -=
2 *= /= %=
3 >>= <<=
4 &= |= ^=
6.单目操作符:++,--,+,-
C语言中有一些操作符只有一个操作数,被称为单目操作符。++,--,+,-这些为单目操作符
6.1 ++和--
++是一种自增操作符,又可分为前置++和后置++,--是一种自减操作符,又可分为前置--和后置--。
6.1.1前置++
计算方式:先+1,后使用
int a = 10;
int b = ++a; //a先+1变为11,后赋值给b,a和b都变成11
6.1.2后置++
计算方式:先使用,后+1
int a = 10;
int b = a++; //a先赋值给b,b=10,然后a+1,变成11
6.1.3前置--
计算方式:先-1,后使用
int a = 10;
int b = --a; //a先-1,变成9,然后赋值给b,b=9
6.1.4后置--
计算方式:先使用,后-1
int a = 10;
int b = a--; //a先赋值给b ,b = 10,然后a-1变成9.
7.强制类型转换
在操作符中有一类特殊的操作符是强制类型转换,如下:
语法形似 (类型)
int a = 3.14; //a是int类型但是赋值3.14是浮点数可以使用以下方式
int a = (int)3.14; //把3.14强制转换为int类型,这样只取整数部分
8.scanf和printf介绍
8.1printf
printf()作用是将参数文本输出到屏幕,使用printf函数要包含头文件#include<stido.h>
#include<stdio.h>
int main()
{
printf("hello world");
return 0;
}
输出结果:
如果想换行在末尾添加换行符 \n .
8.2占位符
占位符就是这个位置可以用其他值代入。
#include <stdio.h>
int main()
{
int a = 10;
printf("%d\n", a);
return 0;
}
这里占位符%d用a值替换掉;
常见的占位符有:%d(整数),%c(字符),%s(字符串),%f(浮点数)。
8.3输出格式
printf()可以定制占位符的输出格式。
8.3.1 限定宽度
允许限定占位符的最小宽度。
printf(“%5d\n”,123); //输出为: 123
上面的%5d表示这个占位符的宽度至少为5位,如果不满5位,对应的值前面会添加空格。
8.3.2 限定小数位数
输出小数是,有时候需要保留小数后面两位,占位符可以写成 %.2f
printf(“%.2f”,3.1415); //输出结果为:3.14
8.3.3输出部分字符串
%s占位符是用来输出I字符串,默认全部输出,如果只想输出前面一部分,可以使用%.[m]s来指定输出长度,[m]代表一个数字。
printf(“%.5s\n”,"hello world"); //结果为:hello
8.4 scanf
scanf函数用于读取用户的键盘输入。
语法形式:
scanf(“%d”,&i);
#include<stdio.h>
int main()
{
int a = 0;
scanf("%d", &a);
printf("%d\n", a);
return 0;
}
输入10,然后输出10.
scanf函数在处理占位符时,会自动过滤空白字符,包括空格,制表符,换行符等。
8.5 scanf返回值
scanf函数的返回值是一个整数,表示成功读取的变量个数
如果没有读取任何项,值返回0,如果在读取任何数据之前,发生了读取错误或者遇到读取文件结尾,则返回常量EOF。
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
float f = 0.0f;
int r = scanf("%d %d %f", &a, &b, &f);
printf("a=%d b=%d f=%f\n", a, b, f);
printf("r = %d\n", r);
return 0;
}
结果如下:
如果输入2个数后,按ctrl+z,提前结束输入:
如果一个都不输入,直接按ctrl+z 三次,则输出-1