【C/C++】之C/C++快速入门
1 基本数据类型
C/C++语言中的基本数据类型及其属性如下表所示:
|
类型 |
取值范围 |
大致范围 |
|
|
整形 |
int |
-2147483648 ~ +2147483647 (即-231 ~ +(231-1)) |
-2*109 ~ +2*109 |
|
long long |
-263 ~ +263-1 |
-9*1018 ~ +9*1018 |
|
|
浮点型 |
float |
-2128 ~ +2128 (实际精度6~7位) |
实际精度6~7位 |
|
double |
-21024 ~ +21024 (实际精度15~16位) |
实际精度15~16位 |
|
|
字符型 |
char |
-128 ~ +127 |
-128 ~ +127 |
|
布尔型 |
bool |
0(false) or 1(true) |
0(false) or 1(true) |
2 常量
在C/C++语言中,常量有两种表示方式,分别是:符号常量和const常量。
(1)符号常量:
#define PI 3.14159
(2)const常量:
const double PI = 3.14159;
注意:以上两种方法,都是写在.c/.cpp文件中,方法外部的,一个详细示例如下:
#include <stdio.h>
#define PI 3.14 //const double PI = 3.14;
int main() { …… }
在PAT、ACM等算法比赛中,建议使用const方法。
3 位运算符
C/C++语言中,位运算符有六种,分别是:左移、右移、位与、位或、位异或、位取反。六种位运算符的详细特性和用法如下表所示。
|
运算符 |
含义 |
语法 |
效果 |
|
<< |
左移 |
a << x |
整数a按二进制左移x位 |
|
>> |
右移 |
a >> x |
整数a按二进制右移x位 |
|
& |
位与 |
a & b |
整数a和b按二进制对齐,按位进行与运算(除了11得1,其他均为0) |
|
| |
位或 |
a | b |
整数a和b按二进制对齐,按位进行或运算(除了00得0,其他均为1) |
|
^ |
位异或 |
a ^ b |
整数a和b按二进制对齐,按位进行异或运算(相同为0,不同为1) |
|
~ |
位取反 |
~a |
整数a的二进制的每一位进行0变1、1变0的操作 |
4 输入输出
(1)C++语言中的输入输出方式为:cin、cout。
cin、cout的操作不需要关注输入或输出数据的类型。
(2)C语言中的输入输出方式为:scanf()、printf()。
scanf()、printf()的操作需要关注输入或输出数据的类型。对于不同的数据,都需要特定的占位符,才能进行输入或输出。常见几种数据类型在输入、输出时的特征如下表所示。
|
数据类型 |
占位符 |
输入举例 |
输出举例 |
|
int |
%d |
scanf(“%d”, &n); |
printf(“%d”, n); |
|
long long |
%lld |
scanf(“%lld”, &n); |
printf (“%lld”, n); |
|
float |
%f |
scanf(“%f”, &f); |
printf (“%f”, f); |
|
double |
%lf |
scanf(“%lf”, &d); |
printf (“%lf”, d); |
|
char |
%c |
scanf(“%c”, &c); |
printf (“%c”, c); |
|
字符串(char数组) |
%s |
scanf(“%s”, s); |
printf (“%s”, s); |
其他输出格式:
(1)%md:可以使%d输出的值占m位,贴右侧对齐,不足m位的前面补空格,超出m位的正常显示。
(2)%-md:可以使%d输出的值占m位,贴左侧对齐,超出m位的正常显示。
(3)%0md:可以使%d输出的值占m位,贴右侧对齐,不足m位的前面补0,超出m位的正常显示。
(4)%.mf:可以使%f输出的值具有m位小数位,不足的补0,超出的四舍五入。
getchar()、putchar()、gets()和puts():
getchar()用来获取用户输入的下一个字符;putchar()用来打印一个字符。其用法如下:
char c;
c = getchar();
putchar(c);
gets()用来获取用户输入的下一个字符串;puts()用来打印一个字符串。其用法如下:
char str1[];
char str2[][];
gets(str1);
gets(str2[]);
puts(str1);
puts(str2[]);
5 typedef
typedef关键字用来给复杂的数据类型起别名。其用法如下:
#include <stdio.h>
typedef long long LL;
int main(){ LL ll; …… }
6 math.h
math.h是C语言中的数学方法库,使用之前需要先导入这个头文件:#include <math.h>。math方法库中的部分方法及其用法如下:
(1)fabs(double x):该方法用于对double型变量取绝对值。
(2)floor(double x):该方法用于求小于x的最大的整数(对x向下取整)。
(3)ceil(double x):该方法用于求大于x的最小的整数(对x向上取整)。
(4)pow(double r, double p):该方法用于求r的p次方(r和p必须都是double类型)。
(5)sqrt(double x):该方法用于求x的开平方值。
(6)sin(double x):该方法用于求x的正弦值,如45°的正弦值求法为:sin(PI*45/180)。
(7)round(double x):该方法用于求x的四舍五入的值。
7 string.h
string.h是C语言中的字符串方法库,使用之前需要先导入这个头文件:#include <string.h>。string.h方法库中部分方法及其用法如下:
(1)strlen(char[] c):返回字符数组c的长度。
(2)strcmp(char[] c1, char[] c2):比较c1和c2,返回它们的大小比较,1表示c1比c2大,0表示c1和c2一样大,-1表示c1比c2小。
(3)strcpy(char[] c1, char[] c2):将c2中的内容复制到c1中。
(4)strcat(char[] c1, char[] c2):将c2中的内容追加到c1内容的后面。
8 指针和引用
1、指针:
(1)定义一个指针变量:int* a;
(2)获取某个变量的指针:int* p = &a;
(3)获取某个指针变量指向的变量:int a = *p;
(4)获取数组a中的第i个元素:int ai = *(a + i);
2、引用:
(1)对于如下代码:
void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int a = , b = ;
swap(a, b);
printf(“%d,%d”, a, b);
return ;
}
对于上面的代码,输出的a和b仍然是1和2,这是因为在C语言中,传入函数的参数都是原来参数的副本,修改副本的值对原值是没有作用的。
为了解决这个问题,可以使用的方法有两种,分别是使用指针和引用。
1)使用指针,代码如下:
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int a = , b = ;
int* p1 = &a, *p2 = &b;
swap(p1, p2);
printf(“%d,%d”, a, b);
return ;
}
2)使用引用,代码如下:
void swap(int &a, int &b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int a = , b = ;
swap(a, b);
printf(“%d,%d”, a, b);
return ;
}
通过上面的代码对比可以看出,C语言中的引用可以将原变量传递到函数中去。
9 结构体
1、声明结构体,代码如下:
struct User {
int id;
char gender;
char name[];
} Alice, stu[], *p;
2、创建结构体对象,代码如下:
User Alice;
User stu[];
User *p;
// 注:如果在声明结构体的时候定义了对象名称,如上1中的Alice等,则不需要再创建对象
3、调用结构体对象中的属性,代码如下:
(1)结构体对象不是指针变量:
Alice.id = ;
stu[].gender = ‘f’;
(2)结构体对象是指针变量:
(*p).id = ;
(*p).name = “zhangsan”;
// 或
p->id = ;
p->name = “zhangsan”;
4、为结构体创建构造函数:
struct Point {
double x;
double y;
Point() {}
Point(double _x, double _y) {
x = _x;
y = _y;
}
}
int main() {
Point p = Point(, );
}
【C/C++】之C/C++快速入门的更多相关文章
- Web Api 入门实战 (快速入门+工具使用+不依赖IIS)
平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...
- SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)
SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...
- 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)
今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...
- 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- Mybatis框架 的快速入门
MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...
- grunt快速入门
快速入门 Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本 ...
- 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- 【第四篇】ASP.NET MVC快速入门之完整示例(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- Vue.js 快速入门
什么是Vue.js vue是法语中视图的意思,Vue.js是一个轻巧.高性能.可组件化的MVVM库,同时拥有非常容易上手的API.作者是尤雨溪,写下这篇文章时vue.js版本为1.0.7 准备 我推荐 ...
随机推荐
- weex不支持类的动态追加
做一个weex项目时遇到需要根据状态动态改变样式的功能,本来想通过判断属性追加类的方式实现,如下: :class="['long-news',{'bold-txt':noRead}]&quo ...
- UIScrollView的contentView 助于理解
- 在windows下用with open 打开html文件报gbk错误
with open('xx.html' , 'rb' ,enconding='utf-8')as f: 可能原因是由于HTML是在Linux下开发的,与windons 系统编码不兼容
- 面经-VIVO
面试时间:2019.09.26 现场面试 面试岗位:广告推荐算法工程师/一面/正式批 面试时长:50Min 面试内容: 自我介绍 阶乘与阶乘和(复杂度高) 文本-视频论文讲解 视频排序讲解 概率题(2 ...
- Java 干货之深入理解Java泛型
一般的类和方法,只能使用具体的类型,要么是基本类型,要么是自定义的类.如果要编写可以应用多中类型的代码,这种刻板的限制对代码得束缚会就会很大. ---<Thinking in Java> ...
- 关于路由器漏洞利用,qemu环境搭建,网络配置的总结
FAT 搭建的坑 1 先按照官方步骤进行,完成后进行如下步骤 2 修改 move /firmadyne into /firmware-analysis-toolkit navigate to the ...
- 在linux用ueditor遇到的问题
在使用ueditor时,遇到很多问题.最大问题是就是服务器返回出错 最让人头疼的是preview没有任何信息.之前也找过很多的资料,很多资料都没有提到修改controller.php文件中error_ ...
- C/C++企业链表的实现
首先 先介绍企业链表 和Linux内核链表 和 之前我发的一篇单项链表的区别 结构体变量名是结构体的首地址吗? 这个问题会在待会链表实现中体现!! 答案:有些编译器 支持用结构体变量名做地址的方式但一 ...
- JDBD连接MySQL中的驱动与时区问题
1.在进行jdbc与mysql连接的时候应注意,加载驱动的方式根据MySQL版本内容来说 有变化 5.7版本之前: String driver= "com.mysql.jdbc.Driver ...
- 02. JVM运行机制
JVM运行机制 JVM启动流程 JVM基本结构 内存模型 编译和解释运行的概念 一.JVM启动流程