面試中經(jīng)常遇到10大C語(yǔ)言基礎(chǔ)算法暮刃,最后一個(gè)是精髓

算法是一個(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é)果輸出:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末嗅绰,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子搀继,更是在濱河造成了極大的恐慌窘面,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叽躯,死亡現(xiàn)場(chǎng)離奇詭異财边,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)险毁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門制圈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人畔况,你說(shuō)我怎么就攤上這事鲸鹦。” “怎么了跷跪?”我有些...
    開封第一講書人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵馋嗜,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我吵瞻,道長(zhǎng)葛菇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任橡羞,我火速辦了婚禮眯停,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘卿泽。我一直安慰自己莺债,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開白布签夭。 她就那樣靜靜地躺著齐邦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪第租。 梳的紋絲不亂的頭發(fā)上措拇,一...
    開封第一講書人閱讀 49,842評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音慎宾,去河邊找鬼丐吓。 笑死浅悉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的汰蜘。 我是一名探鬼主播仇冯,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼族操!你這毒婦竟也來(lái)了苛坚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤色难,失蹤者是張志新(化名)和其女友劉穎泼舱,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體枷莉,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡娇昙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了笤妙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冒掌。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蹲盘,靈堂內(nèi)的尸體忽然破棺而出股毫,到底是詐尸還是另有隱情,我是刑警寧澤召衔,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布铃诬,位于F島的核電站,受9級(jí)特大地震影響苍凛,放射性物質(zhì)發(fā)生泄漏趣席。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一醇蝴、第九天 我趴在偏房一處隱蔽的房頂上張望宣肚。 院中可真熱鬧,春花似錦悠栓、人聲如沸钉寝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至俘枫,卻和暖如春腥沽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鸠蚪。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工今阳, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留师溅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓盾舌,卻偏偏與公主長(zhǎng)得像墓臭,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子妖谴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容