C program basic

郝人牛語
  入門最基本的方法就是從C語言入手。express

  當你成爲C語言的高手,那麼你很容易進入到操做系統的平臺裏面去;當你進入到操做系統的平臺裏去實際作程序時,就會懂得進行調試;當你懂得調試的時候,你就會發現能垂手可得地瞭解整個平臺的架構。編程

  這時候,計算機基本上一切都在你的掌握之中了,沒有什麼東西能逃得出你的手掌心。數組

                    ——《編程箴言》 梁肇新bash


23
架構

  置身於一片很白的那種草原上(全下着大雪),而後有個小亭子,而後裏邊有一個有一個香爐,而後我就披着個斗笠,就在那亭子(棚子),而後就卡阿卡卡卡敲鍵盤。感受到很爽……如何能達到這樣的感受,要多敲。剛開始,很痛苦,一敲就會錯。學任何課程,剛開始一敲程序就錯,通過一個漫長的體力活,敲起來就會很快了(快樂)。讓人看見你(感受你)都很羨慕。敲那麼快……(思路那麼快)……app


1.簡單語句
ide

  C語言的基本結構函數

# include <stdio.h>

int main(void){
    printf("hello world");
    return 0;
}

  進製表示spa

//# 整數
//# 十進制:
//# 十六進制:0x 0X    // 零x
//# 八進制:0    // 零
int x = 314
int x = 0603
int x = 0x603

//# 浮點數
//# float:
//# double:
float x = 3.14F;  // 不加F,默認按double處理
float x = 3.14e3;

//# 字符:單引號
//# 字符串:雙引號

  輸出函數printf操作系統

int i = 10;    // 把i的空間存儲數字10的二進制代碼
printf("%d\n", i);    // 以十進制格式,輸出i存儲的數據
/* 輸出控制符
 * %d    
 * %ld    
 * %c  
 * %s  
 * %f    
 * %lf   
 * %o    小寫‘嘔’
 * %O    大寫‘嘔’
 * %x    十六進制輸出
 * %X    字母大寫~
 * %#x    帶前綴~
 */
int i = 314;
printf("number = %d\n", i);

printf("%x \t%%x\n", i);
printf("%X \t%%X\n", i);
printf("%#x \t%%#x\n", i);

/* 輸出內容以下
 * [view@file 03]$ ./a.out
 * number = 314
 * 13a     %x
 * 13A     %X
 * 0x13a     %#x
 */

  輸入函數scanf

//# 格式控制符與上邊一致
int i;

printf("Please input a number: ", &i);
scanf("%d", &i);
printf("number is %d\n", i);

  三目運算符

  根據表達式(expression)的值,使整個表達式計算爲第二個或第三個操做數。

/* a ? b : c
 * b,c必須知足如下三個之一:
 *     1.數字類型
 *     2.兼容的結構體、聯合體
 *     3.指向相同類型的指針
 */

  逗號表達式

  用途:前面的表達式產生後邊表達式的值,表達式的結果是最後一個表達式的值。

i = (x++, y = x * x, z = x + y, z * z - x * y);


2.流程控制

2.1.選擇結構

  if語句

// if簡單用法
if (x == 10)
  puts ("x is 10");
  
// if...else...
if (x == 10)
  puts ("x is 10");
else
  puts ("x is not 10");
  
// if...else if...else
if (x == 1)
  puts ("x is 1");
else if (x == 2)
  puts ("x is 2");
else
  puts ("x is something else");

  switch語句

// 檢查test-expression表達式(x)
switch (x)
  {
    case 0:
      puts ("x is 0");
      break;
    case 1:
      puts ("x is 1");
      break;
    default:
      puts ("x is something else");
      break;
  }


2.2.循環語句

  while語句

int counter = 0;
while (counter < 10)
  printf ("%d ", counter++);

  do語句

int x = 0;
do
  printf ("%d ", x++);
while (x < 10);

  for語句

int x;
for (x = 0; x < 10; x++)
  printf ("%d ", x);


3.數組

  聲明數組

  聲明數組時,須要指定其數據類型、數組名稱、成員個數。(數組長度是個固定值

int first_array[14];

  初始化數組

// 聲明時初始化
int first_array[14] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 };
// 初始化起始3個元素,其餘元素爲默認值0
int first_array[14] = { 1, 2, 3, 4 };
// 使用賦值運算符賦值
int first_array[10] = { [4] = 5, [5] = 9 };    // 等於下邊效果
int second_array[10] = { [0 ... 3] = 0, [4] = 5, [5] = 9, [6 ... 9] = 0 };
// 不直接指定大小,初始化全部成員。數組大小由成員數量決定
int first_array[] { 1, 2, 3, 4, 5, 6};

  數組的存儲是連續的……

int arraylist[4] = {1, 2, 3, 4}, i;
for(i=0; i<4; i++)
        printf("arrayList[%d]: 0x%x\n", i+1, (unsigned int)&(arraylist[i]));
