C++点滴(5)

C(n,k) = C(n-1,k) + C(n-1,k-1)

一个n元集合,选择k个元素的组合有C(n,k)个。
现在把其中一个元素设置为特别元素。
从剩余的n-1个元素中选择k个元素,有C(n-1,k)个,它比C(n,k)所少的都是包含特别元素的组合。
再看C(n-1,k-1),如果把每个组合都加上一个特别元素,那么这个式子就表示所有包含特别元素的k组合。




数组作为函数的参数:

定义数组:int num[3] = {1,2,3};

声明函数:void Bubble(int num[],int);

定义函数:void Bubble(int num[],int n)

使用:Bubble(num,3);   //数组名用为实参




求出int类型的一系列数(a[10])中的最大和最小值:
int max=-32768,min=32767;//先假设当前max为int类型的最小值,min为int类型的最大值
for(int i=0;i<=9;i++)
{
    if(a[i]>max)  max=a[i];
    if(a[i]<min)  min=a[i];
}



乘积的最后三位的值只与乘数和被乘数的后三位有关。

一个整数若含有一个因子5,则必然会在求100!时产生一个零。




for(int a=1;a>=3&&a<=4;a++)
{
    cout<<a<<endl;
}

结果是不会输出任何数(只要不满足条件就跳出循环)




判断一个数是否为整数:
z==int(z)




setprecision:控制输出流显示浮点数的数字个数,如果和fixed合用的话,可以控制小数点右面的位数。

cout<<setprecision(2)<<123.456;
1.2e+002

cout<<setprecision(3)<<123.456;
123(输出3位有效数字)

cout<<fixed<<setprecision(3)<<123.456
123.456(输出到小数点后3位)

cout<<setprecision(4)<<123.456;
123.5(四舍五入)





C++引用:

引用的概念:引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。
引用的声明方法:类型标识符 &引用名=目标变量名;
int a,&ra=a;
a为目标原名称,ra为目标引用名。给ra赋值:ra=1; 等价于 a=1; 
说明:
(1)&在此不是求地址运算,而是起标识作用。
(2)类型标识符是指目标变量的类型。
(3)声明引用时,必须同时对其进行初始化。
(4)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。
(5)声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。故:对引用求地址,就是对目标变量求地址。&ra与&a相等。
(6)不能建立引用的数组。因为数组是一个由若干个元素所组成的集合,所以无法建立一个由引用组成的集合。但是可以建立数组的引用。


引用的两个主要用途:作为函数参数以及从函数中返回左值。
1、传递可变参数
传统的c中,函数在调用时参数是通过值来传递的,这就是说函数的参数不具备返回值的能力。所以在传统的c中,如果需要函数的参数具有返回值的能力,往往是通过指针来实现的。比如,实现两整数变量值交换的c程序如下:
void swapint(int *a,int *b)
{
    int temp;
    temp=*a;
    *a=*b;
    *b=temp;
}
使用引用机制后,以上程序的c++版本为:
void swapint(int &a,int &b)
{
    int temp;
    temp=a;
    a=b;
    b=temp;
}
调用该函数的c++方法为:swapint(x,y); c++自动把x,y的地址作为参数传递给swapint函数。

2、给函数传递大型对象
当大型对象被传递给函数时,使用引用参数可使参数传递效率得到提高,因为引用并不产生对象的副本,也就是参数传递时,对象无须复制。



3、引用返回值
#include <iostream>

using namespace std;
int& fun(int& a)
{
    a++;
    return a;
} //把a返回引用函数,也就是说这个fun()就是a的别名

int main()
{
   int b=10;
   fun(b); //同理,fun(b)就是b自增后的b的别名
   fun(b)=15;//引用返回值可以作为左值
   cout<<b<<endl;//b=15
   return 0;
}





#include <iostream>

using namespace std;
int& fun(int a)//去掉&
{
    a++;
    return a;
} 

int main()
{
   int b=10;
   fun(b); 
   fun(b)=15;//warning C4172: returning address of local variable or temporary
   cout<<b<<endl;   //b=10
   return 0;
}




#include <iostream>

using namespace std;
int fun(int& a)//去掉&
{
    a++;
    return a;
} 

int main()
{
   int b=10;
   fun(b); 
   fun(b)=15;//error C2106: '=' : left operand must be l-value
   cout<<b<<endl;
   return 0;
}

4、常引用
常引用声明方式:const 类型标识符&引用名=目标变量名;
用这种方式声明的引用,不能通过引用对目标变量的值进行修改,从而使引用的目标成为const,达到了引用的安全性。

【例】:
int a ;
const int &ra=a;
ra=1; //错误
a=1; //正确

引用型参数应该在能被定义为const的情况下,尽量定义为const 。






回文数:

"回文数"是一种正读倒读相同的数字。(如:1,2,3,4,5,6,7,8,9,11,22,33,44,55,66,77,88,99)

#include<iostream>

using namespace std;
int main()
{
   long m,temp,n=0;
   cin>>m;
   temp=m;
   while(temp)
   {
       n=n*10+temp%10;
       temp=temp/10;
   }
   if(n==m)
       cout<<"Yes"<<endl;
   else
       cout<<"No"<<endl; 
   return 0;
}
 

如果超越了整形变量的限制,其值将为范围的另一端

#include<iostream> using namespace std; int main() { unsigned int a=0; cout<<a-1<<endl; long long b=1; for(int i=0;i<32;++i) b*=2; cout<<b-1<<endl; return 0; }
 
#include<iostream>

using namespace std;
int main()
{
	int a=100;
	cout<<oct;       //以八进制(octal)方式显示(第一位为0,第二位为1到7)
	cout<<a<<endl;
	cout<<dec;       //以十进制(decimal)方式显示(第一位为1到9)
	cout<<a<<endl;   
	cout<<hex;       //以十六进制(hexadecimal)方式显示(前两位为0x或0X)
	cout<<a<<endl;   
	return 0;
}
//诸如cout<<oct;只是修改cout显示整数的方式(整个程序中的显示方式,而不是临近的下一个)(默认是以十进制方式显示)
//C++中只有输出八进制、十进制、十六进制的控制格式,没有二进制(binary)的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值