第二章 基本数据类型与输入/输出
程序中最基本的要素之一就是数据类型,确定了数据类型才能确定变量的空间大小和以它为基础的一系列操作。
字符集与保留字
C++程序是用下列字符所组成的字符集写成的
保留字:预先定义好的标识符,注意我们在设置名字(如函数名、数据名)时不能和保留字相同。
基本数据类型
上图是根据16位计算机分析的范围结果,但其实64位的计算机的范围计算方法是相同的。
获取某数据类型的字节长度可以使用sizeof(数据类型)函数。
变量定义
命名变量名
变量命名要遵守以下规则:
1、不能是保留字
2、第一个字符必须是字母或下划线
3、不要太长,一般不超过31个字符
4、中间不能有空格
5、不能包含". ; ," ’ + -"等特殊符号(只能用英文大小写、数字和下划线)
6、变量名不要和库函数名、类名和对象名相同
变量定义方式
在一个语句中建立多个同一类型的变量:
int a,b,c,d;
float e,f;
变量赋值与初始化
//1、先定义再赋值
int a;
a=1;
//2、定义时直接赋值
int b=2;
//3、定义时初始化多个变量(c初始化了,d没有初始化)
int c=3,d;
typedef
为已有的类型名提供一个同义词。
typedef int INT;
INT a;//其实就是int a
typedef没有定义新数据类型。
字面量
整型数
包括十进制、八进制、十六进制。
实型数
小数、指数(123e5即123*105)
单精度float、双精度double、长双精度long double
字符
在内存中,字符数据以ASCII码存储。
这篇写得很好,对照表、来源、特性、缺点啥啥都有。
所以字符数据和整型数据之间可以相互赋值:
int a='b';
char c=97;
cout<<a<<endl;
cout<<c<<endl;
结果为:
98//b的ASCII码表示
a//ASCII中97表示的字符
字符串
由一对双引号括起来的字符序列,总以’\0’结束,假如有字符串"HELLO",则内存表示为:
枚举符
定义枚举类型:先写关键字enum,然后是类型名、大括号,大括号里是用逗号隔开的枚举符。
enum COLOR{RED,BLUE,GREEN,WHITE,BLACK};
没有指定枚举值是,默认第一个为0,后面依次+1。
常量
定义时加关键字const,程序中对其只能读不能修改,所以常量定义时必须初始化。
const float pi=3.1415926;
注意:常量的值只能是程序运行前就知道的值。
I/O流控制
I/O的书写格式
int a,b;
cin>>a>>b;
cout<<a<<"+"<<b<<"="<<a+b<<endl;
使用控制符
头文件iomanip
控制浮点数值显示
默认的流输出数值有效位数是6。
setprecision(n)表示有效位数,与fixed合用时可以控制小数点后的位数:
PS1:第二行设置了有效位数为0,但C++最小有效位数是1,所以会被当成1处理。
PS2:小数位数截短显示时,会进行四舍五入。
设置值的输出宽度
用setw(n)控制符:
当实际长度>n,按实际长度输出;
当实际长度<n,再数据前补空格来达到长度。
cout<<setw(8)<<10<<endl;
//结果: 10(前面有6个空格)
输出八进制数和十六进制数
同上,在输出数据前写上dec(10)、hec(16)、oct(8)就行。
cout<<oct<<num<<endl;
cout<<hex<<num<<endl;
uppercase控制十六进制的大写输出。
设置填充字符
setfill(要填充哪种字符)
cout<<setfill('*')<<setw(4)<<endl;
//结果:**21
左右对齐输出
用right和left
cout<<right<<setw(5)<<1<<endl;
cout<<left<<setw(5)<<1<<endl;
/*结果:
1
1 (后有5个空格)*/
强制显示小数点和符号
showpoint
cout<<10.0/5<<endl;
cout<<showpoint<<10.0/5<<endl;
/*结果
2
2.00000*/
加+号:showpos
printf与scanf
#include <stdio.h>
printf
一般格式:printf(格式控制字符串,输出项1,输出项2…)
格式控制字符串中有格式说明和普通字符。
常见的格式说明:
图源【C语言】- printf 和scanf 函数详解! - 知乎 (zhihu.com)
PS:%5d说明是输出宽度为5的整型
int a=65;
char ch='a';
printf("%c,%d,%3c\n",ch,ch,ch);
printf("%c,%d,%3d\n",a,a,a);
/*结果:
a,97, a
A,65, 65*/
PS:“%-5.3s"解读:”-"表示左对齐,5表示格式宽度,3表示截取字符串中3个字符。
scanf函数
一般格式:scanf(格式控制字符串,地址1,地址2…)
格式说明如上。
int a,b;
scanf("%d %d",&a,&b);
PS:在"%c"格式输入时,空格字符和转义字符都作为有效字符输入。