1. 程式人生 > >20165336 學習基礎與C語言基礎調查

20165336 學習基礎與C語言基礎調查

代碼行數 內容 編程 c代碼 低耦合 維數 學習 閉操作 服務

20165336 技能學習心得與c語言學習

一、心得體會

  • 做教練
    從老師的健身教練健身學員的學習關系中我懂得了學生應該有自主的學習意識,要有計劃地去訓練、去流汗,並且要以100分的要求嚴於律己,老師是指導我們、幫助我們、點評我們的,這樣老師可以從傳統的教學模式中解放出來,學生也能從新的教學方式中受益匪淺。
  • 做中學
    看了韋鈺老師的 做中學”/ “Learning by Doing” 理念 、鄒老師的博客與婁老師的觀點後,我十分贊同做中學,這需要一定量的練習作為基礎,聽會忘記;看能記住;做才學會,主動式的學習才是我們當代大學生最需要的。

你有什麽技能比大多人(超過90%以上)更好?

我認為我在學習、生活、運動三方面中執行力、做飯、打籃球這三項技能比大多數人更好。

針對這個技能的獲取你有什麽成功的經驗?

  • 執行力
    執行力的獲取需要自己內心對自己所要完成的任務有充分的認識,在任務所規定的要求中,有計劃、有條理的按照較高的標準,逐漸去完成自己的任務。
  • 做飯
    這項技能應該是每個人必須具備的技能,我認為自己的成功經驗就是不斷的學習,不斷地模仿,從一開始的什麽都不會,慢慢的到知道菜該怎麽切,調料該在什麽時候放,火候的掌控等等,這需要不斷的學習,學習的渠道可以來自互聯網,來自身邊的父母或親朋好友。
  • 籃球
    籃球這項技能是我最喜愛的,獲取他的經驗就是通過時間的洗禮,不斷的觸碰籃球,找到球感,並且強化自己的基本功,有了良好的基本功,在這基礎上豐富自己的技術。

與老師博客中的學習經驗有什麽共通之處?

  • 執行力
    我認為執行力中與老師學習經驗有共通之處的地方在於要有計劃、有條理的去完成自己的任務,有條理有計劃可以節約你在做一件事的時間,並且不亂,不會影響下一個任務的規劃,能夠做到高效學習。
  • 做飯
    做飯中與老師學習經驗有共通之處的地方在於主動地去學習、去探索,並且不斷實踐,主動的學習才能知道怎麽做飯味道會更好,主動的探索才能填充自己在食物領域的無知,不斷實踐是掌握一項技能必不可少的要素!
  • 打籃球
    打籃球中與老師學習經驗有共通之處的地方在於大量的練習,並有良好的基本功,學習中大量練習能帶給我們熟能生巧,籃球也是一樣,不斷的練習不斷的提高自己的球感,才能練就紮實的基本功,有了紮實的基本功才能做更進一步地提高。

二、C語言學習調查

你是怎麽學習C語言的?(作業,實驗,教材,其他),與你的高超技能相比,C語言的學習有什麽經驗和教訓?

  • 學習C語言我是通過對老師上課關鍵點的理解,下課不懂看書,慢慢將書本上的知識內化,結合老師的練習平臺,每章根據重要內容不斷練習,完成老師規定習題量來學習的。
  • 學習C語言的經驗:學習C語言需要大量的練習,光看是不能學好的,需要在練習中不斷地將知識運用內化,練習是提高理解的高效途徑,可以通過書本、老師、同學、互聯網解決自己的問題,不能拖欠知識,C語言中的知識是一環套著一環的,一但有知識空缺,程序是無法實現成功運行的。
    學習C語言的教訓:切忌老想攻克難題,攻克難題是對自己能力的一種肯定,但是擁有良好的基本功同樣重要,如果基本功不紮實又想解決難題,實則得不償失,既不能把難題很順利地解決,有可能也會造成問題解決不了,也浪費了時間這種局面。

