回覆列表
  • 1 # 帶娃學程式設計

    首先,OJ的題目,大部分是考察思維的,不是說學了C語言就能透過,需要掌握一些數學知識、資料結構等方面的內容,還有個人解決具體實際應用問題的能力。其次,學習C語言,主要是學習其語法和規則,掌握這個工具,並利用它來實現自己的想法。很多OJ平臺可根據個人情況選用合適的語言。再次,做OJ上的題目需要程式語言和邏輯思維的結合,在熟悉程式結構的基礎上,掌握常用函式的使用方法,這樣可以簡化工作量。比如,如果對C語言輸入輸出不熟悉的話,即使邏輯正確,但由於輸出格式不正確也無法透過平臺測試。所以,在學習上,一是把C語言的基礎打紮實,熟悉輸入輸出、資料型別(含結構體)、各種表示式、分支迴圈語句等內容,掌握這些知識,基本能滿足OJ平臺對程式設計的要求(資料結構方面要求會更多一些,指標是必學的);二是學習一些常用的資料結構和演算法,明白連結串列、棧、佇列、樹、圖等的實現原理、儲存方式和操作方法,熟悉列舉、貪心、分治等演算法思想;三是多做題多總結,一定要親手編寫程式碼!!!看似簡單的一道題目,千萬不要認為會了而不去寫程式碼上機測試,往往在寫的過程中才發現自己的不足。

  • 2 # 前沿學習分享

    這是很正常的現象,因為C語言只是一種語言,你必須得懂得“怎樣說話”才能運用好這種語言。C語言是面向結構的語言,在解決問題的時候就是要不斷地細化成每一步,並且用C語言翻譯給計算機聽。

    比如“到旁邊的飲水機打杯水過來”就要分成好幾步,走到飲水機面前停下,裝水到水滿,回到原處放下杯子。其實這些步驟還需要細分,視具體情況而定。

  • 3 # 電子哥的日常

    C語言博大精深,說實話,不是幾個月就能學好的。如果你是學生,c語言課程就一學期,每週一節課,更本都沒有多少時間。要把C語言學好,要持續不斷的學習,才能真正掌握這門語言。

    1、在網上多下載一些影片教程,現在影片教程非常多,你就挑選兩三套影片教程就可以了,要反覆的看,同時,自己要和影片教程同步練習,不能只看影片,而不練習,我估計你只看影片教程,而不動手練習,看著看著就打瞌睡了。所以,一定要邊看影片教程,邊在電腦上動手敲程式碼。

    2、學任何東西,要活學活用,你可以在網上找一些練習題,一些簡單的演算法題,自己想辦法把程式碼寫出來,運算。然後對著參考答案,看看有啥區別,要不斷的吸收人家的程式碼風格,當然,是好的程式碼風格。

    3、既然你學了C語言,那最好把這種能力作用到實際產品中。你可以買一個微控制器開發板,可以在裡面編寫程式,微控制器執行的程式也是C語言。你可以寫數碼管、觸控式螢幕、電機等各種驅動程式,還有PID演算法,這樣絕對是活學活用。

    總之,要想把C語言學活,那你的堅持不斷的學習;同時,你需要勤於練習,要做的多動手,多思考,和實際電子產品結合寫程式碼。我相信,你很快就能熟練掌握C語言。

  • 4 # 臺江油條

    很正常, 說c語言學完的,基本就學到一兩成,指標掌握程度?彙編掌握程度?學c不學這兩個,不如找個高階語言學,開發效率更高。

  • 5 # 主要科技

    大家好,非常榮幸可以有這個機會解答這個問題,現在讓我們一起探討一下吧。

    首先,OJ的大部分主題都是關於思考的,而不是你在學習C語言後就能透過。你需要掌握一些數學知識,資料結構和其他方面,以及你解決具體實際應用問題的能力。其次,學習C語言主要意味著學習它的語法和規則,掌握這個工具,並使用它來實現自己的想法。許多OJ平臺可以根據個人情況選擇合適的語言。第三,程式語言和邏輯思維的結合是解決OJ問題的必要條件。在熟悉程式結構的基礎上,掌握常用函式的用法,可以簡化工作量。例如,如果您不熟悉C語言輸入和輸出,即使邏輯正確,由於輸出格式不正確,您也無法透過平臺測試。因此,在學習中,一是要打好C語言的基礎,熟悉輸入輸出、資料型別(包括結構)、各種表示式、分支迴圈語句等內容,掌握這些知識,並基本滿足OJ平臺對程式設計的要求(資料結構要求會更多,指標是必須的);二是學習一些常用的資料結構和演算法,瞭解連結串列、棧、佇列、樹、圖等的實現原理、儲存方法和操作方法。並熟悉列舉、貪婪、分割槽等演算法思想。第三是做更多的問題和總結。你必須自己寫程式碼!對於一個看似簡單的話題,不要認為不編寫程式碼和在計算機上測試就能做到。在寫作過程中,你會經常發現自己的缺點。

  • 6 # 成都茂大叔

    你學完了四則運算就能做小學數學題麼?呵呵…

    你學的只是概念和規範,解決問題一靠經驗二靠數學三靠想象力…這些不是書本上能學到的。

  • 7 # 麇諾

    會寫0123456789,不見得會算十以內加減法。同樣的道理,c語言就是一種表示方法。oj上的題都是鍛鍊你思維能力的,而你要做的是用編碼表示出來。如果你不能再數學上先解決出來,c語言學的再好也是做不出來的

  • 8 # a二叔a

    oj上的題主要考察程式設計思維,對語言本身的要求並不高,學了c語言不會做oj題太正常,繼續學習演算法和資料結構,並結合相應的演算法找相應的題去訓練,程式設計能力慢慢才能提高,當然每個人的悟性不同,學了演算法和資料結構做不動也很正常[可愛],學不動複雜的就學簡單的吧,複雜的東西學不會不等於你做不出軟體,相信好多資深程式設計師也不一定能做多少oj上的東西

  • 9 # 齊天太聖2020

    學以致用,分析你是為了競賽吧!幾年級了?如果是初中,那就剛好,如果高中了,就比較難了。

    要知道,語言只是基礎,是工具。

    oj裡面的題目大部分都是考察演算法的知識,這個不學習是基本沒有可能做出來的!

    1,自學,要求有極好的悟性和自制力,刷題,一個一個知識點過!資料結構,演算法都要刷!刷到熟練為止!

    有成功案例,原14,17年acm隊長陳立傑就是如此出眾。

    但需要看你是否有他的天賦!

    2,找教育機構上課,這個難度比自學小,但是要取得好成績,仍然要付出很多努力!

    但是好的老師能夠讓你少有很多彎路。而且,即使陳立傑那樣的,後來都一樣是有指導老師帶領。這方面,國內來說小智程式設計算很好的,伯克利、清華博士後上課,師資沒的說,就看你自己有沒有潛力了!

  • 10 # FrankManSea

    告訴你一個學習C語言的捷徑,只需要最多四個月時間就可成功。下面是一個國外大學計算機C語言的學習課程連結,裡面的內容很豐富,你按照老師的PPT學習,然後將每一次作業(Assignment,每週更新一次)認認真真地做完做對,那麼大約四個月後,我可以肯定地說,你一定會成為一名合格的C程式設計師。因為就連谷歌、蘋果、Facebook等國際知名的IT公司都錄用這個大學的C程式設計師,更何況國內的企業呢。相信我,你一定能成功。

    https://www.student.cs.uwaterloo.ca/~cs137/

  • 11 # 吐槽貓

    OJ : Online Judge ,線上判題系統,能夠編譯並執行程式碼,使用預設的資料對這些程式進行測試。程式碼的輸出會被OJ系統捕獲,與標準答案進行比較後返回結果。

    是否學好C語言和能否做出來OJ上的題目是兩碼事,二者的關聯度並不高。就好比開車,C語言教你的是如何打火、掛檔、踩油門、剎車和轉彎,而OJ考你的是飆車、不減速過彎、單手漂移。一個是基礎,一個是進階。

    做OJ上的題目並不侷限於某一種語言,語言只是你和計算機互動的規則,而OJ考你的是演算法,也就是解決題目的思想。OJ上每道題都可以用C、C++、python、java等多種語言提交。飆車和漂移這種事,只要不翻車,開法拉利還是奧拓都可以,但顯然高階語言在實現一些結構(連結串列、圖、樹)時有天然的優勢(法拉利開起來更爽)。

    做不出來OJ上的題目是不是很正常?是很正常的,你現在需要做的是找一本資料結構與演算法的書(最好是C語言版本)看一看,看不懂的去MOOC上找相應的網課(頂尖名校的免費公開課很多的)。

    粗略刷完資料結構與演算法後,就可以去OJ上飆車了,雖然還是會經常翻車,不過無傷大雅,大家都是在被虐中成長的。等你熟練使用了DFS,BFS,貪心,DP……(省略)等騷操作後,你的車就再也不容易翻了!

    最後,預祝你飆車愉快。

  • 12 # 老邢聊科技

    首先回答一下第1個問題:這種現象是正常的。

    下面我說明一下並提出一些我認為可以提升的方法

    01 從基礎到OJ需要思維訓練

    樓主剛學完C語言,應該是對C語言的語法、C語言執行原理等基礎知識有了一定了解,應該具有了一定程式邏輯思維,例如掌握了條件判斷、迴圈、陣列等知識。對C語言的指標有了基本認識。

    但上述這些內容,還不足以刷OJ。

    OJ的題分為基礎邏輯題、資料結構及演算法題。樓主必須在學完《資料結構與演算法》這門課以後,才能基本上手OJ。同時,刷題還需要掌握一些技巧,訓練自己的思維習慣。

    02 提升建議

    個人建議樓主可以從頭開始刷leetcode。leetcode試題能夠對答題者進行全方面的訓練,並且現有網際網路上有大量leetcode試題解析與影片,如果某道題沒有思路,還能找到一些資料。

    在刷leetocde時,要有這樣一個基本的思考,就是善用資料結構能夠幫助你找到快速解決辦法。 其實資料結構與演算法是不分家的,兩者永遠都是結合在一起學習和使用。

    我以關係資料庫為例說明一下:

    關係資料庫採用“表”進行儲存資料,每張表中包含多個數據行。現在想從一張表中查找出某些符合條件的資料行,這其實就是“查詢”演算法。

    再舉一個日常案例

    圖書館的案例:圖書館這麼多書,是如何存放和方便讀者查詢的呢?

    思考一下上面這個問題,你應該已經有想法和收穫了。

  • 13 # 夭努力加油鴨

    學和自己動手去做,是兩碼事,就跟你上學一樣,上完課老師會給你佈置作業來鞏固學的東西,你這光學,少練習,是不行的

  • 14 # 許大蝦原創

    學習C語言是一個漫長的過程,一時的成敗不足以論英雄,千萬不要因為自己學習完,做不出一道題而信心大失,其實那些你以為他們掌握的很厲害的人也有可能不能馬上解出來。不可否認天賦真的很重要,解決問題的思路對於有天賦的天才來說九牛一毛,而對於天賦平平的人來說,只有透過自己的努力不斷積累經驗,以經驗替代天賦,達到萬法歸一的目的。

    C語言就像一門真的語言,你可以用語言表達一句兩句話,但是你如果要讓語言表達一句有深意有寓意的話,是不是得需要有深厚的功底,所以不要說學完了,他是永遠學不完的。

    就我而言最好的方法就是先總結經驗吧,然後繼續深入學習,以後碰到類似問題就按經驗解決。

  • 15 # 大學生程式設計指南

    至今還是有很多人覺得C語言依然是程式設計行業最基礎的東西,畢竟現在很多上了年齡的人在當時大學階段初級的入門程式語言就是用的C語言,在很多人心中都有個程式設計夢,有些甚至年過半百了還琢磨自己這輩子沒有玩程式設計而遺憾,也有很多上了年紀的人拿起C語言的書籍一步步跟著網路上的教材進行學習,隨著程式語言在國內的普及,程式語言的生態已經發生了很大的變化,特別是高階語言的普及化,倒是顯得很多底層語言在程式設計領域的影響力在下降,但是其重要性還是在加強,就拿C語言來講是很多程式語言的基礎而存在,主流很多程式語言的底層實現就是利用的C語言或者彙編來完成,C語言在程式設計領域的角色在發生變化,在早期一個很簡單的功能模組可能都需要C語言實現很長時間才能穩定,但在今天可能就是另外的一種模式存在了。

    儘管很多人對於人工智慧不屑一顧,但是從生產力的角度出發,自動化是一種大趨勢未來大量的重複性的勞動必然被機器所取代,而打造這些機器的底層基礎是離不開程式語言而存在,未來程式設計發展趨勢演變成一種全民程式設計的存在,因為未來社會與智慧化的機器已經緊緊捆綁在一起了,想要更方便的操控機器掌握一定的程式設計基礎的人可能就會產生新的行業,如果有可能掌握一門程式設計對於適應未來的社會是存在好處的。

    回到程式語言的學習過程,程式語言學習最佳的方式掌握一定理論基礎上有專案實戰,如果兩種條件都是具備的情況下可能幾個月就能找到程式設計的感覺,而大部分自學程式設計的人更多是在網路上找到自己覺得重要的影片學習起來,並且透過CSDN等途徑進行知識性的拓展,在某種階段也是小有收穫的存在,但在大部分情況下還是處於迷茫的狀態,這種屬於典型的沒有方向感的方式,要擺脫這種模式建議靜下心來默默的梳理自己的思路,先從掌握基礎的理論開始,這個階段如果是自學階段就要耐得住寂寞,雖然程式設計是講究實踐的技能但如果是沒有理論的實踐會錯失很多知識體系構建的機會。最好的學習程式設計的方式就是在掌握一定理論的基礎上再去實踐能夠取得意想不到的效果。

    對於掌握程式設計的理論這個階段對於大部分學習者來講可能都能克服,最關鍵的實踐對於絕大部分的自學者來講就是一種極大的挑戰,之所以存在挑戰找不到匹配自己能力的實踐機會,即使專門的培訓機構也很難找到匹配的實踐專案,這在程式設計屬於混沌階段一種思維在艱難認知的過程中,在這個過程中會夾雜著理論實踐的層次甚至還有放棄的念頭,這個階段對於學習程式設計的人來講時間長短不一樣,每個真正的程式設計師都是從這個階段走過來的,要順利的度過這個階段就要堅持做自己認為準確的事情,哪怕是不適合當時的階段,轉化成精神層面就是堅持讓自己透過實踐找到學些程式設計的感覺,如果可能的話還能夠培養出興趣出來。

    就當前環境下學習程式設計的人,大部分人還是選擇網路或者線下的培訓,其實培訓更多是在給人指明一種學習方向,或者再通俗點就是找一群一起學習的小夥伴大家互相監督,透過集體的力量來壓抑自己散漫的天性,從而達到學習程式設計的目的,最終能夠學好程式設計的最致命的關鍵點還是在於內心付出多少,是否從內心想要做好這件事情。

  • 16 # crazycoding

    很正常,語言和演算法當然不一樣了

    建議邊做題邊總結,對於,回溯,dfs/bfs,連結串列,樹,貪心,動態規劃等等專門搗鼓搗鼓,三個月後大有收穫,至少不會沒一點思路

    順便建議學java/cpp來刷題,如果以後要做嵌入式方面的,記得深入研究c語言,看看unix環境程式設計,網路程式設計,懂得底層原理。

    比如:malloc底層原理(又可以引申到記憶體管理,再到缺頁中斷機制)

    手寫memcpy函式(注意記憶體重疊問題)

    手寫socket服務端,接收端程式碼(引申到epoll/select,再到高併發,為了減少開銷又有執行緒池等等)

    總之,要走的路還很長。

  • 17 # Cecil曬嘻嘻

    命題模擬實際操作專案別認為書本學完就成大神,其實才開始。C強悍,短期完全掌握不大現實,最好的辦法是擬訂開發方向。搞清楚了,再來第二個。下程式碼沒錯,但是最高別直接貼上就用,學習一下其他人的程式設計思路。祝成大神。

  • 18 # 大俠胡一刀

    那不叫學完。學c語言基礎還是要打實,學到哪裡做到哪裡做完才往下學。我小孩今年小學五年級,就是我自己教他的c++,也在oj上做題,上完課讓他做題,做不出來就複習和練習。學程式語言,基本功很重要,一步一個腳印,才能走的遠。

  • 19 # 逆流而上的鱒魚

    我覺得很正常,c語言學習的內容很多,很複雜,很抽象,不像學習其它,焊工泥水匠之類的,c語言短時間內沒法掌握的很透徹,必須不斷重複的去學習,去鞏固,去練習,才能慢慢有所提高,必須把基礎打牢固,才能方便更進一步學習新的知識。學多了,學久了,能力自然就提高了。

    oj題很多也是涉及資料結構,需要擁有很強的邏輯思維,很多題說實話,光憑一己之力根本做不出來,想一輩子也想不出來,想多久都想不出來,只有直接看題解!沒有其他辦法。能把題解研究透徹都很不容易了。

  • 20 # 滬漂丁一

    快學完了,你只是語法快學完了,跟會不會做東西是兩碼事。OJ上做題的話,你去參考比賽嗎?還是自己做著玩呢?做題主要是演算法,語法只是基礎,就好比你認識了大部分字了,但你要寫好一篇文章,只靠認識字是不夠的。OJ上做題的話,講究高效演算法,需要先學好資料結構,再去學一些其他的經典演算法。

  • 中秋節和大豐收的關聯?
  • 有人去過白雁坑村嗎,那裡好玩嗎?分享下經驗?