第二章 C/C++快速入门
1. C和C++部分区别
输入输出,指针引用
C语言的scanf和printf比C++的cin和cout要快
2. 头文件是什么
#include<stdio.h>
例如stdio是标准输入输出库,.h是头文件的文件格式。文件中包含一些跟输入输出有关的东西,程序需要输入输出的时候,需要引用头文件才能使用文件里的输入输出函数
在C++中,推荐使用cstdio代替stdio.h,即#include<cstdio>和#include<stdio.h>是等价的。其他文件例如math.h和cmath也是等价的,所以在C++中可以使用前缀加一个c并去掉后面.h
3. 主函数是一个程序的入口位置,一个程序最多只有一个主函数
int main(){ ... }
4. 输入输出
scanf("%d%d",&a,&b); printf("%d",a+b);
scanf用来读入数据,%d是int型的输入输出标识
5. C++向下兼容C,对于C语言文件可以选择保存成.cpp格式
6. 变量名
不能是C语言标识符
第一个字符必须是字母或者下划线,吃了第一个字符以外,其他字符必须是字母、数字、下划线
变量名区分大小写
7. 整型用%d表示
短整型short
整型int:一般一个整数占用32位即4字节,10^9(2^31)以内都可以定义成int
长整型long long:一般一个整数占用64位即8字节,如果赋初值的时候待2^31-1则需要在初值后面加上LL否则编译错误
8. 浮点型用%f表示
单精度float,一个浮点数占用32位,1位作为符号位,8位作为指数位,23位作为尾数位,有效精度只有6-7位
双精度double,一个浮点占用64位,1位作为符号位,1位作为指数为,52位作为位数位,有效精度有15-16位,多使用double
9. 字符型用%c表示
ASCII码转换
0-9:48-57
A-Z:65-90
a-z:97-122
字符常量必须使用单引号
#include<stdio.h> int main(){ char c1='a', c2='b', c3=99; printf("%c%c%c",c1,c2,c3); return 0; }
//返回结果是abc
10. 转义字符
\n代表空格
\0代表NULL
11. 布尔型
在C++可以直接用。在C中必须加stdbool.h才可以用
取值是true和false,也可以复制整型常量,true=非零,false=零
#include<stdio.h> int main(){ bool flag1=0,flag2=true; int a=1,b=1; printf("%d %d %d\n",flag1,flag2,a==b); return 0; }
12. 强制类型转换
格式:(新类型名)变量名
13. 符号常量和const常量
#define pi 3.14//末尾不加分号 #define ADD(A,B)((a)+(b)) const double pi=3.14; //二者都是常量,一旦定义值就无法改变
14. 自增
i++;//先使用i后自增 ++i;//先自增后使用i
#include<stdio.h> int main(){ int a=1,b=1,n1,n2; n1=a++; n2=++b; printf("%d %d\n",n1,a); printf("%d %d\n",n2,b); return 0; } //结果: //1 2 //2 2
15. 条件运算符
( ? :)是C语言中唯一的三目运算符,A ? B : C;
如果A为真那么返回B,如果A为假那么返回C
16. 位运算符
<< 左移 a<<x 整数a按二进制左移x位
const int INF=(1<<30)-1 //表示无穷大
17. 赋值操作
int m,n; n=m=5;//连等 n*=3;//即n=n*3
18. &取地址符
定义变量后,会在计算机内存中分配一块空间给该变量,&表示取得该变量的地址
除了字符串数组以外,输入都要加&,因为数组名称本身代表了第一个元素的地址
19. 除了%c以外,scanf对其他格式符(如%d)的输入是以空白符(即空格、换行等)位界数判断标志的
#include<stdio.h> int main(){ int a; char c ,str[10]; scanf("%d%c%s",&a,&c,str); prinf("a=%d,c=%c,str=&s",a,c,str); return 0; } /* 输入数据: 1 a bcd 输出数据: a=1,c= ,str=a */
20. 如果想输出%或者\
printf("%%");//输出% printf("\\");//输出\
21. 对其输出
%md,m位右对齐,高位用空格补
%0md,m位右对齐,高位用0补齐
%.mf让浮点数保留m位小数输出
#include<stdio.h> int main(){ double d1=12.3456; printf("%.0f\n",d1); printf("%.1f\n",d1); printf("%.2f\n",d1); printf("%.3f\n",d1); printf("%.4f\n",d1); return 0; } /* 12 12.3 12.35 12.346 12.3456 */
22. getchar和putchar
putchar用来识别单个字符
getchar可以识别换行符
23. typedef给复杂数据类型起名来简化使用
例如给long long 数据类型命名为LL
#include<stdio.h> typedef long long LL; int main(){ LL a=123456789012345LL; printf("%lld\n",a); return 0; } //输出:123456789012345
24. 常用math函数,加上math.h头文件
fabs(double x):对x取绝对值
floor(double x):对x向下取整
ceil(double x):对x向上取整
pow(double r,double p):得出r^p
sqrt(double x):返回x的算术平方根
log(double x):返回x的以自然对数为底的对数
sin,cos,tan (double x)三角函数,参数要求是弧度值 const double pi = acos(-1.0) x=pi*45/180
round(double x):对x四舍五入
25. if语句
在if语句中,表达式是“!=0”或者“==0”那么可以简化
如果是“!=0”可以省略“!=0”,
如果是“==0”可以省略“==0”并在表达式前添加!
if(m){ //表示如果m不为0 ... } if(!m){//表示如果m为0 ... }
26. switch语句
switch(表达式){ case 1: case 2: case 3: }
如果不在case中加上break,则会从命中行开始顺序执行到结束
27. 左对齐和右对齐
printf("%-10d\n",101010); //左对齐10位 printf("%10d",101010); //右对齐10位
28. 冒泡排序,每次香菱两个元素进行比较,每一趟排序后都有一个元素的位置被确定,整个过程执行n-1趟
29. memset:对数组中每一个元素赋相同的值
memset(数组名,值,sizeof(数组名));
需要添加string.h头文件
30. puts和gets
gets识别换行符\n作为输入结束
puts用来输出一行字符串
31. string.h头文件
strcmp(字符数组1,字符数组2)
字典序
1<2返回负整数
1==2返回0
1>2返回正整数
strlen(字符数组)
得到字符的个数
strcpy(字符数组1,字符数组2)把一个字符串2赋值给另一个字符串1
strcat(字符数组1,字符数组2)把字符数组2街道字符数组1后面
32.sscanf和sprintf
sscanf(str,"%d",&n); sprintf(str,"%d",n);
sscanf:把字符数组str中的内容以%d的格式写到n中
sprintf:把n以%d的格式写到str字符数组中
#include<stdio.h> int main(){ int n; char str[10]="123"; sscanf(str,"%d",&n); printf("%d\n",n); } //123
33.变量在内存中如何存放
每个变量存放在内存中分配的一个空间,每种类型变量所占的空间不一样。
每个字节都会有一个地址,计算机通过地址找到变量
34.指针
一个房间号指向一个房间。一个地址指向一个变量。
指针类似于变量的地址
&表示变量的地址
int a 是变量,&a 是他的地址
指针是一个unsigned类型的整数
35.指针变量
用来存放指针,或者说地址
给指针变量赋值的方式是把变量的地址取出来,赋给对应类型的指针变量
*是类型的一部分,因此*p代表值,p代表指针变量
int*是指针变量的类型,p表示变量名
数组名作为数组的首地址
36.引用
C++的引用不产生副本
对引用变量的操作就是对原变量的操作
常量不可以使用引用
37.结构体
构造函数的一个特点是它不需要写返回类型,且函数名与结构体名相同
38.cin与cout
get输入单个空白字符,可以接受空格回车等
getline输入包含空白的长字符串,可以接受空格,遇到回车停止
cin.getline(str,100);//读入数组str[100]
getline(cin,str);//string容器