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

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

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

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

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

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

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

可是我以爲下的多,仍是有幫助的。見的套路多,中的招多了,天然能長記性。編輯器

因此我如今把這個經驗總結爲:大量的實戰經驗。小時候打下的底子,縱觀全局,不可或缺。模塊化

第二,死腦筋仍是不行的,思惟要靈活。對局時動腦子想一想幾步以後走到哪裏了,有沒有便宜可佔,猜對手想幹什麼,其中有沒有殺機;對局後動腦子,這個對手棋路風格如何,剛纔有沒有失誤,等等。若是不動腦子,那麼進步就是一種奢望。函數

勤能補拙,靜能生慧。我以爲這是與老師博客中的學習經驗的最大共通之處,也是全部求學道路上的祕訣。學習

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

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

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

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

以後慢慢開始學會看錯誤信息,找錯,學會用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行代碼。

你知道什麼是斷點嗎?給出本身調試程序的例子。

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

程序調試如圖所示。

程序運行結果如圖所示。

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

第1章

Java的動態特徵不太理解。

第2章

爲啥有一個「boolean 關閉 = false」?

第3章

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

第4章

不理解「Java支持中文類名、方法名、屬性名,而且不會由於亂碼問題致使運行期連接失敗。這是Java內核支持UTF-8這一特性決定的。」

第5章

全部的類都有本身的子類嗎?

第6章

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

第7章

異常類不理解。

第八章日後我基本一臉蒙逼了......後面的邊學邊問吧,我感受這學期Java的學習會讓我收穫很多。

4、關於Java學習

計算機語言的學習我以爲是代碼堆出來的。語言的學習離不開環境,而對於計算機語言,代碼就是環境。想要提升程序設計能力和培養計算思惟,軟磨硬泡地訓練是必不可少的。「作中學」要求咱們有靈活的思惟,擺脫「溫馨區」,進入「學習區」。

相關文章
相關標籤/搜索