4、字符串常量 字符串常量一对双括号括起来的字符序列。例如: "How are you?" "ABCD/n" "a" "/tabc/txyz!/ mnp/tefg!" 都是字符串。在最后一个字符串中的反斜线是续行符,它表示下面一行的字符与上面是同一行的。使用续行符可使一行写不下的文本写在下一行中。在使用续行符时系统会忽略续行符本身以及其后的换行符。在字符串中出现反斜线时应该用转义字符//表示。 字符串中可以出现空格符、转义序列或其他字符,也可以包含C++以外的字符,如汉字等,只要编译器支持汉字系统就行。 关于字符常量与字符串常量的区别。 (1)字符串是用一个一维字符数组来存放的,而字符常量可用一个字符型变量存放。例如: char ch; ch='a'; 正确 ch="a";错误 (2)字符型常量用单引号括起,而串常量用双引号括起。 (3)一个字符常量被存放在内存中只占一个字节,而串常量要占多个字节。例如: 'a'仅占一个字节,用来存放字符a的ASCII码;而"a"却占两个字节,除了用一个字节存放字符'a'的ASCII码外,还有一个字节存放字符串常量的结束符'/0',这里的'/0'表示空字符的转义序列。要记住,在C++中,凡是字符串都有一个结束符,该结束符用'/0'表示。 (4)字符常量与字符串常量的操作功能也不相同。例如,字符常量具有加法和减法运算,而字符串常量不具有这种运算。例如: 'p'-'m'+1 这是合法的。 "p"-"m"+1 是非法的。 字符串常量有连接、拷贝等功能,在本书的后面进行讲解。 5、枚举常量 枚举常量是枚举类型的值。这种类型一般不常用,在此仅做简单介绍。 学过高级语言的都知道:除了系统预定义的数据类型之外,其他数据类型都要先定义才能使用。枚举类型也是这样,必须先定义,后使用。枚举类型的定义如下: enum 〈类型名〉 {枚举类型常量表}; 其中,enum是关键字,类型名和枚举类型常量都是标识符。 例如:enum day {sun,mon,tue,wed,thu,fri,sat}; 默认情况下每个枚举类型常量都对应一个整型序号,第一个常量的序号为0,其后的值依次加1。另外在枚举类型定义时还可显式给枚举类型常量赋值,但必须是整型。例如: enum day {sun=7,mon=1,tue,wed,thu,fri,sat}; 下面定义三个枚举类型变量。 enum day d1,d2,d3; 这里d1,d2,d3只能赋值sun,mon,tue,wed,thu,fri,sat中之一。例如: d1=tue;d2=sun;d3=d1; 而不能赋值为整型常量,例如,下面赋值是错误的。 d1=3;d2=7; 如果要把序号3对应的常量赋值给枚举类型变量,必须进行强制类型转换。例如: d3=(enum day )3; 6、符号常量(常量定义) 在C++中的常量常用符号常量来表示,即用一个与常量相关的标识符来代替常量出现在程序中,这种相关的标识符称为符号常量。例如用pi表示圆周率3.1415926,在程序用用到圆周率时就用pi代替。符号常量定义方法如下: const 〈类型〉〈符号常量〉=〈表达式〉; 如:const float pi=3.1415926; 注意:常量标识符在程序中只能被引用,而不能被重新赋值。既不能出现在表达式的右边。 2.5 变量 变量是在程序执行中其值是可以变化的量。变量有三个要素:名字、类型和值。 1、变量的名字 变量的名字是一个标识符,在组成的变量名字中大小写是不同的。c++虽然未对变量名的长度进行控制,但它受使用的编译系统的制约。一般情况下,变量名用小写字母。注意定义的变量名不要与关键字、库函数名、类名和对象名相同。 2、变量的类型 变量在使用前必须先定义,指出其数据类型。通过类型定义,变量被分配固定的存储空间,直到程序结束时存储空间被释放。变量的操作受类型控制,如整型变量与浮点型变量的操作是不同的。 3、变量的值 与变量有关的有两个值:一个是变量所表示的数据值,另一个是变量的地址值。例如: char c; c='a'; 其中,第一个语句是定义一个变量,其名字为c,其类型为字符型。第二个语句是给变量c赋值,使变量所表示的数据值为'a',该值便是存放在变量c的内存地址中的值,实际上内存中存放的是字符a的ASCII码值,以整数表示,所以c++中整型数据和字符型数据之间可以相互赋值,但要注意其表示的合理范围。例如:下面赋值操作是正确的。 int a='x'; char ch=41; 变量c被定义以后,它就在内存中对应着一个内存地址值,在c++中许多操作是针对变量的地址进行的,在指针类型一章将详细介绍。 4、变量的定义与初始化 看下面例子。 #include void main( ) { int a; char ch; for (ch='a' ;ch { a=ch; cout } } 程序输出什么结果? 答:将输出97,98,...,122 在c++中,任何一个变量在被引用之前必须被定义。c++中变量可以在程序中随时定义,不必集中在程序之前。 定义格式: 〈类型〉〈变量名表〉; 当有多个变量时,其间用逗号隔开。例如: int i,j,k; float x,y,z; char c1,c2,c3; 注意:在同一个内存块中不允许定义同名变量,即不允许重复定义一个变量。 变量在定义时可直接给变量一个初始值,称为变量初始化。变量初始化也可放在需要的时候进行。变量被初始化后其值将保存到被改变为止。变量定义以后,如果没有被初始化,并不意味着这个变量中没值,该变量中要么是默认值,要么是无效值。在后面将要讲到,对外部和静态变量定义后其默认值对int型的为0,对浮点型的为0.0;对char型为空。而其他内部变量未初始化时其值是无效的,这是因为该变量所在地址中的内容是先前保留下来的无意义的值。 在定义变量时可一次初始化多个变量。例如: float x,y=3.14,z=0.0; char ch1='a'; ch2='/n'; 这里,y,z,ch1,ch2在定义的同时就进行了初始化。而x只是做了变量说明并没有赋初值。 2.6 typedef typedef用来为已存在的类型名提供一个同义词。格式: typedef ; 2.7 简单I/O操作 在程序中经常需要将数据输出到屏幕、打印机、存储器等。也经常需要从键盘接受用户输入的数据,这种输入输出操作统称为I/O操作。在这里将简单介绍键盘和屏幕操作。 在C++中把数据的I/O称为数据流,并提供了强大的“流”处理功能,以控制数据从一个位置流向另外一个位置。相对于内存,当数据从内存流向屏幕、打印机或硬盘时称为输出;当数据从键盘、硬盘流向内存时称为输入。C++用两个对象cin和cout实现标准的输入输出。 cin:它是istream类的对象,用来处理标准输入,即键盘输入。 cout:它是ostream类的对象,用来处理标准输出,即屏幕输出。 在C++中用istream类和ostream类的派生类iostream控制输入输出,并提供了输入和输出操作符。>称为抽取操作符,其作用是从cin流中提取字符。 在此简单介绍一下屏幕的输入输出方法。 1、使用提取符实现键盘输入 格式如下: cin >> >> ...; 这里抽取符可连续使用,后跟表达式,表达式通常是获得输入值的变量或对象。例如:int a,b; cin >>a >>b; 要求从键盘上输入两个int型数。在键盘上输入 43 20 这时,变量a获取值为43,变量b获取值20。 说明:从键盘上输入数值时两个值之间一般用空格分隔,也可以用tab键或换行符。 2、使用插入操作符和cout实现屏幕输出 格式如下: cout ...; 与>>一样,插入操作符可连续使用,后跟表达式,在输出时系统自动计算表达式的值并插入到数据流中。例如: cout are you !" 看下面例子: #include #include void main( ) { cout of /"this is a string/" is :/t" cout /"this is a string/" is :/t" } 执行该程序输出如下结果: The length of "this is a string" is : 16 The size of "this is a string" is : 17 3、控制输出格式 许多情况下,都需要控制输出结果的表现形式。如输出宽度、输出精度、输出格式等。C++的iomanip.h中定义了许多控制符,这些控制符可以直接插入到流中,控制数据的输出格式。控制符有两种:控制常量和控制函数,控制常量定义在iostream.h中,控制函数定义在iomanip.h中。常用控制符见下表。 控制符 描述 备注 dec hex oct 按10进制输出 按16进制输出 按8进制输出 常量控制符 在iostream.h中 setfill(c) setprecision(n) setw(n) setiosflags(ios::fixed) setiosflags(ios::scientific) setiosflags(ios::left) setiosflags(ios::right) setiosflags(ios::skipws) setiosflags(ios::uppercase) setiosflags(ios::lowercase) 设填充字符为c 设置显示小数精度为n位 设域宽为n个子符 小数方式表示 指数表示 左对齐 右对齐 忽略前导空白(用于输入) 16进制数大写输出 16进制数小写输出 函数控制符 在iomainip.h中 注意:除了setw(n)控制符之外,其他控制符对后面的所有输出起控制作用,直到改变输出格式为止。 例1、输出8进制和16进制数 常量dec、hex和oct用来控制必须按10进制、16进制或8进制形式输出。 #include void main( ) { int number=1234; cout } 结果为: Decimal:1234 Hexadecimal:4d2 173c44 Octal:2322 5636104 注意:由于这三个标识符已经被定义为系统常量,注意不能在定义为其他变量使用。 例2、设置值的输出宽度 函数setw(n)用来控制输出宽度,如果数据实际宽度大于设置宽度,将按实际宽读输出;如果设置宽度大于实际输出宽度,数据输出时将在前面补相应数量的空格。另外,该控制符只对一次输出起作用。 #include #include void main( ) { int number=1234; cout } 输出结果为: 1234_ _ _1522756 例3、设置填充字符 setfill(c)函数用来设置填充的字符,默认情况下为空格。 #include #include void main( ) { int number=1234; cout } 输出$$1234$1522756 例4、设置对齐格式 函数setiosflags(ios::left)和setiosflags(ios::right)用来控制输出左右对齐格式。当数据实际宽度小于输出宽度时该控制才起作用。默认情况下数据输出是右对齐。 #include #include void main( ) { int number=1234; cout } 输出1234$$1522756$ 例5、控制浮点数显示 函数setprecision(n)可用来控制输出流显示浮点数的数字个数(整数部分加小数部分)。c++默认的流输出数值的有效位是6。当小数截短显示时,进行四舍五入处理。 函数setflags(ios::fixed)用来控制符点数是按纯小数方式显示,函数setflags(ios::scientific)用来控制符点数是按科学记数法方式显示。系统默认为纯小数方式输出。 函数setiosflags(ios::showpoint) 用来强制显示小数点和符号。 #include #include void main( ) { float x=20.0/7; y=18.0/6; cout cout cout cout cout cout cout } 输出结果为: 2.85714 (默认6位,整数部分加小数部分) 2.857143e+000 (默认6位,指小数部分) 2.857142857142857e+000 (double型最多15位) 2.85714285714286 (double型有效位最多15位,整数部分加小数部分) 3 ( 无小数位) 3 (默认0不输出) 3.00000 (强制输出0) 2.8 标准输入输出函数printf与scanf 在程序设计中输入输出是不可缺少的内容,因此在C语言中提供了printf与scanf标准函数来满足输入输出要求。需要说明的是,在C++中提供了更方便的输入输出控制,这就是I/O流。但为了满足一些对printf与scanf使用习惯的要求,C++中仍保留了这两个函数。 一、printf函数 格式: printf (格式控制字符串,输出项1,输出项2,…) 说明: (1)格式控制字符串决定了数据输出的结果。它由“格式说明字符”和“普通字符”组成。普通字符按原样输出,格式说明字符将对应输出数据转换成指定的格式输出。格式控制字符串的形式为: %[域宽]格式字符 域宽部分是可选的,每个格式说明对应于一个输出参数,该参数被转换成由格式说明规定的数据格式后输出。例如: #include void main() { int a=10; float b=-5.2; printf("a=%d,b=%8.3f",a,b); } 输出结果如下: a=10,b= -5.200 (2)格式说明字符及其规定的输出格式 printf的格式说明字符见下表 格式说明符 参数类型 输出格式 d,i int 十进制整数 o int 八进制数(无前导0) x,X int 十六进制数(无前缀0x或0X) u int 无符号十进制数 c int 单个字符 s char * 字符串(必须以’/0’结束或给定长度) f double 小数形式的的浮点数(小数位数由精度决定,缺省为6位) e,E double 标准指数形式的浮点数(小数位数由精度决定,缺省为6位) % 不转换 输出一个% 域宽说明字符 域宽说明字符 意义 - 在指定的区域内以左对齐方式输出(无’-’号时为右对齐) + 输出正值时前面冠以符号+ 空格 输出的第一个字符不是符号时,要输出一个空格做前缀 0(零) 在域宽范围内用前导0填补空位 # 对于o格式输出前导0,对于x或X输出0x或0X前缀。 m(正整数) 指出输出数据的最小宽度。 .(小数点) 分隔域宽与精度,小数点前面可以没有与宽说明 n(正整数) 数据输出的精度即小数部分的位数, h 指出输出数据是短整型 l 指出输出数据是长整型 L 指出输出数据是高精度浮点型(long double) ÿ例1 #include void main() { int a=10; float b=-5.2; printf("a=%#o,b=%08.3f",a,b); } 输出结果为: a=012,b=-008.200 ÿ例2 #include void main() { int a=28,b=38; long c=289868; printf("%5d,%5d/n%ld/n",a,b,c); printf("%3ld/n%7ld/n%d/n",c,c,c); } 这是书上的例子(28页)。在32位机输出结果与书上的不一样。 28, 38 289868 289868 289868 289868 //16位机输出27724 ÿ例3 #include void main() { int a=-3; printf("%d,%o,%x,%X,%6x/n",a,a,a,a,a); } 在16位机上输出结果为: -3,177775,fffd,FFFD,fffd 在32位机上输出结果为: -3,37777777775,fffffffd,FFFFFFFD,fffffffd ÿ例4 #include void main() { char ch='a'; int a=65; printf("%c,%d,%3c/n",ch,ch,ch); printf("%c,%d,%3d/n",a,a,a); } 输出结果为: a,97, a A,65, 65 ÿ例5 #include void main() { printf("%3s,%-5.3s,%5.2s/n","hello","hello","hello"); } 输出结果为: hello,hel , he 说明:第一个"hello"按%3s输出,由于"hello"长度超过3,因此按实际长度输出。第二个"hello"输出宽度为5,且从前面截取3个字符左对齐输出,第三个"hello"的输出宽度仍为5,从"hello"中截取2个字符右对齐输出。 二、scanf函数 一般形式: scanf(格式控制字符串,地址1,地址2,…); 说明:格式控制字符串同前面的printf函数。地址是指变量的地址,格式是变量的前面加&符号。 例如: #include “stdio.h” void main() { int i; printf(“please input i:/n”); scanf(“%d”,&i); printf(“i=%d”,i); } 
2/2 首页 上一页 1 2 |