目前為止估算自己寫過多少行C代碼?理解的情況如何?量變引起質變,如何平衡質和量?

  1. 目前為止從第一篇博客中提到自己寫了將近5000行代碼。
  2. 根據大一老師章節題型的要求,所解決的非常容易、容易題型都能掌握解決,一般及困難類的問題,部分能解決,在語句運用方面基本熟練,指針運用只能說比較熟練,鏈表只會簡單的運用,太難的就不熟練了。調用打開文件等大一老師只是泛泛而談並沒有像其他的知識點那樣帶我們學習,所以只停留在了解的層面,僅僅有過幾次的簡單練習沒有掌握。
  3. 我認為平衡質與量的關鍵在於是否真正的掌握了知識,在徹底了解過知識後,應用一定量的有層次分明的練習題,去強化知識的質,在保證掌握了知識,產生了量變後引起質變,在進行適當的減少過量的練習。

學過了C語言,你分的清數組指針,指針數組;函數指針,指針函數這些概念嗎?

指針類型:用於存放變量的地址。
數組指針:指向數組的指針變量。
指針數組:這個數組的所有元素都是指針類型。
區別在於數組指針指向的是數組的首地址,指針數組是其中所有元素都有指向的首地址。
函數指針:指向函數的指針變量。
指針函數:函數返回類型是某一類型的指針,本質是一個函數。
區別在於函數指針指向的是函數的首地址,指針函數返回類型是一個指針。

學過了C語言,你明白文件和流的區別和聯系嗎?如何區分文本文件和二進制文件?如何編程操作這兩種文件?

  1. 不是特別明白文件和流的區別與聯系。
    查參考資料得:
  • 程序通過文件打開操作將流與設備聯系起來,文件打開後,可在程序和文件之間交換數據。
    • 由程序在磁盤上建立文件
    • 文件打開後,通過寫操作將數據存入該文件(寫入數據)
    • 由程序打開磁盤上的某個已有文件,通過讀操作將文件中的數據讀入內存供程序使用(讀數據)
  • 程序通過文件關閉操作斷開流域文件的聯系
    通過訪問度娘了解到:

    文件是計算機管理數據的基本單位,同時也是應用程序保存和讀取數據的一個重要場所。
    流是字節序列的抽象概念,例如文件、輸入/輸出設備、內部進程通信管道等。流提供一種向後備存儲器寫入字節和從後備存儲器讀取字節的方式。----------引用於文件與流的區別與聯系

區分文本文件於二進制文件:

  • 文本本件:用字節表示字符的字符序列,儲存每個字符的ASCⅡ碼。
  • 二進制文件:C程序的源代碼生成的可執行的程序。

如何編程操作這兩種文件
參考文本文件與二進制文件操作區別

學過了C語言,你知道什麽叫面向過程程序設計嗎?它解決問題的方法是什麽?

面向過程程序設計我所理解的是:以過程為中心解決實際問題的編程思想,使程序一步步得以實現,最終解決問題。
解決問題的方法是根據問題,分成一些小的步驟,然後一步步完成小的步驟最終完成程序設計。

在C語言裏面,什麽是模塊?你寫過多個源文件的程序嗎?

我認為C語言裏模塊就是函數。
沒有寫過多個源文件的程序

學過了C語言,你知道什麽是“高內聚,低耦合”嗎?這個原則如何應用到高質量程序設計中?

高內聚表示某個特定軟件模塊內部包含一系列關系及其相關的功能。
低耦合用來描述模塊之間依賴的程度。
我認為高質量的程序設計應該內部有著豐富的所需的功能,並且有著清晰的模塊關系。

