## C++新手入门--4
C++存储类
C++ 存储类:定义C++程序中变量/函数的范围和生命周期 包括:
- auto
- register
- static
- extern
- mutable
- thread_local
没有详细看
C++运算符
算数运算符
+,-,*,/,%,++,–
关系运算符
==,!=,>,<,>=,<=
逻辑运算符
&&,||,!
位运算符
&【与】,|【或】,^【异或】,~【非】 假设如果 A = 60,且 B = 13,现在以二进制格式表示,它们如下所示:
A = 0011 1100
B = 0000 1101
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
<<【2进制左移】,>>【2进制右移】 二进制左移运算符。将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。【A << 2 将得到 240,即为 1111 0000】 二进制右移运算符。将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。【A >> 2 将得到 15,即为 0000 1111】
赋值运算符
=,+=,-=,*=,/=,%=,<<=,>>=,&=,|=,^=,~=,
杂项运算符
- sizeof运算符(返回变量的大小)
- Condition?X:Y(条件运算符, Condition为真,值为X,否则值为Y)
- 逗号运算符,(顺序执行一系列运算)
代码:
#include<iostream>
using namespace std;
int main() {
int i, j;
j = 10;
i = (j++, j + 100, 999 + j);
cout << i;
return 0;
}
结果: 过程: 依次求解表达式1(j++)==> j=11,2(j+100) ==>11+100 = 111,3(999+j) ==> 11+999 = 1010; 将表达式3的值赋给i i = 1010
- 成员运算符.和->(访问结构的成员用.点运算符;通过指针访问结构的成员时,使用->箭头运算符【没弄明白】)
- 强制转换符Cast
代码:
#include<iostream>
using namespace std;
int main() {
double a = 21.09399;
float b = 10.20;
int c;
c = (int)a;
cout << "Line 1 - Value of (int)a is :" << c << endl;
c = (int)b;
cout << "Line 2 - Value of (int)b is :" << c << endl;
return 0;
}
结果:
- 指针运算符&(返回变量的地址)
- 指针运算符*(返回指针变量对应的value值)
代码:
#include<iostream>
using namespace std;
int main() {
int var;
int *ptr;
int val;
var = 3000;
ptr = &var;
val = *ptr;
cout << "Value of var :" << var << endl;
cout << "Value of ptr :" << ptr << endl;
cout << "Value of val :" << val << endl;
return 0;
}
结果:
C++中的运算符优先级
#include<iostream>
using namespace std;
int main() {
int a = 20;
int b = 10;
int c = 15;
int d = 5;
int e;
e = (a + b) * c / d;
cout << "(a + b) * c / d的值是" << e << endl;
e = ((a + b) * c) / d;
cout << "((a + b) * c) / d的值是" << e << endl;
e = (a + b) * (c / d);
cout << "(a + b) * (c / d)的值是" << e << endl;
e = a + (b * c) / d;
cout << "a + (b * c) / d的值是" << e << endl;
return 0;
}
结果:
while循环
代码:
#include<iostream>
using namespace std;
int main() {
int a = 10;
while (a < 20) {
cout << "a = " << a << endl;
a++;
}
return 0;
}
结果:
for循环
代码:
#include<iostream>
using namespace std;
int main() {
for (int a = 10; a < 20; a++) {
cout << "a的值为:" << a << endl;
}
return 0;
}
结果:
基于范围的for循环
代码:
#include<iostream>
using namespace std;
int main() {
int my_array[5] = { 1,2,3,4,5 };
for (int &x:my_array) {
x *= 2;
cout << x << endl;
}
for (auto &x : my_array) {
x *= 2;
cout << x << endl;
}
return 0;
}
结果: 上面for述句的第一部分定义被用来做范围迭代的变量,就像被声明在一般for循环的变量一样,其作用域仅只于循环的范围。而在":"之后的第二区块,代表将被迭代的范围。 代码:
#include<iostream>
#include<string>
using namespace std;
int main() {
string str("some thing");
for (auto &c : str) {
c = toupper(c);
}
cout << str << endl;
return 0;
}
结果: 上面的程序使用Range for语句遍历一个字符串,并将所有字符全部变为大写,然后输出结果
do…while循环
可以确保至少执行1次循环,在循环体尾部检查条件 代码:
#include<iostream>
using namespace std;
int main() {
int a = 10;
do {
cout << a << endl;
a++;
} while (a < 20);
return 0;
}
结果:
嵌套循环求质数(没太搞懂)
代码:
#include<iostream>
using namespace std;
int main() {
int i, j;
for (i = 2; i < 100; i++) {
for (j = 2;j<=(i/j);j++) {
if (!(i % j)) {
break;
}
}
if (j > (i / j)) {
cout << i << "是质数\n";
}
}
return 0;
}
结果:
|