1.用于输入输出
#include<stdio.h>
#include<cstdio>
以上两种书写方式等价
2.变量名的第一个字符必须是字母或下划线
3.整型
有:int 和 long long
绝对值在十的9次方范围内或者是32位数字的整形都可以定义成int 型 ,用%d输出
绝对值在十的18次方以内或者64位整数就用long long
注意:如果 long long 型赋大于二的三十一次方减一的初值,则需要在初值后加上LL
long long bignum=123456789012345LL
不知道到底是多大,保险一点用到long long 的时候,就都在初值后加上 LL 吧
4.浮点型
单精度float: 6~7位有效精度
双精度double:15~16位有效精度
其中 %f 是float和double型的输出格式
注意:对浮点型来说,只要记住一点,不要使用float, 碰到浮点型的数据都应该使用 double 来存储。
5.字符型
字符变量:int num ,char c,其中m 和 c 的值都能改变,所以称为变量
字符常量:字符常量(必须是单字符)必须用单引号标注,例如:'Z' 'J' 'U'
#include<stdio.h>
//#include<cstdio>
#include<math.h>
//#include<cmath>
#include<string.h>
//#include<cstring>
int main(){
char c1='z',c2='j',c3=117;
printf("%c%c%c",c1,c2,c3);
return 0;
}
解读:在计算机内部,字符就是按照ASCII码存储的,‘u’的ASCII码就是117,因此把117赋值给c3就是把ASCII码赋值给c3
%c是char型的输出格式
6.转义字符
换行通过“\n”表示
Tab键通过"\t"来表示(就是空格)
空字符NULL用"\0"来表示
例子:
#include<stdio.h>
using namespace std;
int main(){
int num1=1;
int num2=2;//直接定义了,不用输入了,scanf函数用不上了
printf("%d\n\n%d\n",num1,num2);
printf("%c",'7');
return 0;
}
结果:
如果把'7' 改为单纯的数字:
结果并不会输出数字7,因为ASCII为7的字符是控制字符,并且控制响铃,计算机会响一下
结果:
7.字符串常量
就是双引号标记的字符集,例如:"WoAiNi"
C语言中只能用字符数组的方式,C++中可以用string类型
字符串常量可以作为初值赋给字符数组,并使用%s的格式输出。
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
char str1[25]="ni tou fa luan le";//字符数组str1[25]
char str2[35]="xie xie ni";//字符数组str2[35]
printf("%s,%s",str1,str2);
return 0;
}
结果:
注意:不能把字符串常量赋值给字符变量,错误写法:char c="abcd" , 其中 c 是字符常量。
8.布尔型(bool 型)
在C++中直接使用,C语言中需要添加头文件<stdbool.h>
取值只能是true 或者 false ,分别代表 非零(正整数和负整数) 和 零。
赋值时,可直接使用true 或者 false 进行赋值,也可使用整型变量进行赋值,只不过整型变量在赋值给bool 型变量时会自动转换为 true 或者 false.
对计算机来说,true 和 false 在存储时分别为 1 和 0 ,如果使用%d 输出 bool 型变量,则 true 和 false 会输出 1(true)
和 0(false)
例子:
#include<stdio.h>
using namespace std;
int main(){
bool flag1=0,flag2=true;
int a=1,b=1;
printf("%d %d %d\n",flag1,flag2,a==b);
return 0;
}
结果:
分析:计算机把 a==b 作为条件进行判断,符合即为true
9.强制类型转换
格式如下:(新变量名)变量名
只需要把需要变成的类型用括号括着写在前面就行了
例子:
#include<stdio.h>
int main(){
double r=12.56;
int a=3,b=5;
printf("%d\n",(int)r);
printf("%d\n",a/b);
printf("%.1f",(double)a/(double)b);
return 0;
}
结果:
分析:
(1)a/b 整数除以整数在计算机中视为整除操作,不会自动变为浮点数
如果想进行平常认知中的除法,前面加一个 double 就好了 (double)a/(double)b
(2)%.1f 意思是保留一位小数输出
10.符号常量和const常量
符号常量:
就是“替换”,用一个标识符来代替常量,又称为“宏定义”或者”宏替换“
格式为:#define 标识符 常量
#define pi 3.14 (注意末尾不加分号 : !!!)
例子:
#include<stdio.h>
#define pi 3.14
int main(){
double r=3;
printf("%f\n",pi*r*r);
return 0;
}
const常量 :
格式: const 数据类型 变量名=常量;
const double pi=3.14; (注意要加上分号 ; !!!)
#include<stdio.h>
using namespace std;
const double pi=3.14;
int main(){
double r=3;
printf("%.2f\n",2*pi*r);
return 0;
}
总结:以上两种方法均成为变量,一旦确定就不能更改,例如pi=pi+1 这种写法是不对的。
推荐使用const
拓展:define 除了可以定义常量外,还可以定义任何语句或片段
格式举例:#define ADD(a,b) ((a)+(b))
功能解释:可以直接使用 ADD(a,b) 来代替 a+b 的功能。
举例:
#include<stdio.h>
using namespace std;
#define ADD(a,b) ((a)+(b))
int main(){
int num1=3,num2=5;
printf("%d",ADD(num1,num2));
return 0;
}
注意:(a)(b)要单独加括号呀!因为宏定义是直接将对应的部分替换,然后才进行编译和运行
#include<stdio.h>
using namespace std;
#define cal(x) (x*2+1)
int main(){
int a=1;
printf("%d\n",cal(a+1));
return 0;
}
结果:
分析:为什么答案不是 5 呢?
答:这是宏定义的陷阱,它把替换的部分直接原封不动替换进去,导致cal(a+1)实际是(a+1*2+1)