1-2. C++数据类型

 

目录

一、整型

二、sizeof关键字

三、实型(浮点型)

四、字符型

五、转义字符

六、字符串类型

1.C语言风格的字符串

2.C++风格字符串

七、布尔型

八、数据输入


类型是给变量分配合适的内存空间,避免内存浪费。因此在定义变量时应选择合适的数据类型。

一、整型

整型变量表示的是整数类型的变量,在C++中主要有short(短整型)、int(整型)、long(长整型)以及long long(长长整型),主要区别是所占内存空间不同

数据类型占用空间取值范围
short(短整型)2字节-2^{15}~2^{15}-1
int(整型)4字节-2^{31}~2^{31}-1
long(长整型)window下4字节,Linux下:4字节(32位系统),8字节(64位系统)-2^{31}~2^{31}-1
long long(长长整型)8字节-2^{63}~2^{63}-1
//short(短整型)
short num1 = 10;

//int(整型)
int num2 = 10;

//long(长整型)
long num3 = 10;

//long long(长长整型)
long long num4 = 10;

二、sizeof关键字

利用sizeof关键字可以获取变量类型所占内存的大小。使用格式为:sizeof(数据类型or变量名)。

//short(短整型)
short num1 = 10;
cout << "short 占用内存空间大小为:" << sizeof(short) << endl;
cout << "short 占用内存空间大小为:" << sizeof(num1) << endl;

//int(整型)
int num2 = 10;
cout << "int 占用内存空间大小为:" << sizeof(int) << endl;
cout << "int 占用内存空间大小为:" << sizeof(num2) << endl;

//long(长整型)
long num3 = 10;
cout << "long 占用内存空间大小为:" << sizeof(long) << endl;
cout << "long 占用内存空间大小为:" << sizeof(num3) << endl;

//long long(长长整型)
long long num4 = 10;
cout << "long long 占用内存空间大小为:" << sizeof(long long) << endl;
cout << "long long 占用内存空间大小为:" << sizeof(num4) << endl;
short 占用内存空间大小为:2
short 占用内存空间大小为:2
int 占用内存空间大小为:4
int 占用内存空间大小为:4
long 占用内存空间大小为:4
long 占用内存空间大小为:4
long long 占用内存空间大小为:8
long long 占用内存空间大小为:8
请按任意键继续. . .

三、实型(浮点型)

浮点型是用于表示小数的数据类型,在C++中有float(单精度)和double(双精度)两种,区别在于两者能表示的有效数字范围不同

数据类型占用空间有效数字范围
float(单精度)4字节7位有效数字
double(双精度)8字节15-16位有效数字

注:在C++中,小数默认为双精度,在定义float类型时,自动将双精度转化为单精度。因此,一般定义单精度时在数值后加‘f’,以避免由双精度转化为单精度的过程。

float f1 = 3.14f;
double d1 = 3.14;
cout << f1 << endl;
cout << d1 << endl;

cout << "float 占用内存空间为: " << sizeof(float) << endl;
cout<< "double 占用内存空间为: " << sizeof(double) << endl;

//科学计数法
float f2 = 3e2; // f2=3*10^2
float f3 = 3e-2; // f3 = 3*0.1^2
cout << f2 << endl;
cout << f3 << endl;
3.14
3.14
float 占用内存空间为: 4
double 占用内存空间为: 8
300
0.03
请按任意键继续. . .

四、字符型

字符型是用于表示单个字符的数据类型。

char ch = 'a';
cout << ch << endl;
a
请按任意键继续. . .

注:

  • 字符型数据占用内存空间为1个字节。
  • 字符型数据在内存中以ASCII码的形式进行存储。
  • 在定义字符型变量时,使用单引号‘字符’,不可使用双引号“字符”。
  • 在定义字符型变量时,单引号中只能有一个字符,不能出现多于1个的情况。

附 ASCII码表:

五、转义字符

用于表示一些不能直接显示出来的ASCII字符。常用的有换行" \n "水平制表符“\t”以及反斜杠“\\”

cout << "Hello World!\n";
cout << "aaa\tHelloWorld" << endl;
cout << "aaaaa\tHelloWorld" << endl;
cout << "a\\"
Hello World!
aaa     HelloWorld
aaaaa   HelloWorld
a\
请按任意键继续. . .

注:水平制表符\t打印时占用8个字节的宽度,不足的用空格补充。

附 常见转义字符:

转义字符

含义

ASCII码(16/10进制)

\o

空字符(NULL)

00H/0

\n

换行符(LF)

0AH/10

\r

回车符(CR)

0DH/13

\t

水平制表符(HT)

09H/9

\v

垂直制表(VT)

0B/11

\a

响铃(BEL)

07/7

\b

退格符(BS)

08H/8

\f

换页符(FF)

0CH/12

\’

单引号

27H/39

\”

双引号

22H/34

\\

反斜杠

5CH/92

\?

问号字符

3F/63

\ddd

任意字符

三位八进制

\xhh

任意字符

二位十六进制

六、字符串类型

用于表示一串字符。

1.C语言风格的字符串

