C++语言基础——02数据的存取

常量

常量是指在程序中使用的一些具体的数、字符。在程序运行过程中,其值不能更改。如123、1.23、'a'、"abc"、True等。

常量的定义

const 类型 常量名 = 常量值
例如:const double PI=3.1415926

变量

计算机中有个存储单元,存储单元中存放了一些数据。这些数据在程序的运行过程中可能变化或被复制,我们趁这个存储单元叫做变量。

也就是说变量代表了一个存储单元,其中的值是可以改变的。依据放入变量中数据可能出现的大小,为了能够规范开辟空间,高级语言把数据进行了分类,称之为数据类型,在使用变量前,需要定义变量的数据类型,系统依据定义的数据类型进行空间的分配。

如何通俗地去理解变量呢,与生活中的场景联系起来。将自己家的房子比作计算机家中零零碎碎的物品就是计算机当中的数据。家中的物品我们会分门别类地放到不同地容器中存储,比如书放在书柜中,水倒在水杯中。计算机中的数据也是一样,不同类型的数据放在不同的容器中。而这个容器就是我们所说的变量。且好比谁不能倒在书柜中,书不能放杯子里,计算机中的数据也需要根据类型放到不同的变量中。

数据类型

常用的数据类型

类型 标识符 占字节数 数值范围
整型 int 4(32位) -2147483648~2147483647
超长整型 long long 8(64位) -9223372036854775808~-9223372036854775807
单精度浮点型 float 4(32位) -3.4E-38~3.4E+38
双精度浮点型 double 8(64位) -1.7E+308~1.7E+308
字符型 char 1(8位) ASCII码
布尔型 bool 1(8位) 真true或假false之一

使用浮点类型数值(小数)时,推荐使用double类型进行处理。

可以使用关键字sizeof来获取变量或数据类型的空间大小。

#include <iostream> 
#include <cstdio>
using namespace std;
int main(){
	int a;
	float b;
	double b2;
	char c;
	printf("%d %d %d %d\n",sizeof(int),sizeof(float),sizeof(double),sizeof(char));
	printf("%d %d %d %d",sizeof(a),sizeof(b),sizeof(b2),sizeof(c));
    return 0;
}

演示结果

变量的声明

任何变量在被使用时,都要提前声明好。申明就像是向计算机打报告,申请出一片空间以供数据使用。空间未经允许不得擅自使用。
声明格式:数据类型 变量名

整数类型变量声明:int a;
浮点类型变量声明:float b;
字符类型变量声明:char c;

变量赋值

使用赋值符号(=)进行赋值。

形如:

int a;
a=4;//赋值

注意和数学中的等于号进行区分。赋值符号是将符号右边的表达式结果赋值一份给左边的变量。所以赋值符号的左边不能够是表达式或常量必须是一个变量。

初始化

在实际使用时可以把变量定义与赋值合并成一句。

int a=0;

作用是在向计算机申请空间的同时,进行赋值操作。建议在定义变量时及时进行初始化,防止后续计算出现问题。

int s;
s=s+7;//错误
cout<<s;

如上面的程序,由于s未初始化,初始值未知,在后续计算时结果就不确定。

变量的输出

变量的输出01_一切的开始中语句的输出是相似的都是可以使用cout来进行输出,记得加上命名空间的引用。

格式:cout<<变量;

#include <iostream>
using namespace std;
int main(){
    int a=4;
    cout<<a;
    return 0;
}

若是多个输出内容,则使用链式的连接方式输出即可。

#include <iostream>
using namespace std;
int main(){
    int a=4,b=5;
    cout<<a<<" "<<b;
    return 0;
}

除了cout以外,也可以使用其他方式进行输出。比如printf。使用printf需要加上文件cstdio

printf在输出时需要注意格式。%d对应整数型变量,%f对应浮点型变量,%c对应字符型变量。顺序和类型需要对应好才能正确输出内容

#include <cstdio>
int main(){
    int a=4;
    float b=3.14;
    char c='A';
    printf("%d %f %c",a,b,c);
    return 0;
}

变量的输入

变量的输入使用cin来进行。和cout一样,需要头文件iostream以及引用命名空间。

格式:cin>>变量;

多个变量进行输入时,也可以使用链式的方式进行输入。

符号注意和输出进行区分。

#include <iostream>
using namespace std;
int main(){
    int a=0;
    float b=0;
    char c=0;
    cin>>a>>b>>c;
    cout<<a<<" "<<b<<" "<<c;
    return 0;
}

除了使用cin输入以外也可以使用scanf()进行输入。将scanf()和printf()看作一对,都是需要添加文件cstdio,且也需要进行格式对应。

