【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 准备 我推荐 ...
随机推荐
- .net layui 批量导出
.net开发,前台使用layui框架,后台使用WCF 废话不多,直接上代码 1>文件引用: admin.css layui.css layui.js jquery.min.js layerToo ...
- python-nmap使用及案例
nmap概念及功能 概念 NMap,也就是Network Mapper,最早是Linux下的网络扫描和嗅探工具包. nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端.确定哪些服务运行 ...
- 在虚拟机上的关于Apache(阿帕奇)(4)基于域名访问网站
这篇随笔是基于域名访问网站,和前后两篇文章基于ip和基于端口一起练习效果更好 首先配置网卡Ip地址与hosts文件 输入命令: vi /etc/hosts/ (每行只能写一条,格式为IP地址+空格 ...
- Numpy 中的聚合操作
# 导包 import numpy as np sum np.random.seed(10) L = np.random.random(100) sum(L) np.sum(L) min np.min ...
- TCP/IP协议第一卷第二章
环回接口: 127全网段均被作为环回地址. 传给广播地址或多播地址的数据报复制一份给环回接口,然后传送到以太网上.这是因为广播传送和多播传送的定义包含自己本身. 任何传给该主机IP地址的数据均送到环回 ...
- NOIP模拟 35
int乘爆见祖宗 难得地T3暴力打满 T1T2思路也都正确 然而T2没看出一个int乘爆直接滚粗.. 这谁抗的住啊... 跟天皇说我差点就rank1了 换来的只有一张奸笑的大脸和一堆垃圾的嘲讽 真巨啊 ...
- Python文件打包exe教程——Pyinstaller(亲测有效)
今天将要解决一个问题,如何打包Pyhon文件 众所周知,Python文件的后缀名为“.py” 所以执行Python文件的要求之一便是具有python环境. 偶尔特殊情况,或者运行一些比较简单的工具,但 ...
- AI的真实感
目录 1.让AI"不完美"--估算和假设 2 AI感知 全能感知 特定感觉无知 3 AI的个性 4 AI的预判 5 AI的智能等级 AI的真实感一直是游戏AI程序员追求的目标, ...
- 创建基于OData的Web API - Knowledge Builder API, Part I:Business Scenario
在.NET Core 刚刚1.0 RC的时候,我就给OData团队创建过Issue让他们支持ASP.NET Core,然而没有任何有意义的答复. Roadmap for ASP.NET Core 1. ...
- 解决vue低版本安卓手机兼容性问题
低版本的安卓手机可能会白屏,是由新特性不支持引起的 解决代码es6新特性兼容问题 1,npm 安装 npm install babel-polyfill npm install es6-promise ...