定义方式:char 字符串名[] = "字符串";

char str[] = "Hello World!";
cout << str << endl;
Hello World!
请按任意键继续. . .

注:使用C语言风格定义字符串时,字符串名后要加一对中括号,且等号后使用双引号

2.C++风格字符串

定义方式:string 字符串名 = “字符串”;

string str = "Hello World!";
cout << str << endl;
Hello World!
请按任意键继续. . .

注:使用C++风格定义字符串时,需要添加头文件:#include <string>,否则将无法使用字符串。

七、布尔型

代表真值或假值。布尔型数据只有两个值:true(真,本质是1)和false(假,本质是0),其占用内存空间为1个字节。

bool flag = true;
cout << flag << endl;

flag = false;
cout << flag << endl;
1
0
请按任意键继续. . .

八、数据输入

使用关键字cin获取数据输入。格式为:cin >> 变量名。

int a = 0;
cout << "请给整型变量赋值:" << endl;
cin >> a;
cout << "整型数据a = " << a << endl;
输入:100
输出为:
整型数据a = 100
请按任意键继续. . .
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用L-M法求解的C语言代码,其中包括了误差函数和L-M法的主要代码逻辑: ```c #include <stdio.h> #include <stdlib.h> #include <math.h> // 定义常量 #define N 50 #define M 1 #define EPS 1e-8 #define MAX_ITERATION 1000 // 定义全局变量 double x[N] = {0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 4.9, 5.0}; double y[N] = {-17.07912228, -17.07912228, -16.8427335, -16.6890252, -16.66282283, -16.49643209, -16.46765313, -16.40577772, -16.36655701, -16.2865143, -16.16938895, -16.05982674, -16.04577499, -15.94414234, -15.84806851, -15.7569308, -15.67984072, -15.58160228, -15.51651566, -15.40269786, -15.32736814, -15.22405053, -15.14731673, -15.08847623, -15.01449582, -14.97228176, -14.86533268, -14.79500737, -14.74691493, -14.67235383, -14.60958366, -14.56946988, -14.47909894, -14.4316967, -14.3688958, -14.31803738, -14.26179766, -14.20855315, -14.15800087, -14.0899474, -14.02007772, -13.91533089, -13.80062195, -13.66709055, -13.45783611, -13.1198665, -12.61705293, -11.96705575, -11.22774652, -10.45513517}; double a[M] = {1e-16}; double lambda = 0.001; double mu = 10.0; // 定义函数原型 void func(double x[], double y[], double a[], double f[]); void jacobian(double x[], double a[], double J[][M]); double error(double f[]); void LM(double x[], double y[], double a[], int n, int m); int main() { LM(x, y, a, N, M); printf("a = %lf\n", a[0]); return 0; } void func(double x[], double y[], double a[], double f[]) { double p, q; for (int i = 0; i < N; i++) { p = 2 * exp(2) * 0.02585 / (1 - exp(1 / 0.02585 * (1.1 - x[i]))) + 1.125 * (x[i] - 1.1); q = a[0] * (x[i] - 1.1) / (810e-9); f[i] = p * q; } } void jacobian(double x[], double a[], double J[][M]) { double p, q; for (int i = 0; i < N; i++) { p = 2 * exp(2) * 0.02585 / (1 - exp(1 / 0.02585 * (1.1 - x[i]))) + 1.125 * (x[i] - 1.1); q = (x[i] - 1.1) / (810e-9); J[i][0] = p * q; } } double error(double f[]) { double e = 0.0; for (int i = 0; i < N; i++) { e += pow(f[i] - y[i], 2); } return e / 2.0; } void LM(double x[], double y[], double a[], int n, int m) { double f[N], J[N][M], delta[M], e, e1, e2; int k = 0; func(x, y, a, f); e = error(f); while (k < MAX_ITERATION) { jacobian(x, a, J); for (int i = 0; i < m; i++) { double sum = 0.0; for (int j = 0; j < n; j++) { sum += J[j][i] * J[j][i]; } delta[i] = 0.0; delta[i] = (sum + lambda) * mu; } for (int i = 0; i < m; i++) { a[i] += delta[i]; } func(x, y, a, f); e1 = error(f); if (e1 < e) { lambda /= 10.0; e = e1; } else { lambda *= 10.0; for (int i = 0; i < m; i++) { a[i] -= delta[i]; } } e2 = error(f); if (fabs(e2 - e) < EPS) { break; } k++; } } ``` 其中,函数`func`用于计算函数值,函数`jacobian`用于计算雅可比矩阵,函数`error`用于计算误差,函数`LM`是L-M法的主要实现逻辑。 在`LM`函数中,首先计算初始误差`e`和初始函数值`f`,然后进入迭代过程,每次迭代分别计算雅可比矩阵和增量`delta`,根据增量更新参数`a`,然后计算新的函数值和误差,根据误差判断是否接受更新,如果接受则将阻尼因子`lambda`减小,否则将其增大,直到满足收敛条件。最终输出求解得到的参数`a`的值。 注意,由于函数中存在除数为0的情况,需要特别注意计算时的精度和取值范围。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值