C语言专插本考试常用算法
06142009 / No Comment / 备考资料
1递归法转换整数为字符
1 2 3 4 5 6 | void convert(int n) { int t; if((t=n/10)!=0) convert(t); putch(n%10+'0'); } |
2判断素数
1 2 3 4 5 6 | int isPrime(int n) { int i; for(i=2;i<n/2;i++) if(n%i==0) return 0; return 1; } |
3求闰年
1 2 3 4 | 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的阶乘
1 2 3 | for(int t=1,i=2;i<=N;i++) t*=i; printf("%d",t); |
5求m和n最大公约数和最小公倍数
1 2 3 4 5 6 7 8 9 10 11 12 | if(a<b) { a=t; a=b; b=t; } r=a%b; while(r) { a=b; b=r; r=a%b; } printf("(a,b)最大公约数%d,(a,b)最小公倍数%d",r,ab/r); |
6大写字母改小写字母
1 2 3 | c1=getchar(); c2=c1+32; printf("%c,%c",c1,c2); |
7小写字母改大写字母
1 2 3 | c1=getchar(); c2=c1-32; printf("%c,%c",c1,c2); |
8求3个数由小到大的顺序输出
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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方程的解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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冒泡法排序 (由小到大)
1 2 3 4 5 6 7 8 9 10 11 12 | int a[N+1]; for(i=1;i<=N;i++) /* 输入N个数 (数组输入功能) */ scanf("%d",&a); for(j=1;j<N;j++) /* 排序开始 */ for(i=1;i<=N-j;i++) if(a>a[i+1]) { t=a; a=a[i+1]; a[i+1]=t; } for(i=1;i<=N;i++) /* 输出排好的这N个数 (数组输出功能) */ printf("%d",a); |
11选择法排序 (由小到大)
1 2 3 4 5 6 7 8 9 10 11 12 | /* 子程序部分 */ void sort(int array[],int n) { int i,j,k,t; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++) if(array[j]<array[k]) k=j; t=array[k]; array[k]=array; array=t; } } |
12插入法排序int a[N];
1 2 3 4 5 6 7 8 9 10 11 | /* 省略数组输入 (见上:冒泡法) */ for(i=1;i<N;i++) { m=a; j=i-1; while(j>=0&&m>a[j]) { a[j+1]=a[j]; j--; } a[j]=m; } /* 省略数组输出 (见上:冒泡法) */ |
13.数列中查找一个关键字
(1)折半法
1 2 3 4 5 6 7 8 9 10 11 | BinarySearch(a,n,x,j) k=0; m=n-1; while(k<=m) { j=(k+m)/2; if(x==a[j]) exit; else if(x<a[j]) m=j-1; else k=j+1; } if(k>m) j=0; printf("%d",j); |
(2)顺序查找法
1 2 3 4 5 6 7 8 9 | int a[N]; /* 省略数组输入 (见上:冒泡法) */ for(i=0;i<N;i++) if(x==a) { printf("找到!序号为:%d\n",--i); break; } if(i==8) printf("没找到!"); |
(3)快速顺序查找法
1 2 3 4 5 6 7 8 9 | int a[N]; /* 省略数组输入 (见上:冒泡法) */ a[N-1]=x; i=0; while(a!=x) i++; if(i<N-1) printf("找到!序号为:%d\n",i); else printf("没找到!"); |