【我是程式設計師】C語言的學習基礎,100個經典的算法(一)

2021-03-02 華科IT之家

題目:古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔

  

子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數

  

為多少?

  

  

程序分析:兔子的規律為數列1,1,2,3,5,8,13,21....

  

  

程序原始碼:

  

main()

  

{

  

long f1,f2;

  

int i;

  

f1=f2=1;

  

for(i=1;i<=20;i++)

  

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

  

   if(i%2==0) printf("\n");

  

   f1=f1+f2;

  

   f2=f1+f2;

  

 }

  

}

  

上題還可用一維數組處理,you try!

  

題目:判斷101-200之間有多少個素數,並輸出所有素數。

  

程序分析:判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整

  

除,則表明此數不是素數,反之是素數。

  

程序原始碼:

  

#include "math.h"

  

main()

  

{

  

 int m,i,k,h=0,leap=1;

  

 printf("\n");

  

 for(m=101;m<=200;m++)

  

  { k=sqrt(m+1);

  

   for(i=2;i<=k;i++)

  

     if(m%i==0)

  

      {leap=0;break;}

  

   if(leap) {printf("%-4d",m);h++;

  

        if(h%10==0)

  

        printf("\n");

  

        }

  

   leap=1;

  

  }

  

 printf("\nThe total is %d",h);

  

}

  

題目:列印出所有的「水仙花數」,所謂「水仙花數」是指一個三位數,其各位

  

數字立方和等於該數本身。例如:153是一個「水仙花數」,因為153=1的三次方

  

+5的三次方+3的三次方。

  

  

程序分析:利用for循環控制100-999個數,每個數分解出個位,十位,百位。

程序原始碼:

  

main()

  

{

  

int i,j,k,n;

  

printf("'water flower'number is:");

  

 for(n=100;n<1000;n++)

  

 {

  

  i=n/100;

  

  j=n/10%10;

  

  k=n%10;

  

  if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)

  

   {

  

   printf("%-5d",n);

  

   }

  

 }

  

printf("\n");

  

}

  

題目:將一個正整數分解質因數。例如:輸入90,列印出90=2*3*3*5。

程序分析:對n進行分解質因數,應先找到一個最小的質數k,然後按下述步驟完

  

成:

  

(1)如果這個質數恰等於n,則說明分解質因數的過程已經結束,列印出即可。

  

(2)如果n<>k,但n能被k整除,則應列印出k的值,並用n除以k的商,作為新的正

  

整數你n,重複執行第一步。

  

(3)如果n不能被k整除,則用k+1作為k的值,重複執行第一步。

  

  

程序原始碼:

  

  

main()

  

{

  

int n,i;

  

printf("\nplease input a number:\n");

  

scanf("%d",&n);

  

printf("%d=",n);

  

for(i=2;i<=n;i++)

  

 {

  

  while(n!=i)

  

  {

  

   if(n%i==0)

  

   { printf("%d*",i);

  

    n=n/i;

  

   }

  

   else

  

    break;

  

  }

  

}

  

printf("%d",n);

  

}

  

題目:利用條件運算符的嵌套來完成此題:學習成績>=90分的同學用A表示,60

  

-89分之間的用B表示,60分以下的用C表示。

  

程序分析:(a>b)?a:b這是條件運算符的基本例子。

程序原始碼:

  

main()

  

{

  

 int score;

  

 char grade;

  

 printf("please input a score\n");

  

 scanf("%d",&score);

  

 grade=score>=90?'A'score>=60?'B':'C');

  

 printf("%d belongs to %c",score,grade);

  

}

  

題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。

程序分析:利用輾除法。

  

  

程序原始碼:

  

main()

  

