⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 function.cpp

📁 这我们老师对是面向对象程序设计(清华大学出版社)一书制作的PPT
💻 CPP
字号:
#include<iostream.h>
#include<math.h>

//【例3.1】 求三角形的面积
//分析:给定三个实数a,b,c,首先判断这三个数能不能构成三角形,然后再计算三角形的面积。
//三角形的面积s=sqrt(l*(l-a)*(l-b)*(l-c)),其中l=(a+b+c)/2。


Judge(float a, float b, float c) //判断a,b,c能否构成三角形,若能,返回1,否则返回0
{
	if(a+b<=c||a+c<=b||b+c<=a)  return 0;
	else  return 1;
}
float Area(float a, float b, float c)
{
	float l;
	l=(a+b+c)/2;
	return (sqrt(l*(l-a)*(l-b)*(l-c)));
}
void main(void)
{
	float x,y,z;
	cout<<"输入三条边:";
	cin>>x>>y>>z;
	if(Judge(x,y,z))
		cout<<"三角形的面积为:"<<Area(x,y,z)<<endl;
	else
	cout<<"这三条边无法构成一个三角形\n";
}

//【例3.2】 输入三个实数,求出其中的最大数。

int Max(int x , int y )             // A  
{  return ( x>y ? x : y ) ;  }

void Print(int x)
{  cout<<"三个数中最大的数为:"<<x<<endl;  }

void main3_2(void )
{    	
	int a, b, c, t;
	cout<< "输入三个整数:" ;
	cin>>a>>b>>c ;
	t=Max(a,b);				// B  调用有参函数,函数的返回值参与表达式运算
	t=Max(c,t); 			// C	
	Print(t);            		// D  调用无参函数
    cout<<Max(4.3, 5.4)<<'\n'; 	//E
    cout<<Max('a', 'b')<<'\n';  	//将'a'和'b'分别转换为97和98传递给函数Max()
//	cout<<Max(a,b,c);   		//错误,调用Max(int,int)函数时多了一个参数
}

//【例3.3】利用参数类型的不同实现重载函数。

int Abs(int x) 
{                                      	//A
	cout<<"调用函数Abs(int)."<<'\n';
	return x>=0 ? x : -x;  	
}

double Abs(double x) 
{									//B
    cout<<"调用函数Abs(double)."<<'\n';
	return x>=0 ? x : -x;	
}

void main3_3()
{
	cout<<"-20的绝对值是:"<<Abs(-20)<<endl;           	//C
	cout<<"-111.11的绝对值是:"<<Abs(-111.11)<<endl;    	//D
}

//【例3.4】利用参数个数不相同实现重载函数。

int max(int a,int b);
int max(int a,int b,int c);
int max(int a,int b,int c,int d);

void main3_4()
{
    cout<<max(3,5)<<endl;
	cout<<max(-7,9,0)<<endl;
	cout<<max(23,15,3,6)<<endl;	
}

int max(int a,int b)
{	return a>b ? a : b;  }

int max(int a,int b,int c)
{	
	int t=max(a,b); 
	return max(t,c);
}

int max(int a,int b,int c,int d)
{	
	int t1=max(a,b);
	int t2=max(c,d);
	return max(t1,t2);
}


//【例3.5】用内联函数计算立方体的体积

inline float Cube(float a)
{  return a*a*a;  }

void main3_5()
{
	cout<<"输入立方体的边长:";
	float side;
	cin>>side;
	cout<<"边长为"<<side<<"的立方体的体积为:"
		<<Cube(side)<<'\n';						//A
}

//【例3.6】 将例3.1改为如下的形式:

void main3_6(void)
{
	float x,y,z;
	cout<<"输入三条边:";
	cin>>x>>y>>z;
	
	int Judge1(float x1,float x2,float x3);		//C  函数的原型说明(格式一)
	float Area1(float,float,float );			//D  函数的原型说明(格式二)

	if(Judge1(x,y,z))										//A
		cout<<"三角形的面积为:"<<Area1(x,y,z)<<endl;		//B
	else
		cout<<"这三条边无法构成一个三角形\n";
}

Judge1(float a, float b, float c)
{	
	if(a+b<=c||a+c<=b||b+c<=a) return 0;
	return 1;
}

float Area1(float a, float b, float c)
{	
	float l;
	l=(a+b+c)/2;
	return (sqrt(l*(l-a)*(l-b)*(l-c)));
}

//【例3.7】	值传递应用--两数交换

void Swap(int a, int b)
{
	int t;
	cout<<"形参a、b的原值为:"<<a<<'\t'<<b<<endl;
	t=a; a=b ; b=t;      //借助中间变量t对a、b进行交换
	cout<<"形参a、b经过交换后的值为:"<<a<<'\t'<<b<<endl;
}

