算法是一個(gè)程序和軟件的靈魂,作為一名優(yōu)秀的程序員右钾,只有對(duì)一些基礎(chǔ)的算法有著全面的掌握,才會(huì)在設(shè)計(jì)程序和編寫代碼的過(guò)程中顯得得心應(yīng)手旱爆。本文是近百個(gè)C語(yǔ)言算法系列的第二篇舀射,包括了經(jīng)典的Fibonacci數(shù)列、簡(jiǎn)易計(jì)算器怀伦、回文檢查脆烟、質(zhì)數(shù)檢查等算法。也許他們能在你的畢業(yè)設(shè)計(jì)或者面試中派上用場(chǎng)房待。
1邢羔、計(jì)算Fibonacci數(shù)列
Fibonacci數(shù)列又稱斐波那契數(shù)列,又稱黃金分割數(shù)列桑孩,指的是這樣一個(gè)數(shù)列:1拜鹤、1、2流椒、3敏簿、5、8镣隶、13极谊、21。
C語(yǔ)言實(shí)現(xiàn)的代碼如下:
/*?Displaying?Fibonacci?sequence?up?to?nth?term?where?n?is?entered?by?user.?*/
#include?
int?main()
{
int?count,?n,?t1=0,?t2=1,?display=0;
printf("Enter?number?of?terms:?");
scanf("%d",&n);
printf("Fibonacci?Series:?%d+%d+",?t1,?t2);?/*?Displaying?first?two?terms?*/
count=2;????/*?count=2?because?first?two?terms?are?already?displayed.?*/
while?(count
{
display=t1+t2;
t1=t2;
t2=display;
++count;
printf("%d+",display);
}
return?0;
}
結(jié)果輸出:
Enter?number?of?terms:?10
Fibonacci?Series:?0+1+1+2+3+5+8+13+21+34+
也可以使用下面的源代碼:
/*?Displaying?Fibonacci?series?up?to?certain?number?entered?by?user.?*/
#include?
int?main()
{
int?t1=0,?t2=1,?display=0,?num;
printf("Enter?an?integer:?");
scanf("%d",&num);
printf("Fibonacci?Series:?%d+%d+",?t1,?t2);?/*?Displaying?first?two?terms?*/
display=t1+t2;
while(display
{
printf("%d+",display);
t1=t2;
t2=display;
display=t1+t2;
}
return?0;
}
結(jié)果輸出:
Enter?an?integer:?200
Fibonacci?Series:?0+1+1+2+3+5+8+13+21+34+55+89+144+
小編給大家推薦一個(gè)學(xué)習(xí)氛圍超好的地方安岂,C/C++交流企鵝裙:870963251!適合在校大學(xué)生帆吻,小白域那,想轉(zhuǎn)行,想通過(guò)這個(gè)找工作的加入猜煮。裙里有大量學(xué)習(xí)資料次员,有大神解答交流問(wèn)題,每晚都有免費(fèi)的直播課程
2王带、回文檢查
源代碼:
/*?C?program?to?check?whether?a?number?is?palindrome?or?not?*/
#include?
int?main()
{
int?n,?reverse=0,?rem,temp;
printf("Enter?an?integer:?");
scanf("%d",?&n);
temp=n;
while(temp!=0)
{
rem=temp%10;
reverse=reverse*10+rem;
temp/=10;
}
/*?Checking?if?number?entered?by?user?and?it's?reverse?number?is?equal.?*/
if(reverse==n)
printf("%d?is?a?palindrome.",n);
else
printf("%d?is?not?a?palindrome.",n);
return?0;
}
結(jié)果輸出:
Enter?an?integer:?12321
12321?is?a?palindrome.
3淑蔚、質(zhì)數(shù)檢查
注:1既不是質(zhì)數(shù)也不是合數(shù)。
源代碼:
/*?C?program?to?check?whether?a?number?is?prime?or?not.?*/
#include?
int?main()
{
int?n,?i,?flag=0;
printf("Enter?a?positive?integer:?");
scanf("%d",&n);
for(i=2;i<=n/2;++i)
{
if(n%i==0)
{
flag=1;
break;
}
}
if?(flag==0)
printf("%d?is?a?prime?number.",n);
else
printf("%d?is?not?a?prime?number.",n);
return?0;
}
結(jié)果輸出:
Enter?a?positive?integer:?29
29?is?a?prime?number.
4愕撰、打印金字塔和三角形
使用 * 建立三角形
*
*?*
*?*?*
*?*?*?*
*?*?*?*?*
源代碼:
#include?
int?main()
{
int?i,j,rows;
printf("Enter?the?number?of?rows:?");
scanf("%d",&rows);
for(i=1;i<=rows;++i)
{
for(j=1;j<=i;++j)
{
printf("*?");
}
printf("\n");
}
return?0;
}
如下圖所示使用數(shù)字打印半金字塔刹衫。
1
1?2
1?2?3
1?2?3?4
1?2?3?4?5
源代碼:
#include?
int?main()
{
int?i,j,rows;
printf("Enter?the?number?of?rows:?");
scanf("%d",&rows);
for(i=1;i<=rows;++i)
{
for(j=1;j<=i;++j)
{
printf("%d?",j);
}
printf("\n");
}
return?0;
}
用 * 打印半金字塔
*?*?*?*?*
*?*?*?*
*?*?*
*?*
*
源代碼:
#include?
int?main()
{
int?i,j,rows;
printf("Enter?the?number?of?rows:?");
scanf("%d",&rows);
for(i=rows;i>=1;--i)
{
for(j=1;j<=i;++j)
{
printf("*?");
}
printf("\n");
}
return?0;
}
用 * 打印金字塔
*
*?*?*
*?*?*?*?*
*?*?*?*?*?*?*
*?*?*?*?*?*?*?*?*
源代碼:
#include?
int?main()
{
int?i,space,rows,k=0;
printf("Enter?the?number?of?rows:?");
scanf("%d",&rows);
for(i=1;i<=rows;++i)
{
for(space=1;space<=rows-i;++space)
{
printf("??");
}
while(k!=2*i-1)
{
printf("*?");
++k;
}
k=0;
printf("\n");
}
return?0;
}
用 * 打印倒金字塔
*?*?*?*?*?*?*?*?*
*?*?*?*?*?*?*
*?*?*?*?*
*?*?*
*
源代碼:
#include
int?main()
{
int?rows,i,j,space;
printf("Enter?number?of?rows:?");
scanf("%d",&rows);
for(i=rows;i>=1;--i)
{
for(space=0;space
printf("??");
for(j=i;j<=2*i-1;++j)
printf("*?");
for(j=0;j
printf("*?");
printf("\n");
}
return?0;
}
5醋寝、簡(jiǎn)單的加減乘除計(jì)算器
源代碼:
/*?Source?code?to?create?a?simple?calculator?for?addition,?subtraction,?multiplication?and?division?using?switch...case?statement?in?C?programming.?*/
#?include?
int?main()
{
char?o;
float?num1,num2;
printf("Enter?operator?either?+?or?-?or?*?or?divide?:?");
scanf("%c",&o);
printf("Enter?two?operands:?");
scanf("%f%f",&num1,&num2);
switch(o)?{
case?'+':
printf("%.1f?+?%.1f?=?%.1f",num1,?num2,?num1+num2);
break;
case?'-':
printf("%.1f?-?%.1f?=?%.1f",num1,?num2,?num1-num2);
break;
case?'*':
printf("%.1f?*?%.1f?=?%.1f",num1,?num2,?num1*num2);
break;
case?'/':
printf("%.1f?/?%.1f?=?%.1f",num1,?num2,?num1/num2);
break;
default:
/*?If?operator?is?other?than?+,?-,?*?or?/,?error?message?is?shown?*/
printf("Error!?operator?is?not?correct");
break;
}
return?0;
}
結(jié)果輸出:
Enter?operator?either?+?or?-?or?*?or?divide?:?-
Enter?two?operands:?3.4
8.4
3.4?-?8.4?=?-5.0
6、檢查一個(gè)數(shù)能不能表示成兩個(gè)質(zhì)數(shù)之和
源代碼:
#include?
int?prime(int?n);
int?main()
{
int?n,?i,?flag=0;
printf("Enter?a?positive?integer:?");
scanf("%d",&n);
for(i=2;?i<=n/2;?++i)
{
if?(prime(i)!=0)
{
if?(?prime(n-i)!=0)
{
printf("%d?=?%d?+?%d\n",?n,?i,?n-i);
flag=1;
}
}
}
if?(flag==0)
printf("%d?can't?be?expressed?as?sum?of?two?prime?numbers.",n);
return?0;
}
int?prime(int?n)??????/*?Function?to?check?prime?number?*/
{
int?i,?flag=1;
for(i=2;?i<=n/2;?++i)
if(n%i==0)
flag=0;
return?flag;
}
結(jié)果輸出:
Enter?a?positive?integer:?34
34?=?3?+?31
34?=?5?+?29
34?=?11?+?23
34?=?17?+?17
7带迟、用遞歸的方式顛倒字符串
源代碼:
/*?Example?to?reverse?a?sentence?entered?by?user?without?using?strings.?*/
#include?
void?Reverse();
int?main()
{
printf("Enter?a?sentence:?");
Reverse();
return?0;
}
void?Reverse()
{
char?c;
scanf("%c",&c);
if(?c?!=?'\n')
{
Reverse();
printf("%c",c);
}
}
結(jié)果輸出:
Enter?a?sentence:?margorp?emosewa
awesome?program
8音羞、實(shí)現(xiàn)二進(jìn)制與十進(jìn)制之間的相互轉(zhuǎn)換
/*?C?programming?source?code?to?convert?either?binary?to?decimal?or?decimal?to?binary?according?to?data?entered?by?user.?*/
#include?
#include?
int?binary_decimal(int?n);
int?decimal_binary(int?n);
int?main()
{
int?n;
char?c;
printf("Instructions:\n");
printf("1.?Enter?alphabet?'d'?to?convert?binary?to?decimal.\n");
printf("2.?Enter?alphabet?'b'?to?convert?decimal?to?binary.\n");
scanf("%c",&c);
if?(c?=='d'?||?c?==?'D')
{
printf("Enter?a?binary?number:?");
scanf("%d",?&n);
printf("%d?in?binary?=?%d?in?decimal",?n,?binary_decimal(n));
}
if?(c?=='b'?||?c?==?'B')
{
printf("Enter?a?decimal?number:?");
scanf("%d",?&n);
printf("%d?in?decimal?=?%d?in?binary",?n,?decimal_binary(n));
}
return?0;
}
int?decimal_binary(int?n)??/*?Function?to?convert?decimal?to?binary.*/
{
int?rem,?i=1,?binary=0;
while?(n!=0)
{
rem=n%2;
n/=2;
binary+=rem*i;
i*=10;
}
return?binary;
}
int?binary_decimal(int?n)?/*?Function?to?convert?binary?to?decimal.*/
{
int?decimal=0,?i=0,?rem;
while?(n!=0)
{
rem?=?n%10;
n/=10;
decimal?+=?rem*pow(2,i);
++i;
}
return?decimal;
}
結(jié)果輸出:
9、使用多維數(shù)組實(shí)現(xiàn)兩個(gè)矩陣的相加
源代碼:
#include?
int?main(){
int?r,c,a[100][100],b[100][100],sum[100][100],i,j;
printf("Enter?number?of?rows?(between?1?and?100):?");
scanf("%d",&r);
printf("Enter?number?of?columns?(between?1?and?100):?");
scanf("%d",&c);
printf("\nEnter?elements?of?1st?matrix:\n");
/*?Storing?elements?of?first?matrix?entered?by?user.?*/
for(i=0;i
for(j=0;j
{
printf("Enter?element?a%d%d:?",i+1,j+1);
scanf("%d",&a[i][j]);
}
/*?Storing?elements?of?second?matrix?entered?by?user.?*/
printf("Enter?elements?of?2nd?matrix:\n");
for(i=0;i
for(j=0;j
{
printf("Enter?element?a%d%d:?",i+1,j+1);
scanf("%d",&b[i][j]);
}
/*Adding?Two?matrices?*/
for(i=0;i
for(j=0;j
sum[i][j]=a[i][j]+b[i][j];
/*?Displaying?the?resultant?sum?matrix.?*/
printf("\nSum?of?two?matrix?is:?\n\n");
for(i=0;i
for(j=0;j
{
printf("%d???",sum[i][j]);
if(j==c-1)
printf("\n\n");
}
return?0;
}
結(jié)果輸出:
10仓犬、矩陣轉(zhuǎn)置
源代碼:
#include?
int?main()
{
int?a[10][10],?trans[10][10],?r,?c,?i,?j;
printf("Enter?rows?and?column?of?matrix:?");
scanf("%d?%d",?&r,?&c);
/*?Storing?element?of?matrix?entered?by?user?in?array?a[][].?*/
printf("\nEnter?elements?of?matrix:\n");
for(i=0;?i
for(j=0;?j
{
printf("Enter?elements?a%d%d:?",i+1,j+1);
scanf("%d",&a[i][j]);
}
/*?Displaying?the?matrix?a[][]?*/
printf("\nEntered?Matrix:?\n");
for(i=0;?i
for(j=0;?j
{
printf("%d??",a[i][j]);
if(j==c-1)
printf("\n\n");
}
/*?Finding?transpose?of?matrix?a[][]?and?storing?it?in?array?trans[][].?*/
for(i=0;?i
for(j=0;?j
{
trans[j][i]=a[i][j];
}
/*?Displaying?the?transpose,i.e,?Displaying?array?trans[][].?*/
printf("\nTranspose?of?Matrix:\n");
for(i=0;?i
for(j=0;?j
{
printf("%d??",trans[i][j]);
if(j==r-1)
printf("\n\n");
}
return?0;
}
結(jié)果輸出: