【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 准备 我推荐 ...
随机推荐
- (七)golang-变量之基本数据类型(看这篇就够了)
1.整数类型 类型 有无符号 占用存储空间 表示范围 备注 int8 有 1字节 -2**7~2**7-1 int16 有 2字节 -2**15~2**15-1 int32 有 4字节 -2* ...
- 对pwntools生成的exp模版做了一些修改
安装pwntools后,有一些命令行的工具可以用 ~ pwn template -h usage: pwn template [-h] [--host HOST] [--port PORT] [--u ...
- 一句话CF
目录 \(\bf {Round \ \#500 \ (Div. \ 1)}\) \(\bf {Round \ \#589 \ (Div. \ 2)}\) \(\bf {Avito \ Cool \ C ...
- Windows Server 搭建企业无线认证(Radius认证方案)
认证协议介绍: 扩展认证协议EAP(Extensible Authentication Protocol) 是一个在无线网络或点对点连线中普遍使用的认证框架.它被定义在RFC 3748中,并且使RFC ...
- 自己实现 aop 和 spring aop
上文说到,我们可以在 BeanPostProcessor 中对 bean 的初始化前化做手脚,当时也说了,我完全可以生成一个代理类丢回去. 代理类肯定要为用户做一些事情,不可能像学设计模式的时候创建个 ...
- 爬虫之request库主要解析---参照慕课北理工嵩天
kv = {'key1':'value1','key2':'value2'} r = requests.request (' GET' , 'http://python123.io/ws' , par ...
- 在linux用ueditor遇到的问题
在使用ueditor时,遇到很多问题.最大问题是就是服务器返回出错 最让人头疼的是preview没有任何信息.之前也找过很多的资料,很多资料都没有提到修改controller.php文件中error_ ...
- JS面试题-<变量和类型>-JavaScript浅拷贝与深拷贝
前言 最开始了解到深浅拷贝是因为准备面试,但那个时候因为在学校做的项目比较少需求也比较简单,所以没有在项目中遇到这类问题,所以对这个问题就属于知道这个知识点,看过相关内容,却没有自己的总结,也没有深入 ...
- node.js评论列表和添加购物车数据库表创建
2.1:评论列表--发表评论 用户点击新闻列表某一条新闻,看到新闻详细发表评论 -用户输入评论内容 -发表评论 [将用户评论内容保存数据库 xz_comment] 2.2:评论列表--发表评论-开发评 ...
- .NET Core 对龙芯的支持情况和对 .NET Core 开发嵌入式的思考
目录 .NET Core 对龙芯的支持情况和对 .NET Core 开发嵌入式的思考 一,遗憾的尝试 二,.NET Core在嵌入式下的几点不足 三,.NET Core 龙芯移植的进展和资料 .NET ...