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

學習基礎和C語言基礎調查

求學 false pos 超過 只需要 多個 每天 通過 ber

學習基礎和C語言基礎調查

一、一種比大多數人(超過90%以上)更好的技能

說句實話,我還沒有那種特別特別自信的、說我能拿得出手的、所謂能超過百分之九十以上的人的技能。畢竟人外有人,天外有天。

姑且算上象棋吧,能下的過一些人,碰上一些每天都在下的那種老爺爺可能還是不太招架得過來。

至於說我所積累的經驗,總結一下,大量的實戰經驗靈活的思維模式

首先說這頭一點吧,實戰經驗就是大量的練習。有的人下棋就喜歡背棋譜,不過我覺得紙上得來終覺淺,或者說,我覺得真刀真槍地幹上一局比背棋譜進步得快。其實......我小時候也沒想這麽多,這都是我現在瞎bb的。我的象棋算是野路子學來的,小時候和爺爺奶奶下,一點點啟蒙的技巧還是會的。再後來,上小學了,和班裏同學下,參加比賽等等。從始至終沒有上過正兒八經的培訓班之類的,所以,到底應該怎麽學我也不知道。

但是我覺得下的多,還是有幫助的。見的套路多,中的招多了,自然能長記性。

所以我現在把這個經驗總結為:大量的實戰經驗。小時候打下的底子,縱觀全局,不可或缺。

第二,死腦筋還是不行的,思維要靈活。對局時動腦子想想幾步之後走到哪裏了,有沒有便宜可占,猜對手想幹什麽,其中有沒有殺機;對局後動腦子,這個對手棋路風格如何,剛才有沒有失誤,等等。如果不動腦子,那麽進步就是一種奢望。

勤能補拙,靜能生慧。我覺得這是與老師博客中的學習經驗的最大共通之處,也是所有求學道路上的秘訣。

二、有關C語言學習的調查

你是怎麽學習c語言的?與你的高超技能相比,C語言的學習有什麽經驗和教訓?

剛剛開始的時候,基礎的知識了解一點,一些基本的語句。

然後就是刷題刷題刷題......老師給的那個c語言在線題庫。

之後慢慢開始學會看錯誤信息,找錯,學會用debug等等,再後來幫同學改程序,一些易錯的地方越來越熟練,到最後慢慢地開始和大佬們交流,看看其他人是怎麽寫的。

總而言之就是不斷進步嘛,自己發現問題解決問題,查書,問同學,問度娘,問老師。這就是我的,最大的收獲。

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

(老師對不起寫了多少行C語言代碼我是真的心裏沒數啊)

等等啊,我們現在一個實驗寫程序大概100~200行,這樣算下來,我們做了這麽多大大小小的實驗,應該有個小幾千行了。

目前寫的代碼都還是能理解的,畢竟都是自己寫的,應該不存在看不懂的問題;其他人的代碼也還是看得懂,只是要多看兩眼,多琢磨琢磨,可能是代碼看少了,不太熟練吧。

量變引起質變,這是必然的規律。我覺得我們只要慢慢積累,自然集腋成裘,沒有必要刻意追求質變的發生。也許有一天,我們回過頭來,看見自己從最開始的“Hello world!”到後來能自己編個小應用,我們就會感嘆不知不覺中質變的發生。

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

也不知道我記的是不是對的。

數組指針,說白了是指針嘛,指向一個數組的指針;指針數組是一個數組,數組裏儲存的是指針。

函數指針類似,函數指針是指向一個函數的指針;指針函數是一個函數,函數返回值是一個指針。

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

第一個問題只知道一點點......

文件指的是電腦儲存設備上的數據信息,流簡單的說應該是字節序列,文件的輸入輸出控制,外部輸入輸出設備等等。關系:流是一種向文件寫入字節和從文件讀取字節的方式。

第二個問題......我覺得廣義上講,文本文件本質就是二進制文件的......所以二者的區別並不是物理上的,而是邏輯上的。二進制文件可以存儲char/int/short/long/float/……各種變量值。作為特殊的二進制文件,文本文件只能存儲char型字符變量。因此,文本文件每條數據通常是固定長度的,而二進制文件不是。

文本文件編輯器就可以讀寫,比如記事本;二進制文件需要特別的解碼器。

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

C語言是面向過程的程序設計。所謂過程就是,酒一口一口喝,步子一步一步走,先幹嘛再幹嘛,順序很重要,對於計算機而言只需要一個一個地實現就行了。

解決問題的辦法就是把一個程序模塊化,從上往下步步求精即可。

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

在設計一個較大的程序時,可以把它分成若幹個程序模塊,每一個模塊包括一個或多個函數,每一個函數實現一個特定的功能。C語言通過函數來實現其模塊化功能的。

多個源程序倒沒有寫過,目前只寫一個源程序的。

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

“高內聚,低耦合”其實按字面意思也很好懂,程序的模塊與模塊之間的耦合度要低,接口處盡量簡單;模塊內部要做得精細,模塊內的函數功能聯系要緊密。

應用上主要的問題在於模塊的劃分。一方面要考慮耦合性:為了提高模塊的獨立性,模塊與模塊之間的聯系應該盡可能的減少,盡量在主函數裏調用,實現非直接耦合;另一方面要考慮內聚:盡可能實現一個模塊對應一個功能。

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

(假設數組char型,長度為5,數組a是1,2,a,b,c)

