?教学目的与要求:
了解 C++中的基本词法记号 。
掌握 C++中的基本数据类型 。
教学内容提要:
1,C++中的基本词法记号;
2,C++中的数据类型;
3,数组和指针
教学重点,C++中的变量和常量的特点及数组和指针 。
教学难点,数组和指针 。
教学进度,P23~ P26,P44
教学过程:
第 3 讲 数据类型
【 3.1.1 字符集 】
英文字母 A ~ Z,a ~ z
数字字符 0 ~ 9
特殊字符 空格 ! # % ^ & * _ (下划线 ) + = -
〈 〉 / \ ︱ ′ 〃 ;,,() []
{},?
表 C++语言的字符集的构成词法记号 是 C++语言的最小语法单位。
字符是程序中可以区别的 最小符号。
C++语言中共有 5种词法记号,关键字、
标识符、常量、运算符和标点符号。
字符是构成 C++语言的基本要素。
【 3.1 C++语言的词法记号 】
标识符是程序员为命名程序中的一些要素所定义的单词,如变量名、函数名等。
2,标识符标识符的命名规则由字母、数字和下划线组成以字母或下划线作为第一个字符,
其后跟零个或多个字母、数字、下划线。
大写字母与小写字母分别代表不同的标识符不能与关键字相同举例正确的 错误的
sum
Dram_
rectangl
e_myfri
end
1_peo //起始字符非法
operator //是关键字
my $ //含有非法字符表 标识符的命名规则
1,关键字关键字 ——是C++语言的保留字,好比是已经赋予特殊含义的专用单词。
特点,它们各自有不同的使用目的,在程序中不能把它们用作别的用途。
【 3.1.2 词法记号 】
运算符可以用做分隔符,其他分隔符还有 () {},,;和空白字符。
4,运算符运算符 ——是 C++语言是实现加、减等各种运算的符号。
5,分隔符在编写程序时,分隔符用于分隔词法记号或程序正文。
注由于 C++编译器将注释也当作空白对待,所以,注释也可用作分隔符。
又称文字,指在程序中直接使用符号标示的数据,包括数字、字符、字符串等。
不表示任何实际的操作,仅用于结构程序。 是指空格(空格键所产生的字符)、制表符( Tab键所产生的字符)、换行符( Enter键所产生的字符)。
3,常量数据是程序处理的对象,在 C++语言中,所有的对象都属于某种数据类型。
数据类型的分类 基本数据类型自定义数据类型
【 3.2.1 基本数据类型 】
关键字又被称作修饰符,用来作为前缀修饰字符型、整型、浮点型。
基本数据类型的分类布尔型( bool)
字符型( char)
整型( int )
浮点型( float,double)
signed(表示有符号)
4个关键字 unsigned(表示无符号)
long(表示长型)
short(表示短型)
【 3.2 数据类型 】
长度(字节) 取值范围类型
bool 1 false( 0) true( 1)
char
unsigned char
signed char
short int( short)
signed short int( signed short)
unsigned short int( unsigned short)
int
1
1
1
2
2
2
4
-128~ 127
0~ 255
-128~ 127
-32768~ 32767
-32768~ 32767
0~ 65535
-2147483648~ 2147483647
signed int
unsigned int
signed long int( signed long)
long int( long)
unsigned long int( unsigned int)
float
double
long double
-2147483648~ 2147483647
0~ 4294967295
-2147483648~ 2147483647
-2147483648~ 2147483647
0~ 4294967295
3.4E-38~ 3.4E+38
1.7E-308~ 1.7E+308
1.7E-308~ 1.7E+308
4
4
4
4
4
4
8
8
【 表 C++语言的基本数据类型 】
有些数据在程序运行过程中是可以改变的,我们称之为 变量 。
一个变量对应着计算机中的一组内存单元,这组内存单元在
C++语言中用一个标识符来标识,即 变量名 。
数据类型是指 C++语言中的任一合法类型,每个变量都必须属于一种类型。变量名的命名应遵照 标识符的命名规则 。
C++语言中使用变量前必须对变量进行声明。变量声明的格式如下:
数据类型 变量名 1,变量名 2,…,变量名 n;
注意在声明变量时,必须注意变量类型的选择。应该保证该变量中将要存储的值不突破该变量类型所能表示的最大值。
【 3.2.2 变量 】
在程序中,有些数据在运行期间是不允许改变的,我们称之为 常量 。
常量的分类 字面常量符号常量 数据类型是由它的表示方法决定的。
1,整型常量整型常量就是以文字形式出现的整数,包括三种形式。各种表示形式前均可加上正或负号以表示它们值的正负,正号可以省略。
形式十进制八进制十六进制举例
1980,-50
表 整型常量的三种形式组成由若干个 0~ 9的数字组成,但不能以 0开头以 0开头,由若干 0~ 7的数字组成以 0X或 0x开头,由若干 0~ 9的数字及 A~ F(大小写均可)的字母组成
010,-0276
0x1Fa
-0X4Ab
备注
L(或 l)表示长整型,U(或 u)
表示无符号型,
如果后缀包括 L
(或 l)和 U(或
u)则表示无符号长整型。
【 3.2.3 常量 】
2,实型常量实型常量只能用十进制表示,共有两种表示形式 一般表示形式指数表示形式形式一般表示指数表示举例
10.2,
10.,.2
表 实型常量的两种形式组成又称小数表示形式。使用这种表示形式时,
实型常量由整数和小数两部分组成。其中的一部分在实际使用时可省略,但不允许两部分同时省去。
表示很大或很小的实数,由尾数部分、字母 E(或 e)、指数部分三部分组成。尾数部分的表示和一般表示形式相同,指数部分必须是整数,但可正可负,当指数大于零时,正号可省。
1.2E20,
.24e100,
备注默认数据类型为 double
型,如果加上后缀 F
(或 f)则为 float型,
加上 L(或 l)
则为 long
double型。
【 3.2.3 常量 】
字符常量通常是指用单引号括起来的一个字符,其数据类型是 char。其中单引号只是用来说明被它括起来的字符是字符常量,它本身不是字符常量的内容。如,′a′,′#′,′G′。
C++语言中,还有一种转义序列的表示方法可用来表示字符常量。
是用转义符号“\”后跟一个字符或一个 ASCII码来表示一个单一字符。若“\”
后跟一个 ASCII码,则表示的是该 ASCII码所代表的字符。 在这里 ASCII码用八进制或十六进制表示,这里八进制和十六进制的表示与前面表示整型常量的方式不同,应无第一个,0”。例如 ′\ X62′就表示字符 ′b′。
表 1 2 C++预定义的转义序列符 号 含 义
\ a
\ b
\ f
\ n
\ r
\ t
\ v
\\
\ ″
\ ′
响铃退格( Backspace键)
换页换行回车水平制表符( Tab键)
垂直制表符反斜杠双引号单引号
3,字符常量
【 3.2.3 常量 】
4,字符串常量字符串常量又称字符串或串常量,是用一对双引号括起来的字符序列。
例如,″xyz″,″I am a student″,″This is a string″都是字符串。
由于双引号在字符串中用做定界符,所以,若字符串中需要出现双引号时,则必须采用 转义序列 。
注
I \ 0
C++语言中字符串的存储与字符不同,它在内存中的存放并不是简单地按串中字符的顺序排放,而是在末尾加上一个 ′\ 0′,表示字符串的结束。
字符串、字符及与其对应的存储形式 ″I″ ′I′ I
在 C++语言中已经有了其他特定的含义:“\”是转义字符;,′”被用于表示字符常量,,″”用于表示字符串常量。如果需要把它们用作字符常量,
就必须采用转义序列。
注 字符常量在内存中以 ASCII码形式存储,每个字符占一个字节 。
【 3.2.3 常量 】
5,布尔常量布尔常量仅有两个,false(假)和 true(真),其数据类型为 bool。
符号常量在声明时一定要赋初值,而且其值在初始化后不能再改变,
这一点与变量完全不同。 C++语言提供了两种声明符号常量的方法。
注解释形式正确声明用 #define声明符号常量
C语言中声明符号常量的方法。
其中 #define是预处理指令。缺点是不能显式声明常量的类型。
用 const声明符号常量
C++语言中广泛采用的声明符号常量的方法
const 数据类型 常量名 =常量值;
或:
数据类型 const 常量名 =常量值;
const double pi=3.1415926; #define pi 3.1415926
错误声明 const double pi; //错误pi=3.1415926; //错误 最后不允许加,;”
表 两种声明符号常量的方法
6.符号常量例 3.1:
#include <iostream.h>
#define pi 3.1415926
void main()
{
const float H=5.0;
int r=7.0,v;
v=pi*r*r*H;
cout<<v<<endl;
}
例 3.2 #define的不安全性
#include<iostream.h>
main()
{
int a=1;
#define T1 a+a
#define T2 T1-T1
cout <<"T2 is "<<T2<<endl;
return 0;
}
注意:
例 3.3 用 const取代 #define。
#include<iostream.h>
int main()
{
int a=1;
const int T1=a+a;
const int T2=T1-T1;
cout <<"T2 is"<<T2<<endl;
return 0;
}
输出,T2 is 0
自定义数据类型的分类枚举类型数组类型联合类型结构类型类类型指针类型一种用户自定义数据类型。
是类型相同、数目一定的变量的有序集合,组成数组的变量称为该数组的元素。
C语言中提供结构类型,它能把不同类型的数据组合成一个集合体。
是使几个不同类型的变量共用同一组内存单元。
它能把不同类型的数据及对数据的操作组合成一个集合体。
存放内存地址的单元。
在实际运用中,仅有这些内置的数据类型,并不能完全满足程序设计的需要。为此,C++语言还提供了一些自定义数据类型。
【 2.2.4 自定义数据类型 】
注意:
在 C++中,结构体名、联合体名、枚举名可直接作为类型名。
在定义变量时,不必在结构体名、联合体名或枚举名前冠以
struct,union或 enum。
例如:
enum color{“white”,”black”,”red”,”green”,”yellow”};
truct student
{ char sno[7];
char name[20];
char sex;
int age;
};
在 C语言中定义变量必须写成:
enum color c1;
struct stuent zh;
在 C++中可以写成:
color c1;
student zh;
【 3.3 数组与指针 】
数组 是具有一定 顺序关系 的若干 相同类型变量的集合体,组成数组的变量称为该数组的 元素 。
一维数组的声明类型说明符 数组名 [ 常量表达式 ];
例如,int a[10];
表示 a 为整型数组,有 10个元素,a[0]...a[9]
数组元素 在内存中顺次存放,它们的 地址是连续的 。
【 3.3.1 数组 】
1,数组的概念注意:
在定义数组时,数组长度必须确定,否则 C++系统无法为数组分配内存空间。
确定数组长度的方法,
1、由数组元素个数确定
int a[10];
2、由初始化元素个数确定
int a[5]={1,2,3,4};
int a[ ]={1,2,3,4,5};
当数组元素个数给出时,初始化元素必须小于或等于数组元素个数指向 void类型的指针称为 void指针 。
比如,int a,b;
int *p1=&a,*p2=p1;
只能用指向相同类型的指针给另一个指针赋值。
1,void指针
【 3.3.2 指针 】
指针变量 是用于存放内存地址的变量。可以将变量的地址保存在指针中,而 无需知道变量地址的实际数值。
其声明的一般形式如下:
数据类型 *标识符;
比如,int a;
int *p1=&a;
double *p2=p1; //错误比如:
int a; // 声明 int型变量
int *p1=&a; // 给指针 p1赋值
void *p2=p1; // 用 int型指针直接给 void指针赋值,正确
int *p3=p2; // 用 void指针直接给 int型指针赋值,错误
int *p4=(int *)p2; // void指针通过强制类型转换给 int型指针赋值,
// 正确
void指针 是一个特例,它可以 指向任何类型的 C++数据 。也即可以用任何类型的指针直接给 void指针赋值。如果需要将 void指针的值赋给其他类型的指针,则需要 进行强制类型转换 。
语句中的两个指针指向的类型不同,因此,它们之间不能相互赋值。除非进行 强制类型转换 。
不同类型指针间的赋值是 错误的 。
void指针的使用
#include<iostream.h>
void main()
{
int a(1);
int *pa1=&a,*pa2=0;
void *pv=pa1; //用 int型指针直接给 void指针赋值
cout<<″a=\ t″<<a<<endl;
cout<<″*(int*)pv=\ t″<<*(int*)pv<<endl; //输出结果时,
// void指针必须强制类型转换
pa2=(int *)pv; //给 int型指针赋值时,void指针必须转换
cout<<″*pa2=\ t″<<*pa2<<endl;
} a= 1
*(int*)pv= 1
*pa2= 1
例 3.4
★ 指针常量例,int * const ptr =&a; //指针是常量
int b=10;
ptr=&b; //error
*ptr=b; //ok
该语句将 ptr声明为指向一个整数的常量指针,ptr所指向的值可以被修改,但是不能把 ptr指向其它单元。
在声明指针时,可以用关键字 const进行修饰,用关键字
const修饰的指针称为 const指针 。
2,const指针
★ 常量指针例,const int *ptr=&a;//指向的对象是整型常量
or
int const *ptr=&a;
int b=20;
ptr=&b; //ok
*ptr=b; //error
该语句把 ptr声明为指向整数常量的指针。 ptr所引用的值不能修改,但是可以把 ptr指向其它内存单元。
★ 常量指针常量例:
const int *const ptr=&a; //指向的对象是整型常量,指针
// 也是常量
or
int const *const ptr=&a;
int b=20;
ptr=&b; //error
*ptr=b; //error
小结
C++中的基本数据类型 。
C++中的自定义数据类型 。
C++中的数组和指针 。
作业
P48 2.15,2.18
补充练习
1、请编程完成如下图形的输出。
### $$$
#### $$$$
##### $$$$$
###### $$$$$$
####### $$$$$$$
2、编程完成从键盘上输入任意 10个整数,要求按从小到大的顺序输出。
3,编程完成 输入 n*n的矩阵,输出两条对角线上的和。
4,编程完成从键盘上输入任意十六进制整数的字符串,将它转换成十进制整数并输出。
#include <iostream.h>
void main()
{
for(int i=1;i<=5;i++)
{ for(int j=1;j<=5-i;j++)
cout<<,”;
for(int k=1;k<3+i;k++)
cout<<“#”;
for(int s=1;s<3;s++)
cout<<,” ;
for(int t=1;t<3+i;t++)
cout<<“$”;
cout<<endl;
}
}
#include <iostream.h>
void main()
{
int a[10];
for(int i=0;i<10;i++)
cin>>a[i];
for(int j=0;j<9;j++)
for(int k=j+1;k<10;k++)
if(a[j]>a[k])
{ int temp;
temp=a[j];
a[j]=a[k];
a[k]=temp;
}
for(int s=0;s<10;s++)
cout<<a[s];
cout<<endl;
}
#include<iostream.h>
void main()
{ const int n=5
int a[n][n];
int sum=0;
for(int i=0;i<5;i++)
{ sum+=a[i][i];
sum+=a[i][4-i];
}
if(n%2==1)
sum-=a[n/2][n/2];
cout<<“sum=”<<sum<<endl;
}
#include<iostream.h>
void main()
{ char str[20],*ptr=str;
cin>>str;
int d=0;
while(*ptr!=?\0?)
{ if(*ptr>=?A?&&*ptr<=?Z?)
d=d*16+*ptr-55;
if(*ptr>=?0?&&*ptr<=?9?)
d=d*16+*ptr-48;
if(*ptr>=?a?&&*ptr<=?z?)
d=d*16+*ptr-87;
ptr++;
}
cout<<“d=”<<d<<endl;
}
了解 C++中的基本词法记号 。
掌握 C++中的基本数据类型 。
教学内容提要:
1,C++中的基本词法记号;
2,C++中的数据类型;
3,数组和指针
教学重点,C++中的变量和常量的特点及数组和指针 。
教学难点,数组和指针 。
教学进度,P23~ P26,P44
教学过程:
第 3 讲 数据类型
【 3.1.1 字符集 】
英文字母 A ~ Z,a ~ z
数字字符 0 ~ 9
特殊字符 空格 ! # % ^ & * _ (下划线 ) + = -
〈 〉 / \ ︱ ′ 〃 ;,,() []
{},?
表 C++语言的字符集的构成词法记号 是 C++语言的最小语法单位。
字符是程序中可以区别的 最小符号。
C++语言中共有 5种词法记号,关键字、
标识符、常量、运算符和标点符号。
字符是构成 C++语言的基本要素。
【 3.1 C++语言的词法记号 】
标识符是程序员为命名程序中的一些要素所定义的单词,如变量名、函数名等。
2,标识符标识符的命名规则由字母、数字和下划线组成以字母或下划线作为第一个字符,
其后跟零个或多个字母、数字、下划线。
大写字母与小写字母分别代表不同的标识符不能与关键字相同举例正确的 错误的
sum
Dram_
rectangl
e_myfri
end
1_peo //起始字符非法
operator //是关键字
my $ //含有非法字符表 标识符的命名规则
1,关键字关键字 ——是C++语言的保留字,好比是已经赋予特殊含义的专用单词。
特点,它们各自有不同的使用目的,在程序中不能把它们用作别的用途。
【 3.1.2 词法记号 】
运算符可以用做分隔符,其他分隔符还有 () {},,;和空白字符。
4,运算符运算符 ——是 C++语言是实现加、减等各种运算的符号。
5,分隔符在编写程序时,分隔符用于分隔词法记号或程序正文。
注由于 C++编译器将注释也当作空白对待,所以,注释也可用作分隔符。
又称文字,指在程序中直接使用符号标示的数据,包括数字、字符、字符串等。
不表示任何实际的操作,仅用于结构程序。 是指空格(空格键所产生的字符)、制表符( Tab键所产生的字符)、换行符( Enter键所产生的字符)。
3,常量数据是程序处理的对象,在 C++语言中,所有的对象都属于某种数据类型。
数据类型的分类 基本数据类型自定义数据类型
【 3.2.1 基本数据类型 】
关键字又被称作修饰符,用来作为前缀修饰字符型、整型、浮点型。
基本数据类型的分类布尔型( bool)
字符型( char)
整型( int )
浮点型( float,double)
signed(表示有符号)
4个关键字 unsigned(表示无符号)
long(表示长型)
short(表示短型)
【 3.2 数据类型 】
长度(字节) 取值范围类型
bool 1 false( 0) true( 1)
char
unsigned char
signed char
short int( short)
signed short int( signed short)
unsigned short int( unsigned short)
int
1
1
1
2
2
2
4
-128~ 127
0~ 255
-128~ 127
-32768~ 32767
-32768~ 32767
0~ 65535
-2147483648~ 2147483647
signed int
unsigned int
signed long int( signed long)
long int( long)
unsigned long int( unsigned int)
float
double
long double
-2147483648~ 2147483647
0~ 4294967295
-2147483648~ 2147483647
-2147483648~ 2147483647
0~ 4294967295
3.4E-38~ 3.4E+38
1.7E-308~ 1.7E+308
1.7E-308~ 1.7E+308
4
4
4
4
4
4
8
8
【 表 C++语言的基本数据类型 】
有些数据在程序运行过程中是可以改变的,我们称之为 变量 。
一个变量对应着计算机中的一组内存单元,这组内存单元在
C++语言中用一个标识符来标识,即 变量名 。
数据类型是指 C++语言中的任一合法类型,每个变量都必须属于一种类型。变量名的命名应遵照 标识符的命名规则 。
C++语言中使用变量前必须对变量进行声明。变量声明的格式如下:
数据类型 变量名 1,变量名 2,…,变量名 n;
注意在声明变量时,必须注意变量类型的选择。应该保证该变量中将要存储的值不突破该变量类型所能表示的最大值。
【 3.2.2 变量 】
在程序中,有些数据在运行期间是不允许改变的,我们称之为 常量 。
常量的分类 字面常量符号常量 数据类型是由它的表示方法决定的。
1,整型常量整型常量就是以文字形式出现的整数,包括三种形式。各种表示形式前均可加上正或负号以表示它们值的正负,正号可以省略。
形式十进制八进制十六进制举例
1980,-50
表 整型常量的三种形式组成由若干个 0~ 9的数字组成,但不能以 0开头以 0开头,由若干 0~ 7的数字组成以 0X或 0x开头,由若干 0~ 9的数字及 A~ F(大小写均可)的字母组成
010,-0276
0x1Fa
-0X4Ab
备注
L(或 l)表示长整型,U(或 u)
表示无符号型,
如果后缀包括 L
(或 l)和 U(或
u)则表示无符号长整型。
【 3.2.3 常量 】
2,实型常量实型常量只能用十进制表示,共有两种表示形式 一般表示形式指数表示形式形式一般表示指数表示举例
10.2,
10.,.2
表 实型常量的两种形式组成又称小数表示形式。使用这种表示形式时,
实型常量由整数和小数两部分组成。其中的一部分在实际使用时可省略,但不允许两部分同时省去。
表示很大或很小的实数,由尾数部分、字母 E(或 e)、指数部分三部分组成。尾数部分的表示和一般表示形式相同,指数部分必须是整数,但可正可负,当指数大于零时,正号可省。
1.2E20,
.24e100,
备注默认数据类型为 double
型,如果加上后缀 F
(或 f)则为 float型,
加上 L(或 l)
则为 long
double型。
【 3.2.3 常量 】
字符常量通常是指用单引号括起来的一个字符,其数据类型是 char。其中单引号只是用来说明被它括起来的字符是字符常量,它本身不是字符常量的内容。如,′a′,′#′,′G′。
C++语言中,还有一种转义序列的表示方法可用来表示字符常量。
是用转义符号“\”后跟一个字符或一个 ASCII码来表示一个单一字符。若“\”
后跟一个 ASCII码,则表示的是该 ASCII码所代表的字符。 在这里 ASCII码用八进制或十六进制表示,这里八进制和十六进制的表示与前面表示整型常量的方式不同,应无第一个,0”。例如 ′\ X62′就表示字符 ′b′。
表 1 2 C++预定义的转义序列符 号 含 义
\ a
\ b
\ f
\ n
\ r
\ t
\ v
\\
\ ″
\ ′
响铃退格( Backspace键)
换页换行回车水平制表符( Tab键)
垂直制表符反斜杠双引号单引号
3,字符常量
【 3.2.3 常量 】
4,字符串常量字符串常量又称字符串或串常量,是用一对双引号括起来的字符序列。
例如,″xyz″,″I am a student″,″This is a string″都是字符串。
由于双引号在字符串中用做定界符,所以,若字符串中需要出现双引号时,则必须采用 转义序列 。
注
I \ 0
C++语言中字符串的存储与字符不同,它在内存中的存放并不是简单地按串中字符的顺序排放,而是在末尾加上一个 ′\ 0′,表示字符串的结束。
字符串、字符及与其对应的存储形式 ″I″ ′I′ I
在 C++语言中已经有了其他特定的含义:“\”是转义字符;,′”被用于表示字符常量,,″”用于表示字符串常量。如果需要把它们用作字符常量,
就必须采用转义序列。
注 字符常量在内存中以 ASCII码形式存储,每个字符占一个字节 。
【 3.2.3 常量 】
5,布尔常量布尔常量仅有两个,false(假)和 true(真),其数据类型为 bool。
符号常量在声明时一定要赋初值,而且其值在初始化后不能再改变,
这一点与变量完全不同。 C++语言提供了两种声明符号常量的方法。
注解释形式正确声明用 #define声明符号常量
C语言中声明符号常量的方法。
其中 #define是预处理指令。缺点是不能显式声明常量的类型。
用 const声明符号常量
C++语言中广泛采用的声明符号常量的方法
const 数据类型 常量名 =常量值;
或:
数据类型 const 常量名 =常量值;
const double pi=3.1415926; #define pi 3.1415926
错误声明 const double pi; //错误pi=3.1415926; //错误 最后不允许加,;”
表 两种声明符号常量的方法
6.符号常量例 3.1:
#include <iostream.h>
#define pi 3.1415926
void main()
{
const float H=5.0;
int r=7.0,v;
v=pi*r*r*H;
cout<<v<<endl;
}
例 3.2 #define的不安全性
#include<iostream.h>
main()
{
int a=1;
#define T1 a+a
#define T2 T1-T1
cout <<"T2 is "<<T2<<endl;
return 0;
}
注意:
例 3.3 用 const取代 #define。
#include<iostream.h>
int main()
{
int a=1;
const int T1=a+a;
const int T2=T1-T1;
cout <<"T2 is"<<T2<<endl;
return 0;
}
输出,T2 is 0
自定义数据类型的分类枚举类型数组类型联合类型结构类型类类型指针类型一种用户自定义数据类型。
是类型相同、数目一定的变量的有序集合,组成数组的变量称为该数组的元素。
C语言中提供结构类型,它能把不同类型的数据组合成一个集合体。
是使几个不同类型的变量共用同一组内存单元。
它能把不同类型的数据及对数据的操作组合成一个集合体。
存放内存地址的单元。
在实际运用中,仅有这些内置的数据类型,并不能完全满足程序设计的需要。为此,C++语言还提供了一些自定义数据类型。
【 2.2.4 自定义数据类型 】
注意:
在 C++中,结构体名、联合体名、枚举名可直接作为类型名。
在定义变量时,不必在结构体名、联合体名或枚举名前冠以
struct,union或 enum。
例如:
enum color{“white”,”black”,”red”,”green”,”yellow”};
truct student
{ char sno[7];
char name[20];
char sex;
int age;
};
在 C语言中定义变量必须写成:
enum color c1;
struct stuent zh;
在 C++中可以写成:
color c1;
student zh;
【 3.3 数组与指针 】
数组 是具有一定 顺序关系 的若干 相同类型变量的集合体,组成数组的变量称为该数组的 元素 。
一维数组的声明类型说明符 数组名 [ 常量表达式 ];
例如,int a[10];
表示 a 为整型数组,有 10个元素,a[0]...a[9]
数组元素 在内存中顺次存放,它们的 地址是连续的 。
【 3.3.1 数组 】
1,数组的概念注意:
在定义数组时,数组长度必须确定,否则 C++系统无法为数组分配内存空间。
确定数组长度的方法,
1、由数组元素个数确定
int a[10];
2、由初始化元素个数确定
int a[5]={1,2,3,4};
int a[ ]={1,2,3,4,5};
当数组元素个数给出时,初始化元素必须小于或等于数组元素个数指向 void类型的指针称为 void指针 。
比如,int a,b;
int *p1=&a,*p2=p1;
只能用指向相同类型的指针给另一个指针赋值。
1,void指针
【 3.3.2 指针 】
指针变量 是用于存放内存地址的变量。可以将变量的地址保存在指针中,而 无需知道变量地址的实际数值。
其声明的一般形式如下:
数据类型 *标识符;
比如,int a;
int *p1=&a;
double *p2=p1; //错误比如:
int a; // 声明 int型变量
int *p1=&a; // 给指针 p1赋值
void *p2=p1; // 用 int型指针直接给 void指针赋值,正确
int *p3=p2; // 用 void指针直接给 int型指针赋值,错误
int *p4=(int *)p2; // void指针通过强制类型转换给 int型指针赋值,
// 正确
void指针 是一个特例,它可以 指向任何类型的 C++数据 。也即可以用任何类型的指针直接给 void指针赋值。如果需要将 void指针的值赋给其他类型的指针,则需要 进行强制类型转换 。
语句中的两个指针指向的类型不同,因此,它们之间不能相互赋值。除非进行 强制类型转换 。
不同类型指针间的赋值是 错误的 。
void指针的使用
#include<iostream.h>
void main()
{
int a(1);
int *pa1=&a,*pa2=0;
void *pv=pa1; //用 int型指针直接给 void指针赋值
cout<<″a=\ t″<<a<<endl;
cout<<″*(int*)pv=\ t″<<*(int*)pv<<endl; //输出结果时,
// void指针必须强制类型转换
pa2=(int *)pv; //给 int型指针赋值时,void指针必须转换
cout<<″*pa2=\ t″<<*pa2<<endl;
} a= 1
*(int*)pv= 1
*pa2= 1
例 3.4
★ 指针常量例,int * const ptr =&a; //指针是常量
int b=10;
ptr=&b; //error
*ptr=b; //ok
该语句将 ptr声明为指向一个整数的常量指针,ptr所指向的值可以被修改,但是不能把 ptr指向其它单元。
在声明指针时,可以用关键字 const进行修饰,用关键字
const修饰的指针称为 const指针 。
2,const指针
★ 常量指针例,const int *ptr=&a;//指向的对象是整型常量
or
int const *ptr=&a;
int b=20;
ptr=&b; //ok
*ptr=b; //error
该语句把 ptr声明为指向整数常量的指针。 ptr所引用的值不能修改,但是可以把 ptr指向其它内存单元。
★ 常量指针常量例:
const int *const ptr=&a; //指向的对象是整型常量,指针
// 也是常量
or
int const *const ptr=&a;
int b=20;
ptr=&b; //error
*ptr=b; //error
小结
C++中的基本数据类型 。
C++中的自定义数据类型 。
C++中的数组和指针 。
作业
P48 2.15,2.18
补充练习
1、请编程完成如下图形的输出。
### $$$
#### $$$$
##### $$$$$
###### $$$$$$
####### $$$$$$$
2、编程完成从键盘上输入任意 10个整数,要求按从小到大的顺序输出。
3,编程完成 输入 n*n的矩阵,输出两条对角线上的和。
4,编程完成从键盘上输入任意十六进制整数的字符串,将它转换成十进制整数并输出。
#include <iostream.h>
void main()
{
for(int i=1;i<=5;i++)
{ for(int j=1;j<=5-i;j++)
cout<<,”;
for(int k=1;k<3+i;k++)
cout<<“#”;
for(int s=1;s<3;s++)
cout<<,” ;
for(int t=1;t<3+i;t++)
cout<<“$”;
cout<<endl;
}
}
#include <iostream.h>
void main()
{
int a[10];
for(int i=0;i<10;i++)
cin>>a[i];
for(int j=0;j<9;j++)
for(int k=j+1;k<10;k++)
if(a[j]>a[k])
{ int temp;
temp=a[j];
a[j]=a[k];
a[k]=temp;
}
for(int s=0;s<10;s++)
cout<<a[s];
cout<<endl;
}
#include<iostream.h>
void main()
{ const int n=5
int a[n][n];
int sum=0;
for(int i=0;i<5;i++)
{ sum+=a[i][i];
sum+=a[i][4-i];
}
if(n%2==1)
sum-=a[n/2][n/2];
cout<<“sum=”<<sum<<endl;
}
#include<iostream.h>
void main()
{ char str[20],*ptr=str;
cin>>str;
int d=0;
while(*ptr!=?\0?)
{ if(*ptr>=?A?&&*ptr<=?Z?)
d=d*16+*ptr-55;
if(*ptr>=?0?&&*ptr<=?9?)
d=d*16+*ptr-48;
if(*ptr>=?a?&&*ptr<=?z?)
d=d*16+*ptr-87;
ptr++;
}
cout<<“d=”<<d<<endl;
}