學過了C語言,你如何把數組A的內容復制到數組B中?如何查找整數數組A中有沒有數字5?如何對整數數組A進行排序(從小到大,從大到小)?寫出相應的程序。

  1. 把數組A的內容復制到數組B中

    #include <stdio.h>
    #define N 20
    int main()
    {
    int a[N],b[N];
    int n,i;
    printf("輸入數組a的長度n=");
    scanf("%d",&n);
    if(n<1||n>N)
    {
        printf("輸入長度錯誤");
    }
    else
    {
        printf("請輸入數組a\n");
        for(i=0 ; i<n ;i++)
        {
           scanf("%d",&a[i]);
        }
        for(i=0 ; i<n ;i++)
        {
            b[i]=a[i];
        }
        printf("輸出數組b\n");
        for(i=0 ; i<n ;i++)
        {
            printf("%d ",b[i]);
        }
    }
    }
  2. 查找整數數組A中有沒有數字5

    #include <stdio.h>
    #define N 20
    int main()
    {
    int a[N];
    int n,i,j=0;
    printf("輸入數組a的長度n=");
    scanf("%d",&n);
    if(n<1||n>N)
    {
        printf("輸入長度錯誤");
    }
    else
    {
        printf("請輸入數組a\n");
        for(i=0 ; i<n ;i++)
        {
           scanf("%d",&a[i]);
        }
        for(i=0 ; i<n ;i++)
        {
            if(a[i]==5)
            {
               j=1;
            }
        }
        if(j==0)
        {
            printf("數組a中沒有5");
        }
        else
        {
            printf("數組a中有5");
        }
    }
    }
  3. 對整數數組A進行排序(從小到大)

    #include <stdio.h>
    #define N 20
    int main()
    {
    int a[N];
    int n,i,j,k,min;
    printf("輸入數組a的長度n=");
    scanf("%d",&n);
    if(n<1||n>N)
    {
        printf("輸入長度錯誤");
    }
    else
    {
        printf("請輸入數組a\n");
        for(i=0 ; i<n ;i++)
        {
           scanf("%d",&a[i]);
        }
        for(k=n-1 ; k>0 ;k--)
        {
            for(i=0 ; i<k ;i++)
         {
           j=i+1;
           if(a[i]>a[j])
           {
               min=a[j];
               a[j]=a[i];
               a[i]=min;
           }
         }
        }
        printf("由小到大排列得數組a\n");
        for(i=0 ; i<n ;i++)
        {
            printf("%d ",a[i]);
        }
    }
    }
  4. 對整數數組A進行排序(從大到小)

    #include <stdio.h>
    #define N 20
    int main()
    {
    int a[N];
    int n,i,j,k,max;
    printf("輸入數組a的長度n=");
    scanf("%d",&n);
    if(n<1||n>N)
    {
        printf("輸入長度錯誤");
    }
    else
    {
        printf("請輸入數組a\n");
        for(i=0 ; i<n ;i++)
        {
           scanf("%d",&a[i]);
        }
        for(k=n-1 ; k>0 ;k--)
        {
            for(i=0 ; i<k ;i++)
         {
           j=i+1;
           if(a[i]<a[j])
           {
               max=a[j];
               a[j]=a[i];
               a[i]=max;
           }
         }
        }
        printf("由大到小排列得數組a\n");
        for(i=0 ; i<n ;i++)
        {
            printf("%d ",a[i]);
        }
    }
    }

寫一個程序,統計自己C語言共寫了多少行代碼。

#include <stdio.h>
int main()
{
    int line = 0;
    int c;
    printf("請輸入所學過程序,用字符‘$‘作為結束\n");
    while((c = getchar())!=‘$‘)
    {
        if(c == ‘\n‘) line++;
    }
    printf("line=%d\n",line);
}

自己想出的代碼有缺陷:輸入的代碼必須頂格,開頭不能有空格,意思是必須左對齊,因為大一打過的代碼沒有用過字符‘$‘,所以我我用字符‘$‘作為結束輸入的標誌以此停止輸入,算出總代碼行數。

你知道什麽是斷點嗎?給出自己調試程序的例子。

在某行代碼處設置斷點後,調試程序時,程序運行到該行代碼時會自動停止!然後就可以在這進行逐步調試了。
例如從大到小排序

