C语言专插本考试常用算法
06142009 / No Comment / 备考资料
1递归法转换整数为字符
void convert(int n) {
int t;
if((t=n/10)!=0)
convert(t);
putch(n%10+'0');
}2判断素数
int isPrime(int n) {
int i;
for(i=2;i3求闰年
if((year%4==0&year%100!=0)||(year%400)==0)
printf("%d is a leap year",year);
else
printf("%d is not a leap year",year);4求N的阶乘
for(int t=1,i=2;i<=N;i++)
t*=i;
printf("%d",t);5求m和n最大公约数和最小公倍数
if(a6大写字母改小写字母
c1=getchar();
c2=c1+32;
printf("%c,%c",c1,c2);7小写字母改大写字母
c1=getchar();
c2=c1-32;
printf("%c,%c",c1,c2);8求3个数由小到大的顺序输出
if(a>b){
t=a;a=b;b=t;
}
if(a>c) {
t=a;
a=c;
c=t;
}
if(b>c) {
t=b;
b=c;
c=t;
}* 若要求由大到小顺序输出,改'>'为'<'即可。
9求ax*x+b*x+c方程的解
if(fabs(a)<=1e-6)
printf("非二次方程");
else
disc=b*b-4*a*c;
if(fabs(disc)<=1e-6)
printf("有两相等实根:%f\n",-b/(2*a));
else if(fabs(disc)>1e-6) {
x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
printf("有两相异实根:%f和%f\n",x1,x2);
} else {
realpart=-b/(2*a);
imagpart=sqrt(-disc)/(2*a);
printf("有两共轭复根:\n");
printf("%f+%fi\n",realpart,imagpart);
printf("%f-%fi\n",realpart,imagpart);
}10冒泡法排序 (由小到大)
int a[N+1];
for(i=1;i<=N;i++) /* 输入N个数 (数组输入功能) */
scanf("%d",&a);
for(j=1;ja[i+1]) {
t=a;
a=a[i+1];
a[i+1]=t;
}
for(i=1;i<=N;i++) /* 输出排好的这N个数 (数组输出功能) */
printf("%d",a); 11选择法排序 (由小到大)
/* 子程序部分 */
void sort(int array[],int n) {
int i,j,k,t;
for(i=0;i12插入法排序int a[N];
/* 省略数组输入 (见上:冒泡法) */
for(i=1;i=0&&m>a[j]) {
a[j+1]=a[j];
j--;
}
a[j]=m;
}
/* 省略数组输出 (见上:冒泡法) */
13.数列中查找一个关键字
(1)折半法
BinarySearch(a,n,x,j)
k=0;
m=n-1;
while(k<=m) {
j=(k+m)/2;
if(x==a[j]) exit;
else if(xm) j=0;
printf("%d",j);(2)顺序查找法
int a[N];
/* 省略数组输入 (见上:冒泡法) */
for(i=0;i(3)快速顺序查找法
int a[N];
/* 省略数组输入 (见上:冒泡法) */
a[N-1]=x;
i=0;
while(a!=x) i++;
if(i