——————————————————-————————嘻嘻嘻 其实这也不是我自己总结的 是学长总结的-——————————————————-————————————
tips
1.数据类型取值范围
unsigned int 0~42 9496 7295
int -2147483648~21 4748 3647
unsigned long 0~4294967295
long -2147483648~2147483647
long long的最大值:922 3372 0368 5477 5807
long long的最小值:-9223372036854775808
unsigned long long的最大值:184 4674 4073 7095 5161
__int64的最大值:922 3372 0368 5477 5807
__int64的最小值:-9223372036854775808
unsigned __int64的最大值:1844 6744 0737 0955 1615
4.最精巧的无穷大常量取值是0x3f3f3f3f.
二维数组初始化为0可以这样写Int a[8][8]={{0}}; 两个大括号即可
6.在判断两个浮点数大小时,一定要在一边先减去0.000001,如a<b,一定写成a-0.000001<b才行!
7.如何输出float型而后面不加0?
printf("%g", num);
%g用来输出实数,它根据数值的大小,自动选f格式或e格式(选择输出时占宽度较小的一种),且不输出无意义的0。即%g是根据结果自动选择科学记数法还是一般的小数记数法
7.scanf("\n%*c%d",&m);
Scanf 格式中,如果在%后面、格式字符前面加上一个“*”附加说明符,表示跳过该输入,输入的数据不放入变量中。
而输入的 '\n' 是中和掉输出的 \n
也可以换成
getchar();
scanf("%*c%d",&m);
而 *c 表示忽略一位 也可以改成
scanf("%*1d%d",&m);
8.分离整数和小数部分
要求:编写一个程序,其功能为:从键盘上输入一个浮点数(小数点后有三位数),然后分别输出该数的整数部分和小数部分。
样例输入:123.456
样例输出:123 456
#include <stdio.h>
int main()
{
float x;
int a, b;
scanf("%f",&x);
a=x; //自动类型转换,取整数部分
b=(int)(x*1000)%1000; //乘1000后对1000取余,得到3位小数点后数字
printf("%d %d\n", a,b);
return 0;
}
9.素数判定函数
int Prime_judge(int x)
{
int i;
if(x==0||x==1) return 0;
for(i=2;i<=sqrt(x);i++)
if(x%i==0) return 0;//不是素数
else return 1;//是素数
}
10.itoa
将任意类型的数字转换为字符串。在<stdlib.h>中与之有相反功能的函数是atoi。
非标准C语言扩展函数
char*itoa(int value,char*string,int radix);
int value 被转换的整数,char *string 转换后储存的字符数组,int radix 转换进制数,如2,8,10,16 进制等
11.求最小公倍数和最大公约数
最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,其中一个最小的公倍数是他们的最小公倍数,同样地,若干个整数公有的倍数中最小的正整数称为它们的最小公倍数
求最小公倍数算法:最小公倍数=两整数的乘积÷最大公约数
求最大公约数算法:
(1辗转相除法
#include<stdio.h>
void main() /* 辗转相除法求最大公约数 */
{
int m, n, a, b, t, c;
printf("Input two integernumbers:\n");
scanf("%d%d", &a, &b);
m=a; n=b;
while(b!=0) /* 余数不为0,继续相除,直到余数为0 */
{ c=a%b; a=b; b=c;}
printf("The greates commondivisor:%d\n", a);//最大公约数 GCD
printf("The least commonmultiple:%d\n", m*n/a);}//最小公倍数 LCM
12.自然常数e的x次方,表示方法为:exp(x)。
13.试求定积分的近似值(积分限a,b从键盘输入)。
算法分析如下:
求定积分的近似值常有矩形法与梯形法,其实质都是面积求和。
矩形法是把所要求的面积垂直x轴分成n个小矩形,然后把这n个小矩形的面积相加,即为所求的定积分的值。
梯形法是把所要求的面积垂直分成n个小梯形,然后作面积求和。
这两种近似求值的精度随分割个数n的增加而增加,对于相同的n个数,相对来说,梯形法的精度比矩形法的要高一些。
程序代码如下:
例一:
void main()
{
int i,n=1000;
float a,b,h,t1,t2,s1,s2,x;
printf("请输入积分限a,b:");
scanf("%f,%f",&a,&b);
h=(b-a)/n;
for(s1=0,s2=0,i=1;i<=n;i++)
{
x=a+(i-1)*h;
t1=(float)exp(-x*x/2);t2(float)=exp(-(x+h)*(x+h)/2);
s1=s1+t1*h; /*矩形面积累加*/
s2=s2+(t1+t2)*h/2; /*梯形面积累加*/
}
printf("矩形法算得积分值:%f.\n",s1);
printf("梯形法算得积分值:%f.\n",s2);
}
程序运行结果如下:
矩形法算得积分值:0.855821
梯形法算得积分值:0.855624
由上面的比较可知,梯形法的精度要高于矩形法。
例二 求函数f(x)=x*x+2*x+1在【0,2】上的定积分。
#include
main()
{ double s=0,h,a,b,f0,f1,n;
int i;
printf("Entern,a,b:");
scanf("%lf,%lf,%lf",&n,&a,&b);
h=(b-a)/n;
f0=a*a+2*a+1;
for(i=1;i<=n;i++)
{ a=a+h;
f1=a*a+2*a+1;
s+=(f0+f1)*h/2;
f0=f1;
}
printf("sum is%f",s);
}
14.二分查找又称折半查找
void g(int k,int m)//在长度为m的数组num找到元素k.
{
int high=m-1,flag=0;//flag做标记
int low=0,mid;
while(low<=high){
mid=(low+high)/2;
if(num[mid]<k)
low=mid+1;
else if(num[mid]>k)
high=mid-1;
else{
flag=1;
printf("YES\n");
break;
}
}
if(flag==0)
printf("NO\n");
}
15.输出a和b的比值。如果需要,输出一个既约分数。
分子、分母只有公因数1的分数,或者说分子和分母互质的分数,叫做最简分数,又称既约分数。如:二分之一,三分之二,九分之八,八分之三等等。
int gcd(int a,int b)//求最大公约数
{
while(b!=0)
{
int r=a%b;
a=b;
b=r;
}
return a;
}
if(aa%bb==0)
printf("%d\n",aa/bb);
else
printf("%d/%d\n",aa/gcd(aa,bb),bb/gcd(aa,bb));
16.double型强转int型
应该使用向下取整;+0.5实现四舍五入。
例如:double a=;intb=(int)(a+0.5);
17.任意进制转换
语法:conversion(char s1[],chars2[],long d1,long d2);
参数:
s[]:原进制数字,用字符串表示
s2[]:转换结果,用字符串表示
d1:原进制数
d2:需要转换到的进制数
返回值: null
注意:
高于9的位数用大写'A'~'Z'表示,2~16位进制通过验证
源程序:
void conversion(char s[],char s2[],longd1,long d2)
{
long i,j,t,num;
char c;
num=0;
for (i=0;s[i]!='\0';i++)
{
if (s[i]<='9'&&s[i]>='0')t=s[i]-'0'; else t=s[i]-'A'+10;
num=num*d1+t;
}
i=0;
while(1)
{
t=num%d2;
if (t<=9) s2[i]=t+'0'; elses2[i]=t+'A'-10;
num/=d2;
if (num==0) break;
i++;
}
for (j=0;j<i/2;j++)
{c=s2[j];s2[j]=s[i-j];s2[i-j]=c;}
s2[i+1]='\0';
}
18.求排列组合数
语法:result=P(long n,long m); /result=long C(long n,long m);
参数:
m:排列组合的上系数
n:排列组合的下系数
返回值: 排列组合数
注意:
符合数学规则:m<=n
源程序:
long P(long n,long m)
{
long p=1;
while(m!=0)
{p*=n;n--;m--;}
return p;
}
long C(long n,long m)
{
long i,c=1;
i=m;
while(i!=0)
{c*=n;n--;i--;}
while(m!=0)
{c/=m;m--;}
return c;
}
19.x的二进制长度
语法:result=BitLength(int x);
参数:
x:测长的x
返回值: x的二进制长度
源程序:
int BitLength(int x)
{
int d = 0;
while (x > 0) {
x >>= 1;
d++;
}
return d;
}
20.返回x的二进制表示中从低到高的第i位
语法:result=BitAt(int x, inti);
参数:
x:十进制 x
i:要求二进制的第i位
返回值: 返回x的二进制表示中从低到高的第i位
注意:
最低位为第一位
源程序:
int BitAt(int x, int i)
{
return ( x & (1 << (i-1)) );
}
ps:仅供参考 如果有不对的 欢迎大神们指出来~么么哒!