#include <stdio.h>
#define N 20
int main()
{
    int a[N];
    int n,i,j,k,max;
    printf("輸入數組a的長度n=");
    scanf("%d",&n);
    if(n<1||n>N)
    {
        printf("輸入長度錯誤");
    }
    else
    {
        printf("請輸入數組a\n");
        for(i=0 ; i<n ;i++)
        {
           scanf("%d",&a[i]);
        }
        for(k=n-1 ; k>0 ;k--)
        {
            for(i=0 ; i<k ;i++)
         {
           j=i+1;
           if(a[i]<a[j])
           {
               max=a[j];
               a[j]=a[i];
               a[i]=max;//在這裏設置斷點,根據觀察窗就可以看到a[i],a[j],max此時的數據了。
           }
         }
        }
        printf("由大到小排列得數組a\n");
        for(i=0 ; i<n ;i++)
        {
            printf("%d ",a[i]);
        }
    }
}

三、閱讀雲班課中PPT,每章提出一個問題

  • 第一章:什麽是字節碼、機器碼、字節碼文件?在源文件中有多個類,有哪些?什麽是public類?
  • 第二章:邏輯類型Boolean、byte類型使用起來能解決什麽問題?scanner reader=new Scanner(System.in);這條語句為創建reader對象後面new Scanner(System.in)是什麽意思?
  • 第三章:使用for語句遍歷數組中遍歷的是一維數組,如果是二維或三維數組,該怎樣遍歷呢?
  • 第四章:JAVA中的方法與C語言中的函數有什區別於聯系?
  • 第五章:JAVA中子類的有關知識與C語言中結構體有關的知識有什麽區別於聯系?
  • 第六章:當一類實現多個接口時,能解決什麽問題?
  • 第七章:匿名類、異常類怎麽使用,使用對象?
  • 第八章:JAVA中數字格式化與C語言中printf函數有什麽聯系?
  • 第九章:容器內能添加哪些組件?能用添加組件的容器解決哪些問題?
  • 第十章:是否所有帶進度條的窗口都是帶進度條的輸入流所編寫的?
  • 第十一章:怎麽將數據庫與容器和組建聯系起來?
  • 第十二章:JAVA中多線程機制與電腦中的任務管理器有什麽聯系與區別?
  • 第十三章:服務器能否用除ServerSocket對象以外方式將客戶端的套接字對象與服務器端的一個套接字對象連接起來?
  • 第十四章:能實現幾何畫板的哪些功能?
  • 第十五章:JAVA的鏈表與C語言的鏈表有什麽區別於聯系?

對比C語言的學習,你對《Java程序設計》的學習有什麽具體目標?如何通過刻意訓練提高程序設計能力和培養計算思維?如何通過“做中學”實現你的目標?

對比C語言,我覺得我學JAVA我想學得更精、更熟練、更透徹,C語言的學習自我感覺停留在中下水平,沒有做到特別熟練,離自己的目標還是有一定的差距,因為JAVA的熟練掌握對今後的學習以及今後的工作有著重大的影響,所以我希望能熟練地掌握JAVA這門語言,做到熟能生巧,舉一反三,觸類旁通。
我認為刻意的訓練需要明確訓練的目標,要有計劃的針對訓練,根據自己所不懂得,所缺少的知識點,有針對的去訓練復習與鞏固,這樣在彌補自身知識漏洞的基礎上,才能不斷提高程序設計的能力,培養計算思維我認為得多多看有關的書籍,根據書上的知識,不斷提高自己的思維能力,並且多多提出有價值的問題,並且及時地去解決,這樣才能觸類旁通,在刻意訓練中培養自己的計算思維。
前面看了老師所推薦的做中學內容,我印象深刻的是聽會忘記;看能記住;做才學會,要把做落到實處,並且調動自己的積極性,要懂得主動學習的重要性,並且在不斷的練習中提升自己,沒有大量練習作為提高自己的基礎,想要學好JAVA是不太可能的,所以我要在做中學,在學中不斷找到樂趣,補充自己的知識,進一步提高自己。

20165336 學習基礎與C語言基礎調查