C++语言基础 (2)
主要内容
程序的基本控制结构
函数及函数调用
内联函数和带默认参数的函数?函数重载基本控制结构模块 1
模块 2
顺序结构模块 1 模块 2
条件Y N
分支结构循环体条件
Y
N
循环结构分支结构
if-else-- 最简单的分支结构模块 1
模块 2
条件Y
N
1)单分支 if语句
if (<逻辑表达式 >)
<语句序列 >
2)双分支 if语句
if (<逻辑表达式 >)
<语句序列 1>
else
<语句序列 2>
模块 1 模块 2
条件Y N
3)多分支 if语句
if (<逻辑表达式 >)
<语句序列 1>
else if (<逻辑表达式 2>)
else
<语句序列 3>
<语句序列 2>
……
模块 1
模块 2
条件Y N
条件模块 3
Y N
说明:
1)else应和最近的 if嵌套;
2) 注意 if-else语句的书写格式 (缩进、对齐 )
switch & break
switch (<表达式 >)
{
case <常量表达式 n>:<语句 n>; break;
}
default:<语句 n+1>
case <常量表达式 1>:<语句 1>; break;
……
case <常量表达式 2>:<语句 2>; break;
基本格式:
执行方向
switch的执行过程:
例,switch(grade)
{ case 8,case 9,case 10:
cout<<“pass”<<endl;break;
default,cout<<“fail”<<endl;break;
}
cout<<“excellent”<<endl;break;
case 6,case 7:
switch(grade)
{ case?a?,cout<<“excellent”<<endl;
case?b?,cout<<“pass”<<endl;
case?c?,cout<<“fail”<<endl;
}
例:
循环结构三种循环语句构建方式:
while(<逻辑表达式 >)
{ <循环体 > }
while循环
do
{ <循环体 > }
while(<逻辑表达式 >)
do_while循环
for(<表达式 1>;<表达式 2>;<表达式 3>)
{ <循环体 > }
for循环
……
函数函数--对子问题的描述编程实现计算器的四则运算功能
double plus(double x,double y)
{ …… }
double minus(double x,double y)
{ …… } plus()
minus()
……
void main()
{
cout<<plus(a,b);
cout<<minus(a,b);
cin>>a>>b>>endl;
double a,b;
} ……
……
函数的定义
<返回值类型 > <函数名 >(<参数表 >)
{
<函数体 >
}
例:给出计算器加法运算的函数定义说明:
1) 定义函数时,应给出参数以及函数返回值的类型;
2) return完成两件事,强制 从被调函数返回主调函数;
给主调函数返回其执行结果。
3) 定义函数时,注意养成规范的编程风格;
例:用函数调用的方式实现计算器的四则运算
double plus(double x,double y)
{
return x+y;
}
double minus(double x,double y)
{
return x - y;
}
double multiply(double x,double y)
{
return x * y;
}
double divide(double x,double y)
{
return x / y;
}
void main()
{
cout<<“Please input numbers:”
cin>>num1>>num2;
cout<<“Please input your operator:”;
cin>>oper;
cout<<num1<<oper<<num2<<,=,;
{
switch(oper)
case?+?,cout<<plus(num1,num2)<<endl;break;
case?-?,cout<<minus(num1,num2)<<endl;break;
case?*?,cout<<multiply(num1,num2)<<endl;break;
case?/?,cout<< divide(num1,num2)<<endl;break;}
}
double num1,num2;
char oper =;
while(oper !=?=?){
}
函数调用
1)传值调用
void swap(int x,int y)
{
int a = 10,b = 5;
int temp;
void main( )
temp = x;
x = y;
y = temp;}
{
cout<<“Before swap a =,<<a<<“,b =,<<b<<endl;
cout<<“After swap a =,<<a<<“,b =,<<b<<endl;
swap(a,b);
}
10 5
ba
yx
10
5
10
5
10 5
2)传地址调用
void swap(int* x,int* y)
{
int a = 10,b = 5;
int temp;
void main( )
temp = *x;
*x = *y;
*y = temp;}
{
cout<<“Before swap a =,<<a<<“,b =,<<b<<endl;
cout<<“After swap a =,<<a<<“,b =,<<b<<endl;
swap(&a,&b);
}
10 5
ba
yx
5 10
3)引用调用
void swap(int& x,int& y)
{
int a = 10,b = 5;
int temp;
void main( )
temp = x;
x = y;
y = temp;}
{
cout<<“Before swap a =,<<a<<“,b =,<<b<<endl;
cout<<“After swap a =,<<a<<“,b =,<<b<<endl;
swap(a,b);
}
10 5
ba
yx
int& f1(int n,int* p)
{
int s[] = {1,2,3,4,5,6},i;
int& m = p[n];
void main( )
return m;
}
{
f1(3,s) = 10;
cout<<s[i]<<,”;
for(i=0;i<6;i++)
}
cout<<endl;
例 2-12:返回类型为引用的函数调用说明,函数返回值类型为引用可以对指定的单元进行修改。
s[3] = 10;
小结:
实参必须有确定的值,形参只能是变量,二者生存周期不同,二者间实现数据的单向传递;
传值调用不会改变实参的值,传地址调用间接改变了实参的值,引用调用直接改变实参的值因此在选择参数类型时,要明确所选类型对函数执行结果的影响。
函数原型
<返回值类型 > <函数名 > (<参数表 >)
例 2-8 #include <iostream.h>
int max(int,int)
void main( )
{
}
int a,b,c;
cin>>a>>b;
c = max(a,b);
cout<<“max is,<<c<<endl;
int max(int x,int y)
{
}
return ( x? x,y)
内联函数
inline <返回值类型 > <函数名 >(<参数表 >)
定义格式:
inline double plus(double x,double y)
{
return x+y;
}
例:
inline double minus(double x,double y)
{
return x - y;
}
注意:
2)内联函数体内不能有复杂的控制语句
(swith,while,for等等 );
3)递归函数不能定义为内联函数;
1) 内联函数一般只有 1~ 5条语句的函数;
4) 内联函数只能先定义后使用;
带默认参数的函数
inline double plus(double x=4,double y = 5)例:
注意:
1)默认参数一般在函数声明中提供;
2)默认参数必须放在参数表的最后;
3)默认参数的声明必须出现在函数调用之前。
函数重载
——具有相似功能的不同函数使用 同一函数名,但这些同名函数的 参数类型、参数个数、返回值类型、函数功能 可以不同。
double plus(double x,double y)
{
return x+y;
}
如:
float plus(float x,float y,float z)
{
return x+y+z;
}
注意,如果只是函数返回值类型不同,无法让编译器确定调用哪个函数。
例:对用户输入的三个数进行升序排列。 (数的类型可以是整型、实型、字符型 )
void sort(int& x,int& y,int& z) //整型数据排序
{
}
int temp;
if(x>y) {temp=x; x=y; y=temp;}
if(y>z) {temp=y; y=z; z=temp;}
if(x>y) {temp=x; x=y; y=temp;}
void sort(float& x,float& y,float& z)
{
}
float temp;
if(x>y) {temp=x; x=y; y=temp;}
if(y>z) {temp=y; y=z; z=temp;}
if(x>y) {temp=x; x=y; y=temp;}