C语言中的基本算法
素数
最大公约数和最小公倍数
等级
闰年
N!
fib数列
素数
(素数的求解过程运用到了for循环)
- 1.1判断一个数是不是素数
#include <stdio.h>
#include <windows.h>
#include <string.h>
#include <math.h>
/*判断一个数是不是素数*/
int main(void)
{
int i,m,k;
scanf("%d",&m);
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0) break;
if(i>k)
printf("%d是素数\n",m);
else
printf("%d不是素数\n",m);
system("pause");
return;
}
/*
在VC++ 6.0 中的输出结果是
--------------
9
9不是素数
请按任意键继续. . .
13
13是素数
请按任意键继续. . .
--------------------
*/
1.2输出一个区间的素数
考虑其数据的存放和其算法的优化
/*100-150之间的素数*/
int main(void)
{
int i,m,k;
int a[50],j=0;
for(m=101;m<=150;m=m+2)
{
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0) break;
if(i>k)
a[j++]=m;
}
for(i=0;i<j;i++) //注意这个地方的i<j
printf("%d ",a[i]);
printf("\n");
system("pause");
return;
}
/*
在VC++ 6.0 中的输出结果是
------------------
101 103 107 109 113 127 131 137 139 149
请按任意键继续. . .
---------------------------
*/
2.最大公因数和最大倍数
(这个程序是在考卷出现过的,非原创)
/*函数递归调用*/
int gys_1(int a,int b)
{
if(a%b==0)
return b;
else
return gys_1(b,a%b);
}
int main(void)
{
int m,n,gbs,gys;
scanf("%d%d",&m,&n);
gys=gys_1(m,n);
printf("gys=%d\ngbs=%d\n",gys,m*n/gys);
system("pause");
return 0;
}
/*
在VC++ 6.0 中的输出结果是
------------------
12 36
gys=12
gbs=36
请按任意键继续. . .
---------------------------
*/
`
3.等级
`
/*成绩与等级*/
int main(void)
{
char grade;
int score;
scanf("%c",&grade);
scanf("%d",&score);
switch(grade)
{
case 'A':printf("85-100\n");break;
case 'B':printf("75-84\n");break;
case 'C':printf("60-69\n");break;
case 'D':printf("<60\n");break;
default:printf("enter data error!");
}
switch(score/10)
{
case 9:printf("A\n");break;
case 8:printf("B\n");break;
case 7:printf("C\n");break;
case 6:printf("D\n");break;
default:printf("enter data error!");
}
system("pause");
return 0;
}
/*
在VC++ 6.0 中的输出结果是
------------------
C
98
60-69
A
请按任意键继续. . .
.
---------------------------
*/
4.判断是否为闰年
/*闰年*/
int main(void)
{
int i;
for(i=1900;i<=2017;i++)
if( ( (i%100!=0) && (i%4==0) ) || (i%400==0) )
printf("%d ",i);
printf("\n");
system("pause");
return 0;
}
/*
在VC++ 6.0 中的输出结果是
------------------
1904 1908 1912 1916 1920 1924 1928 1932 1936 1940 1944
1948 1952 1956 1960 1964 1968 1972 1976 1980 1984 1988
1992 1996 2000 2004 2008 2012 2016
请按任意键继续. . .
---------------------------
*/
5.n!
/*n!*/
int main(void)
{
int n,i,sum=0,t=1;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
t *=i;
sum +=t;
}
printf("n!=%d\n1!+2!+3!+...+n!=%d\n",t,sum);
system("pause");
return 0;
}
/*
在VC++ 6.0 中的输出结果是
------------------
5
n!=120
1!+2!+3!+...+n!=153
请按任意键继续. . .
---------------------------
*/
6.一维数组处理fibonacci数列
/*fib数列*/
int main(void)
{
int i;
int f[20]={1,1};
for(i=2;i<20;i++)
f[i]=f[i-2]+f[i-1];
/*数据输出*/
for(i=0;i<20;i++)
{
if(i%5==0)
printf("\n");
printf("%5d ",f[i]);
}
printf("\n");
system("pause");
return 0;
}
/*
在VC++ 6.0 中的输出结果是
------------------
1 1 2 3 5
8 13 21 34 55
89 144 233 377 610
987 1597 2584 4181 6765
请按任意键继续. . .
---------------------------
*/