把數組A的內容復制到數組B中:最簡單就是腳標循環,一個一個對應著寫。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char a[5]={‘1‘,‘2‘,‘a‘,‘b‘,‘c‘};
    char b[5];
    int i;
    for (i=0;i<5;i++)
    {
        b[i] = a[i];
    }
    return 0;
}

如何查找整數數組A中有沒有數字5?腳標循環查找。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char a[5]={‘1‘,‘2‘,‘a‘,‘b‘,‘c‘};
    int i;
    int flag = 0;
    for (i=0;i<5;i++)
    {
        if (a[i]==‘5‘)
        {
            flag = 1;
            break;
        }
    }
    if (flag)
        printf("Bingo!");
    else
        printf("Not Found!");
    return 0;
}

如何對整數數組A進行排序(從小到大,從大到小)?冒泡排序。

下面是從大到小排序(按照ASCII碼排序)。從小到大只需要將判斷條件,由“if (a[j]<a[j+1])”改為“if (a[j]>a[j+1])”

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char a[5]={‘2‘,‘1‘,‘b‘,‘a‘,‘c‘};
    int i,j;
    int temp;
    for (i=0;i<4;i++)
    {
        for (j=0;j<4-i;j++)
        {
            if (a[j]<a[j+1])
            {
                temp = a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
            }
        }
    }
    for (i=0;i<5;i++)
    {
        printf("%c",a[i]);
    }
    return 0;
}

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

這個是大二上做中國剩余定理實驗的代碼,前前後後敲了一周吧。


//中國剩余定理實驗

#include <stdio.h>
#include <stdlib.h>
#define N 10000
#define M 10
struct equa    //方程:bx = a mod n;
{
    int a;
    int b;
    int n;
};
int modni(int a,int b);
//模逆運算 m = a^(-1) mod b
int gcd(int a,int b);
//求最大公因子
int gcd(int a,int b)//輾轉相除法求最大公因子
{
    int temp;
    if (a<b)
    {
        temp = a;
        a = b;
        b = temp;
    }
    while (b!=0)
    {
        temp = a % b;
        a = b;
        b = temp;
    }
    return a;
}
int modni(int a,int b)//模逆運算 m = a^(-1) mod b
{
   int v1=0,v2=1,q,temp;
   if (a>b)
   {
       a = a % b;
   }
   while (a!=0)
   {
       q = b/a;
       v1 = v1-v2*q;
       temp = b % a;
       b = a;
       a = temp;
       temp = v1;
       v1 = v2;
       v2 = temp;
   }
   return v1;
}

int main()
{
    int x,xn;       //方程總個數
    struct equa E[M],B[M];     //兩個方程組,互寫(bx = a mod n)
    int m0 = 1;     //m0 是中國剩余定理的 m
    int m[M];      //m 是中國剩余定理的 M
    int mm[M];     //mm 是中國剩余定理的 M‘
    int shit = 0;      //最終結果 x = shit mod m0
    int i = 0,j,k;       //角標
    int g1,g2;         //互素分解的臨時儲存位置
    printf("Please input the number of equations:\n");
    scanf("%d",&x);
    xn = x;         //數據保留
    if (x>M)
    {
        printf("Error!\nx>%d\n",M);
        exit(0);
    }
    while (x--)
    {
        printf("Please enter b,a,n:\n(bx = a mod n)\n");
        if (scanf("%d",&E[i].b)&&scanf("%d",&E[i].a)&&scanf("%d",&E[i++].n))
            continue;
        else
        {
            printf("\nError!");
            exit(0);
        }
    }
    for (i = 0;i<xn;i++)        //計算m
        m0 *= E[i].n;
    for (i = 0;i<xn;i++)        //計算M
        m[i] = m0/E[i].n;
    for (i = 0;i<xn;i++)        //計算M‘
        mm[i] = modni(m[i],E[i].n);
    for (i = 0;i<xn;i++)
        shit += m[i]*mm[i]*E[i].a;
    shit = shit % m0;
    printf("x = %d mod %d",shit,m0);

    //程序測試部分
    /*for (i = 0;i<xn;i++)
    {
        printf("%dx = %d (mod %d)\n",E[i].b,E[i].a,E[i].n);
    }*/
}

原來的那個程序太長了,我就改了一下,現在這段代碼只能解很簡單的那種方程了。這個程序掐頭去尾共有91行代碼。

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

斷點就是程序運行時會自動停止的地方,準確來說應該是在調試過程中,程序運行到斷點位置會停止。

程序調試如圖所示。

技術分享圖片

程序運行結果如圖所示。

技術分享圖片

三、參考怎樣快速閱讀一本書,快速閱讀一下雲班課中有PPT,每章提出一個問題

第1章

Java的動態特征不太理解。

第2章

為啥有一個“boolean 關閉 = false”?

第3章

3.1.5的例子看不怎麽懂......

第4章

不理解“Java支持中文類名、方法名、屬性名,並且不會因為亂碼問題導致運行期鏈接失敗。這是Java內核支持UTF-8這一特性決定的。”

第5章

所有的類都有自己的子類嗎?

第6章

不理解接口和abstract類的具體區別。

第7章

異常類不理解。

第八章往後我基本一臉蒙逼了......後面的邊學邊問吧,我感覺這學期Java的學習會讓我收獲不少。

四、關於Java學習

計算機語言的學習我覺得是代碼堆出來的。語言的學習離不開環境,而對於計算機語言,代碼就是環境。想要提高程序設計能力和培養計算思維,軟磨硬泡地訓練是必不可少的。“做中學”要求我們有靈活的思維,擺脫“舒適區”,進入“學習區”。

學習基礎和C語言基礎調查