1.万能头文件
复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
...
return 0;
}
.2 判断素数
复制代码
int IsPrime(int n){
for(int i=2;i<=sqrt(n+1);i++){
if(n%i==0){
return 0;
}
}
return 1;
}
/
/返回0代表不是素数,返回1代表是素数
复制代码
3 .常用math函数(使用需加头文件#include<math.h>)
1)fabs(double x)
该函数用于对double型变量取绝对值
复制代码
#include<stdio.h>
#include<math.h>
int main(){
double db =-12.56;
printf("%.2f\n",fabs(db));
return 0;
}
//输出结果:12.56
复制代码
2)floor(double x)和ceil(double x)
这两个函数分别用于double型变量的向下取整和向上取整,返回类型为double型
复制代码
```cpp
#include<stdio.h>
#include<math.h>
int main(){
double db1 = -5.2, db2 = 5.2;
printf("%.0f %.0f\n",floor(db1),ceil(db1));
printf("%.0f %.0f\n",floor(db2),ceil(db2));
return 0;
}
/*输出结果:
-6 -5
5 6*/
复制代码
3)pow(double r,double p)
该函数用于返回rp,要求r和p都是double型
复制代码
```cpp
#include<stdio.h>
#include<math.h>
int main(){
double db = pow(2.0,3.0);
printf("%f\n",db);
return 0;
/*int型也可以使用
int a=2,b=3;
int db2 = pow(a,b);
print("%d\n",db2)
*/
}
/*输出结果:
8.000000
*/
复制代码
4)sqrt(double x)
该函数用于返回double型变量的算术平方根
复制代码
#include<stdio.h>
#include<math.h>
int main(){
double db = sqrt(2.0);
printf("%f\n",db);
return 0;
}
/*输出结果:
1.414214
*/
复制代码
5)log(double x)
该函数用于返回double型变量的以自然对数为底的对数
ps:C语言中没有对任意底数求对数的函数,因此必须使用换底公式来将不是以自然对数为底的对数转换为以e为底的对数,即logab=logeb / logea。
复制代码
#include<stdio.h>
#include<math.h>
int main(){
double db = log(1.0);
printf("%f\n",db);
return 0;
}
/*输出结果:
0.000000
*/
复制代码
6)round(double x)
该函式用于将double型变量x四舍五入,返回类型也是double型,需进行取整
复制代码
#include<stdio.h>
#include<math.h>
int main(){
double db1 = round(3.40);
double db2 = round(3.45);
double db3 = round(3.50);
double db4 = round(3.55);
double db5 = round(3.60);
printf("%d, %d, %d, %d, %d\n",(int)db1,(int)db2,(int)db3,(int)db4,(int)db5);
return 0;
}
//输出结果:3,3,4,4,4
4
.Fibonacci数列
递归法求解
复制代码
```cpp
#include<stdio.h>
#include<math.h>
int Fib(int n){
if(n==1||n==2){
return 1;
}else{
return Fib(n-1)+Fib(n-2);
}
}
int main(){
int n;
scanf("%d",&n);
printf("%d",Fib(n));
return 0;
概念法求解
复制代码
```cpp
#include<stdio.h>
#include<math.h>
int Fib(int n){
int i;
int f1 = 1;
int f2 = 1;
int f3 = 1;//避免判断n是否大于2
for(i = 2;i<n;i++)
{
f3 = f1 + f2;
f1 = f2;
f2 = f3;
}
return f3;
}
int main(){
int n;
scanf("%d",&n);
printf("%d",Fib(n));
return 0;
}
5冒泡
#include<stdio.h>
int main(){
int a[10]={3,1,4,5,2};
for(int i=1;i<=4;i++){//进行n-1趟比较
for(int j=0;j<5-i;j++){//将剩余的数进行交换,选出最大的那一个
if(a[j]>a[j+1]){//交换
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
for(int i=0;i<5;i++){
printf("%d ",a[i]);
}
return 0;
}
//输出结果:1 2 3 4 5
6;.memset函数的使用
memset函数的功能是给数组中的每一个元素都赋予相同的值
使用格式:memset(数组名,值,sizeof(数组名))
7;.#include<string.h>头文件
1)strlen()
strlen函数可以得到字符数组中第一个\0前的字符的个数
int len = strlen(str1);
2)strcmp()
strcmp函数返回两个字符串大小的比较结果,比较原则是按字典序
格式:strcmp(字符数组1,字符数组2)
strcmp的返回结果:
①字符数组1<字符数组2,返回一个负整数
②字符数组1==字符数组2,返回0
③字符数组1>字符数组2,返回一个正整数
3)strcpy()
strcpy函数可以把一个字符串复制给另外一个字符串
strcpy(字符数组1,字符数组2)
4)strcat()
strcat()可以把一个字符串拼接到另一个字符串后面
格式:strcat(字符数组1,字符数组2)
注意:是把字符数组2的内容拼接到字符数组1的后面
8;
.引用传递
引用是c++中的语法,可以不通过指针就能修改传入的参数,对引用变量的操作就是对原变量的操作。使用方法:只需要在函数的参数类型后面加个&就可以了。
9;
.浮点数的比较
浮点数在计算机里的存储并不总是精确的,这种情况会给比较带来麻烦,因为在C/C++中“==”要完全相同结果才会判定为true,于是需要引用一个极小数eps来对这种误差进行修正。
经验表明,eps取10-8是一个合适的数字——对于大多数的情况既不会漏判也不会误判,所以可以将eps定义为常量1e-8:
const double eps = 1e-8;
常用的浮点数比较宏定义:
#define Equ(a,b) ((fabs((a)-(b)))<(eps)) //等于
#define More(a,b) (((a)-(b))>(esp)) //大于
#define Less(a,b) (((a)-(b))<(-esp))//小于
#define MoreEqu(a,b) (((a)-(b))>(-esp))//大于等于
#define LessEqu(a,b) (((a)-(b))<(esp))//小于等于
10 gcd lcm
代码有:
int GreatestCommonDivisor(int a, int b)
{
int t;
if (a < b)
{
temp = a;
a = b;
b = t;
}
while (b != 0)
{
t = a % b;
a = b;
b = t;
}
return a;
}
求最小公倍数是可依靠最大公因数
设c是a与b的最大公因数
int LeastCommonMultiple (int a, int b)
{
int t = a * b /c;
return t;
}