命名规范:(1)由英文字母、数字、下划线_和 $ 组成;(2)数字不可以开头;(3)不能有空格;(4)不可以使用关键字和保留字,但可以包含关键字和保留字;(5)严格区分大小写。
一. 数据类型
1. 基本数据类型
数据类型 | 大小 | 表示范围 | 输出占位符 | |
char | char (signed char) | 1字节 | - — -1 | %c |
unsigned char | 0 — -1 | |||
short | short(signed short) | 2字节 | - — -1 | %d |
unsigned short | 0 — -1 | |||
int | int (signed int) | 4字节 | -— -1 | %d(十进制) %o(八进制) %x(十六进制) |
unsigned int | 0 — -1 | |||
long | long (signed long) | 8字节 | - — -1 | %ld |
unsigned long | 0 — -1 | |||
float | float | 4字节 | 1.2E-38 — 3.4E+38 | %f(默认6位小数) %.2f(保留两位小数) |
double | double | 8字节 | 2.3E-308 — 1.7E+308 | %lf(默认6位小数) %.2lf(保留两位小数) |
字符串 | char str[] | %s |
注意:(1)float是单精度,6位小数,声明为float型时,需要在后面加“f”或者“F”;double是双精度,15位小数。(2)布尔类型可以使用整数0表示假且非0表示真,或者引入<stdbool.h>使用bool flag = true / false(2)C语言中没有字符串类型,使用字符数组来表示字符串
2. 类型转换
(1)自动类型转换
当容量(表示数的范围)小的数据类型的变量和容量大的数据类型的变量做运算时,其结果自动提升为容量大的数据类型。
char、short → int → unsigned int → long → unsigned long → loat → double
#include<stdio.h> // 使用 printf 需要引入 <stdio.h> 头文件
int main(){
char c = 'a'; // 97
int i = 1;
double d = 1.3;
int sum1 = c + i;
double sum2 = i + d;
printf("sum1 = %d \n", sum1); // sum1 = 98
printf("sum2 = %lf \n", sum2); // sum2 = 2.300000
return 0;
}
(2)强制类型转换
需要使用强转符:()
#include<stdio.h>
int main(){
double d = 1.32;
int num = (int) d;
printf("num = %d \n", num); // num = 1
int res1 = (int) 3.51 * 10 + 1.5 * 6;
int res2 = (int) (3.51 * 10 + 1.5 * 6);
printf("res1 = %d \n", res1); // res1 = 39
printf("res2 = %d \n", res2); // res2 = 44
return 0;
}
3. 常量
常量不能被改变,不能重复定义。
(1)#define
定义常量:#define 常量名 常量值
#include<stdio.h>
#define pi 3.14 //定义宏常量(定义常量的时候推荐使用define)
int main(){
printf("常量的值是: %f \n", pi); // %f是占位符,表示把pi的值放在%f处, 默认保留6位小数
return 0;
}
define在定义时没有数据类型,在参与运算时只是简单的替换
#include<stdio.h>
#define A 4
#define X A
#define B A - 2
#define C (A - 2)
#define D A / B * 3
#define E A / C * 3
int main(){
printf("X = %d \n", X); // 4
printf("D = %d \n", D); // A / A - 2 * 3 = -5
printf("E = %d \n", E); // A / (A - 2) * 3 = 6
return 0;
}
define可以配合#undef(取消定义)、#ifdef(如果定义了,必须与#endif配合使用)、 #ifndef(如果没有定义,必须与#endif配合使用)、#endif 来使用,可以让代码更加灵活
#include<stdio.h>
#define pi 3.14
#undef pi //取消定义
#define pi 3.1415926 //再次定义
int main(){
#ifdef pi
printf("pi = %f\n", pi); // pi = 3.1415926
#endif
#ifndef pi
printf("pi未定义");
#endif
return 0;
}
(2)const
定义常量:const 数据类型 常量名 = 常量值
#include<stdio.h>
int main(){
const double pi = 3.14; //定义常量的方式2
printf("常量的值是: %f\n", pi);
return 0;
}
4. 枚举类型
(1)第一个枚举成员如果不赋值的话默认值为整型的0,后续枚举成员的值在前一个成员上加1。(2)如果把第一个枚举成员的值定义为 1,则第二个就为 2,以此类推。(3)枚举变量的定义形式1:先定义枚举类型,再定义枚举变量。(4)枚举变量的定义形式2:定义枚举类型的同时定义枚举变量 。(5)整数可以转成一个枚举值
#include<stdio.h>
int main(){
enum DAY{
Mon = 1, Tue = 2, Wen = 3, Thu = 4, Fri = 5, Sat = 6, Sun = 7
};
enum DAY day = Wen; // enum DAY 是枚举类型,day 是变量
printf("日期: %d \n", day); // 日期: 3
return 0;
}
#include<stdio.h>
enum DAY{
Mon = 1, Tue, Wen, Thu, Fri, Sat, Sun
}day; // 定义了一个枚举类型 enum DAY,同时定义了一个枚举类型的变量 day
int main(){
day = Wen; // enum DAY 是枚举类型,day 是变量
printf("日期: %d \n", day); // 日期: 3
for (day = Mon; day <= Sun; day++) {
printf("%d ", day);
}
int i = 1;
day = (enum DAY) i;
printf("日期: %d \n", day); // 日期: 3
return 0;
}
5. 键盘输入语句
引入#<stdio.h>,使用scanf语句,使用适当的参数接收输入
#define _CRT_SECURE_NO_WARINGS //scanf会在VSCode里报错,需要在最开始的位置添加该行代码
#include<stdio.h>
int main(){
//输入整型
int i;
printf("请输入数据:");
scanf("%d", &i); // &表示取地址运算符,将键盘输入的数据放到变量 i 指向的地址中
printf("输入的数据是:%d \n", i);
//输入浮点型
double d;
printf("请输入数据:");
scanf("%lf", &d); // &表示取地址运算符,将键盘输入的数据放到变量 d 指向的地址中
printf("输入的数据是:%lf \n", d);
//输入字符串
char str[10];
printf("请输入数据:");
scanf("%s", &str); // &表示取地址运算符,将键盘输入的数据放到变量 str 指向的地址中
printf("输入的数据是:%s \n", str);
return 0;
}
6. 位运算
原码,反码,补码:对于有符号的数来说,① 二进制的最高位是符号位,0表示正数,1表示负数;② 正数的原码,反码,补码都一样;③ 负数的反码=它的原码符号位不变,其它位取反;④ 负数的补码=它的反码+1;⑤ 0的反码,补码都是0;⑥ 在计算机运算的时候,都是以补码的形式来运算的。
& | 按位与运算,按二进制位进行与操作 运算规则:0 & 0 = 0; 0 & 1 = 0; 1 & 0 = 0; 1 & 1 = 1 |
| | 按位或运算,按二进制位进行或操作 运算规则:0 | 0 = 0; 0 | 1 = 1; 1 | 0 = 1; 1 | 1 = 1 |
^ | 按位异或运算,按二进制位进行异或操作 运算规则:0 ^ 0 = 0; 0 ^ 1 = 1; 1 ^ 0 = 1; 1 ^ 1 = 0 |
~ | 按位取反运算,按二进制位进行取反操作 运算规则:~ 0 = 1; ~ 1 = 0 |
<< | 二进制左移运算符,将一个运算对象的各二进制位全部左移若干位 (左边的二进制位丢弃,右边补0) |
>> | 二进制右移运算符,将一个运算对象的各二进制位全部右移若干位 (正数左补0,负数左补1,右边的二进制位丢弃) |