{

  

 int a,b,num1,num2,temp;

  

 printf("please input two numbers:\n");

  

 scanf("%d,%d",&num1,&num2);

  

 if(num1  { temp=num1;

  

  num1=num2; 

  

  num2=temp;

  

 }

  

a=num1;b=num2;

  

while(b!=0)

  

 {

  

  temp=a%b;

  

  a=b;

  

  b=temp;

  

 }

  

printf("gongyueshu:%d\n",a);

  

printf("gongbeishu:%d\n",num1*num2/a);

  

}

  

題目:輸入一行字符,分別統計出其中英文字母、空格、數字和其它字符的個數。

程序分析:利用while語句,條件為輸入的字符不為'\n'.

  

  

程序原始碼:

  

#include "stdio.h"

  

main()

  

{char c;

  

 int letters=0,space=0,digit=0,others=0;

  

 printf("please input some characters\n");

  

 while((c=getchar())!='\n')

  

 {

  

 if(c>='a'&&c<='z'||c>='A'&&c<='Z')

  

  letters++;

  

 else if(c==' ')

  

  space++;

  

   else if(c>='0'&&c<='9')

  

       digit++;

  

     else

  

       others++;

  

}

  

printf("all in all:char=%d space=%d digit=%d others=%

  

d\n",letters,space,digit,others);

  

}

  

題目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數字。例如

  

2+22+222+2222+22222(此時共有5個數相加),幾個數相加有鍵盤控制。

  

  

程序分析:關鍵是計算出每一項的值。

程序原始碼:

  

main()

  

{

  

 int a,n,count=1;

  

 long int sn=0,tn=0;

  

 printf("please input a and n\n");

  

 scanf("%d,%d",&a,&n);

  

 printf("a=%d,n=%d\n",a,n);

  

 while(count<=n)

  

 {

  

  tn=tn+a;

  

  sn=sn+tn;

  

  a=a*10;

  

  ++count;

  

 }

  

printf("a+aa+...=%ld\n",sn);

  

}

  

題目:一個數如果恰好等於它的因子之和,這個數就稱為「完數」。例如6=1+2

  

+3.編程找出1000以內的所有完數。

  

  

程序原始碼:

  

main()

  

{

  

static int k[10];

  

int i,j,n,s;

  

for(j=2;j<1000;j++)

  

 {

  

 n=-1;

  

 s=j;

  

  for(i=1;i   {

  

   if((j%i)==0)

  

   { n++;

  

    s=s-i;

  

    k[n]=i;

  

   }

  

  }

  

 if(s==0)

  

 {

  

 printf("%d is a wanshu",j);

  

 for(i=0;i  printf("%d,",k);

  

 printf("%d\n",k[n]);

  

 }

  

}

  

}

  

題目:一球從100米高度自由落下,每次落地後反跳回原高度的一半;再落下,

  

求它在第10次落地時,共經過多少米?第10次反彈多高?

  

  

程序原始碼:

  

main()

  

{

  

float sn=100.0,hn=sn/2;

  

int n;

  

for(n=2;n<=10;n++)

  

 {

  

  sn=sn+2*hn;

  

  hn=hn/2;

  

 }

  

printf("the total of road is %f\n",sn);

  

printf("the tenth is %f meter\n",hn);

  

}

  

題目:一隻猴子摘了N個桃子第一天吃了一半又多吃了一個,第二天又吃了餘下的

  

一半又多吃了一個,到第十天的時候發現還有一個.

  

  

程序原始碼:

  

  

main()

  

{

  

int i,s,n=1;

  

for(i=1;i<10;i++)

  

{

  

s=(n+1)*2

  

n=s;

  

}

  

printf("第一天共摘了%d個桃\n",s);

  

}

  

迭代法求方程根

  

  

  

#define Epsilon 1.0E-6 /*控制解的精度*/

  

#include<math.h>

  

main()

  

{

  

float a,x0,x1;

  

printf("請輸入要求的數:");

  

scanf("%f",&a);

  

x0=a/2;

  

x1=(x0+a/x0)/2;

  

while(fabs(x1-x0)>=Epsilon)

  

  {

  

  x0=x1;

  

  x1=(x0+a/x0)/2;

  

  }

  

printf("%f的平方根:%f.5\n",x1);

  

}

  

  

#define Epsilon 1.0E-6 /*控制解的精度*/

  

#include <stdio.h>

  

#include <math.h>

  

main()

  

{

  

float num,pre,this;

  

do

  

  {

  

  scanf("%f",&num);

  

  }while(num<0);

  

if (num==0)

  

  printf("the root is 0");

  

else

  

  {

  

   this=1;

  

   do

  

   {

  

    pre=this;

  

    this=(pre+num/pre)/2;

  

    }while(fabs(pre-this)>Epsilon);

  

   }

  

printf("the root is %f",this);

  

}

  

用牛頓迭代法 求方程 2*x*x*x-4*x*x+3*x-6 的根

  

  

#define Epsilon 1.0E-6 /*控制解的精度*/

  

#include<math.h>

  

main()

  

{

  

   float x1,x0=1.5;

  

   x1=x0-(2*x0*x0*x0-4*x0*x0+3*x0-6)/(6*x0*x0-8*x0+3);

  

   while(fabs(x1-x0>=Epsilon)

  

   {  

  

      x0=x1;

  

      x1=x0-(2*x0*x0*x0-4*x0*x0+3*x0-6)/(6*x0*x0-8*x0+3);

  

   }

  

   printf("方程的根為%f\n",x1);

  

}

  

用二分法求上題

  

  

#define Epsilon 1.0E-5 /*控制解的精度*/

  

#include<math.h>

  

main()

  

{

  

   folat x1,x2,x0,f1,f2,f0;

  

   x0=(x1+x2)/2;

  

   f0=2*x0*x0*x0-4*x0*x0+3*x0-6;  

  

   while(fabs(f0)>=Epsilon)

  

   {

  

     if(f0*f1<0)

  

     { x2=x0;

  

f2=2*x2*x2*x2-4*x2*x2+3*x2-6;

  

     }

  

     if(f0*f2<0)

  

     { x1=x0;

  

f1=2*x1*x1*x1-4*x1*x1+3*x1-6;

  

     }

     x0=(x1+x2)/2;

  

     f0=2*x0*x0*x0-4*x0*x0+3*x0-6;

  

   }

  

   printf("用二分法求得方程的根:%f\n",x0);

  

}

相關焦點

  • C語言中10個經典的算法,學會它,利用它
    C語言中有有許多經典的算法,這些算法都是許多人的智慧結晶,也是編程中常用的算法,這裡面包含了眾多算法思想,掌握這些算法,對於學習更高級的、更難的算法都會有很大的幫助
  • 10個經典的C語言面試基礎算法及代碼
    算法是一個程序和軟體的靈魂,作為一名優秀的程式設計師,只有對一些基礎的算法有著全面的掌握,才會在設計程序和編寫代碼的過程中顯得得心應手。
  • 經常遇到的10大C語言基礎算法(珍藏版源碼)
    算法是一個程序和軟體的靈魂,作為一名優秀的程式設計師,只有對一些基礎的算法有著全面的掌握,才會在設計程序和編寫代碼的過程中顯得得心應手。本文是近百個C語言算法系列的第二篇,包括了經典的Fibonacci數列、簡易計算器、回文檢查、質數檢查等算法。也許他們能在你的畢業設計或者面試中派上用場。1、計算Fibonacci數列Fibonacci數列又稱斐波那契數列,又稱黃金分割數列,指的是這樣一個數列:1、1、2、3、5、8、13、21。
  • C語言學習推薦書籍
    題圖:來自網絡關於C關於C編程,我覺得有下面3個層次:基礎 - 基本語法進階 - 避免常見錯誤
  • 我一 jiao 踹開了 C 語言的大門
    有要學習 C 語言的讀者也可以參照。可能有些知識學習起來比較困難,比如說二進位這種涉及到底層方面的內容,建議多次食用。當然了,學習任何一門程式語言都不容易,看一遍視頻是不夠的,可能有些知識點吸收不了。那就多看幾遍,反正我就打算再看一遍,然後把涉及到程序在電腦上敲一遍,然後記錄一些筆記,發布到我的博客上。
  • 必備的10大C語言基礎算法(附完整代碼)
    算法是一個程序和軟體的靈魂,作為一名優秀的程式設計師,只有對一些基礎的算法有著全面的掌握,才會在設計程序和編寫代碼的過程中顯得得心應手。
  • 學習c語言,知道這三個資源就行了
    c語言作為目前最熱門的程式語言之一,一直是學生、程式設計師必須學習的課程之一,但目前許多學校的課程太過老舊,教材和教程也參差不齊,這裡就給大家推薦幾個比較好的學習c語言的資源。第一個推薦的就是《C Primer Plus》,作為一本廣受大家認可的工具書,書中詳細地講解了C語言的基本概念和編程技巧,並且包含了許多習題和例子,可以有效的幫助初學者建立對於C語言的知識體系,是一本對小白比較友好,且內容全面的入門教材。
  • 學習C語言必看的最經典書籍
    來源:互動出版網學習c語言必看的最經典書籍推薦一:《新概念51單片機C語言教程--入門
  • 前端學習數據結構與算法系列(一):初識數據結構與算法
    前言作為一個對算法沒有任何認知,非科班出身的前端程式設計師,如果想提高自己的能力,不再只寫業務代碼當一個應用工程師,算法是必須掌握的一門本領。算法也是一種思想,當你去讀一些優秀框架的源碼,如果對算法和數據結構一無所知,讀起來很困難,你無法理解人家為什麼要那樣寫,那樣寫的好處是什麼,接下來就跟大家分享下作為一個前端程式設計師,如何學習數據結構與算法。
  • 在C語言中,核心是指針,靈魂是算法,本篇用源碼解析十大基礎算法原理!
    算法是一個程序和軟體的靈魂,作為一名優秀的程式設計師,只有對一些基礎的算法有著全面的掌握,才會在設計程序和編寫代碼的過程中顯得得心應手。本文是近百個C語言算法系列的第二篇,包括了經典的Fibonacci數列、簡易計算器、回文檢查、質數檢查等算法。也許他們能在你的畢業設計或者面試中派上用場。
  • 在學C語言的人,怎能不了解這些經典算法問題?
    C語言中有有許多經典的算法,這些算法都是許多人的智慧結晶,也是編程中常用的算法,這裡面包含了眾多算法思想,掌握這些算法,對於學習更高級的、更難的算法都會有很大的幫助,會為自己的算法學習打下堅實的基礎。
  • C 語言經典算法
    C語言作為多數工科學校編程入門的教學工具語言,是很多朋友開啟編程世界大門的鑰匙。
  • 程式設計師學習C語言編程的4種方法,C語言之父的大作不容錯過!
    如果新手要學習編程,一些前輩都會建議從Python、PHP、Java開始學。不過,有些程式設計師是直接從C語言強勢入門編程的。那麼,如何學習C語言呢?下面w3cschool提供4種入門C語言的方法:0、刷題絕大多數的程式設計師學編程的時候,還是會開啟簡單粗暴的刷題模式。刷面試對於面試以及技術的提高大有裨益,刷題網站強推Leetcode、Codility、Lintcode等。
  • c語言50本電子書
    495個C語言問題.pdfC Primer Plus 第6版 中文版 高清完整PDF版.pdf
  • 書籍分享|零基礎學習C語言(附電子書)
    plus作為一本被人推崇備至的c入門經典,C primer plus絕非浪得虛名。它能為你系統學習c提供一個良好的平臺。作者:普拉達《The C programming language》拿到這本薄薄的書,很多人開始懷疑,C語言是這麼幾百頁能講清楚的麼。看完這本書,我想答案已經很明了,卻真的讓人感到震憾。什麼是好書?無法刪減的書才是真正的好書。
  • 程式設計師編程之路的基礎C語言
    一、選擇題:單選題中1~10題為二級公共基礎知識,考試內容包括數據結構與算法、程序設計基礎、軟體工程基礎、資料庫設計基礎四部分。單選題的11~40題是C語言的內容,程序的結果輸出、程序填空選擇,先是簡單的循環結構、順序結構、選擇結構,慢慢出現數組,出現函數調用,再就是結構體,再接著就是出現讓大家頭疼的指針,最最難的是將上述的內容進行整合在一起,讓小夥伴暈上加暈,不過我相信只要把題庫裡面的題能夠刷完並且做到基上理解,選擇題應該在在25~40之間了。沒刷題裸考的小夥伴,一首《都選C》送給你。
  • C語言基礎知識學習經典入門
    int i,j;    for (i = 0; i < 100; i++){        printf("%d\n",i);    }    for (j = 0; j < 100 ; printf("%d\n",j++)) {        puts("我先執行");    }
  • 程式設計師為什麼要學算法?
    對初學者來說,為避免片面或抽象地理解算法,可根據幾個問題評估自己是否適合學習算法:在學習算法的過程中,一能解決問題,二對自己有用,是最大的推動力。而那些抽象的,與程式設計師日常工作關係不大的競賽題,很難提起大多數人的學習興趣。最好能通過工作中應用的一些案例來切入,利用碎片化時間入門算法,提升技術競爭力。
  • 一個資深C語言工程師說如何學習C語言
    今天本人就與大家一起談談如何學習C語言或者說學習C語言應從哪幾方面著手。了解一些基本知識一.C語言的背景就個人感觸,無論學習哪門語言首先應該了解一下自己所學語言的背景,也可以說它的發展史。C語言屬於高級程序語言的一種,它的前身是「ALGOL」。其創始人是布朗·W·卡尼漢和丹尼斯·M·利奇。
  • 推薦 10 本程式設計師必讀的算法書
    我強烈建議每個程式設計師都在書架上放一本算法導論,但只用來做短暫的閱讀和參考。因為這本書你是不可能一口氣讀完的。我第一本就推薦它的另一個理由是,它不限定任何程式語言,而且還有對應的教學課程。2.《算法》 Robert Sedgewick & Kevin Wayne