return0;
}
五、指针、地址与引用
1.地址与引用
定义格式:
intx=3;
int&y=x;
使用格式:
y=5;
x=5;
2.地址与指针
定义格式:
intx=3;
int*p=&x;
int*p=newint();
int*p=newint(3);
int*p=newint[10];
使用格式:
*p=5;
p++;
p[3]=6;
3.指针的运算
+、-、++、--、*、[]
4.举例:
(1)int*ptr;//指针所指向的类型是int
(2)char*ptr;//指针所指向的的类型是char
(3)int**ptr;//指针所指向的的类型是int*
(4)int(*ptr)();//指针所指向的的类型是intf()
(5)int(*ptr)[3];//指针所指向的的类型是int()[3]
(6)int*(*ptr)[4];//指针所指向的的类型是int*()[4]
5.典型例子
例6-6编写一个字符串比较函数,仅比较两个字符串的前面若干个字符,且在比较时不区分大小写字母。
//Example6-6:
不区分大小写字母的部分字符串比较
intmystrnicmp(char*str1,char*str2,intn)
{
while(toupper(*str1)==toupper(*str2)&&*str1!
=0&&*str2!
=0&&n>0)
{
str1++;
str2++;
n--;
}
returntoupper(*str1)-toupper(*str2);
}
例6-8使用指针编写一个用于对整型序列进行排序的函数,排序方法使用简单选择排序法。
//Example6-8:
简单选择排序
#include
usingnamespacestd;
//函数selectsort():
简单选择排序
voidselectsort(int*list,intcount)
{
for(inti=0;i{
intk=i;
for(intj=i+1;jif(*(list+j)<*(list+k))k=j;
if(k!
=i)
{
inttmp=*(list+i);
*(list+i)=*(list+k);
*(list+k)=tmp;
}
}
}
intmain()
{
intarray[6]={2,7,2,2,3,1};
selectsort(array,6);
cout<<"Theresultis:
"<for(inti=0;i<6;i++)cout<cout<return0;
}
六、函数、数组与函数、引用与函数、指针与函数、函数指针
1.函数
定义格式:
intadd1(inta,intb){
returna+b;
}
intadd2(&inta,int&b){
returna+b;
}
intadd3(int*a,int*b){
return*a+*b;
}
intadd4(intcount,inta[]){
intc=0;
for(inti=0;ic=c+a;
}
returnc;
}
调用格式:
inta=3;
intb=5;
intc=add1(a,b);
c=add2(a,b);
c=add3(&a,&b);
iny(*ptr)(int,int)=add1;
c=ptr(a,b);
intd[]={1,2,3,4};
c=add4(4,d);
2.典型例子
例5-5编写一个用于对整型数组进行排序的函数,排序方法使用例4-6的简单交换排序法。
//Example5-5:
交换排序
#include
usingnamespacestd;
//函数bubble_up():
冒泡法排序
voidbubble_up(intlist[],intcount)
{
for(inti=0;ifor(intj=count-1;j>i;j=j-1)
if(list[j-1]>list[j])
{
inttmp=list[j-1];
list[j-1]=list[j];
list[j]=tmp;
}
}
//测试冒泡法排序的主程序
intmain()
{
inti;
intarray[16]=
{
503,87,512,61,908,170,897,275,
653,426,154,509,612,677,765,703
};
cout<<"原数组是:
"<for(i=0;i<16;i++)
cout<cout<bubble_up(array,5);//函数调用
cout<<"对数组前5项进行排序后的结果是:
"<for(i=0;i<16;i++)
cout<cout<bubble_up(array,16);
cout<<"对整个数组排序后的结果是:
"<for(i=0;i<16;i++)
cout<cout<return0;
}
例7-1采用递归算法求n!
//Example7-1:
用递归方法求n!
//函数fac():
求阶乘的递归函数
intfac(intn)
{
if(n<0)//不能求负数的阶乘
return?
1;
elseif(n==0)//0的阶乘为1
return1;
else
returnn*fac(n-1);//n!
为(n-1)!
乘以n
}
例7-11编写一个用于在字符串中查找某字符的函数。
//Example7-11:
函数strchr():
在字符串中查找指定字符
char*strchr(char*string,intc)
{
while(*string!
=c&&*string!
=0)
string++;
if(*string==c)//查找成功
returnstring;
else//string==0(字符串结束符),字符串中没有c
returnNULL;
}
七、结构体、枚举体、共同体
1.结构体
定义格式:
structDate{intyear;intmonth;intday};
使用格式:
Datedate;
date.year=2012;
2.枚举体
定义格式:
enumColor{RED,GREEN,BLUE};
使用格式:
Colorcolor;
color=RED;
3.共同体
定义格式:
unionPosition{intgrand;chartitle[20]};
使用格式:
Positionpos;
pos.grand=3;
strcpy(pos.title,"Engineer");
4.典型例子
例8-7词频统计:
输入一系列英文单词,单词之间用空格隔开,用“xyz”表示结束输入,统计输入过哪些单词以及各单词出现的次数,统计时区分大小写字母,最后按单词的字典顺序输出单词和出现次数的对照表。
//Example8-7:
词频统计
#include
#include
usingnamespacestd;
//词条类型
structWordList
{
charword[50];
intfreq;
};
//词典排序函数
voidSort(WordListlist[],intcount)
{
for(inti=0;ifor(intj=count-1;j>i;j=j-1)
if(strcmp(list[j-1].word,list[j].word)>0)
{
WordListtmp;
tmp=list[j-1];
list[j-1]=list[j];
list[j]=tmp;
}
}
//主函数:
进行词频统计
intmain()
{
WordListlist[5000];
inti,num=0;
chartemp[50];
cout<<"请输入一系列英语单词,以xyz表示输入结束"<cin>>temp;
while(strcmp(temp,"xyz")!
=0)
{
for(i=0;i{
if(strcmp(list[i].word,temp)==0)//若词典中存在该词条,词频加1
{
list[i].freq++;
break;
}
}
if(i>=num)//若词典中无该词条,添加该词
{
strcpy(list[i].word,temp);
list[i].freq=1;
num++;
}
cin>>temp;//继续输入单词
}
Sort(list,num);//对词典进行排序
//输出词典
cout<<"词频统计结果如下:
"<for(i=0;icout<return0;
}
八、类、继承与对象
1.类:
定义格式:
classA:
基类{
权限修饰符:
成员变量定义
权限修饰符:
构造函数定义
virtual虚函数定义
virtual纯虚函数定义=0;
一般成员函数定义
析构函数定义
};