C/C++基础
1.基本数据类型
- 整型 ,一个整型
int
占用32bit, 也即4Byte, 取值范围 − 2 31 -2^{31} −231
~ + ( 2 31 − 1 ) +(2^{31}-1) +(231−1)(约为 1 0 9 10^9 109)。 - 浮点型 ,对单精度
float
来说,一个浮点数占用32bit,其中1bit作为符号位、8bit作为指数位、23bit作为尾数位,有效精度6-7位;对双精度double
来说,一个浮点数占用64bit, 其中依照浮点数的标准,1bit作为符号位、11bit作为指数位、52bit作为尾数位,有效精度15-16位。一般只使用double存储浮点数。 - 字符型 ,
char
字符型使用ASCII码统一编码, 标准ASCII码的范围是0~ 127,小写字母比大写字母的ASCII码值大32;
修饰符类型
C++ 允许在char
、int
和double
数据类型前放置修饰符。有signed
、unsigned
、long
和short
四种。
修饰符 signed、unsigned、long 和 short 可应用于整型,signed 和 unsigned 可应用于字符型,long 可应用于双精度型。修饰符 signed 和 unsigned 也可以作为 long 或 short 修饰符的前缀。
C++ 允许使用速记符号来声明无符号短整数或无符号长整数。可以不写 int,只写单词 unsigned、short 或 unsigned、long,int 是隐含的。
2.输入输出控制
-
C中的
scanf
和printf
输入/输出
-
C++中的
cin
和cout
输入/输出
需要添加头文件#include <iostream>
和 声明using namespace std;
才能使用。用法:cin>>n; cout<<n; -
C中的
getchar()
、putchar()
和gets()
、puts()
;
getchar用来输入单个字符(可读回车), putchar用来输出单个字符,gets()用来输入一行(包括空格),puts()用来输出一行(包括空格)。 -
C++中的
cin.get()
、cin.getline()
、getline()
;
///getline()接受一个字符串,可以接收空格并输出
string str; getline(cin,str);
///cin.getline()接受一个字符串,可以接收空格并输出
char m[20]; cin.getline(m,5); //(1)实际最多接收4个字符+1个’\0’
char m[20]; cin.getline(m,5,’a’); //(2)接收‘a’前的字符串
///cin.get()接受一个字符或字符串,可以接收空格并输出
char ch; ch=cin.get(); //(1)接受单个字符
char a[20]; cin.get(a,20); //(2)接受字符串,与cin.getline()类似,但不忽略回车
3.常用数学运算
需要引用数学头文件 cmath
fabs(double);
返回浮点数的绝对值abs(int);
返回整数的绝对值floor(double);
返回浮点数的向下取整值ceil(double);
返回浮点数的向上取整值round(double);
返回浮点数的四舍五入值pow(double r,double p);
返回 r p r^p rpsqrt(double);
返回算术平方根log(double);
4.数组
- 如果数组大小较大(大概 1 0 6 10^6 106 级别), 则需要将其定义在主函数外面, 否则会使程序异常退出。
- memset函数可对数组中每一个元素赋相同的值
memset(a,0,sizeof(a));
5.字符串
C风格的字符串
实际上是使用 null 字符 ‘\0’ 终止的一维字符数组。
char str[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
等价于char str[] = "Hello";
string.h头文件包含了字符数组的函数:
strlen(s1);
返回字符串 s1 的长度。strcmp(s1, s2);
如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回值小于 0;如果 s1>s2 则返回值大于 0。strcpy(s1, s2);
复制字符串 s2 到字符串 s1。strcat(s1, s2);
连接字符串 s2 到字符串 s1 的末尾。
C++ 引入的 string 类类型
string可以直接通过cin读取,通过cout输出。但通过scanf时需要预先分配空间,通过printf输出需要将string转换成字符串数组。
string a;
a.resize(100); //需要预先分配空间
scanf("%s", &a[0]);
printf("%s\n", a.c_str()); //c_str()将string转换成char[]
string对象的操作:
s.empty()
如果s为空串,则返回true,否则返回falses.size()=s.length()
返回字符串长度s.substr(n)
获得字符串s中从第n位开始到末尾的字符串
s.substr(n,l)
获得字符串s中从第n位开始长度为l的字符串s=s1+s2
把s1和s2链接成一个新的字符串s1=s2
把s1内容替换为s2的副本==,!=, <, <=, >, >=
保持这些操作的惯有含义s=to_string(n)
c++11函数,将数值转换成stringatoi(str.c_str())
和stoi(str,[n],[a])
c++11函数,将string转换成数值,有效10位s.upper()
转换为大写;s.lower()
转换为小写insert()
和erase()
str.find("s")==string::npos
判断是否能在str中找到字符s
6.指针和引用
指针
指针变量存放的是地址,在普通数据类型后加*来表示这是指针变量,如int* p
、double* p
、char* p
,p是指针变量名。
int a; int* p = &a;
等价于int a; int* p; p = &a;
引用
C++中的引用符号&,与C中的取地址符&没有关系。
引用是对原变量取的别名,在函数传参中使用int &a
,a是对原始变量n直接进行操作。
7.结构体
可以使用结构体内构造函数对结构体进行初始化
struct stu{
int id;
int age;
//自定义构造函数
stu(int _id,int _age):id(_id),age(_age){}
} stuinfo;
这样可以在main函数中直接对结构体变量进行赋值了
stuinfo=stu(17220000,20);