计算机程序设计C++ 第二周笔记

发布于 2020-02-26  289 次阅读


简单信息的表示和基本运算

数据类型

整数

类型 表示类型的符号 字节数 数值范围
整型 int 4 -2^31(-2147483648)~2^31-1(2147483647)
短整型 short/short int 2 -32768~32767
长整型 long/long int 4 -2^31~2^31-1
无符号整型 unsigned [int] 4 0~2^32-1
无符号短整型 unsigned short[int] 2 0~65535
无符号长整形 unsigned long[int] 4 0~2^32-1

C++没有规定不同类型的数占的字节数,会因计算机系统、编译器的不同而不同。可以使用sizeof()运算符测试某类型数所占的字节数
cout<<sizeof(int)<<endl;
十六进制前缀0x 八进制前缀0 无符号整数加后缀U或u

实数

单精度:float
* 4字节,±3.410^-38~±3.410^38

双精度:double
* 8字节,±1.810^-308~±1.810^308
* 指数表示形式:1.2E-2表示1.2*10^-2

字符

  • 字符型 char 数值范围-128~127
  • 单个字符的表示。
  • 每个字符占一个字节,保存英文字符的ASCII码。
  • unsigned char 数值范围0~255

字符串

  • 连续多个字符
  • 字符串写在一对双引号中
  • 字符串占的字节数等于字符串长度+1(末尾加了一个结束符,用\0表示,数值上是0)
  • 汉字保存的是机内码,一个汉字占两个字节

逻辑型(布尔型,bool)

  • 表示真假
  • 取值:true表示真,false表示假。
  • 存储:true存1,false存0
  • 非0数值,当逻辑值相当于true

sizeof(<类型名>) //类型占字节数
sizeof(<数据>)//数据的字节数


常量和变量

常量

常量:不能改变的量。
字面常量(字面量、直接常量):直接写出的数据。
符号常量:用符号表示数据,一旦确定了表示哪个数据,以后就不再改变。
const <类型说明符> <符号常量名> =<数据>;
const int N =100;
在main函数前 #define <符号名称> <数据>
例如:define PAI 3.14
编译时,先将<符号名称>全部替换为数据,然后开始正式编译,所以这样的说明称为编译预处理

变量

值可以变的量,必须先定义再使用。
更通俗的说,变量是用符号表示数据,他表示的数据是可以改变的。
变量的说明/声明 <类型说明符> <变量名表>;
例如:int a;
变量意味着编译系统会给这个变量在内存中分配一个存储单元,所以变量的声明也称变量的定义
变量的初始化 <类型说明符> <变量名1>=<值或表达式1>[,<变量名2>=<值或表达式2>];


简单的信息表达和运算

算术运算符

算术运算 比较运算 逻辑运算 位运算
算术运算包括加、减、乘、除、乘方、指数、对数、三角函数、求余等。
C++中没用乘方运算符,也没有指数、对数、三角函数的运算符,是通过函数的调用实现的。
如:pow(x,n)-->x^n , exp(x)-->e^x , log(x) , log10(x) , sin(x) , cos(x) , tan(x) , asin(x) -->反正弦
使用数学函数需要在程序开头写include<cmath>

自增运算与自减运算

  • 无论前置、后置,++使变量自身加1,--使变量自身减一。
  • 作为表达式时,前置运算符的结果是加一或减一之后的结果;后置运算符的结果是加以或减一之前的结果。
  • 例如
int n=5,m=10;
int a,b,c,d;
a=n++;b=m--;
cout<<a<<"/t"<<b<<"/t"<<n<<"/t"<<m<<endl;
c=++n;d=--m;
cout<<a<<"/t"<<b<<"/t"<<n<<"/t"<<m<<endl;
结果:5 10 6 9
     6  9 6 9

算术运算符的优先级

  • 先乘除求余,后加减,级别相同的从左向右逐个计算。
  • 圆括号可以改变优先级。
  • 圆括号可以嵌套,越靠里,圆括号的优先级越高。
  • %和*、/ 优先级相同。
  • 后置++、--的优先级>前置j++、--的优先级。
  • 前置++、--的优先级>乘除的优先级。
    建议使用圆括号标明优先级。
    #### 运算的数据类型
  1. 相同类型的数据进行算数运算,结果还是这种数据类型。
  2. 不同类型数据运算,默认向级别高的类型转换。
    低 | short,char --> int --> unsigned --> long --> double | 高
  3. 强制类型转换
    (<类型>)x 或 <类型>(x) ---> 将x转换为<类型>的数据

复合运算符

