1. 循环读取数据
while(cin>>a>>b){
cout<<a+b<<endl;
}
while(cin>>n&& n!=0){
cout<<n<<endl;
}
While(scanf(“%d”,n)==1&& n!=0){
}
注意 如果需要输入数据过多,使用scanf速度比cin快很多
2. 动态分配数组
一维数组:
定义:
int *p =new int [10];
或
int *p;
p=new int[10];
使用c的话,方法相同,使用malloc, int *p=(int *)malloc(sizeof(10*int))
收回空间:
delete []p; //不论数组有多少纬,只用一个[]
c: free(p)
二维数组动态分配:
定义一个m行n列的二维数组:
int m,n;
int **pm;
p=new int *[m+1]; //m+1行,每行开辟一个头指针,指向一维数组,第一个不用
for(int i=1;i<=m;i++){
pm[i]=new int[n+1]; // 每行n+1个空间,pm[i]为该一维数组首地址
for(int j=1;j<=n;j++){
cin>>pm[i][j];
}
}
收回空间:
for(i=0;i<=m;i++)
delete [] pm[i];
delete [] pm;
3. 数据取值范围:
注意题目给定的数据取值范围,尽量取占用空间小的数据类型。
v short:16位整数,占2字节,-2^15~2^15-1
v unsigned short:占2字节,0~2^16-1
v int:32位整数,占4字节,-2^31~2^31-1
v unsigned int:占4字节,0~2^32-1
v long==int(由于现在使用的都是32位系统)
v float:占4字节,7位有效数字
v double:占8字节,15位有效数字
一般来说用到浮点型的问题都是追求精度的,而不是卡内存,所以在一般情况下我们应当选择使用double,而很少用float。
在VC++编译器中,可以定义__int64(注意前面是两个短下划线)
__int64:占8字节,-2^63~2^63-1, printf(" %I64d \n",int64 );(是大写字母i)
unsigned__int64:占8字节,0~2^64-1, printf(" %I64u \n",int64 );
在其他编译器中,如DEV C++,可能使用方法有所不同
long long==__int64,printf("%lld\n",a);
unsigned long long==unsigned __int64, printf("%llu\n",a);
4. 其他一些注意事项
1) 宏定义#define N 100
不如写成const int N=100;