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++快速入门的更多相关文章

  1. Web Api 入门实战 (快速入门+工具使用+不依赖IIS)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...

  2. SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

     SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...

  3. 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)

    今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...

  4. 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  5. 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  6. Mybatis框架 的快速入门

    MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...

  7. grunt快速入门

    快速入门 Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本 ...

  8. 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  9. 【第四篇】ASP.NET MVC快速入门之完整示例(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  10. Vue.js 快速入门

    什么是Vue.js vue是法语中视图的意思,Vue.js是一个轻巧.高性能.可组件化的MVVM库,同时拥有非常容易上手的API.作者是尤雨溪,写下这篇文章时vue.js版本为1.0.7 准备 我推荐 ...

随机推荐

  1. weex不支持类的动态追加

    做一个weex项目时遇到需要根据状态动态改变样式的功能,本来想通过判断属性追加类的方式实现,如下: :class="['long-news',{'bold-txt':noRead}]&quo ...

  2. UIScrollView的contentView 助于理解

  3. 在windows下用with open 打开html文件报gbk错误

    with open('xx.html'  , 'rb' ,enconding='utf-8')as f:    可能原因是由于HTML是在Linux下开发的,与windons 系统编码不兼容

  4. 面经-VIVO

    面试时间:2019.09.26 现场面试 面试岗位:广告推荐算法工程师/一面/正式批 面试时长:50Min 面试内容: 自我介绍 阶乘与阶乘和(复杂度高) 文本-视频论文讲解 视频排序讲解 概率题(2 ...

  5. Java 干货之深入理解Java泛型

    一般的类和方法,只能使用具体的类型,要么是基本类型,要么是自定义的类.如果要编写可以应用多中类型的代码,这种刻板的限制对代码得束缚会就会很大. ---<Thinking in Java> ...

  6. 关于路由器漏洞利用,qemu环境搭建,网络配置的总结

    FAT 搭建的坑 1 先按照官方步骤进行,完成后进行如下步骤 2 修改 move /firmadyne into /firmware-analysis-toolkit navigate to the ...

  7. 在linux用ueditor遇到的问题

    在使用ueditor时,遇到很多问题.最大问题是就是服务器返回出错 最让人头疼的是preview没有任何信息.之前也找过很多的资料,很多资料都没有提到修改controller.php文件中error_ ...

  8. C/C++企业链表的实现

    首先 先介绍企业链表 和Linux内核链表 和 之前我发的一篇单项链表的区别 结构体变量名是结构体的首地址吗? 这个问题会在待会链表实现中体现!! 答案:有些编译器 支持用结构体变量名做地址的方式但一 ...

  9. JDBD连接MySQL中的驱动与时区问题

    1.在进行jdbc与mysql连接的时候应注意,加载驱动的方式根据MySQL版本内容来说 有变化 5.7版本之前: String driver= "com.mysql.jdbc.Driver ...

  10. 02. JVM运行机制

    JVM运行机制 JVM启动流程 JVM基本结构 内存模型 编译和解释运行的概念 一.JVM启动流程