为简化书写,C++提供复合运算符
+= , -= , *= , /= , %=
双目运算
a+=b; 等价于 a=a+b;
a-=b; 等价于 a=a-n;
... ...


关系运算

比较运算,比较的结果C++中布尔值 true、false
表示这些关系的符号称为 关系运算符 或 比较运算符
> 大于 < 小于 >= 大于等于 <= 小于等于 == 等于 != 不等于
注意:关系运算符不要连用,除非你清楚的知道在做什么。


逻辑运算符

逻辑运算表达判断多个条件之间的关系:同时成立、之一成立、不成立
逻辑符号
&& 表示逻辑与 and
|| 表示逻辑或 or
! 表示逻辑非 not

逻辑表达式

&&,||是双目运算符,格式为 <条件>运算符<条件2>
!是单目运算符,格式为 !<条件>
逻辑值 true / false

逻辑运算符优先级

高 | 逻辑非 !,负号 -
乘、除、求余 * / %
加、减 + -
大于小于 >,>=,<,<=
等于不等于 =,!=
逻辑与 &&
低 | 逻辑或 ||
实例:

bool f;
f=!(2>-1);
cout<<f<<endl;
f=!2>-1;
cout<<f<<endl;
输出:0
     1

true -- 1
false -- 0
非0 -- true
0 -- false
注意:

判断是否为闰年:

#include<iostream>
using namespace std;
int main(){
    int y;
    bool f;
    cin>>y;
    f=((y%4==0)&&(y%100!=0)||(y%400==0));
    cout<<f<<endl;
    return 0;
}

程序测试建议:
不能被4整除的,2011年
能被4整除,不能被100整除的2012年
能被400整除的,2000年
能被4整除,能被100整除,不能被400整除的,1900年


位运算

数据在计算机中以二进制形式存储
与(and)、或(or)、取反(not)、异或(xor)左移、右移
按位与、按位或、按位取反、按位异或

按位与
ai 0 0 1 1
bi 0 1 0 1
结果 0 0 0 1
按位或
ai 0 0 1 1
bi 0 1 0 1
结果 0 1 1 1
按位异或
ai 0 0 1 1
bi 0 1 0 1
结果 0 1 1 0
按位取反
ai 0 1
结果 1 0

#### 移位运算
移位:将二进制数的每一位 向左 或 向右 移动指定的位数。

位运算符

& 按位"与"
| 按位"或"
^ 按位"异或"
<< 左移
>> 右移
~ 按位"取反" 单目运算
格式:
<整数类型表达式1> <位运算符> <整数类型表达式2>
~<整数类型表达式>

复合位运算


特殊运算符

赋值运算符

等号"=" 是赋值运算符
格式:<变量>=<表达式>
作用:将右边的值给左边

字节数运算符

字节数运算符 sizeof()
作用:求某类型的数据或表达式的值占的字节数

条件运算符

条件运算符、问号运算符 ? :
三目运算
格式:<条件>?<表达式1>:<表达式2>

逗号表达式

多个表达式用逗号隔开,构成逗号表达式
格式:<表达式1>,<表达式2>,......,<表达式n>
作用:从左向右依次计算n个表达式的值 整个表达式的值问<表达式n>的值


实例:计算三角形的面积

#include<iostream>
#include<cmath>
using namespace std;
int main(){
    double a,b,c;
    double s,A;
    cout<<"Please input three edges a,b,c=";
    cin>>a>>b>>c;
    s=(a+b+c)/2.0;
    A=sqrt(s*(s-a)*(s-b)*(s-c));
    cout<<"The area is "<<A<<endl;
    return 0;
}

实例:构造五位数的反序数

#include<iostream>
#include<cmath>
using namespace std;
int main(){
    int n,m;
    char a,b,c,d,e;
    cout<<"Please input a five-digit number";
    cin>>n;
    a=n%10;
    n=n/10;
    b=n%10;
    n=n/10;
    c=n%10;
    n=n/10;
    d=n%10;
    n=n/10;
    e=n%10;
    m=(((((a*10)+b)10+c)*10+d)*10+e);
    cout<<"The inversed number is "<<m<<endl;
    return 0;
}

实例:加密解密

#include<iostream>
using namespace std;
int main(){
    char c;     //定义字符变量,存放原字母
    char ex;    //定义字符变量,存放加密后的字母
    int k;      //定义整型变量,存放密钥k
    cout<<"Please input a lower charater and k"<<endl;
    cin>>c>>k;
    ec=((c-'a')+k)%26+'a';      //加密算法
    cout<<ec<<endl;
    return 0;
}

重点难点:转义符

转义字符
转义字符


我们都要做生活的高手。