void main3_7(void)
{
	int x,y;
	cin>>x>>y;
	cout<<"实参x、y的原值为:"<<x<<'\t'<<y<<endl;
	Swap(x,y);               //A
	cout<<"实参x、y经过交换后的值为:"<<x<<'\t'<<y<<endl;
}

//【例3.8】求一元二次方程ax2+bx+c=0的根。

float Delta(float a, float b, float c)
{	return b*b-4*a*c;	}

void Root(float a, float b, float c)
{	
	float d,x1,x2,m,n;
	d=Delta(a,b,c);
	if(fabs(d)<=1e-6)
	{
		x1=x2=-b/(2*a);
		cout<<"方程有两个相等的实根:x1=x2="<<x1<<endl;
	}
	else if(d>0)
	{
		x1=(-b+sqrt(d))/(2*a);
		x2=(-b-sqrt(d))/(2*a);
		cout<<"方程有两个不等的实根:x1="<<x1<<'\t'<<"x2="<<x2<<endl;
	}
	else 
	{	
		m=-b/(2*a);
		n=sqrt(-d);
		cout<<"方程有一对共轭复根:";
		cout<<"x1="<<m<<'+'<<n<<"i\t"<<"x2="<<m<<'-'<<n<<"i\n";
	}
}

void main3_8(void)
{
	float a,b,c;
	cout<<"输入方程系数:";
	cin>>a>>b>>c;
	Root(a,b,c);
}

//【例3.9】用函数递归调用方法求5!。
//分析:由递推公式n!=n* (n-1)!,所以求n!的问题可以转化为求(n-1)!的问题,
/*    (n-1)!=(n-1)* (n-2)!,因此求(n-1)!的问题可以转化为求(n-2)!的问题,依此类推,
	直到转化为求1!的问题,根据定义,1!=1,则从1!=1开始将上述过程逆向求解,就可以求出n!。
	这种求解问题的方法可用函数递归调用方法实现,*/


int f(int n){
	if(n==0||n==1)  return 1;				//A
	else return n*f(n-1);					//B
}

void main3_9(void)
{	
	cout<<f(5)<<'\n' ;	
}


//【例3.10】设计两个函数,其参数都为整型,分别将参数逐位正序和反序输出。若参数为1234,
//则逐位正序输出为1234,而逐位反序输出为4321。要求用递归函数实现。
/*分析:要实现逐位正序或反序输出一个整数,则必须获取它的各位数字。对一个整数,比如1234,
则很容易获得它的个位数,即1234%10,而要求十位数,则必须先将个位数去掉,即1234/10,结果为123,
然后再求其个位数即可,其余各位依此类推。因此在求一个整数K的各位数字时存在一种递推关系:
    f1=K
	tn=fn%10
    fn+1=fn/10
其中tn为整数K的第n位数(最右边的数为第一位数),fn为去掉K的右边n-1位数后剩下的数。
而该递推关系的结束条件为fn=0。*/


void Convert(int n)
{
	int t;
	if(n==0){ cout<<endl; return;}
	else
	{
		t=n%10;
		n=n/10;
		cout<<t;
		Convert(n);       //递归调用
	}	
}

void Original(int n)
{
	int t;
	if(n==0){return;}
	else
	{
		t=n%10;
		n=n/10;		
		Original(n);          //递归调用
		cout<<t;
	}	
}

void main3_10()
{
	Convert(1234);
	Original(1234);
	cout<<endl;	
}

//【例3.11】Hanoi(汉诺塔)问题。

void Move(char x, char y)    //将x塔中的盘子移动到y塔
{	cout<<x<<"->"<<y<<endl;		}

void Hanoi(int n,char one,char two,char three)
{
	if(n==1) Move(one,three);  //结束条件:当one塔中只剩下一个盘子时
	else
	{
		Hanoi(n-1,one,three,two);  
		Move(one, three);
		Hanoi(n-1,two,one,three);
	}
}

void main3_11(void)
{
	int m;
	cout<<"请输入盘子个数:";
	cin>>m;
	Hanoi(m, 'A', 'B', 'C');
}

//【例3.12】块嵌套中标识符的使用

void main3_12(void)
{									//块B1
	int i=1, j=2;          		 	//A   定义i,初始值为1
	cout<<i<<'\t'<<j<<'\n';				//B
	{							//块B2
       	int i=10;        			//C   定义i,初始值为10
		j+=i;     					//D
		cout<<i<<'\t'<<j<<'\n';			//E
	}   				         	
	cout<<i<<'\t'<<j<<'\n';          	//F
}

//【例3.13】在块作用域内引用文件作用域的同名变量。

