1. 程式人生 > >C語言學習筆記()

C語言學習筆記()

一、取地址符的錯用

include <stdio.h>
int main()
{
int i;
scanf("%d",&i);
printf("%d",i);
}

如果將輸出語句改為printf("%d",&i);編譯並不會報錯,但得不到想要的結果

二、scanf錄入

1.scanf("%d%d%d",&a,&b,&c);
2.scanf("%d,%d,%d",&a,&b,&c);

注意第二種用鍵盤輸入時元素間用空格鍵而不是逗號隔開

scanf("%d\n",&a);//此處多加了一個\n

函式scanf()格式控制字串中含有’\n’等轉義字元,會導致資料輸入不能按照正常方式終止。此情況編譯不會報錯,但執行時會出錯,大多是粗心導致,注意則好.

三、函式

(一)隨機函式

 #include<stdio.h>
         #include<stdlib.h>
        int main()
       {   int i=0;
           for(;i<10;i++)
              printf("%d",rand()%100);}

該函式雖是隨機函式,但多次執行後會發現每次輸出的元素都一樣,但可加入隨機種子,比如以時間作為種子,因為時間不停地在變化,所以隨機數也會隨時間的變化而變化。

只需迴圈前新增srand((int)time(0)) 或者 srand((unsigned)time(NULL))即可

(二)函式的返回值

#include<stdio.h>
int fun(int x, int y); // 函式宣告
void main()
{
    int a=1, b=2, c;
    c = fun(a, b); // 函式的呼叫,呼叫自定義函式fun,其中a,b為實際引數,傳遞給被呼叫函式的輸入值
    printf("a,b中的較大值為%d\n",c);
}
// 自定義函式fun
int fun(int x, int y)    // 函式首部
{                        // {}中的語言為函式體
    return x>y ? x : y;  // 返回x和y中較大的一個數,這就是函式的返回值
}

注意:設定的函式為int型,則其返回值也一定是int型;
void函式無返回值。

四、陣列

(一)

二維陣列初始化時,可以省略行數,不可以省略列數,即定義二維陣列時可以對第一維的長度不指定,但第二維的長度不能省去。
設有陣列int am,如果要訪問ai的值,編譯器的定址方式為:
&ai=&a0+isizeof(int)n+j*sizeof(int); //注意n為第二維的維數
因此,可以省略第一維的維數,不能省略其他維的維數。

(二)

int nums[2][2] = {{1,2},
                  {1,2}};

[ ]裡面的個數必須是一個固定值,可以是常量(比如6、8)、常量表達式(比如3+4、5*7)。絕對不能使用變數或者變量表達式來表示元素個數,大多數情況下不要省略元素個數(當陣列作為函式的形參和陣列初始化時除外)

五、如何防止單獨開啟EXE檔案時的閃退情況

#include <stdlib.h>      //需要新增一個頭檔案

......

system("pause");          //整個程式結尾處凍結螢幕,使用者按任意鍵結束。

也可以在結尾處新增 getchar();
但並不適用於所有程式。

六、敲程式碼時中英文的轉換問題

emmm,,,其實這不算什麼問題,但就是有很多人編譯報錯之後找不到這個錯誤,其實編譯後報錯下方會有提示,提示也很具體,真的很具體,根據提示找錯誤,自己就可以解決這個問題。再者敲程式碼時細心一些,多注意中英文的轉換,可有效避免此類問題的發生。