第3章 程序流的循环
乘法表
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
cout << setw(3) << i * j; // 需要引入iomanip 使用setw 控制符
}
cout << endl;
}
return 0;
}
打印10行的直角三角形
#include <iostream>
using namespace std;
int main() {
for (int i = 1; i <= 10; i++) {
for (int j = 1; j <= i; j++) {
cout << "*"; // 需要引入iomanip 使用setw 控制符
}
cout << endl;
}
return 0;
}
for,while 中的break 是退出循环,continue 是停止执行本次循环的剩余语句
#include <iostream>
using namespace std;
int main() {
for (int i = 1; i <= 10; i++) {
if (i % 3 == 0) continue;
if (i % 11 == 0)break;
cout << i<<endl;
}
return 0;
}
/*输出
1
2
4
5
7
8
10*/
#include <iostream>
using namespace std;
int main() {
cout << "ABCDEFG"<<"\r123"<<endl; //123DEFG
return 0;
}
控制符
- internal 在符号位和数值的中间插入需要数量的填充字符以使串两端对齐, 并不是居中
第4章 基本数据类型
整数类型
C++标准中整数类型的取值范围,注意char 的值依据系统可能会变化:
climits 头文件定义了各种整数的最大值和最小值
#define
指令类似文件编辑器中的替换功能
- 推荐使用 const 常量对象和枚举替代对象宏
字符型
字符测试函数,需要
#include <iostream>
#include <cctype>
#include <string>
using namespace std;
int main() {
char s[] = "Hello!\n";
char c;
int len_s = strlen(s);
for (int i = 0; i < len_s; i++) {
c = s[i];
if (isalnum(c))cout << c << " is alnum"<<endl;
if (isalpha(c))cout << c << " is alpha" << endl;
if (isprint(c))cout << c << " is print" << endl;
if (islower(c))cout << c << " is lower" << endl;
if (iscntrl(c))cout << c << " is cntrl" << endl;
cout << endl;
}
return 0;
}
/*
H is alnum
H is alpha
H is print
e is alnum
e is alpha
e is print
e is lower
l is alnum
l is alpha
l is print
l is lower
l is alnum
l is alpha
l is print
l is lower
o is alnum
o is alpha
o is print
o is lower
! is print
is cntrl
*/
sizeof
sizeof 返回值类型为size_t, size_t 是头文件
// Definitions of common types
#ifdef _WIN64
typedef unsigned __int64 size_t;
typedef __int64 ptrdiff_t;
typedef __int64 intptr_t;
#else
typedef unsigned int size_t;
typedef int ptrdiff_t;
typedef int intptr_t;
#endif
- typedef 声明用来赋予类型同义词:typedef A B;
- typeid 用来获取类型相关的各种信息,需要
头文件
#include <iostream>
#include <typeinfo>
using namespace std;
int main() {
cout << typeid('A').name() << endl;
cout << typeid(123).name() << endl;
cout << typeid(123U).name() << endl;
cout << typeid(123UL).name() << endl;
cout << typeid(123LL).name() << endl;
return 0;
}
/*
char
int
unsigned int
unsigned long
__int64
*/
浮点型
$1.2345\times 10^9$ 中,1.2345 表示尾数,尾数的位数代表了精度;9代表指数,表示数值的大小
基于显式风格的数据类型转换
- (类型)表达式,cast风格
- 类型(表达式),函数风格
- static_cast<类型> (x):把x转换为指定的类型,主要用于可以把x隐式转换为指定类型的正当类型转换,比如整形和浮点型之间的转换。
#include <iostream>
#include <typeinfo>
using namespace std;
int main() {
int a = 7, b = 8;
double ave;
ave = (7 + 8) / 2;
cout << ave << endl; //7
ave = (double)(7 + 8) / 2;
cout << ave << endl; //7.5
ave = double(7 + 8) / 2;
cout << ave << endl; //7.5
ave = static_cast<double>(7 + 8) / 2;
cout << ave << endl; //7.5
return 0;
}
计算机并不能精确的表示小数,从0,步长为0.001计算和的结果, 按等差数列求和公式$S_n= (a_1+a_n)\times n/2=(0+1)\times 1001\2=500.5$
float:精度不够
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
float sum = 0;
cout << fixed << setprecision(6);
for (int i = 0; i <= 1000; i++) {
float x = static_cast<double> (i) / 1000;
cout << "x=" << x << endl;
sum += x;
cout << "sum=" << sum << endl;
}
return 0;
}
/*
x=0.994000
sum=494.514984
x=0.995000
sum=495.509979
x=0.996000
sum=496.505981
x=0.997000
sum=497.502991
x=0.998000
sum=498.500977
x=0.999000
sum=499.499969
x=1.000000
sum=500.499969
*/
double:
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
double sum = 0;
cout << fixed << setprecision(6);
for (int i = 0; i <= 1000; i++) {
double x = static_cast<double> (i) / 1000;
cout << "x=" << x << endl;
sum += x;
cout << "sum=" << sum << endl;
}
return 0;
}
/*
x=0.997000
sum=497.503000
x=0.998000
sum=498.501000
x=0.999000
sum=499.500000
x=1.000000
sum=500.500000
*/
枚举类型
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
//定义枚举类型, 相应的字符串不需要引号
enum animal {Dog,Cat,Bird};
int animal_type;
//获取动物编号输入,保证必须为枚举类型中的值
do {
cout << "请输入对应动物的编号:0 Dog, 1 Cat, 2 Bird:"<<endl;
cin >> animal_type;
} while (animal_type<Dog || animal_type >Bird);
cout << "animal_type=" << animal_type << endl;
animal selected = static_cast<animal>(animal_type);
switch (selected)
{
case Dog:cout << "汪汪";
break;
case Cat:cout << "喵喵";
break;
case Bird:cout << "啾啾";
break;
default:
break;
}
return 0;
}
- animal 为枚举体名字, Dog,Cat,Bird 为枚举成员,各枚举体成员被自动分配数值0,1,2,各成员都是 animal 类型而不是整数类型
- 枚举体成员是常量,不能修改,但可以在声明时指定,如果设置了第一个成员的值,后续的值自动加1
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
//定义枚举类型, 相应的字符串不需要引号
enum animal {Dog=1,Cat,Bird};
int animal_type;
//获取动物编号输入,保证必须为枚举类型中的值
do {
cout << "请输入对应动物的编号:1 Dog, 2 Cat, 3 Bird:"<<endl;
cin >> animal_type;
} while (animal_type<Dog || animal_type >Bird);
cout << "animal_type=" << animal_type << endl;
animal selected = static_cast<animal>(animal_type);
switch (selected)
{
case Dog:cout << "汪汪";
break;
case Cat:cout << "喵喵";
break;
case Bird:cout << "啾啾";
break;
default:
break;
}
return 0;
}
/*
请输入对应动物的编号:1 Dog, 2 Cat, 3 Bird:
3
animal_type=3
啾啾
*/
可以随意指定值:
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
//定义枚举类型, 相应的字符串不需要引号
enum animal {Dog=1,Cat=3,Bird=5};
int animal_type;
//获取动物编号输入,保证必须为枚举类型中的值
do {
cout << "请输入对应动物的编号:1 Dog, 3 Cat, 5 Bird:"<<endl;
cin >> animal_type;
} while (animal_type<Dog || animal_type >Bird);
cout << "animal_type=" << animal_type << endl;
animal selected = static_cast<animal>(animal_type);
switch (selected)
{
case Dog:cout << "汪汪";
break;
case Cat:cout << "喵喵";
break;
case Bird:cout << "啾啾";
break;
default:
break;
}
return 0;
}
/*
请输入对应动物的编号:1 Dog, 3 Cat, 5 Bird:
3
animal_type=3
喵喵
*/
正文完