算法是一个程序和软件的灵魂,作为一名优秀的程序员,只有对一些基础的算法有着全面的掌握,才会在设计程序和编写代码的过程中显得得心应手。
本篇介绍了包括了经典的Fibonacci数列、简易计算器、回文检查、质数检查等算法。也许他们能在你的毕业设计或者面试中派上用场。
1、计算Fibonacci数列
Fibonacci数列又称斐波那契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21。
C语言实现的代码如下:
/*DisplayingFibonaccisequenceuptonthtermwherenisenteredbyuser.*/
#include
intmain()
intcount,n,t1=0,t2=1,display=0;
printf("Enternumberofterms:");
scanf("%d",&n);
printf("FibonacciSeries:%d+%d+",t1,t2);/*Displayingfirsttwoterms*/
count=2;/*count=2becausefirsttwotermsarealreadydisplayed.*/
while(count
display=t1+t2;
t1=t2;
t2=display;
++count;
printf("%d+",display);
return0;
结果输出:
Enternumberofterms:10
FibonacciSeries:0+1+1+2+3+5+8+13+21+34+
也可以使用下面的源代码:
/*DisplayingFibonacciseriesuptocertainnumberenteredbyuser.*/
{
intt1=0,t2=1,display=0,num;
printf("Enteraninteger:");
scanf("%d",&num);
while(display
}
Enteraninteger:200
FibonacciSeries:0+1+1+2+3+5+8+13+21+34+55+89+144+
2、回文检查
源代码:
/*Cprogramtocheckwhetheranumberispalindromeornot*/
intn,reverse=0,rem,temp;
temp=n;
while(temp!=0)
rem=temp%10;
reverse=reverse*10+rem;
temp/=10;
/*Checkingifnumberenteredbyuserandit'sreversenumberisequal.*/
if(reverse==n)
printf("%disapalindrome.",n);
else
printf("%disnotapalindrome.",n);
Enteraninteger:12321
12321isapalindrome.
3、质数检查
注:1既不是质数也不是合数。
/*Cprogramtocheckwhetheranumberisprimeornot.*/
intn,i,flag=0;
printf("Enterapositiveinteger:");
for(i=2;i<=n/2;++i)
if(n%i==0)
flag=1;
break;
if(flag==0)
printf("%disaprimenumber.",n);
printf("%disnotaprimenumber.",n);
Enterapositiveinteger:29
29isaprimenumber.
4、打印金字塔和三角形
使用*建立三角形
*
**
***
****
*****
inti,j,rows;
printf("Enterthenumberofrows:");
scanf("%d",&rows);
for(i=1;i<=rows;++i)
for(j=1;j<=i;++j)
printf("*");
printf("\n");
如下图所示使用数字打印半金字塔。
1
12
123
1234
12345
printf("%d",j);
用*打印半金字塔
for(i=rows;i>=1;--i)
用*打印金字塔
*******
*********
inti,space,rows,k=0;
for(space=1;space<=rows-i;++space)
printf("");
while(k!=2*i-1)
++k;
k=0;
用*打印倒金字塔
introws,i,j,space;
printf("Enternumberofrows:");
for(space=0;space
for(j=i;j<=2*i-1;++j)
for(j=0;j
5、简单的加减乘除计算器
/*Sourcecodetocreateasimplecalculatorforaddition,subtraction,multiplicationanddivisionusingswitch...casestatementinCprogramming.*/
charo;
floatnum1,num2;
printf("Enteroperatoreither+or-or*ordivide:");
scanf("%c",&o);
printf("Entertwooperands:");
scanf("%f%f",&num1,&num2);
switch(o){
case'+':
printf("%.1f+%.1f=%.1f",num1,num2,num1+num2);
case'-':
printf("%.1f-%.1f=%.1f",num1,num2,num1-num2);
case'*':
printf("%.1f*%.1f=%.1f",num1,num2,num1*num2);
case'/':
printf("%.1f/%.1f=%.1f",num1,num2,num1/num2);
default:
/*Ifoperatorisotherthan+,-,*or/,errormessageisshown*/
printf("Error!operatorisnotcorrect");
Enteroperatoreither+or-or*ordivide:-
Entertwooperands:3.4
8.4
3.4-8.4=-5.0
6、检查一个数能不能表示成两个质数之和
intprime(intn);
if(prime(i)!=0)
if(prime(n-i)!=0)
printf("%d=%d+%d\n",n,i,n-i);
printf("%dcan'tbeexpressedassumoftwoprimenumbers.",n);
intprime(intn)/*Functiontocheckprimenumber*/
inti,flag=1;
flag=0;
returnflag;
Enterapositiveinteger:34
34=3+31
34=5+29
34=11+23
34=17+17
7、用递归的方式颠倒字符串
/*Exampletoreverseasentenceenteredbyuserwithoutusingstrings.*/
voidReverse();
printf("Enterasentence:");
Reverse();
voidReverse()
charc;
scanf("%c",&c);
if(c!='\n')
printf("%c",c);
Enterasentence:margorpemosewa
awesomeprogram
8、实现二进制与十进制之间的相互转换
/*Cprogrammingsourcecodetoconverteitherbinarytodecimalordecimaltobinaryaccordingtodataenteredbyuser.*/
intbinary_decimal(intn);
intdecimal_binary(intn);
intn;
printf("Instructions:\n");
printf("1.Enteralphabet'd'toconvertbinarytodecimal.\n");
printf("2.Enteralphabet'b'toconvertdecimaltobinary.\n");
if(c=='d'||c=='D')
printf("Enterabinarynumber:");
printf("%dinbinary=%dindecimal",n,binary_decimal(n));
if(c=='b'||c=='B')
printf("Enteradecimalnumber:");
printf("%dindecimal=%dinbinary",n,decimal_binary(n));
intdecimal_binary(intn)/*Functiontoconvertdecimaltobinary.*/
intrem,i=1,binary=0;
while(n!=0)
rem=n%2;
n/=2;
binary+=rem*i;
i*=10;
returnbinary;
intbinary_decimal(intn)/*Functiontoconvertbinarytodecimal.*/