#include <cstdio>
int main(){
    int a=0;
    float b=0;
    char c=0;
    scanf("%d %f %c",&a,&b,&c);
    printf("%d %f %c",c);
    return 0;
}

注意输入时,变量前需要加上&符号,作用是获取变量地址。

有格式要求的输入输出

printf()

  • 输出时保留小数点后n位。

printf("%.nf",变量);

#include <cstdio>
int main(){
	float b=3.14159;
    printf("%.3f",b);//保留小数点后3位
    return 0;
}
  • 输出的数字占n个字符场宽(右对齐)

printf("%nd",变量)

#include <cstdio>
int main(){
	int a=5,b=6;
    printf("%5d %5d",b);//数字占5个场宽
    return 0;
}
  • 输出的数字占n个字符场宽且左对齐

printf("%-nd",b=6; printf("%-5d %-5d",b);//数字占5个场宽且左对齐 return 0; }

scanf()

  • 按具体要求进行输入

年-月-日 的格式输入日期。

#include <cstdio>
int main(){
	int year,month,day;
    scanf("%d-%d-%d",&year,&month,&day);
    printf("%d-%d-%d",year,day);
    return 0;
}

输出结果演示

若不按照scanf中的格式进行输入则输入就会存在问题。

有问题的输出

变量的运算

简单的加减乘除

在程序中的符号对照

算术符号 程序符号
+
-
*
/
#include <iostream>
using namespace std;

int main(){
	int a,b;
	cin>>a>>b;//输入两个整数 
	cout<<a+b<<endl;//输出加法运算结果 
	cout<<a-b<<endl;//输出减法运算结果 
	cout<<a*b<<endl;//输出乘法运算结果 
	cout<<a/b;//输出除法运算结果 
	return 0;
}

注意除法计算,如5除2,计算出的结果是2。因为是两个整数在进行计算,最后的结果也是整数类型。

混合运算

整数和整数计算,得到的结果是整数类型。浮点数和浮点数计算结果是浮点数类型。

那么整数和浮点数计算呢,它的结果是浮点数类型。

利用这样的特性,如果两个整数进行除法,但我想得到精确的小数结果,可以采用下面的方式进行转换。

#include <iostream>
using namespace std;

int main(){
	int a,b;
	cin>>a>>b;//输入两个整数 
	cout<<1.0*a/b;//输出精确的小数结果 
	return 0;
}

字符类型变量

ASCII码表

ASCII表

每个字符都对应着一个ASCII码值。

#include <iostream>
using namespace std;

int main(){
	char c;
	cin>>c;
	cout<<int(c);//强制转换乘整数,输出的是字符对应的码值 
	return 0;
}

字符类型计算

如果输入两个字符数字进行计算会怎么样呢?

#include <iostream>
using namespace std;

int main(){
	char a,b;
	cin>>a>>b;
	cout<<a+b;
	return 0;
}

此时,结果是99不是3。因为计算机是将他们的ASCII码值进行相加计算了。

那么如何得到正确的计算结果?

可以利用ASCII码的连续性,利用差值来进行计算。

#include <iostream>
using namespace std;

int main(){
	char a,b;
	cin>>a>>b;
	cout<<(a-'0')+(b-'0');
	return 0;
}

简单应用

变量交换

利用第三方变量进行中转

#include <iostream>
using namespace std;

int main(){
	int a,tmp;
	cin>>a>>b;
	tmp=a;
	a=b;
	b=tmp;
	cout<<a<<" "<<b;
	return 0;
}

利用和差进行交换

#include <iostream>
using namespace std;

int main(){
	int a,b;
	cin>>a>>b;
	a=a+b;
	b=a-b;
	a=a-b;
	cout<<a<<" "<<b;
	return 0;
}

大小写转换

可以观察ASCII码表,可以发现大小写字母之间码值相差32。小写字母码值比大写字母码值大。那么利用这个差值就可以进行转换了。

大写转小写

#include <iostream>
using namespace std;

int main(){
	char c;
	cin>>c;
	cout<<char(c+32);
	return 0;
}

小写转大写

#include <iostream>
using namespace std;

int main(){
	char c;
	cin>>c;
	cout<<char(c-32);
	return 0;
}

相关文章

/** C+⬑ * 默认成员函数 原来C++类中,有6个默认成员函数: 构造函数 析构函数 拷贝...
#pragma once // 1. 设计一个不能被拷贝的类/* 解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运...
C类型转换 C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译...
//异常的概念/*抛出异常后必须要捕获,否则终止程序(到最外层后会交给main管理,main的行为就是终止) try...
#pragma once /*Smart pointer 智能指针;灵巧指针 智能指针三大件//1.RAII//2.像指针一样使用//3.拷贝问...
目录&lt;future&gt;future模板类成员函数:promise类promise的使用例程:packaged_task模板类例程...