在學C語言的人,怎能不了解這些經典算法問題?

2020-12-18 騰訊網

C語言中有有許多經典的算法,這些算法都是許多人的智慧結晶,也是編程中常用的算法,這裡面包含了眾多算法思想,掌握這些算法,對於學習更高級的、更難的算法都會有很大的幫助,會為自己的算法學習打下堅實的基礎。

一、古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?(兔子的規律為數列1,1,2,3,5,8,13,21....)這也是著名的斐波那契數列。

//斐波那契數列

void Fabocci()

{

long int f1,f2;

f1 = f2 = 1;

int i;

for(i = 1; i

{

printf("%12ld %12ld ",f1,f2);

if(i % 2 == 0) //控制輸出,每行輸出4個

printf("\n");

f1 = f1+f2; //後一個數是前兩個數的和

f2 = f1+f2; //後一個數是前兩個數的和

}

}

二、1-100之間有多少個素數,並輸出所有素數及素數的個數。程序分析:判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整除,則表明此數不是素數,反之是素數。

//輸出1-100的所有素數

void Prime()

{

int i,j,flag,n;

n = 100; //100以內的素數

flag = 1; //標識變量,是素數則為1

for(i = 2; i

{

flag = 1;

for(j = 2; j*j

{

if(i % j == 0)

{

flag = 0;

break;

}

}

if(flag == 1)

printf("%d ",i); //輸出素數

}

}

三、一個數如果恰好等於它的因子之和,這個數就稱為「完數」。例如6 = 1+2+3找出10000以內的所有完數。

//找出1000以內的所有完數(一個數等於其因子之和)

void PerfectNumber()

{

int p[80]; //保存分解的因子

int i,num,count,s,c = 0;

int MaxNum = 10000;

for(num = 2; num

{

count = 0;

s = num;

for(i = 1; i

{

if(num % i == 0) //能被i整除

{

p[count++] = i; //保存因子,讓計數器count增加1

s -= i; //減去一個因子

}

}

if( 0 == s)

{

printf("%4d是一個完數,因子是:",num);

printf("%d = %d",num,p[0]); //輸出完數

for(i = 1; i

printf("+%d",p[i]);

printf("\n");

c++;

}

}

printf("\n共找到%d個完數。\n",c);

}

四、輸出9*9乘法口訣。

//9*9乘法口訣表

void Table99()

{

int i,j;

for(i = 1; i

{

for(j = 1; j

{

printf("%d*%d=%-4d",i,j,i*j);

}

printf("\n");

}

}

五、編程列印楊輝三角

//列印楊輝三角

void YangHuiTriangle()

{

int i,j,triangle[8][8];

for(i = 0; i

for(j = 0; j

triangle[i][j] = 1;

for(i = 2; i

{

for(j = 1; j

{

triangle[i][j] = triangle[i-1][j]+triangle[i-1][j-1];

}

}

for(i = 0; i

{

for(j = 0; j

printf("%-4d",triangle[i][j]);

printf("\n");

}

}

六、下面程序的功能是將一個4×4的數組進行逆時針旋轉90度後輸出,要求原始數組的數據隨機輸入,新數組以4行4列的方式輸出。

void Array4_4()

{

int A[4][4],B[4][4],i,j;

printf("Please Input 16 numbers:");

for(i = 0; i

for(j = 0; j

{

scanf("%d",&A[i][j]); //輸入16個數

B[3-j][i] = A[i][j]; //旋轉90度賦值

}

printf("Array A:\n"); //輸出矩陣A

for( i = 0; i

{

for(j = 0 ; j

{

printf("%4d",A[i][j]);

}

printf("\n");

}

printf("Array B:\n"); //輸出矩陣B

for( i = 0; i

{

for(j = 0 ; j

{

printf("%4d",B[i][j]);

}

printf("\n");

}

}

七、實現將輸入的字符串反序輸出。

/*實現字符串翻轉*/

char* reverse_str(char* str)

{

if(NULL == str) //字符串為空直接返回

{

return str;

}

char *begin;

char *end;

begin = end = str;

while(*end != '\0') //end指向字符串的末尾

{

end++;

}

--end;

char temp;

while(begin

{

temp = *begin;

*begin = *end;

*end = temp;

begin++;

end--;

}

return str; //返回結果

}

八、輸入一個字符串,判斷其是否為回文。回文字符串是指從左到右讀和從右到左讀完全相同的字符串。

//判斷一個字符串是否是回文

void IsHuiWen()

{

char str[100];

int i,j,n;

printf("請輸入一段字符串:");

gets(str);

n = strlen(str);

for(i = 0,j = n-1; i

if(str[i] != str[j])

break;

if(i >= j)

printf("是回文!\n");

else

printf("不是回文!\n");

}

九、求近似Pi值。可以用公式(如:pi/2 = 1+1/3+1/3*2/5 + 1/3*2/5*3/7 + 1/3*2/5*3/7*4/9+.....)

void Pi()

{

double pi = 2,temp = 2; //初始化pi值和臨時值

int numerator = 1,denominator = 3; //初始化分子和分母

while(temp > 1e-16) //數列大於指定精度

{

temp = temp*numerator/denominator;//計算一個數列的值

pi += temp;

numerator++;

denominator += 2;

}

printf("PI = %.18f\n",pi);

}

十、實現字符串拷貝函數strcopy(char*src,char* dest)

void strcopy(char *str, char *dest)

{

while(*str != '\0')

{

*dest++ = *str++;

}

*dest = '\0';

}

以上就是我的分享,有什麼問題歡迎大家評論區留言。

相關焦點

  • C語言入門級教程:基礎數據類型與基本算法,學編程從此刻開始!
    今天帶大家了解一下學C語言必備的基本數據類型和基本算法,適合剛學C以及零基礎的小夥伴! 話不多說,我們一起來學習吧~ 數據類型 ● 基本類型 基本類型就是我們在使用C語言時最基礎的數據類型,包括整形(短整型,基本整型,長整型)、字符型、浮點型(單、雙精度)以及枚舉類型。
  • 5分鐘弄懂的五大常用算法之「分治法」,以C語言歸併排序算法為例
    這是分治算法的基本立足點,也是使用條件之一,總結一下就是,對於一個規模較大的問題,可以拆分成若干不相關的子問題,並且子問題解決起來更加簡單。分治算法在我們日常生活中無處不在,例如國家依次劃分為省市縣鎮村來管理,本質上也是因為解決「子問題」(管理村)要簡單許多。
  • 學習C語言之前,你需要知道這些!
    最近很多人私信問我,零基礎如何使用C語言進行編程?其實,如果您想很好地學習C語言,那麼具有良好的習慣和準備工作至關重要,下面讓我們看一下學習C語言需要進行哪些準備工作,一起來認識一下。下載編譯器之後,我們要了解C語言的基本概念,C語言是一種古老的語言,但功能非常強大,它最初是為Unix作業系統設計的,但後來移植到所有的作業系統,並且進行了很多擴展,C語言的現代版本是C++語言。
  • 教你輕鬆學習C語言系列之——從「Hello World」開始夢想起航
    看到密密麻麻的代碼,對於很多初學者來說,即覺得好玩又新奇,但同時也在不停地問自己:「我能學得會嗎?」其實編程難也不難。說它難,是因為隨著學習的深入,抽象的概念、交叉的學科、複雜的問題交織在一起,對學習者的邏輯思維確實是一項挑戰;說它不難,對於喜歡編程、想要學習編程的愛好者來說,其實也很容易上手。
  • C語言經典算法之中序式轉後序式
    可以將中序表示式轉換為後序(Postfix)表示式,後序表示式又稱之為逆向波蘭表示式(Reverse polishnotation),它是由波蘭的數學家盧卡謝維奇提出,例如(a+b)*(c+d)這個式子,表示為後序 表示式時是ab+cd+*。
  • 五分鐘了解機器學習十大算法
    這個算法用於分類問題,得到一個二進位「是 / 非」的結果。看看下面的方程式。P(c|x)=P(x|c)PP(x)P(c|x)=P(x|c)PP(x)P(c|x)=P(c|x)= 給定預測變量 X,c 類事件的概率。P(x|c)=P(x|c)= 給定 c 時,x 的概率。
  • 初學者如何入門C語言?記住牽牛要牽牛鼻子
    只有弄明白了這些才能在今後的學習中遊刃有餘的把握C語言的精髓。這幾個概念就像邏輯線一樣,把整個C語言的體系貫穿起來,給人一種「結構化」的思想體系。下面我簡要談一下這幾個核心概念。
  • C語言的幾個入門階段
    C語言,在大學裡普遍被當作第一門程式語言,用於編程入門,以及數據結構和算法的教學。雖然比C++要容易點,但因為指針的存在,C其實就是個高級的彙編:(並不是很好學,尤其是它的壓軸章節:指針。說明會使用二分法和遞歸,初步理解了數組的名字、首地址和指針的關係,初步了解了算法的時間複雜度。3,會寫二叉樹。能夠把一堆亂序的數字添加到二叉樹,然後遍歷出來時是有序的,即排序二叉樹。
  • 想學編程?先來理解一下C語言的Helloworld程序吧
    C語言作為一門計算機科學歷史上裡程碑式的程式語言,現在依然被廣泛使用。其功能強大,內容簡單,想學習編程的小夥伴們不妨先學習一下C語言。本文將介紹一下K&R所寫的經典程序:Helloworld的簡要分析。
  • 學C語言好還是Python好?
    程式語言 發展進程 學哪一門程式語言,我們不妨先梳理一下語言的發展過程…… 我們甚至可以再用 C 語言寫一個 C 語言的編譯器,再用之前寫好的 C 語言學會了C和C++,那麼其他的命令式語言基本上,最多一個月你就能自學會。而學會了python,你啥也不是。
  • Python,Java,C++一網打盡,這個GitHub項目用多種語言實現經典算法
    機器之心報導參與:Racoon、Jamin經典數據結構和算法你了解幾個?想去大廠面試?想成為算法工程師?收下這份全面的複習材料。那你可能需要好好複習下算法與數據結構。想成為算法工程師,基礎知識是繞不開的大山。機器之心這次要推薦的項目是數據結構與算法的開源項目集,覆蓋多種主流語言,實現各類經典數據結構及算法。
  • 開課吧:C++/C語言相關崗位介紹!什麼樣的人適合學C?
    什麼樣的人適合學C/C++?想做C++算法者對算法感興趣,卻不知道如何入門,課程會有針對性地進行算法強化挑戰技術拿高薪者C/C++是所有其他語言的基石,學會技術的根和術,擁有核心競爭力、高級職位:嵌入式系統開發工程師智能設備軟體中級職位:軟體工程師高級職位:系統工程師、系統架構師智慧機器人中級職位:ROS系統工程師、機器人算法工程師高級職位:導航算法工程師、定位算法工程師
  • c語言現在的就業形勢如何?開課吧C++課程怎麼樣?
    C++/C語言怎麼樣從計算機科學的角度來看,最重要的兩門語言是C語言和C++。一個注重算法,一個注重對象。幾乎目前的各種高級語言都是這兩個語言的衍生版本。只要精通這兩門語言,其他的計算機語言很容易上手我個人認為,如果你是打算用高級語言的,學習c語言是必不可少的,學會C語言是你日後更上一個臺階的基礎,而且C語言的編程邏輯跟其他的,很多是相同的。所以如果是打算往這個方向發展的,靜下心來去學吧,不會錯的。
  • python與c語言的語法有哪些不一樣的
    在眾多程式語言之中,想必很多人都聽說過Python和C語言,在進行編程學習之前,大家都會問:python和c語言的區別有哪些?我該如何選擇?接下來我們來看看吧。4、速度:Python程式語言因為歷史原因,有一個GIL鎖,導致其對多線程支持不夠好,運行速度較慢;C語言比較快,是比較底層的語言,運行效率優於Python。5、複雜度:在Python中,不需要聲明變量類型,而在C中,必須聲明變量類型;Python程序更易於學習、編寫和閱讀,C程序語法比Python難。
  • 用C語言編寫屬於自己的程式語言,大一學完C語言即可做!
    首先,明確一點,咱這個項目只是做一個簡單的腳本語言而不是編譯型語言!!!其次,本文不需要太多專業知識,所以不慌。最後,本文只是簡單實現腳本語言,雖然不牛X......實驗環境 : linux2.知識點 : 大一所學 C語言 知識二 要做功能:1.實現語法分析列印 hello-world
  • C語言怎麼樣?今天聊聊C語言的發展史!
    賈伯斯的貢獻在於,他如此了解用戶的需求和渴求,以至於創造出了讓當代人樂不思蜀的科技產品。然而,卻是裡奇先生為這些產品提供了最核心的部件,人們看不到這些部件,卻每天都在使用著。" 2. C語言的先輩 2.1BCPL語言之父
  • 編程入門學什麼語言好?
    首先應該明確學習程式語言的目的-工作或興趣,這兩者差別比較大!如果是考慮就業問題,那麼根據2019年末的一個流行度調查,關於程式語言的排名,目前前三的分別是:Java(難)C(很難)Python(較難)
  • 關於C語言Switch語句,先學這些技巧夠不夠?
    功能:switch語句是多分支選擇語句.用來實現多分支選擇結構.if語句只有兩個分支可供選擇,而實際問題中常常要用到多分支的選擇.例如,學生成績分類(90為"A"等,80-89分為'B'等,70-90分為'C'等......).當然這些都可以用嵌套的if語句來外理,但如果分支較多,則嵌套的if語句層數多,程序沉餘長而且可讀性降低.C語言提供switch語句直接外理多分支選擇
  • 學習c語言,知道這三個資源就行了
    c語言作為目前最熱門的程式語言之一,一直是學生、程式設計師必須學習的課程之一,但目前許多學校的課程太過老舊,教材和教程也參差不齊,這裡就給大家推薦幾個比較好的學習c語言的資源。第一個推薦的就是《C Primer Plus》,作為一本廣受大家認可的工具書,書中詳細地講解了C語言的基本概念和編程技巧,並且包含了許多習題和例子,可以有效的幫助初學者建立對於C語言的知識體系,是一本對小白比較友好,且內容全面的入門教材。
  • 搭建C語言開發環境,其實只需要兩個工具就行了!
    工欲善其事必先利其器,對於c語言學習來說,重要的不是看了多少本書,而是打了多少行代碼。在手打代碼之前,我們當然要先搭建自己的開發環境,對於c語言的學習來說,其實只需要兩個工具就行了,那就是文本編輯器和c編譯器了。