int i=100;	        							//i具有文件作用域
void Global()
{
    int i=200;
	cout<<"函数Global()中的i="<<i<<'\n';
	::i+=i;         							//改变全局变量
	cout<<"函数Global()中的::i="<<::i<<'\n';     	//输出全局变量
}

void main3_13(void)
{
	int i;
	i=300;
	cout<<"函数main()中的i="<<i<<'\n';    		//输出局部变量
	Global();
	::i+=i;     //改变全局变量
	cout<<"函数main()中的::i="<<::i<<'\n';    	//输出全局变量
}

//【例3.14】使用静态类型的局部变量。

int f(void)
{
	static k=10;    		//A    相当于static int k=10
	k+=5;
	return k;
}

void main3_14(void)
{
	for (int i=0;i<5;i++)
	   cout<<f( )<<'\t';     //B
    cout<<'\n';
}


//【例3.15】利用寄存器类型变量求l~15的阶乘。

void main3_15(void)
{
	register float Fact=1;			//定义实型寄存器变量Fact
	for(register int i=1;i<=15;i++)	//定义整型寄存器变量i
	{
		Fact*=i;
		cout<<i<<"!="<<Fact<<'\n';
	}
}

//【例3.16】外部类型变量的声明

int Max1(int x,int y)
{return x>y?x:y;}

void main3_16(void)
{
	extern int a,b;				//A
	cout<<Max1(a,b);          	//B
}

int a=12,b=-4;

//【例3.17】文件间共享全局变量

extern float x;							//A	

void main3_17( void )
{	 
	x++;
	cout<<x<<'\n';
}

//【例3.18】具有缺省参数值的延时函数。

void Delay(int n=1000)       		//A
{	for(;n>0;n--) ;	}

void main3_18(void)
{
	cout<<"延时500个单位时间…\n";
	Delay(500);            		//B
	cout<<"延时1000个单位时间…\n";
	Delay();				 	//C
}

//【例3.19】设计一程序,输入圆柱体的半径和高度,求出圆柱体的体积。

#define PI 3.1415926

float Volume(float r, float h=10);			//A

void main3_19(void)
{
	float r, h ;
	cout<<"输入第一个圆柱体的半径和高度:";
	cin>>r>>h;
	cout<<"第一个圆柱体的体积为:"<< Volume (r, h)<<'\n';
	cout<<"输入第二个圆柱体的半径:";
	cin>>r;
	cout<<"第二个圆柱体的体积为:"<< Volume (r)<<'\n';
	float Volume(float=5, float=20);                        	//B
	cout<<"第三个圆柱体的体积为:"<< Volume ()<<'\n';    		//C
}

float Volume (float r,float h)								 //D
{	return ( PI*r*r*h );		}


//【例3.20】设计一程序,求若干个数的和。

#include<stdlib.h>
#include<stdarg.h>
int Sum(int Num...)
{
	va_list ap;
	int s=0,Temp;
	va_start(ap,Num);             //A
	for(int i=0;i<Num;i++)
	{
		Temp=va_arg(ap,int);      //B
		s+=Temp;
	}
	va_end(ap);                  //C
	return s;
}

void main3_20(void)
{   
	cout<<Sum(0)<<endl;           //D
	cout<<Sum(3,1,2,3)<<endl;
	cout<<Sum(4,1,2,3,4)<<endl;
	cout<<Sum(5,1,2,3,4,5)<<endl;
}


//【例3.21】文件包含的应用

#include "Function.h"         //A

void main3_21(void)
{
	cout<<x3<<'\t'<<y<<'\n';
	cout<<x1<<'\t'<<x2<<'\n';
}

//【例3.22】不带参数的宏的使用

#define R 3
#define PI 3.1415926
#define L 2*PI*R       //A   在宏定义中可以利用已定义的宏名
#define S PI*R*R       //B
#define STR1 "周长为:"
#define STR2 "面积为:"

void main3_22(void)
{	
	cout<<STR1<<L<<'\n'<<STR2<<S<<'\n';	//C
}  

//【例3.23】带参数的宏定义的使用

#define PI 3.1415926
#define S(r) PI*r*r

void main3_23(void)
{	
	float a,Area;
	a=3.6;
	Area=S(a);
	cout<<"Area="<<Area<<'\n';
}

//【例3.24】输入一行字母字符,根据需要设置条件编译,使之全改为大写输出,或全改为小写输出。

#define Letter  1                    //A

void main3_24(void)
{
	char c;                          //B
	while((c=cin.get())!='\n')
	{
		#if  Letter                       //C
			if(c>='a'&&c<='z')
				c=c-32;
		#else 
			if(c>='A'&&c<='Z')
				c=c+32;
		#endif
		cout<<c;
	}
}

















⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -