C++_基础知识函数

基础知识

1:编写c++程序一般经过编辑,编译,连接,运行四步。
编辑:将c++源程序输入计算机的过程,文件名为cpp
编译:将cpp文件翻译成机器语言,文件名为obj
连接:分配内存地址后,转换成可执行程序,文件名为exe
运行:执行exe文件,将结果显示到屏幕上。
2:函数的返回值类型在定义之时就以决定。
3:基类的公有成员采用私有继承时,在派生类中会变成私有成员。
4:数据封装:将数据与操作封装到一起形成实体,这个实体也就是类。
类也就是数据与操作的组合体,数据是类的静态特征,操作是类的动态特征。
5:派生类是基类的扩展和延伸,派生类一个来自本体,一个来自基类。
6:this指针可以保证每个对象都拥有自己的数据成员,可以共享处理这些数据的代码。
7:多态分为静态多态和动态多态,静态多态是由于参数的不同调用同名函数,动态多态是由于对象的不同调用同名函数。多态的对象都是同名函数。
8:内联函数代码量少,执行效率高,可以被频繁调用。也就是inline。
9:派生类的调用顺序是先调用基类构造函数,调用子对象,在调用派生类。析构函数反之。
10后置i++先赋值再自增,前置反之。
11自身类对象不能作为类的成员,循环定义。
12输出流的四种流 cin/cout/cerr/clog
13类是对象的抽象,对象是类的实例。

函数

八位二进制转十进制;
3_2.cpp

#include<iostream>
using namespace std;
double power(double x,int n)
{
	double val=1.0,i;
	for(i=0;i<n;i++)
		val*=x;
	return val;
}
int main() 
{
	int value=0;
	cout<<"Enter an 8 bit binary number:";
	for(int i=7;i>=0;i--)
	{
		char ch;
		cin>>ch;
		if(ch=='1')
			value+=static_cast<int>(power(2,i));//强制转换,吧power(2,i)的结果由double转换成int。
	}
	cout<<"Decimal value is"<<value<<endl;
	return 0;
}

例子3-3
编写程序求π值
arctanx=x-xxx/3+xxxxx/5-…

#include<iostream>
using namespace std;
double arctan(double x)
{
	double sqr=x*x;
	double e=x;
	double r=0;
	int i=1;
	while(e/i>1e-5){
		double f=e/i;
		r=(i%4==1)?r+f:r-f;//判断i%4的结果是否等于1,若是1则r+f若不是1则r-f;
		e=e*sqr;
		i+=2;
	}
	return r;//注意
}
int main() {
	double a=16.0*arctan(1/5.0);//整数相除结果取整若是1/5结果为0;
	double b=4.0*arctan(1/239.0);
	cout<<"PI="<<a-b<<endl;
	return 0;
}

例3-4
寻找回文数
思路:
除10取余,取出每一位的数字。数字反置,低位充当高位,按反序构成新的数,与原数比较。

#include<iostream>
using namespace std;
bool symm(unsigned n)//判断是否为回文数
{
	unsigned i=n;
	unsigned m=0;
	**while(i>0)
	{
		m=m*10+i%10;
		i/=10;
	}**
	return m==n;//函数为bool类型,所以返回值类型也是bool类型,如果m==n为返回true,反之为false。
	}
int main() 
{
	for(unsigned m=11;m<1000;m++)
	if(symm(m)&&symm(m*m)&&symm(m*m*m))
	{
		cout<<"m="<<m;
		cout<<"m*m="<<m*m;
		cout<<"m*m*m="<<m*m*m<<endl;
	}
	return 0;
}

例3-5

#include<iostream>
#include<cmath>
using namespace std;
const double TINY_VALUE=1e-10;//定义一个常量
double tsin(double x)//实现sin函数
{
	double g=0;
	double t=x;
	int n=1;
	do{
		g+=t;
		n++;
		t=-t*x*x/(2*n-1)/(2*n-2);//阶乘的实现
	}while(fabs(t)>=TINY_VALUE);
	return g;
}
int main() 
{
	double k,r,s;
	cout<<"r=";
	cin>>r;
	cout<<"s=";
	cin>>s;
	if(r*r<=s*s)
		k=sqrt(tsin(r)*tsin(r)+tsin(s)*tsin(s));
	else
		k=tsin(r*s)/2;
	cout<<k<<endl;
	return 0;
}

const优点
1定义一个常量,不可变性。
2便于检查,消除隐患。
3总控制
4节省空间
5提高效率,编译器不提供内存空间,而是将它保存在符号表中。

例3-7

#include<iostream>
using namespace std;
int fu2(int m)//fu1 fu2 顺序不能反。
{
	return m*m;
}
int fu1(int x,int y)
{
	return fu2(x)+fu2(y);
}

int main()
{
	int a,b;
	cin>>a>>b;
	cout<<fu1(a,b)<<endl;
	return 0;
}

例3-8

#include<iostream>
using namespace std;
unsigned fac(unsigned n)
{
	unsigned f;
		if(n==0)
			f=1;
		else
			f=fac(n-1)*n;//循环再次进入fac 函数
		return f;
}
int main() 
{
	int a;
	cin>>a;
	cout<<fac(a)<<endl;
	return 0;
}

例3-9

#include<iostream>
using namespace std;
int comm(int n,int k)
{
	if(k>n)
		return 0;
	else if(n==k||k==0)
		return 1;
	else 
		return comm(n-1,k)+comm(n-1,k-1);//分好类
}
int main()
{
	int n,k;
	cout<<"Please enter two integers n and k:";
	cin>>n>>k;
	cout<<"C(n,k)="<<comm(n,k)<<endl;
	return 0;
}

值传递与引用传递
形参写法不同而已

void swap(int a,int b)
void swap (int &a,int &b)

引用声明要初始化,指向存在的对象,初始化后就不能指向其他对象。
内联函数
内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处。
节省参数传递,控制转移开销。
inline 只是一个要求,没有inline,在现代编译器中也可能被认为是内联函数。

带默认形参值的函数
由默认值的形参必须在右边。
又默认值的形参右不能出现无默认值的形参。
因为在函数调用时是按从左至右的顺序建立对应关系的。
不能重复定义

第六章:三种方法输出数组元素,二维数组的输出方式

1使用数组名和下标

#include<iostream>
using namespace std;
int main() 
{
	int a[10]={1,2,3,4,5,6,7,8,9,10};
	for(int i=0;i<10;i++)
		cout<<a[i]<<" ";
		cout<<endl;
	
	return 0;
}

2使用数组名和指针变量

#include<iostream>
using namespace std;
int main() 
{
	int a[10]={1,2,3,4,5,6,7,8,9,10};
	for(int i=0;i<10;i++)
		cout<<*(a+i)<<" ";
		cout<<endl;
	
	return 0;
}

3使用指针变量

#include<iostream>
using namespace std;
int main() 
{
	int a[10]={1,2,3,4,5,6,7,8,9,10};
	for(int*p=a;p<(a+10);p++)
		cout<<*p<<" ";
		cout<<endl;
	
	return 0;
}

二维数组的输出方

#include<iostream>
using namespace std;
int main() 
{
	int a[3][3]={{11,12,13},{21,22,23},{31,32,32}};
	for(int i=0;i<3;i++)
	{
		for(int j=0;j<3;j++)
			cout<<*(*(a+i)+j)<<" ";
			cout<<endl;
		
	}
	return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值