printf("arrayList: 0x%x\n", (unsigned int)arraylist);

上邊程序運行後的結果

[view@payqa1 000 C pro]$ ./a.out
arrayList[1]: 0xcaefeb80
arrayList[2]: 0xcaefeb84
arrayList[3]: 0xcaefeb88
arrayList[4]: 0xcaefeb8c
arrayList: 0xcaefeb80

  初始化定義一個二維數組

/* 二維數組array[i][j],看做爲一個i行j列的矩陣。
 */
int two_dimensions[2][5] = { {1, 2, 3, 4, 5}, {6, 7, 8, 9, 10} };

  例子:定義兩個數組,計算數組的長度

// 定義數組、計算長度
int first_array[3][5] = {    // 二維數組的長度是……
        { 1, 2, 3, 4, 5 },
        { 0 },
        { 0, 0, 0, 0, 0 }
};
printf("first_array %d\n", sizeof(first_array)/sizeof(first_array[0]));

int second_array[5] = { 1, 2, 3, 4, 5 };
printf("second_array %d\n", sizeof(second_array)/sizeof(second_array[0]));
/* 數組長度的計算方法
 * sizeof()表示獲取到變量的字節值……
 */
// 執行後的結果
first_array 3
second_array 5


4.函數

  函數聲明時,指定函數名、參數列表、函數返回值。

/* 函數名:length
 * 參數列表:只有一個
 * 返回值:int
 */
int length(int x);

  定義函數

int length(int x) {
        int i, y;
        i = ( y = x*3 + 4, y + 6 );

        return i;
}


【指針】

  指針用來保存常量或變量的內存地址。任何數據類型,包括基本類型和自定義類型,均可以建立一個指針,該指針保存該類型實例的內存地址。

# include <stdio.h>

void f(int *i) {    // 被調函數經過指針修改主調函數的值
        *i = 330;
}

int main(void) {
        int i = 9;

        f(&i);
        printf("i = %d\n", i);

        return 0;
}

【數組長度】

# include <stdio.h>
int countLength(int *p, int lang) {
        int len = 0;
        len = (int)lang/sizeof(p[0]);    // 數組的總大小 / 元素大小

        return len;
}

int main(void) {
        //int arrayList[5] = { 1, 2, 3, 4, 5 };
        int arrayList[2] = { 1, 2 };                   // 函數外計算數組總長
        printf("in function, length is %d\n.", countLength(arrayList, sizeof(arrayList)));

        return 0;
}

【數組排序】

# include <stdio.h>
 
// declear functions.
void sort(int *,int,int);
void display(int *,int,int);
int mk(int *);
 
// define functions.
void sort(int * p,int len,int k)
{
    int t,i,j;
    for(i=0;i<len;i++)
        for(j=i+1;j<len;j++)
            if (k == 0)
                if (*(p+i) > *(p+j))
                {
                    t = *(p+i);
                    *(p+i) = *(p+j);
                    *(p+j) = t;
                }
            else if (k == 1)
                if (*(p+i) < *(p+j))
                {
                    t = *(p+i);
                    *(p+i) = *(p+j);
                    *(p+j) = t;
                }
            else
            printf("The value of \"k\" is error when function \"sort()\" is running.");
            return;
}
 
void display(int * p,int len,int k)
{
    if (k == 0)
        printf("從小到大排序\n");
    else if (k == 1)
        printf("從大到小排序\n");
    else if (k == 2)
        printf("沒有排過順序的數組\n");
    int i;
    for (i=0;i<len;i++)
    {
        printf("array[%d] = %d\t",i,*(p+i));
        if (i == (len-1))
        printf("\n");
    }
    return;
}
 
int mk(int * p)
{
    int len,i;
    printf("輸入須要產生的數組元素的個數:");
    scanf("%d",&len);
    for (i=0;i<len;i++)
    {
        printf("請輸入第%d個元素的數值:",i+1);
        scanf("%d",&( *(p+i) ));
    }
    ;
    return len;
}
 
int main(void)
{
    //int a[10] = {33,234,227,36,1,22,13,8,9,7},i,k=2;
    int * a;
    int lang,k = 2;
    lang = mk(a);
    display(a,lang,k);
 
    k = 0;
    sort(a,lang,k);
    display(a,lang,k);
 
    k = 1;
    sort(a,lang,k);
    display(a,lang,k);
    return 0;
}


5.結構體

  定義結構體,使用關鍵字 struct 跟上成員聲明,放在一對大括號內、以分號結尾。

struct memberMem {
    char hostname[50];
    char ipAddress[50];
    char position[30];
    float total, used;
    float cache, buffer;
    float swapIn, swapOut;
};    // 末尾有個分號

  聲明結構體變量

struct memberMem back, app47, app160, task;

  結構體變量賦值

back.total = 8.0F;
back.used = 1.23F;
printf("memory total is %f, used is %f.\n", back.total, back.used);
相關文章
相關標籤/搜索