C++简单程序设计
计算机的最基本功能是数据处理
l C++支持的基本数据类型:
n 整数、实数、字符、布尔数据
l C++支持的基本运算
n 算术运算、关系运算、逻辑运算、位运算、逗号运算、条件运算
程序要能够输入数据、输出数据
l C++中的数据输入/输出可以调用预定义的功能模块实现
程序的执行流程
l 顺序的,因此程序要能够对执行流程进行选择(选择、开关语句);
l 反复用同一算法依次处理大批量数据(循环语句)。
枚举类型
l 通过列出所有可取值来定义一种新类型。
C++的特点和程序实例
C++的产生和发展
l 从C语言发展演变而来,最初被称为"带类的C";
l 1983年正式取名为C++;
l 1998年11月被国际标准化组织(ISO)批准为国际标准;
l 2003年10月15日发布第2版C++标准ISO/IEC 14882:2003;
l 2011年8月12日ISO公布了第三版C++标准C++11,包含核心语言的新机能、扩展C++标准程序库。
l 2014年8月18日ISO公布了C++14,其正式名称为"International Standard ISO/IEC 14882:2014(E) Programming Language C++"。
l C++14作为C++11的一个小扩展,主要提供漏洞修复和小的改进。
C++的特点
l 兼容C,支持面向过程的程序设计;
l 支持面向对象的方法;
l 支持泛型程序设计方法。
命名空间
避免命名冲突
std是C++标准库的命名空间( namespace)名
using namespace std表示打开std命名空间
例2-1
//2_1.cpp
#include <iostream>
using namespace std;
int main() {
cout << "Hello!" << endl;
cout << "Welcome to c++!" << endl;
return 0;
}
运行结果:
Hello!
Welcome to c++!
C++字符集和词法记号
字符集
l 大小写的英文字母:A~Z,a~z
l 数字字符:0~9
l 特殊字符:
! # % ^ & * _ + = - ~ < > / \ ‘ “ ; . , : ? ( ) [ ] { } |
词法记号
l 关键字 C++预定义的单词
l 标识符 程序员声明的单词,它命名程序正文中的一些实体
l 文字 在程序中直接使用符号表示的数据
l 分隔符 () {} , : ;
用于分隔各个词法记号或程序正文
l 运算符(操作符) 用于实现各种运算的符号
l 空白符 空格、制表符(TAB键产生的字符)、垂直制表符、换行符、回车符和注释的总称
标识符的构成规则
l 以大写字母、小写字母或下划线(_)开始。
l 可以由以大写字母、小写字母、下划线(_)或数字0~9组成。
l 大写字母和小写字母代表不同的标识符。
l 不能是C++关键字或操作符。
基本数据类型、常量、变量
C++能够处理的基本数据类型
l 整数类型;
l 浮点数类型;
l 字符类型;
l 布尔类型。
程序中的数据
l 常量
n 在源程序中直接写明的数据;
n 其值在整个程序运行期间不可改变。
l 变量
n 在程序运行过程中允许改变的数据。
整数类型
l 基本的整数类型:int
l 按符号分
n 符号的(signed)
n 无符号的(unsigned)
l 按照数据范围分
n 短整数(short)
n 长整数(long)
n 长长整数( long long )
l ISO C++标准并没有明确规定每种数据类型的字节数和取值范围,它只是规定它们之间的字节数大小顺序满足:
(signed/unsigned)signed char ≤ (unsigned) short int ≤ (unsigned) int ≤ (unsigned) long int ≤ long long int
字符类型(char)
l 容纳单个字符的编码;
l 实质上存储的也是整数。
浮点数类型
l 单精度(float)
l 双精度(double)
l 扩展精度(long double)
字符串类型(详见第6章)
l 有字符串常量
l 基本类型中没有字符串变量
l 采用字符数组存储字符串(C风格的字符串)
l 标准C++类库中的String类(C++风格的字符串)
布尔类型(bool)
l 只有两个值:true(真) 、false(假)
l 常用来表示关系比较、相等比较或逻辑运算的结果
各基本类型的取值范围
常量
l 在程序运行的整个过程中其值始终不可改变的量;
l 直接使用符号(文字)表示的值;
l 例如:12,3.5,'A'都是常量。
整数常量
l 以文字形式出现的整数;
l 十进制
n 若干个0~9的数字,但数字部分不能以0开头,正数前边的正号可以省略。
l 八进制
n 前导0+若干个0~7的数字。
l 十六进制
n 前导0x+若干个0~9的数字及A~F的字母(大小写均可)。
l 后缀
n 后缀L(或l)表示类型至少是long,后缀LL(或ll)表示类型是long long,后缀U(或u)表示unsigned类型。
浮点数常量
l 以文字形式出现的实数;
l 一般形式:
n 例如,12.5,-12.5等。
l 指数形式:
n 例如,0.345E+2,-34.4E-3;
n 整数部分和小数部分可以省略其一。
l 浮点常量默认为double型,如果后缀F(或f)可以使其成为float型,例如:12.3f。
字符常量
l 单引号括起来的一个字符,如:'a'、'D'、'?'、'$';
l C++转义字符列表(用于在程序中表示不可显示字符)
C风格字符串常量
l 一对双引号括起来的字符序列;
l 在内存中按串中字符的排列次序顺序存放,每个字符占一个字节;
l 在末尾添加 ‘\0’ 作为结尾标记。
例:
通过添加前缀可以改变字符常量或者字符串常量的类型,前缀及其含义如下表所示:
变量:在程序的运行过程中,其值可变的量
l 变量定义
n 数据类型 变量名1, 变量名2, ..., 变量名n;
l 初始化
n C++语言中提供了多种初始化方式;
n 例如:
int a = 0;
int a(0);
int a = {0};
int a{0};
其中使用大括号的初始化方式称为列表初始化,列表初始化时不允许信息的丢失。例如用double值初始化int变量,就会造成数据丢失。
符号常量
l 常量定义语句的形式为:
n const 数据类型说明符 常量名=常量值;
或:
n 数据类型说明符 const 常量名=常量值;
l 例如,可以定义一个代表圆周率的符号常量:
n const float PI = 3.1415926;
l 符号常量在定义时一定要初始化,在程序中间不能改变其值。
算术运算与赋值运算
算术运算
l 基本算术运算符
n + - * /(若整数相除,结果取整)
n %(取余,操作数为整数)
l 优先级与结合性
n 先乘除,后加减,同级自左至右
l ++, --(自增、自减)
n 例:i++; --j;
赋值运算
l 将值赋给变量
l 赋值运算符“=”
l 赋值表达式:
n 用赋值运算符连接的表达式
n 例:
n=5
n = n + 5
n 表达式的值
赋值运算符左边对象被赋值后的值
n 表达式的类型
赋值运算符左边对象的类型
l 复合的赋值运算符
n +=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=
n 例
a += 3 等价于 a = a + 3
x *= y + 8 等价于 x = x * (y + 8)
逗号运算、关系运算、逻辑运算和条件运算
逗号运算和逗号表达式
l 格式
表达式1,表达式2
l 求解顺序及结果
n 先求解表达式1,再求解表达式2
n 最终结果为表达式2的值
l 例
a = 3 * 5 , a * 4 最终结果为60
关系运算与关系表达式
l 关系运算是比较简单的一种逻辑运算,优先次序为:
l 关系表达式是一种最简单的逻辑表达式
n 其结果类型为 bool,值只能为 true 或 false。
例如:a > b,c <= a + b,x + y == 3
逻辑运算与逻辑表达式
l 逻辑运算符
!(非) &&(与) ||(或)
优先次序: 高 → 低
l 逻辑运算结果类型:bool,值只能为 true 或 false
l 逻辑表达式
例如:(a > b) && (x > y)
l “&&”的运算规则
n 两侧表达式都为真,结果为真;
n 有一侧表达式为假,结果为假。
l “&&” 的“短路特性”
表达式1 && 表达式2
n 先求解表达式1
n 若表达式1的值为false,则最终结果为false,不再求解表达式2
若表达式1的结果为true,则求解表达式2,以表达式2的结果作为最终结果
l “||”的运算规则
n 两侧表达式都为假,结果为假;
n 有一侧表达式为真,结果为真。
l “||” 的“短路特性”
表达式1 || 表达式2
n 先求解表达式1
n 若表达式1的值为true,则最终结果为true,不再求解表达式2
若表达式1的结果为false,则求解表达式2,以表达式2的结果作为最终结果
条件运算符与条件表达式
l 一般形式
n 表达式1?表达式2:表达式3
表达式1 必须是 bool 类型
l 执行顺序
n 先求解表达式1,
n 若表达式1的值为true,则求解表达式2,表达式2的值为最终结果
若表达式1的值为false,则求解表达式3,表达式3的值为最终结果
l 条件运算符优先级高于赋值运算符,低于逻辑运算符
n 例
表达式1是bool类型,表达式2、3的类型可以不同,条件表达式的最终类型为 2 和 3 中较高的类型。
Sizeof运算、位运算
sizeof运算
l 语法形式
sizeof (类型名)
或 sizeof 表达式
l 结果值:
“类型名”所指定的类型,或“表达式”的结果类型所占的字节数。
l 例:
sizeof(short)
sizeof x
位运算——按位与(&)
l 运算规则
将两个运算量的每一个位进行逻辑与操作
l 举例:计算 3 & 5
l 用途:
n 将某一位置0,其他位不变。
例如:将char型变量a的最低位置0: a = a & 0xfe; ;(0xfe:1111 1110)
n 取指定位。
例如:有char c; int a; 取出a的低字节,置于c中:c=a & 0xff; (0xff:1111 1111)
位运算——按位或(|)
l 运算规则
n 将两个运算量的每一个位进行逻辑或操作
l 举例:计算 3 | 5
l 用途:
n 将某些位置1,其他位不变。
例如:将 int 型变量 a 的低字节置 1 :
a = a | 0xff;
位运算——按位异或(^)
l 运算规则
n 两个操作数进行异或:
若对应位相同,则结果该位为 0,
若对应位不同,则结果该位为 1,
l 举例:计算 071^052
l 用途举例:使特定位翻转(与0异或保持原值,与1异或取反)
例如:要使 01111010 低四位翻转:
位运算——取反(~)
l 运算规则
n 单目运算符,对一个二进制数按位取反。
l 例:
025:0000000000010101
~025:1111111111101010
位运算——移位(<<、>>)
n 左移运算(<<)
左移后,低位补0,高位舍弃。
n 右移运算(>>)
右移后:
低位:舍弃
高位:
无符号数:补0
有符号数:补“符号位”
运算优先级、类型转换
运算符优先级
优先级 |
运算符 |
结合性 |
1 |
[ ] ( ) . –> 后置 ++ 后置 –– |
左→右 |
2 |
前置 ++ 前置 –– sizeof & * +(正号) –(负号) ~ ! |
右→左 |
3 |
(强制转换类型) |
右→左 |
4 |
.* ->* |
左→右 |
5 |
* / % |
左→右 |
6 |
+ – |
左→右 |
7 |
<< >> |
左→右 |
8 |
< > <= >= |
左→右 |
9 |
== != |
左→右 |
10 |
& |
左→右 |
11 |
^ |
左→右 |
12 |
| |
左→右 |
13 |
&& |
左→右 |
14 |
|| |
左→右 |
15 |
? : |
右→左 |
16 |
= *= /= %= += –= <<= >>=&= ^= |= |
右→左 |
17 |
, |
左→右 |
混合运算时数据类型的转换
l 一些二元运算符(算术运算符、关系运算符、逻辑运算符、位运算符和赋值运算符)要求两个操作数的类型一致。
l 在算术运算和关系运算中如果参与运算的操作数类型不一致,编译系统会自动对数据进行转换(即隐含转换),基本原则是将低类型数据转换为高类型数据。
条件 |
转换 |
|
有一个操作数是long double型。 |
将另一个操作数转换为long double型。 |
|
前述条件不满足,并且有一个操作数是double型。 |
将另一个操作数转换为double型。 |
|
前述条件不满足,并且有一个操作数是float型。 |
将另一个操作数转换为float型。 |
|
前述条件不满足(两个操作数都不是浮点数)。 |
有一个操作数是unsigned long long型。 |
将另一个操作数转换为unsigned long long型。 |
有一个操作数是long long型,另一个操作数是unsigned long型 |
两个操作数都转换为unsigned long long型。 |
|
前述条件不满足,并且有一个操作数是unsigned long型。 |
将另一个操作数转换为unsigned long型。 |
|
前述条件不满足,并且有一个操作数是long型,另一个操作数是unsigned int型。 |
将两个操作数都转换为unsigned long型。 |
|
前述条件不满足,并且有一个操作数是long型。 |
将另一个操作数转换为long型。 |
|
前述条件不满足,并且有一个操作数是unsigned int型。 |
将另一个操作数转换为unsigned int型。 |
|
前述条件都不满足 |
将两个操作数都转换为int型。 |
l 将一个非布尔类型的算术值赋给布尔类型时,算术值为0则结果为false,否则结果为true。
l 将一个布尔值赋给非布尔类型时,布尔值为false则结果为0,布尔值为true则结果为1
l 将一个浮点数赋给整数类型时,结果值将只保留浮点数中的整数部分,小数部分将丢失。
l 将一个整数值赋给浮点类型时,小数部分记为0。如果整数所占的空间超过了浮点类型的容量,精度可能有损失。
混合运算时数据类型的转换——显式转换
l 显式类型转换的作用是将表达式的结果类型转换为类型说明符所指定的类型。
l 语法形式
n 类型说明符(表达式)
n (类型说明符)表达式
n 类型转换操作符<类型说明符>(表达式)
n 类型转换操作符可以是:
const_cast、dynamic_cast、reinterpret_cast、static_cast
l 例:int(z), (int)z, static_cast<int>(z)
三种完全等价
C++简单程序设计的更多相关文章
- 第2章c++简单程序设计
第2章c++简单程序设计 知识梳理 以下是我遗忘以及认为重要的知识整理: 1.标识符的构成规则: 以大写字母.小写字母或下划线 _ 开始 由大写字母.小写字母.下划线 _ 或数字(0~9)组成 大写字 ...
- 实验1:C++简单程序设计(1)
实验目的 1. 掌握c++中类c部分的编程知识: 数据类型,常量,变量,运算符,表达式,分支结构,循环结构 2. 掌握C++中数据输入和输出的基本方法 3. 熟练使用c++程序开发环境,掌握c++程序 ...
- c++简单程序设计 实验一
实验内容: 2-28 实现一个简单的菜单程序,运行时显示“Menu:A(dd) D(elete) S(ort) Q(uit),Selete one:”提示用户输入.A表示增加,D表示删除, S表示排序 ...
- 实验一:c++简单程序设计(1)
实验结论 编程练习2-28 switch版源码: #include <iostream> using namespace std; int main(void) { cout <&l ...
- 实验一:C++简单程序设计
[实验一] #2-28 实现一个简单的菜单程序,运行时显示“Menu:A(dd) D(elete) S(ort) Q(uit),Selete one:”提示用户输入.A表示增加,D表示删除,S表示排序 ...
- 实验1:c++简单程序设计(1)
//文中有格式错误请无视 //这个编辑器一言难尽 实验目的 1. 掌握c++中类c部分的编程知识: 数据类型,常量,变量,运算符,表达式,分支结构,循环结构 2. 掌握C++中数据输入和输出的基本方法 ...
- C++——简单程序设计
1.一个简单的程序 #include <iostream> //iostream是头文件,用来说明要使用的对象的相关信息. using namespace std; //使用命名空间,解决 ...
- C/C++基础知识总结——C++简单程序设计
1. sizeof 1.1 sizeof(类型名) 1.2 sizeof 表达式 1.3 返回所占字节大小 2. I/O流的输出格式 2.1 常用I/O流库操纵符 dec 十进制 he ...
- 实验一 C运行环境与最简单程序设计
#include<stdio.h> int main(){ int a,b,sum; a=123; b=456; sum=a+b; printf("sum is %d\n&quo ...
随机推荐
- 搭建自己的技术博客系列(一)使用 hexo 搭建一个精美的静态博客
1.安装 Git 和 nodejs https://hexo.io/zh-cn/docs/
- linux常用命令二
linux常用命令一 常用指令 ls 显示文件或目录 -l 列出文件详细信息l(list) -a 列出当前目录下所有文件及目录,包括隐藏的a(all ...
- python3接口测试之webservice接口测试第三方库选择及新手问题
一.使用python3做webervice接口测试的第三方库选择suds-jurko库,可以直接pip命令直接下载,也可以在pypi官网下载压缩包进行手动安装 二.安装好后,导入Client:from ...
- Spotlight on Oracle注册码破解(亲测可用)
了解到该工具监控十分强大,该工具优点: 我就是为了监控一个Oracle数据库,查阅各种资料,真是费了十牛二虎之力,才破解完成.#_# 在客户端安装好了,连接监控的服务器,提示得要注册码,这外国的软件基 ...
- 腾讯工作近十年大佬:不是我打击你!你可能真的不会写Java
文章核心 其实,本不想把标题写的那么恐怖,只是发现很多人干了几年 Java 以后,都自认为是一个不错的 Java 程序员了,可以拿着上万的工资都处宣扬自己了,写这篇文章的目的并不是嘲讽和我一样做 Ja ...
- Java中各种引用(Reference)解析
目录 1,引用类型 2, FinalReference 2.1, Finalizer 3, SoftReference 4, WeakReference 5, PhantomReference 6, ...
- js 中 undefined、NaN、null
undefined 即未定义 js 中 没有声明 或者 声明后未赋值的变量 用typeof判断后类型都是 undefined 但是直接console.log( ) 输出的话 没有声明的变量会报错:而声 ...
- 安卓APP开发简单实例 结对编程心得
开始说起搞APP开发,自己和小伙伴的编程水平真的很低,无从下手,只有在网上找点案列,学习着怎样开发,结对编程还是面临着许多问题的,大家的水平有所差异和编程风格不同,我们用eclipse做了一个仿微信登 ...
- charles SSL代理设置
本文参考:charles SSL代理设置 charles SSL代理设置 SSL Proxying Srtting 这里最常用的设置就是第一个ssl proxying,这里记录了需要捕获哪些ssl的信 ...
- 25 个 Linux 下最炫酷又强大的命令行神器,你用过其中哪几个呢?
本文首发于:微信公众号「运维之美」,公众号 ID:Hi-Linux. 「运维之美」是一个有情怀.有态度,专注于 Linux 运维相关技术文章分享的公众号.公众号致力于为广大运维工作者分享各类技术文章和 ...