【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 准备 我推荐 ...
随机推荐
- 学习笔记65_K均值_聚类算法
- 爬虫之scrapy安装与基本使用
安装:pip install scrapy基本使用 1. 创建项目:scrapy startproject 项目名 cd 项目名 2. 生成爬虫 1. 创建spider爬虫:scrapy genspi ...
- 手把手教你定制标准Spring Boot starter,真的很清晰
写在前面 我们每次构建一个 Spring 应用程序时,我们都不希望从头开始实现具有「横切关注点」的内容:相反,我们希望一次性实现这些功能,并根据需要将它们包含到任何我们要构建的应用程序中 横切关注点 ...
- 关于Set和Map数据结构的一点学习
关于js的Set和Map结构的学习和记录 对阮一峰老师的ES6入门和网上有关资料的的一点学习和记录 1.Set数据结构 Set构造函数的参数是一个可遍历( iterator)对象 Set中的成员值是唯 ...
- 大数据之路day04_2--经典bug(equals与==比较不同,break的跳出不同)
一.equals与==比较不同 在实现某个人去5个商场去购物,控制台输入是否购物(Y/N)的时候,在比较出了问题,发现无论输入什么都是false,后来查阅资料发现,字符串的比较,==和equals不一 ...
- 《吊打面试官》系列-Redis常见面试题(带答案)
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源,有面试点思维导图,欢迎[Star]和[完善] 前言 Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在 ...
- 【Leetcode 做题学算法周刊】第三期
首发于微信公众号<前端成长记>,写于 2019.11.13 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 35 ...
- Python实现自动化监控远程服务器
最近发现Python课器做很多事情,在监控服务器有其独特的优势,耗费资源少,开发周期短. 首先我们做一个定时或者实时脚本timedtask.py,让其定时监控目标服务器,两种方式: 第一种: #!/u ...
- [转载]2.5 UiPath循环活动Do While的介绍和使用
一.Do While的介绍 先执行循环体, 再判断条件是否满足, 如果满足, 则再次执行循环体, 直到判断条件不满足, 则跳出循环. 二.Do While在UiPath中的使用 1. 打开设计器,在设 ...
- Scrapy进阶知识点总结(一)——基本命令与基本类(spider,request,response)
一.常见命令 scrapy全局命令可以在任何地方用,项目命令只能在项目路径下用 全局命令: 项目命令: startproject crawl genspider check settings list ...