第二课 数据类型与变量的赋值

数据是程序处理的对象。程序既可以处理数值,还可以处理文字等。数据类型是一类
数据的抽象表示,是数据的重要特征。数据类型至少包含三个方面的概念:数据在内存中
的表示形式、数据的取值范围和数据的运算规则。也就是说,不同类型的数据,它的存储
表示形式、取值范围、运算规则是不同的。
C++中的数据类型丰富。除有我们熟悉的整数类型、实数类型外,还有字符类型、字
符串类型、布尔类型(逻辑类型),枚举类型、指针类型等等。这些类型是最基本的数据
类型,我们称之为 C++的内置类型。此外,我们还可以在基本数据类型的基础上构成更复
杂的数据类型,如结构体类型、共同体类型等等。
一、基本的内置类型
C++ 为程序员提供了种类丰富的内置数据类型,下表列出了 C++的七种基本数据类型。
类型名 含义
bool 布尔型
char 字符型
int 整型
float 单精度浮点型
double 双精度浮点型
void 无类型
wchar_t 宽字符型
有些基本数据类型还可以使用下面一个或多个类型修饰符进行修饰:
signed
unsigned
short
long
如:unsigned int 为无符号整数类型;long long int 为 64 位整数类型等。
下表列出了各种类型数据在内存中存储时需要占用的内存空间(字节数),以及该类
型数据的取值范围。
类型
占用内存
(Byte) 取值范围
char 1 -128 到 127
unsigned char 1 0 到 255
signed char 1 -128 到 127
int/long int 4 -2147483648 到 2147483647
类型
占用内存
(Byte) 取值范围
unsigned int 4 0 到 4294967295
signed int 4 -2147483648 到 2147483647
short int 2 -32768 到 32767
unsigned short int 2 0 到 65535
signed short int 2 -32768 到 32767
long long int 8 -9223372036854775808~9223372036854775807
signed long long int 8 -9223372036854775808~9223372036854775807
unsigned long long 8 0~18446744073709551615
float 4 +/-3.4e+/-38 (~7 位有效数字)
double 8 +/-1.7e+/-308 (~15 位有效数字)
注:各类型数据占用内存空间会随编译器以及所使用的系统不同而有所区别。
下列程序可以输出你所用电脑上各种数据类型所占内存空间的大小(其中 sizeof 为相
关运算符)。
#include <cstdio>
#include<cstdlib>
int main(){
printf("Size of char : %u\n",sizeof(char));
printf("Size of int : %u\n",sizeof(int) );
printf("Size of short int : %u\n",sizeof(short int));
printf("Size of long long int : %u\n",sizeof(long long int));
printf("Size of float : %u\n",sizeof(float));
printf("Size of double : %u\n",sizeof(double));;
return 0;
}
输入上面的程序,编译执行,看你的系统中有关类型数据占用的存储空间情况。
二、变量定义
变量,顾名思义,就是其值可以改变的量。每个变量都有一个名即变量名。变量名可
以由字母、数字和下划线字符组成。它必须以字母或下划线开头,且区分大小写(C++是
大小写敏感的,其它标识符规定相同)。
定义变量就是指定变量的类型,让编译器为其分配内存。
1. 变量定义的形式
类型名 变量名列表;
在这里,类型名必须是一个有效的 C++数据类型,可以是 char、int、float、double、bool
青少年信息学奥林匹克竞赛
©程老师信息学奥赛课堂 11
等基本类型,也可以是用户自定义的数据类型。变量列表可以由一个或多个变量(名)组
成,变量名之间用逗号分隔。
下面列出几个有效的变量定义:
int i,j,k; //定义了整型变量 i、j 和 k
char c,ch; 定义了字符型变量 c、ch
float f,salary; //定义了单精度实型变量 f 和 salary
double d; //定义了双精度实型变量 d
C++可以根据程序设计的需要,在几乎程序的任何位置定义变量,可以在各函数外定
义,也可在一个函数内定义,甚至一个语句块内定义。但是,在同一个区域内,一个变量
只能定义一次,不能重复定义。
2. 变量的初始化
变量可以在定义时给它一个初始值,这就是变量的初始化。初始化由一个等号,后跟
一个常量表达式组成,如下所示:
类型 变量名=常量表达式;
下面列举几个实例:
int d=3, f=5; // 定义并初始化 d 和 f
byte z=22; // 定义并初始化 z
char x ='?'; // 变量 x 的值为字符'?' 变量的初始化是在程序编译时完成的。
定义变量时,若没有对变量初始化,变量也是有值的,具体什么值,要看定义的位置
和变量的存储类别。若是静态存储类别(如位于函数之外定义的变量)会被隐式初始化为
NULL(即空值,所有字节的值都是 0);若是在函数内部定义且没有指定静态存储类别,
则变量的初始值是随机的。有关变量的存储类别参见函数一课。
三、变量赋值
我们定义了变量,系统分配了相应的存储空间。那如何将一个“值”存放到相应的空
间中去呢?最常用的命令形式就是赋值运算。
1. 赋值运算
赋值在 C++中被看作是一种运算,即赋值运算。其形式为:
变量=表达式
其中,"="称为赋值运算符(赋值号);其左侧的变量为被赋值的对象,用来接受“数
据”,赋值号右侧的表达式还可以是一个常量或另一个变量。
若在赋值式的后面加上分号,则就是一个赋值语句。如:
青少年信息学奥林匹克竞赛
©程老师信息学奥赛课堂 12
a=128;
b=a*3;
都是赋值语句。
2. 赋值语句的功能
赋值语句功能较简单,就是:计算赋值号"="右侧表达式的值,并将该值存储到"="左侧
变量对应的存储空间中。如:
int a,b,c;
float x;
a=3; //将 3 赋给变量 a
b=a; //将 a 的值 3 赋值给变量 b
c=a+b+a*b; //将表达式 a+b+a*b 的值 15 赋值给变量 c
x=c/10.0; //将表达式 c/10.0 的值 1.5 赋值给变量 x
合法的赋值语句。
赋值运算详见“第四课 C++中的运算符”。
四、C++常量
常量,与变量相对应,就是其值固定,在程序执行期间不会改变,也不允许改变。常
量有字面常量和标识符常量之分。
1. 字面常量
常量也有类型之分,有整型常量、浮点常量、字符常量、字符串常量和布尔常量等。
1) 整型常量
整型常量可以用十进制、八进制或十六进制形式给出。前缀指定基数:0x 或 0X 表示
十六进制,前缀 0 表示八进制,不带前缀则默认表示十进制。如 17 是十进制形式,017 是
八进制形式的整数,0x17 是十六进制形式的整数。
整型常量也可以带一个后缀,后缀是 U、L 或 LL 的组合(大小写形式意义一样),U/u
表示无符号整数(unsigned),L/l 表示长整型数(long int 即 int),LL/ ll 表示 64 位整型数
(long long int)。组合使用时,顺序任意,如 ull 与 llu 意义相同。
下面列举几个整数常量的实例:
212 // 合法的,十进制数 212
215u // 合法的,十进制无符号 215
0xFeeL // 合法的,十六进制长整型数 FEE
073 //合法的,八进制数 73,即十进制的 59
078 // 非法的:8 不是八进制的数字
32UU // 非法的:不能重复后缀
青少年信息学奥林匹克竞赛
©程老师信息学奥赛课堂 13
2) 浮点常量
浮点常量由整数部分、小数点、小数部分和指数部分组成。您可以使用小数形式或者
指数形式来表示浮点常量。
下面列举几个浮点常量的实例:
3.14159 // 合法的
314159E-5 // 合法的,这是实数的指数形式(对应数学中的科学记数法)
510E // 非法的:不完整的指数
.e55 // 非法的:缺少整数或小数,若为.2e55 或 1.e55 或 1.2e55 则合法
3) 布尔常量
布尔常量只有两个,它们都是标准的 C++关键字(均为小写):
true,表示真。
false,表示假。
布尔常量在内存中存储形式实际上是一个整数:true 为 1; false 为 0。
4) 字符常量
字符常量,一个特定的字符,用一对单引号界定,如'*'。字符常量可以是一个普通的
字符(例如'x')、一个转义序列(例如 '\t')等。
在 C++中,有一些特定的字符,当它们前面有反斜杠时,它们就具有特殊的含义,被
用来表示诸如换行符、制表符、单引号这样一些无法直接表示出来的字符。下表列出了常
见的转义字符:
转义序列 含义
\\ \字符
\' '字符
\" "字符
\? ?字符
\a 警报铃声
\b 退格键
\f 换页符
\n 换行符
\r 回车符
\t 水平制表符
\v 垂直制表符
\ooo 1 到 3 位的八进制数,表示对应 ASCII 字符
\xhh 1 到 2 位的十六进制数,表示对应 ASCII 字符
下面的实例显示了一些转义序列字符:
#include <iostream>
using namespace std;
青少年信息学奥林匹克竞赛
©程老师信息学奥赛课堂 14
int main(){
cout << "Hello,\tWorld!\nEnd.";
return 0;
}
当上面的代码被编译和执行时,它会产生下列结果:
Hello, World!
End. 5) 字符串常量
字符串常量是用一对双引号""界定的一串字符(0 个、1 个或多个)。字符串中的字符
可以是普通的字符也可以是转义序列等。如:"I am a student."。详细情况参见字符串一课。
2. 标识符常量
除了字符常量外,我们也可以用一个标识符来标识一个常量,C++中使用关键字 const
来定义标识符常量,形式如下:
const 类型名 常量名=常量表达式;
请看下面的实例:
#include <iostream>
using namespace std;
int main(){
const double PI=3.14159265;
const char NEWLINE='\n';
double r,c,s;
r=10.0; //假设圆的半径为 12.56
s=PI*r*r; //计算圆的面积;
c=2*PI*r; //计算圆的周长;
cout<<s<<NEWLINE<<c<<NEWLINE;
return 0;
}
当上面的代码被编译和执行时,它会产生下列结果:
314.159
62.8319
请注意,把常量定义为大写字母形式,是一个很好的编程习惯。
青少年信息学奥林匹克竞赛
©程老师信息学奥赛课堂 15
习题二
1、请写出下列要求的变量定义。
1)存放人的年龄的变量 age;
2)存放算术运算符’+’、’-‘、’*’、’/’的变量 op,并将其初始化为加法算符;
3)存放自然数平方根的变量 r;
4)存放 20 的阶乘(即 1*2*3*…*20 之积)的变量 p,并将其初始化为 1;
2、写赋值语句
1)正方形的边长为 b,求它的面积 s;
2)价格为 p 的商品购买了 5 件,求应付款 cost;
3)小卡卡有 20 块糖果,比他姐姐的 3 倍还多 2 块,求他姐姐的糖果数 n。
3、尝试编程题 1:竞赛人数
问题描述
某班参加语、数、外三门课程竞赛的同学人数分别为 10 人、21 人和 8 人,其中有 1
人参加了全部三门课程的竞赛,其他同学都只参加了其中一门课程竞赛。
编程求该班有多少同学参加竞赛。
4、尝试编程题 2:捕鱼
问题描述
从前有甲乙丙三人合伙捕鱼。从早上忙到下午,也捕了不少鱼。因为太累,三个人都
在岸边睡着了。
甲最先醒来。为不打扰乙和丙睡觉,他就把他们捕来的鱼平均分成三份,不巧的是多
了一条不好分,于是他将多余的一条扔到河里(是不是有点傻啊?)。然后甲拿走自己的
一份回家了。
乙第二个醒来。乙不见了甲,也不知道他去哪了。因为想着早点回家,又不想打扰丙,
就将甲留下来的两份鱼合在一起分成三等份。巧的是,乙分鱼最后也恰好多了一条,他和
甲一样把这条鱼扔到河里去了(看来都有点傻)。分鱼后乙拿走自己的一份回家了。
丙睡得死,最后醒来,不见甲和乙,也懒得去找。他也像乙一样,将乙留下来的两份
鱼合在一起三等份。更巧的是,也恰好多了一条,也扔进了河里(没有不傻的!),拿走
自己的一份回家了。
已知丙拿走的一份是 3 条,编程求原来甲乙丙三人共捕鱼多少条?

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值