一、基本数据类型
数据类型 | 字节数 | 说明 |
---|---|---|
char | 1 | 字符数据类型 |
short | 2 | 短整型 |
int | 4 | 整型 |
long | 4 | 长整型 |
long long | 8 | 更长的整型 |
float | 4 | 单精度浮点数 |
double | 8 | 双精度浮点数 |
示例
// 字符类型
char ch1 = '1';
char ch2 = 'a';
printf("ch1 = %c\n", ch2);
// 短整型
short int a = 11; //-32768-----32767
// 整型
int a1 = 44; //-20亿----20亿
// 长整型
long int a2;
// 查询所占字节
printf("short int = %d\n", sizeof(short int));
// 浮点类型
float b = 3.8f;
// 双浮点型
double b2 = 3.8;
// signed有符号(默认可以省略)
signed int b3 = -6;
// void关键字:用于修饰函数的参数或返回值,代表没有参数或没有返回值
// register只能修饰鼓字符类型或整型
// register可以快速获取到
// register可能存放在寄存器中也可能存在内存中,因此不能对register取地址
// const 修饰常量
const int b4 = 2;
const char ch3 = 'x';
const int b5 = 120;
printf("b5 = %c\n", b5);
printf("ch3 = %d\n", ch3);
二、常量和变量
- 常量:值不可以变的量
变量:值可以变的量
三、格式化输出字符
字符 | 说明 |
---|---|
%d | 十进制有符号整型输出 |
%u | 十进制无符号整型输出 |
%x | 以十六进制表示的整数 |
%o | 以八进制表示的整数 |
%f | float型浮点数 |
%lf | double型浮点数 |
%e | 指数形式浮点数 |
%s | 字符串 |
%c | 单个字符 |
%p | 指针的值 |
%3d | 宽度为3,如果不足,前面空格补齐 |
%03d | 宽度为3,如果不足,前面0补齐 |
%-3d | 宽度为3,如果不足,后面空格补齐 |
%.2f | 小数点后只保留2位 |
四、 类型转换
- 自动转换
- char、short、int参加运算结果都是int
- 当表达式中出现了带小数点的实数,参加运算时会被转换成double类型并且结果也是double类型
- 当表达式中有符号数也有无符号数,参加运算时会变成无符号数参加运算结果也是无符号数
- 在赋值语句中等号右边的类型自动转换成等号左边的类型
- 强制转换
方法 | 说明 |
---|---|
(float)a | 把a的值转换为实型 |
(int)(x+y) | 把x+y的结果转换为整型 |
五、运算符
运算符号 | 简写(等价写法) | 说明 |
---|---|---|
+ | 无 | 加号 |
- | 无 | 减号 |
* | 无 | 乘号 |
/ | 无 | 除号 |
% | 无 | 取余 |
a = a/b | a /= b | a等于a除b |
a = a*b | a *= b | a等于a乘b |
a = a+b | a += b | a等于a加b |
a = a-b | a-= b | a等于a减b |
b=a++ | b=a ---> a+1 | a自加1(先用后加) |
b=++a | a+1 ---> b=a | a自加1(先加后用) |
a ? b:c | 无 | a可以为表达式,a为true则执行b,a为false执行c |
> | 无 | 大于 |
< | 无 | 小于 |
== | 无 | 等于 |
>= | 无 | 大于等于 |
<= | 无 | 小于等于 |
!= | 无 | 不等于 |
&& | 无 | 与 |
|| | 无 | 或 |
! | 无 | 非 |
~ | 无 | 按位取反 |
& | 无 | 按位与运算 |
| | 无 | 按位或运算 |
^ | 无 | 按位异或 |
>> | 无 | 逻辑右移:高位补零,低位溢出 算数右移(有符号数):高位补符号位,低位溢出 |
<< | 无 | 逻辑左移:高位溢出,低位补0 |
六、 原码,反码,补码
- 正数的原码=反码=补码
- 负数在内存中用反码表示
- 补码就是反码+1
- 例如 5 的原码=反码=补码为0000 0101;-5的原码为1000 0101;-5的反码为1111 1010;-5的补码为1111 1011
七、控制语句
- if判断
//判断后执行多行语句
if(条件表达式)
{
}
//判断后执行一行
if(条件表达式) return (语句);
- switch
switch (表达式)
{
case 常量表达式:
语句
break;
default:
break;
}
- for循环
// 表示定义i=0,,每次循环判断i<10是否为true,如果为false执行i++然后继续执行循环代码然后再继续判断
for (int i = 0; i < 10; i++)
{
循环代码
}
- while(先判断后执行)
// 如果条件表达式为true则循环执行循环代码
while (条件表达式)
{
循环代码
}
- do.....while(先循环再判断)
do
{
// 先执行一遍的代码,然后再执行while循环,如果条件表达式为true则继续执行do内的循环代码
} while (条件表达式);
- goto
goto temp; //执行这一段会直接跳到temp标记的地方
printf("ttttttttt\n");
printf("ttttttttt\n");
printf("ttttttttt\n");
printf("ttttttttt\n");
temp:
printf("tt12121212\n");//整个代码只输出这一行
八、数组
- 数组分类
// 字符数组
char s[10];
// 短整型的数组
short int a[10];
// 整型数组
int a[10];
// 长整型数组
long int a[10];
// 浮点型的数组(单、双)
float a[6];
double a[8];
// 指针数组
char *a[10];
int *a[10];
// 结构体数组
struct stu boy[10];
- 数组定义
// 定义一个名为b的数组,长度为10,且每个元素都是char类型
char b[10];
// 定义一个二维数组
int int a1[3][4];
// 定义多维数组
int a[8][3][4][5];//四维数组
- 数组初始化
// 定义数组
int a[][3];
// 初始化数组
int a= {
{1,2,3},
{4,5,6},
{7,8,9}
};
- 数组的引用
int a[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}};
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
printf("%d\n", a[i][j]);
}
printf("\n");
}
九、函数
- 有参函数
// 有形参的函数:
// a,c为形参,fun为函数名称,fun前的int为函数的返回值类型
int fun(int a,int c){
return a+c; //a+c返回的值为int类型对应fun前的int
}
- 无参函数
// 无参函数:
void fun(){
}