Từ 1 tới 9 trên tổng số 9 kết quả

Đề tài: Học lập trình C Online | Tự học C qua Cộng đồng C Việt

  1. #1
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,742

    Mặc định Học lập trình C Online | Tự học C qua Cộng đồng C Việt

    Chắc hẳn bạn đã nghe nói về ngôn ngữ C, cái tên chỉ có duy nhất một chữ mà nó lại là ngôn ngữ cực kỳ mạnh mẽ và từ lâu đã được các công ty phần mềm lớn chọn làm ngôn ngữ chính để sản xuất phần mềm, bên cạnh đó chúng ta cũng có thể nhìn thấy đa số ứng dụng đều được viết bằng ngôn ngữ C, hệ điều hành UNIX đã nổi tiếng về Bảo mật cho tới bây giờ. nó được viết hoàn toàn bằng ngôn ngữ C, rồi hệ điều hành Linux, trong hệ điều hành Windows cũng có rất nhiều rất nhiều Module được viết bằng ngôn ngữ C... Rồi nhiều ngôn ngữ khác mạnh mẽ cũng được phát triển lên từ ngôn ngữ C có cấu trúc giống ngôn ngữ C...
    Ngôn ngữ C là ngôn ngữ bậc cao do Dennis Ritchie của Bell Laboratories(phòng thí nghiệm Bell) xây dựng năm 1972, và nhanh ***ng được các hãng phần mềm chuyên ngành ưa thích. Thuộc loại ngôn ngữ đa năng và sự kết hợp mạnh mẽ giữa ưu điểm của ngôn ngữ bậc cao và tính hiệu quả của Assembly, nó đã làm cho ngôn ngữ C sau khi biên dịch chạy nhanh hơn các ngôn ngữ bậc cao khác. Thôi giới thiệu vậy thôi, các bạn có thể tìm trên các máy tìm kếm nếu muốn biết thêm thông tin về nó.

    Đề tài này dành cho những người mới đến với C, Dreaminess sẽ cập nhật chi tiết cụ thể và từng bước từ cơ bản đến nâng cao giúp cho bạn có thể nắm bắt ngôn ngữ lập trình C hiệu quả.

    Nào chúng ta bắt đầu nhé!

    Trước hết bạn cần có chương trình biên dịch Borland C 3.1(Gọi tắt BC3.1), download nó ở đây nhé.
    Xong rồi giải nèn bằng chương trình Winrar, bạn có thể vào trang http://rarlab.com để download trình giải nén Winrar.
    Giải nén vào một thư mục nào đó xong rồi bạn sẽ được một thư mục có chứa bộ cài BC3.1, nhấn vào File Install.exe trong đó để cài đặt(Việc cài đặt dành cho bạn tự làm nhé, chú ý xác định đúng vị trí thư mục Windows khi cài đặt thì nó mới hoạt động tốt)

    Cài xong chưa bạn? Bây giờ test thử xem nó có chạy tốt không nhé.

    Mở Run gõ vào cmd sau đó gõ tên phân vùng đĩa chưa chương trình ví dụ D: sau đó nhấn Enter
    Tiếp theo là gõ vào đường dẫn của file BC.exe nằm trong thư mục Bin sau khi cài

    Một màn hình xanh đét hiện lên => Vậy là tốt rồi, nhưng để thử xem nó có hoạt động tốt không hãy đưa các đoạn code sau vào xem nhé
    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. int main()
    4. {
    5.    clrscr();
    6.    printf("Hello world");
    7.    getch();
    8.    return 0;
    9. }
    Nhấn phím F9 xem sao? A đã báo Success rồi, tức là chạy rồi đó. Nhấn Ctrl+F9 để xem kết Quả của chương trình. Nó in ra trên màn hình một dòng chữ 'Hello World!' rồi đó

    Bây giờ thử với các code khác xem sao nhé.

    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. int main()
    4. {
    5.    clrscr();
    6.    printf("Chao moi nguoi\n");
    7.    printf("Day la lan dau tien to lap trinh ne");
    8.    getch();
    9.    return 0;
    10. }
    Hôm đầu tiên thế đã nhé.
    Ah, nếu bạn mới học cố gắng chịu khó chép từng câu một nhé! và cố gắng để ý xem nhé, các bạn có thể tải sách tiếng Việt dreaminess đã Up lên trong diễn đàn Ebooks bên dưới đó nhé
    Đã được chỉnh sửa lần cuối bởi shinichi_haha : 09-12-2006 lúc 12:46 PM.

  2. #2
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,742

    Hôm nay tiếp tục Dreaminess sẽ bắt đầu bằng những chương trình đơn giản sau đó mới nói đến các tác dụng của các câu lệnh nhé

    Chương trình 1: Tạo và bố trí văn bản
    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. int main()
    4. {
    5.     clrscr();
    6.     printf("\t\tCong dong C Viet");
    7.     printf("\nCong dong C Viet se la mot dien dan rat chuyen ve lap trinh C/C++.");
    8.     printf("\nMot noi de trao doi va hoc hoi cac kinh nghiem ve lap trinh C/C++");
    9.     getch();
    10.     return 0;
    11. }
    Oh, nó làm gì đây? Nó là một chương trình sẽ in ra một văn bản có bố trí.
    Nhưng sao nó lằng nhằng thế kia? Ah cái đó để em giải thích nhé
    • các dòng đầu tiên có lệnh #include là dùng để gộp vào các file thư viện có chứa các hàm dựng sẵn. ở đây ta thêm vào 2 thư viện là stdio.h và conio.h. Nó có thêm dấu # trước Include là để báo rằng include là lệnh gộp chứ không phải là một chuỗi văn bản
    1. stdio.h nó bao gồm các hàm 'xuất nhập chuẩn' của trình biên dịch như là: fprintf, fscanf, gets, printf, putchar, puts, scanf, sprintf, sscanf, vprintf, vscanf ....
    2. conio.h là một thư viện chứa các hàm 'xuất nhập' như là clrscr, getch, gotoxy, putch ....
    • Tiếp theo là hàm main(), hàm này là hàm chính mà trong một chương trình C bắt buộc phải có mặt của nó.
    • Nữa là dấu '{' đúng hơn là một lệnh, lệnh này là dấu báo hiệu cho việc bắt đầu hàm được xử lý, nó tương đương với Begin trong pascal.
    • Tiếp nữa là hàm clrscr(), hàm này là hàm xóa màn hình (Clear screen). Nó sẽ xóa những gì hiện có trên màn hình khi gặp lệnh này, đển in các kết quả của các câu lệnh tiếp theo sau lệnh này.
    • Tiếp nữa là những hàm printf, hàm này là hàm xuất dùng để in ra màn hình một chuỗi hay một giá trị được đặt trong ("..."). Tương đương với hàm write trong pascal
      • Trong các hàm printf các bạn nhìn thấy khi in một chuỗi lại có thêm một vài ký tự khác nữa nó để làm gì nhỉ?. Ah, nó là như thế này
        • \n: (new) tín hiệu này để chuyển một chuỗi ngay sau nó sang một dòng mới
        • \t: (tab) để thụt dòng một chuỗi khi in với một khoảng được trình biên dịch định sẵn
        • \b: (back) Dùng để lùi lại một bước
        • \f : Dùng để sang trang mới
        • Còn một số nữa nhưng Dreaminess không đưa ngay ở đây mà khi nào dùng đến sẽ nói cụ thể nhé, như thế có lẽ là tốt hơn
    • Tiếp theo đến lệnh getch(); trong trường hợp này lệnh này dùng để dừng chương trình lại để xem kết quả, kết thúc khi bạn nhấn một phím bất kỳ. Trong passcal ta thường dùng Readln để làm việc này.
    • Cuối cùng là dấu '}', báo hiệu rằng hàm đã được xử lý xong và kết thúc. Trong Pascal để làm việc này ta dùng lệnh End. hoặc End;
    Bây giờ bạn thấy thế nào? Bạn có muốn tiếp tục không? Nhưng bây giờ Dreaminess phải đi ăn cơm đã, đói lắm rồi. Sẽ quay lại ngay thôi, Dreaminess cũng cảm thấy hứng thú lắm đó.

    Chúc bạn có một ngày vui vẻ và say mê nhé!%
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  3. #3
    Ngày gia nhập
    08 2006
    Nơi ở
    Hải Phòng
    Bài viết
    218

    Mặc định trả lời

    Hôm trước Dreaminess đã giới thiệu với các bạn cấu trúc chính của một chương trìng và xuất ra một đoạn văn bản, hôm nay mình sé nói về câu lệnh scanf dùng để nhập dữ liệu.
    Sử dụng hàm Scanf để nhập dữ liệu từ bàn phím
    Ví dụ: để vào từ bàn phím 2 giá trị kiểu int và 3 giá trị iểu float có thể dùng các câu lệnh
    C Code:
    1. /* */
    2.  
    3.     int a, b; /*Khoi tao 2 bien kieu int*/
    4.    /*kiểu int là  một số nguyên 16 bit, nghĩa là một biến kiểu int có thể nhận giá trị trong khoảng -32768...32767*/
    5.    float c, d, e;/*Khoi tao 3 bien kieu float*/
    6.    /*kiểu float là kiểu số thực dấu chấm động, mỗi biến chiếm 4 byte và có thể biểu diễn giá trị trong khoảng 3.4E-38...3.4E+38 khá lớn phải không các bạn. Kiểu này thường dùng để biểu diễn các số thực hoặc các tính toán cần độ chính xác. */
    7.    scanf("%d%d%f%f%f", &a, &b, &c, &d, &e);
    8.    /*Đây là câu lệnh mà chúng ta sẽ học hôm nay*/
    *Hàm scanf là hàm có nhiều chức năng tương tự như hàm printf nhưng theo chiều ngược lại. Nó đọc thông tin từ thiết bị vào chuẩn ( bàn phím ) chuyển dịch chúng ( thành số nguyên, số thực) và lưu trữ vào bộ nhớ theo các địa chỉ xác định.
    Hàm có dạng
    int scanf(const char*dk[,danh sach cac doi]);
    ở đây dk là biến con trỏ kiểu char chứa địa chỉ của chuỗi điều khiển. Đó là nói
    cho chính xác mà thôi, còn các bạn cứ hiểu tham số đầu là một chuỗi.
    1/ Danh sách các đối
    Mỗi đối trong danh sách là một con trỏ chứa địa chỉ của một vùng nhớ ( địa chỉ biến, mảng…) dùng để lưu trữ một giá trị đọc vào từ bàn phím. Các đối cần phân cách nhau bởi dấu phẩy.
    Mỗi biến đều có một địa chỉ riêng của nó trong bộ nhớ, để lấy được địa chỉ này các bạn chỉ cần thêm kí tự & vào trước tên biến
    2/ Chuỗi điều khiển
    Gồm các kí tự đạc tả chuyển dạng. Mỗi kí tự đặc tả thường có một đối tương ứng.
    3/ Đặc tả có thể viết một cách tổng quát như sau:
    &[*][d….d] ký tự chuyển dạng
    a) Việc có mặt của dấu * nói lên rằng trường vào vẫn được dò đọc bình thường, nhưng giá trị của nó bị bỏ qua (không được lưu vào bộ nhớ ). Như vậy, đặc tả chứa dấu * sẽ không có đối tương ứng.
    b) d…d là một dãy số xác định chiều dài cực đại của trường vào.
    Để cụ thể hơn ta sẽ thông qua ví dụ sau
    C Code:
    1. //
    2.    int a;
    3.    float x,y;
    4.    char ch[6], ct[6];
    5.    scanf("&f%5f%3d%3s%s",&x,&y,&a,ch,ct);
    6. Với dòng vào : 54.32e-1 25 12452348a
    7. Sẽ gán:
    8. 5.432 cho x /*Không sử dụng kí tự chuyển dạng*/
    9. 25.0 cho y  /*Ki tự chuyển dạng là %5f*/
    10. 124 cho a   /*Ki tự chuyển dạng là %3d*/
    11. xâu "523" có cả dấu kết thúc \0 cho ch  /*Ki tự chuyển dạng là %3s*/
    12. xâu "48a" có cả dấu kết thúc \0 cho ct  /*Kí tự chuyển dạng là %s*/
    Như các bạn có thể thấy, ý nghĩa của tham số d…d có thể chia làm hai trường hợp
    - Trường hợp 1: Nếu tham số d...d vắng mặt hoặc nếu giá trị củanó lớn hơn hay bằng độ dài của trường vào tương ứng thì toàn bộ trường vào sẽ được đọc, nội dung của nó được dịch và được gán cho địa chỉ tương ứng (nếu không có dấu *)
    - Trường hợp 2: Nếu giá trị của d…d nhỏ hơn độ dài của trường vào tương ứng thì chỉ phần đầu của trường có kích cỡ bằng d…d đựơc đọc, được dịch và được gán cho địa chỉ tương ứng. Phần còn lại của trường sẽ được xem xét bởi các đặc tả và đối tương ứng tiếp theo.
    Ở đây nếu chú ý các bạn cũng sẽ thấy trước biến ch, và ct không có kí tự &. Vì trong C không có khái niệm chuỗi, chuỗi thực chất là một mảng kí tự có kí tự cuối cùng là \0, theo quy ước tên biến mảng sẽ chứa địa chỉ bắt đầu của một mảng chính vì vậy ở đây ch hay ct tương ứng với &ch[0] và &ct[0].
    (Về khái niệm trường vào xin xem phần 4 dưới đây)
    4) Dòng vào và trường vào
    Dòng vào là một dãy kí tự liên tiếp nhau ( bao gồm cả các khoảng trắng ) trên thiết bị vào (ở đây, khoảng trắng đựơc hiểu là dấu cách, dấu tab hoặc ký hiệu xuống dòng \n). Khi đó các khoảng trắng được xem là dấu phân cách giữa các trường vào, còn mỗi trường vào được xem là một dãy kí tự khác khoảng trắng. Theo định nghĩa khoảng trắng ở trên để nhập sso liều từ bàn phím ta có thể theo nhiều cách khác nhau.
    Ví dụ: Xét đoạn chương trình nhập 3 sô nguyên
    C Code:
    1. int a,b,c;
    2. scanf("%d%d%d",&a,&b,&c);
    3.  
    4. Khi nhập dữ liệu có thể theo một trong 4 cách
    5. Cách 1: Đưa ba số lên cùng một dòng, các số được phân cách bằng các dấu cách hoặc dấu tab
    6. Cách 2: Đưa ba số lên ba dòng khác nhau.
    7. Cách 3: Hai số đầu trên một dòng, số thứ ba trên dòng tiếp theo
    8. Cách 4: Số thứ nhất trên một dòng, hai số sau trên dòng tiếp theo.
    9.  theo.
    5) Kí tự chuyển dạng
    Các kí tự chuyển dạng xác định cách thức dò đọc các kí tự trên dòng vào cũng như phương pháp chuyển dịch thông tin đọc được trước khi gán nó theo các địa chỉ tương ứng. Cách dò đọc thứ nhất là theo trường vào, khi đó các khoảng trắng bị bỏ qua, cách này áp dụng với hầu hết các trường hợp. Cách dò đọc thứ hai là đọc theo kí tự, khi đó các khoảng trắng cũng được xem xét bình đẳng như các kí tự khác. Phương pháp dò đọc thứ hai chỉ xảy ra khi ta sử dụng một trong ba kí tự chuyển dạng sau đây:
    c, […], [^…]
    Dưới đây là danh sách các ký tự chuyển dạng và ý nghĩa của chúng
    c Vào một kí tự, đối tương ứng là con trỏ kí tự. Có xét kí tự khoảng trắng
    d Vào một gái trị kiểu int, đối tương ứng là con trỏ kiểu int, trường vào phải là số nguyên
    ld Vào một giá trị kiểu long, đối tương ứng là con trỏ kiểu long, trường vào phải là số nguyên
    o Vào một giá trị kiểu int hệ 8, đối tương ứng là con trỏ kiểu int, trường vào phải là số nguyên hệ 8
    lo Vào một giá trị kiểu long hệ 8, đối tương ứng là con trỏ kiểu long, trường vào phải là số nguyên hệ 8
    x Vào một giá trị kiểu int hệ 16, đối tương ứng là con trỏ kiểu int, trường vào phải là số nguyên hệ 16
    lx Vào một giá trị kiểu long hệ 16, đối tương ứng là con trỏ kiểu long, trường vào phải là số nguyên hệ 16
    f hay e Vào một giá trị kiểu float, đối tương ứng là con trỏ kiểu float, trường vào phải là số dấu phẩy động
    lf hay le Vào một giá trị kiểu double, đối tương ứng là con trỏ kiểu double, trường vào phải là số dấu phẩy động.
    s Vào một xâu kí tự, đối tương ứng là con trỏ kiểu chả trỏ tới một vùng nhớ đủ lớn để nhận được xâu và dấu kết thúc \0 sẽ được tự động thêm vào, trường vào là dãy kí tự bất kỳ không chứa các dấu cách và dấu xuống dòng \n
    [dãy kí tự] Các kí tự trên dòng vào sẽ lần lượt được đọc cho đến khi nào gặp một kí tự không thuộc tập các kí tự đặt trong hai dấu []. Đối tương ứng phải là con trỏ kiểu char trỏ tới một vùng nhớ đủ lớn, trường vào là dãy kí tự bất kì (khoảng trắng được xét như kí tự khác)
    [^dãy kí tự] Các kí tự trên dòng vào sẽ lần lượt đựơc đọc cho đến khi nào gặp một kí tự thuộc tập các kí tự đặt trong
    hai dấu [^]. Đối tương ứng phải là con trỏ kiểu char trỏ tới một vùng nhớ đủ lớn, trường vào là dãy kí tự bất kì ( khoảng trắng được xét tới như ký tự khác)
    Để minh hoạ cho hai loại kí tự chuyển dạng cuối cùng, các bạn có thể xem ví dụ dưới đây, các kí tự chuyển dạng còn lại sử dụng không có gì đặc biệt
    C Code:
    1. int a,b;
    2. char ch[10], ck[10];
    3. scanf("%d%[0123456789]%[^0123456789]%3d",&a,ch,ck,&b);
    4.  
    5. Với dòng vào
    6.    35 13145 XYZ 584235
    7. Sẽ gán:
    8. 35 cho a
    9. Xâu "13145" cho ch
    10. Xâu "XYZ" cho ck
    11. 584 cho b.

    6) Giá trị của hàm: Hàm scanf trả về một số nguyên băng số các giá trị nhận được
    7) Vài điều lưu ý:
    - Việc ra khỏi hàm scanf chuẩn để trở về chương trình chứa lời gọi nó sẽ xảy ra khi :
    + Hoặc xét hết các đặc tả
    + Hoặc xét hết các đối
    + Hoặc gặp một sự không tương thích giữa đặc tả và đối tương ứng.
    - Để việc nhập số liệu được chính xác ta nên làm theo các yêu cầu sau:
    + Số đối, số đặc tả và số trường vào phải bằng nhau
    + Giữa đối, đặc tả và trường vào cần có sự phù hợp như đã chỉ ra ở điểm 5.

  4. #4
    Ngày gia nhập
    12 2006
    Bài viết
    72

    Em xin đóng góp chút kiến thức về các khái niệm sơ khai dìng trong C.
    Vì bác admin và hailoc12 đã đè cập tới các hàm xuất nhập nên em cũng xin bổ xung thêm về cách thức tổ chúc,cấp phát bộ nhớ đối với các biến trong C
    Kiểu dữ liệu trong C
    1, KIỂU CHAR
    Khi gặp khai báo kiểu này, C "nói": anh sẽ cấp cho chú vùng nhớ có dung lượng 8 bit=1 byte để chú biểu diễn các kí tỰ trong bảng mã ASCII_bảng mã có thể biểu diễn được 256 kí tự.
    tiếp theo: có 2 kiểu char chú muốn kiểu nao?:
    +)signed char:biểu diễn một số nguyên từ -128-->127
    vd:
    C Code:
    1. //
    2.                       #include<stdio.h>
    3.                       #include<conio.h>
    4.                       void main()
    5.                           {
    6.                             char ch; //cấp cho ch 1 byte và là kiểu signed char
    7.                             ch=15; // giá trị 15 cho ch
    8.                             printf("\n %c",ch); //in ra màn hình kí tự tương ứng của ch trong bảng mã ASCII
    9.                             getch();
    10.                            }
    11.                           kết quả hiện lên màn hình: *
    +)unsigned char: cũng giống signed char nhưng biểu diễn số nguyên giá trị từ 0-->255
    Mình sẽ viết code của chương trình xem các kí tự biểu diễn của mã ASCII :
    C Code:
    1. //
    2.      #include<stdio.h>
    3.      #include<conio.h>
    4.      void main()
    5.      {
    6.        char ch;
    7.        for(ch=-128;ch<=127;ch++)
    8.           {
    9.              if(ch%20==0)
    10.              {
    11.                getch();
    12.                clrscr();
    13.              }  
    14.              printf("\n\n ch= %d la %c",ch,ch);
    15.           }
    16.        getch();
    17.      }
    Kiểu kí tự chỉ biể diễn được một kí tự trong ASCII,nhưng để biểu thị những số có 2 chữ số thì ta phải dùng các kiểu dữ liệu khác.
    2. KIỂU NGUYÊN
    Chú này hơi rắc rối hơn chú char một tí
    kiểu này chia thành 3 loại: số nguyên ngắn,dài và không đấu(thêm usnigned)
    a,số nguyên ngắn:
    khai báo: +)int n; // n được cấp 2 byte để biểu diễn giá trị số từ -32768 đến 32767
    +)usigned int n; // n được cấp phát 2 byte để biểu diễn giá trị số từ 0 đến 65535
    b,số nguyên dài:
    khai báo: +) long[int] n; //n được cấp phát 4 byte để biểu diễn giá trị từ -2^16 đến 2^16;
    +)unsigned long[int] n; //n được cấp phát 4 byte để biểu diễn số có giá trị từ 0 đến 2^32.
    3.KIỂU DẤU PHẨY ĐỘNG(HAY KIỂU THẬP PHÂN)
    Để biểu diễn các số thập phân mà kiểu nguyên không làm được
    Có 3 loại: float, double và long double
    khai báo:
    +) float f; //f được cấp phát 4 byte để biểu diễn các giá trị số từ 3.4E-38-->3.4E+38 với 7-8 chữ số có nghĩa
    +) double f;// f được cấp phát 8 byte để biểu diễn các giá trị số từ 31.7E-308-->1.7E+308 với 15-16 chữ số có nghĩa
    +) long double f; //f được cấp phát 10 byte để biểu diễn các giá trị số từ 3.4E-4932-->1.1E+4932 với 17-18 chữ số có nghĩa
    đây có lẽ là 3 kiểu dữ liệu cơ bản nhất của C,em xin tạm dừng bài viết của mình ở đây,hẹn gặp lại các đồng chí
    Đã được chỉnh sửa lần cuối bởi thangtran : 19-12-2006 lúc 02:40 PM.

  5. #5
    Ngày gia nhập
    12 2006
    Bài viết
    72

    I. Các khái niệm ban đầu về mảng
    1.tại sao phải dùng mảng?
    -Có những chương trình khi viết cần phải dùng nhiều thuộc tính khác nhau,mỗi thuộc tính lại có nhiều biến ,nếu chỉ dùng những biến có kiểu dữ liệu cơ bản như số nguyên,số thực... thì vấn đề quản lí cũng như sử dụng các biến trở nên khá phức tạp khiến chương trình chạy chậm,vì thế C định nghĩa kiểu dữ liệu có tên là mảng để giải quyết khó khăn này.
    -ngoài ra mảng còn phát huy tác dụng trong việc đọc ,ghi dữ liệu một cách hiệu quả,nhanh chóng
    đó cũng chỉ là ý kiến của riêng cá nhân em,bác nào có cao kiến xin vui lòng đóng góp để em có dịp học tập
    2.mảng là gì?
    - là một tập hợp nhiều phần tử có cùng kiểu giá trị hay thuộc tính nào đó, mỗi phần tử của mảng có thể coi là một biến,và chúng có thể chứa giá trị.
    3.Có bao nhiêu loại mảng?
    -mảng có 2 loại chính hay được dùng là mảng một chiều và mảng 2 chiều
    -Ngoài ra có bao nhiêu kiểu biến thì cũng có tưng ấy kiểu mảng
    ví dụ:
    +Tương ứng với biến kiểu nguyên có mảng nguyên một chiều và mảng nguyên 2 chiều
    + Tương ứng với biến kiểu float có mảng thực một chiều và mảng thực 2 chiều...
    4.Các đại lượng liên quan tới mảng
    Thường thường khi xét mảng ta xét mảng một chiều và hai chiều,còn mảng nhiều chiều được xây dựng qua các đặc điểm và tính chất của 2 loại mảng trên.
    -mảng 1 chiều:
    +)khai báo : kiểu mảng tênmảng[kích thước của mảng];
    kiểu mảng: là kiểu dữ liệu cơ sở
    kích thước mảng:số phần tử chứa trong mảng
    +)chỉ số mảng: Sau khi được khai báo các phần tử của mảng được đánh số thứ tự từ 0 đến n-1(n:số phần tử trong mảng) và kí hiệu a[i] với i là phần tử thứ i trong mảng.
    +)Cấp phát bộ nhớ: mảng sẽ được cấp phát một lượng bộ nhớ bằng tổng bộ nhớ cần cấp phát cho từng phần tử
    ví dụ: xét mảng nguyên 1 chiều a có 15 phần tử thì a được:
    khai báo: int a[10];
    chỉ số: a[0],a[1],a[2],a[3],...,a[9]
    cấp phát bộ nhớ: 2 byte X 10=20 byte
    -mảng 2 chiều:
    tương tự mảng một chiều ta cũng có:
    +)khai báo: kiểu mảng tênmangr[kích thước hàng][kích thước cột]
    +)chỉ số mảng: mảng 2 chiều được đánh chỉ số tương tự như ma trận 2 chiều
    +) cấp phát bộ nhớ: tương tự như mảng một chiều, bộ nhớ được cấp phát bang tổng bộ nhớ cấp phát cho từng phần tử.
    Ví dụ: xét mảng nguyên 2 chiều:
    Khai báo: int a[10][10]
    Chỉ số: a[0][0],a[0][1],..a[1][0],..a[9][9]
    Cấp phát bộ nhơ: mảng có 10X10= 100 phần tử=> được cấp phát vùng nhớ là 100X 2=200 byte

    II.Các bài toán cơ bản liên quan tới mảng: Các bác có thể đọc ở mục NHỨNG BÀI TOÁN CƠ BẢN CỦA C do bác admin viết,ở đó có khá đầy đủ những bài toán về mảng: đếm số kí tự của một mảng,các bài toán ma trận,các bài toán về chuỗi,ở đây em xin có một bài toán nhỏ:
    Yêu cầu: 1,nhập một chuỗi kí tự có tối đa 100 kí tự bất kì
    2,nhập tiếp một kí tự bất kì
    3,tìm xem kí tự đó có trong chuỗi hay không?
    4,số làn xuất hiện kí tự đó trong chuỗi
    5,xuất lên màn hình kêt quả
    Code:
    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. #include<string.h>
    4. #include<ctype.h>
    5.     void main()
    6.     {
    7.         char str[100],kt,nl;
    8.         int n,i,d;
    9.         nl:
    10.         clrscr(); // xóa màn hình
    11.         printf("\n Nhap chuoi ki tu: ");gets(str);  //nhập chuỗi có cả dấu cách
    12.         fflush(stdin); //xóa bộ đệm
    13.         n=strlen(str);
    14.         printf("\n nhap ki tu can kiem tra: ");scanf("%c",&kt);
    15.         d=0;
    16.         for(i=0;i<n;i++)
    17.            if(str[i]==kt) d++;
    18.         if(d==0) printf("\n ki tu khong co trong chuoi");
    19.         else printf("\n ki tu xuat hien trong chuoi %d lan",d);
    20.         getch();
    21.         printf("\n ban co muon nhap lai khong?(c/k)");scanf("%c",&nl);
    22.         nl=getch();
    23.         if(toupper(nl)=='C') goto nl;
    24.  
    25.     }
    Trên đây là những kiến thức cơ bản về mảng mà em được biết,mong các bác chỉ giáo để bài viết được hoàn thiện.
    Đã được chỉnh sửa lần cuối bởi thangtran : 19-12-2006 lúc 02:39 PM.

  6. #6
    Ngày gia nhập
    10 2007
    Nơi ở
    Thành phố Hồ Chí Minh
    Bài viết
    2

    Mặc định Hằng và biến kiểu e

    Hôm trước em thấy các bác viết về mảng và các kiểu dữ liệu trong C rồi nên hôm nay em viết về hằng và kiểu enum !
    I - Hằng :
    1 - Hằng dấu phẩy động (float và double): Hằng được viết theo 2 cách
    Cách 1 : Hằng được biểu diễn dưới dạng thập phân .Số gồm 2 phần : Phần nguyên và phần thập phân
    Vd : 158.12 , -68.134
    Chú ý : Phần nguyên hay phần thập phân có thể vắng mặt nhưng dấu chấm thì không thể thiếu
    Vd : Có thể viết như sau
    15. , .68
    - Nếu bạn viết thiếu dấu chấm máy sẽ hiểu là hằng int hoặc long
    Cách 2 : Hằng được biểu diễn dưới dạng khoa học hay dạng mũ .Số cũng gồm 2 phần : Phần định trị và phần bậc .Phần định trị là một số nguyên hoặc một số thực dạng thập phân ,phần bậc là một số nguyên .Hai phần cách nhau bởi kí tự e hoặc E .
    Vd :
    179.65e-4 = 0.17965
    -46.23e-6 = -0.000004623
    1e9 = 1000000000.0
    - Kí tự e và phần bậc n có thể hiểu là 10 mũ n (n có thể là số âm )
    Vd :
    1e9 = 1 x 10 mũ 9 = 1000000000.0

    2 - Hằng int : là số nguyên có giá trị trong khoảng từ -32768 -> 32767
    Vd : -79 , 468 ,25
    Chú ý : phân biệt hằng nguyên với hằng thực (dấu phẩy động)
    Vd :
    25 là hằng nguyên
    25.0 là hằng thực (dấu phẩy động)
    3 - Hằng long : được viết theo cách thêm kí tự "l" hoặc "L" vào sau đuôi hằng int dưới dang :
    số nguyên l hoặc số nguyên L
    Vd : 25l và 25L là hằng long
    - Một số nguyên vượt qua giới hạn của hằng int cũng đc coi là hằng long
    Vd : 654897L , 654897l và 654897 là 3 hằng long cùng giá trị
    4 - Hằng int hệ 8 : được viết theo cách
    0c1c2c3...
    - Ở đây c1 ,c2 ,c3 ... ,ci là một số trong tập { 0, 1 , 2 , 3 , 4 , 5 , 6 , 7 }
    Vd :
    0643 là một hằng nguyên hệ 8 .Giá trị của nó trong hệ 10 là
    6 x 8 x 8 + 4 x 8 +3 = 419
    5 - Hăng int hệ 16 : được viết theo cách
    0xc1c2c3... hoặc 0Xc1c2c3...
    - Trong đó c1 ,c2 ,c3 ... ,ci là một số trong tập { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , a (A) , b (B) , c (C) , d (D) , e (E) }
    Vd : 0xc5 , 0XC5 là 2 hằng int hệ 16 như nhau
    Giá trị của chúng trong hệ 10 là :
    0xc5 = 0XC5 = 13 x 16 + 5 = 213
    Chú ý : không có dấu khoảng trắng giữa 25L , 0643 , 0xc5
    6 - Hằng kí tự : là một kí tự riêng biệt được viết trong hai dấu nháy đơn '...'
    Vd : 'a'
    - Giá trị của 'a' chính là mã ASCII của chữ a như vậy gía trị của 'a' = 97
    - Hằng kí tự có thể tham gia vào các phép toán như mọi hằng khác
    Vd : 'a' - 'A' = 97(a) - 65(A) = 32
    - Hằng kí tự còn có thể viết theo cách :
    '\c1c2c3'
    trong đó c1c2c3 là một số int hệ 8 mà giá trị của nó trong hệ 10 bằng mã ASCII của kí tự cần biểu diễn
    Vd : 'a' có mã ASCII là 97 đổi qua hệ 8 là 0141 vậy hằng 'a' có thể viết dưới dạng '\0141'
    - Cách viết này dùng để biểu diễn một số kí tự đặc biệt như :
    Cách viết Kí tự
    '\'' '
    '\"' "
    '\\' \
    '\n' \n ( xuống dòng )
    '\0' \0 ( null )
    '\t' Tab
    '\b' Backspace
    '\r' CR ( về đầu dòng )
    '\f' LF ( sang trang )
    ...
    Chú ý :
    - Cần phân biệt hằng kí tự '0' với '\0' . Hằng kí tự '0' biểu diễn số 0 với mã 48 ,còn hằng '\0' biểu diễn kí tự \0 ( null ) có mã 0
    - Hằng kí tự thực sự là số nguyên , vì vậy ta có thể dùng các số nguyên hệ 10 để biểu diễn kí tự
    Vd :
    + Lệnh printf ("%c%c",65,66); sẽ in ra AB
    + Lệnh printf ("%c%c%c",7,7,7); sẽ phát ra 3 tiếng chuông
    7 - Hằng xâu kí tự : là một dãy các kí tự bất kỳ được đặt trong dấu "..."
    Vd :
    "TurboC"
    "" /* xâu rỗng */
    - Xâu kí tự được lưu trữ trong máy dưới dạng một mảng có các phần tử là các kí tự riêng biệt .Trình biên dịch tự động thêm kí tự null (\0) vào cuối mỗt xâu ( kí tự \0 được xem là dấu hiệu kết thúc của một xâu kí tự )
    Chú ý : Cần phân biệt 'a' và "a" . 'a' là một hằng kí tự được lưu trữ trong một byte ,còn "a" là một hằng xâu kí tự được lưu trữ trong một mảng 2 phần tử : phần tử thứ nhất chứa kí tự 'a' và phần tử thứ 2 chứa kí tự \0 ( null )
    8 - Toán tử #define :
    - Toán tử #define dùng để đặt tên cho hằng
    Vd : #define Pi 3.141593
    đặt tên cho hằng float ( dấu phẩy động ) có giá trị 3.141593 là Pi
    - Toán tử #define có dạng :
    #define ( tên ) ( giá trị được đặt tên )

    9 - Ứng dụng của các hằng :
    - Các hằng kiểu int ,long , float ,double thường dùng làm giá trị trong các phép tính toán
    - Các hằng kí tự ,hằng xâu kí tự thường được dùng để diễn tả các thông tin văn bản như lời giả thích ,chỉ dẫn ...
    Chương trình minh họa :Cách sử dụng các hằng

    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3.  
    4.  
    5. void main()
    6. {
    7. clrscr();\\Xóa màn hình
    8. printf ("\nHang dau phay dong");
    9. printf ("\n%f\n%f\n%f\n%f",167.354,-1676.15467,1e-4,5e4);
    10. printf ("\nHang nguyen he 10");
    11. printf ("\n%d\n%d",658,164);
    12. printf ("\nHang nguyen he 8");
    13. printf ("\n%o\n%o",465,154);
    14. printf ("\nHang nguyen he 16");
    15. printf ("\n%x\n%x",465,154);
    16. \\Hai câu lệnh trên cho ta giá trị của 465154 trong hệ 816
    17. printf ("\nHang ki tu");
    18. printf ("\n%c\n%c\n%c\n%c\n%c",'C','h','a','o');
    19. printf ("\Hang xau ki tu");
    20. printf ("\n%s","Chao");
    21. getch();\\Máy sẽ dừng để ta xem kết quả và kết thúc chương trình khi ta ấn một nút bất kì
    22. }
    Chương trình minh họa cách sử dụng toán tử #define .Chương trình tính chu vi và diện tích hình tròn

    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #difine Pi 3.141593\\Định nghĩa "Pi"=3.141593
    4.  
    5. void main()
    6. {
    7. float r,p,s;
    8. clrscr();
    9. printf ("\nNhap ban kinh r =");
    10. scanf ("%f",&r);
    11. p=(2*r)*Pi;
    12. s=(r*r)*Pi;
    13. printf ("\np=%f\ns=%f",p,s);
    14. getch();
    15. }
    II - Kiểu enum
    1 - Các dạng của câu lệnh enum : Câu lệnh enum có thể viết theo 4 dạng
    enum tk { pt1 , pt2 , ... } tb1 , tb2 , ... ; (1)
    enum tk { pt1 , pt2 , ... }; (2)
    enum { pt1 , pt 2 , ... } tb1 , tb2 , ... ;(3)
    enum { pt1 , pt2 , ... }; (4)
    - Trong đó
    tk là tên kiểu enum ( một kiểu dữ liệu mới )
    pt1 , pt2 , ... là tên các phần tử
    tb1 , tb2 , ... là tên biến kiểu enum
    2 - Tác dụng của câu lệnh enum :
    - Câu lệnh 1 có các chức năng như sau :
    a . Định nghĩa các marco ( giống toán tử #define ) pt1 , pt2 , ... với các giá trị nguyên liên tiếp tính từ 0 .Chức năng này tương đương với các câu lệnh sau :
    #define pt1 0
    #define pt2 1
    ...
    b . Định nghĩa kiểu enum có tên là tk . Sau này có thể dùng cụm từ "enum tk" để khai báo các biến enum theo mẫu :
    enum tk x,y,z
    c. Khai báo các biến kiểu enum có tên là tb1 , tb2 , ...
    - Câu lệnh 2 có các chức năng a và b
    - Câu lệnh 3 có các chức năng a và c
    - Câu lệnh 4 chỉ có chức năng a
    3 - Biến kiểu enum :
    - Biến kiểu enum thực chất là biến nguyên nó cũng được cấp 2 byte bộ nhớ và nó có thể nhận một giá trị nguyên bất kì . Mục đích chính của biến kiểu enum là tạo ra các marco , các kiểu biến gợi nhớ .
    Vd : Để làm việc với các ngày trong tuần ta có thể dùng kiểu week_day và biến day như sau :
    enum week_day { sunday,monday,tuesday,wedsday,thursday,friday,satu rday } day

    Đó là những gì em biết về hằng và kiểu enum ,có gì sai xót mong được chỉ giáo !

    -----------
    Cảm ơn bài viết của bạn. Nhớ để code vào tag nha bạn.
    ht961711
    Đã được chỉnh sửa lần cuối bởi Forlorn_hope : 24-10-2007 lúc 07:34 PM.

  7. #7
    Ngày gia nhập
    10 2007
    Nơi ở
    Thành phố Hồ Chí Minh
    Bài viết
    2

    Bài viết về toán tử #sizeof và các phép toán ,phép thao tác bit ,phép toán quan hệ và logic

    I - Toán tử #sizeof :

    - Toán tử #sizeof dùng để tính kích thước của một kiểu dữ liệu ,đối tượng dữ liệu bằng byte .Nó có dạng :
    sizeof ( kiểu dữ liệu )
    sizeof ( đối tượng dữ liệu )
    - Kiểu dữ liệu có thể là kiểu chuẩn như kiểu int ,float ... và kiểu đc định nghĩa bằng typedef ,enum ...
    Đối tượng dữ liệu bao gồm biến ,mảng ...
    - Toán tử thường đc dùng để xác định số phần tử của mảng trong cơ chế khởi đầu
    Ví dụ :
    ...
    double x[] = { 16 , 8 , 79.5 };
    int n = sizeof(x)/sizeof (double ) \\ Số phần tử của mảng x đc lưu trong biến n


    II - Các phép toán số học ,phép thao tác bit ,phép toán quan hệ và logic

    - Trong C thành phần không thể thiếu trong các chương trình là các biểu thức .Biểu thức là sự kết hợp giữa những phép toán và một đại lượng có giá trị nào đó như hằng ,biến ,mảng ... để diễn đạt một công thức toán học nào đó .Mỗi biểu thức đều có một giá trị và nói chung cái gì có giá trị thì được coi là biểu thức .Hôm nay ta sẽ nói về các phép toán ,trong C các phép toán có thể phân ra làm 3 loại chình là : phép toán số học ,phép thao tác bit ,phép toán quan hệ và logic .


    1 - Phép toán số học :


    Phép toán Ý nghĩa Ví dụ

    + Phép cộng a+b

    - Phép trừ a-b

    * Phép nhân a*b

    / Phép chia a/b

    ( Chia số nguyên kết quả sẽ bỏ phần thập phân )

    % Phép lấy phần dư a%b

    ( Cho phần d­ư cuả phép chia a cho b nếu a chia hết cho b thì phần dư bằng 0 )

    Phép toán - một ngôi

    Ví dụ : -(a + b) sẽ đảo ngược giá trị của phép cộng (a + b)

    - Các phép toán + và - có cùng thứ tự ưu tiên nhưng có thứ tự ưu tiên nhỏ hơn của các phép toán * , / ,%

    - Các phép toán số học được thực hiện từ trái qua phải


    2 - Phép thao tác các bit :


    - Đây là các tác vụ thường gặp trong assembly (ít gặp trong các ngôn ngữ bậc cao ) ,nó cho phép sử lý đến từng bit của một số nguyên .Các tác vụ này ( không dùng cho kiểu float và double ) gồm :

    Phép toán Ý nghĩa Ví dụ
    & Phép và (AND) theo bit a & b
    | Phép hoặc (OR) theo bit a | b
    ^ Phép loại trừ (XOR) theo bit a ^ b
    << Dịch trái a << 4
    >> Dịch phải a >> 4
    ~ Lấy phần bù theo bit ~ a

    Giải thích thêm :
    1 & 1 = 1
    1 & 0 = 0
    0 & 1 = 0
    0 & 0 = 0

    1 | 1 = 1
    1 | 0 = 1
    0 | 1 = 1
    0 | 0 = 0

    1 ^ 1 = 0
    1 ^ 0 = 1
    0 ^ 1 = 1
    0 ^ 0 = 0

    a << n = a * ( 2 mũ n )
    a >> n = a / ( 2 mũ n )
    ~ 1 = 0
    ~ 0 = 1

    Chú ý : Cũng như assembly ,C phân biệt :
    + Các phép dịch chuyện số học : Thực hiện trên giá trị int ,bảo toàn bit dấu ( bit cực trái )
    + Các phép dịch chuyển logic : Thực hiện trên các giá trị unsigned ,bit dấu không đóng vai trò gì cả ,cũng bị dịch chuyển như các bit khác


    3 - Phép toán quan hệ và logic :
    - Các phép toán quan hệ và logic trong C chỉ có 2 giá trị : giá trị đúng là 1 và giá trị sai là 0 .Nói cách khác nếu điều kiện đưa ra là đúng thì phép toán nhận giá trị là 1 ,trái lại ta nhận giá trị là 0

    Các phép tóan quan hệ là :

    Phép toán Ý nghiã Ví dụ

    > So sánh lớn hơn a>b

    4>5 có giá trị 0

    >= So sánh lớn hơn hoặc bằng a>=b

    6>=2 có giá trị 1

    < So sánh nhỏ hơn a<b

    6<=7 có giá trị 1

    <= So sánh nhỏ hơn hoặc bằng a<=b

    8<=5 có giá trị 0

    == So sánh bằng nhau a==b

    6==6 có giá trị 1

    != So sánh khác nhau a!=b

    9!=9 có giá trị 0

    - 4 phép toán đầu có cùng thứ tự ưu tiên ,2 phép toán sau có cùng thứ tự ưu tiên nhưng nhỏ hơn 4 phép toán đầu

    - Các phép toán quan hệ có thứ tự ưu tiên nhỏ hơn các phép toán số học nên biểu thức :

    i < (n-1)

    có thể hiểu là :

    i < (n-1)
    - Trong C sử dụng 3 phép toán logic là :
    + Phép phủ định 1 ngôi !
    Ví dụ : a khác 0 thì !a = 0
    a bằng 0 thì !a = 1
    + Phép và (AND) &&
    + Phép hoặc (OR) ||

    a b a&&b a||b
    khác 0 khác 0 1 1
    khác 0 bằng 0 0 1
    bằng 0 khác 0 0 1
    bằng 0 bằng 0 0 0

    - Các phép toán quan hệ có thứ tự ưu tiên nhỏ hơn ! (phép phủ định một ngôi) nhưng lớn hơn so với phép && và phép || ,nên những biểu thức kiểu như :
    (a && b) < (a || b)
    có thể viết là :
    a && b < a || b
    - Tuy nhiên theo tôi các bạn nên viết theo kiểu có dấu ngoặc vì như thế biểu thức sẽ dễ hiểu hơn ,trong trường hợp có lỗi thì việc sửa lỗi sẽ dễ dàng hơn nhiều và việc dùng dấu ngoặc sẽ diễn tả chính xác điều mà bạn muốn nói .Hơn nữa việc nhớ nhiều phép toán như thế sẽ mất nhiều thời gian nên tôi chỉ cần nhớ những phép toán cơ bản và phép toán "()" có thứ tự ưu tiên lớn nhất
    Chú ý :
    - Cả a và b có thể nguyên hoặc thực hoặc có thể là một biểu thức

    Hic !Do kiến thức có hạn nên nếu còn điều gì sai sót mong đc chỉ giáo
    (Chỉ giáo thôi chứ đừng del bài)
    Học đến đâu viết đến đó hi vọng học hết phần cơ bản của C cũng đc 30 bài viết

  8. #8
    Ngày gia nhập
    11 2007
    Bài viết
    40

    Các Cấu Trúc Điều Khiển
    Một chương trình thường không chỉ bao gồm các lệnh tuần tự nối tiếp nhau. Trong quá trình chạy nó có thể rẽ nhánh hay lặp lại một đoạn mã nào đó. Để làm điều này chúng ta sử dụng các cấu trúc điều khiển.
    Cùng với việc giới thiệu các cấu trúc điều khiển chúng ta cũng sẽ phải biết tới một khái niệm mới: khối lệnh, đó là một nhóm các lệnh được ngăn cách bởi dấu chấm phẩy ( nhưng được gộp trong một khối giới hạn bởi một cặp ngoặc nhọn: { và }.
    Hầu hết các cấu trúc điều khiển mà chúng ta sẽ xem xét trong chương này cho phép sử dụng một lệnh đơn hay một khối lệnh làm tham số, tuỳ thuộc vào chúng ta có đặt nó trong cặp ngoặc nhọn hay không.
    1. Cấu trúc điều kiện: if và else
    Cấu trúc này được dùng khi một lệnh hay một khối lệnh chỉ được thực hiện khi một điều kiện nào đó thoả mãn. Dạng của nó như sau:
    Code:
    if (condition) statement
    trong đó condition là biểu thức sẽ được tính toán. Nếu điều kiện đó là true, statement được thực hiện. Nếu không statement bị bỏ qua (không thực hiện) và chương trình tiếp tục thực hiện lệnh tiếp sau cấu trúc điều kiện.
    Ví dụ, đoạn mã sau đây sẽ viết x is 100 chỉ khi biến x chứa giá trị 100:
    C++ Code:
    1. if (x == 100)
    2.   cout << "x is 100";
    Nếu chúng ta muốn có hơn một lệnh được thực hiện trong trường hợp condition là true chúng ta có thể chỉ định một khối lệnh bằng cách sử dụng một cặp ngoặc nhọn { }:
    C++ Code:
    1. if (x == 100)
    2.  {
    3.   cout << "x is ";
    4.   cout << x;
    5.  }
    Chúng ta cũng có thể chỉ định điều gì sẽ xảy ra nếu điều kiện không được thoả mãn bằng cách sửu dụng từ khoá else. Nó được sử dụng cùng với if như sau:
    if (condition) statement1 else statement2
    Ví dụ:
    C++ Code:
    1. if (x == 100)
    2.   cout << "x is 100";
    3. else
    4.   cout << "x is not 100";
    Cấu trúc if + else có thể được móc nối để kiểm tra nhiều giá trị. Ví dụ sau đây sẽ kiểm tra xem giá trị chứa trong biến x là dương, âm hay bằng không.
    C++ Code:
    1. if (x > 0)
    2.   cout << "x is positive";
    3. else if (x < 0)
    4.   cout << "x is negative";
    5. else
    6.   cout << "x is 0";
    2. Các cấu trúc lặp
    Mục đích của các vòng lặp là lặp lại một thao tác với một số lần nhất định hoặc trong khi một điều kiện nào đó còn thoả mãn.
    2.1 Vòng lặp while .
    Dạng của nó như sau:
    Code:
    while (expression) statement
    và chức năng của nó đơn giản chỉ là lặp lại statement khi điều kiện expression còn thoả mãn.
    Ví dụ, chúng ta sẽ viết một chương trình đếm ngược sử dụng vào lặp while:
    C++ Code:
    1. // custom countdown using while
    2. #include <iostream.h>
    3. int main ()
    4. {
    5.   int n;
    6.   cout << "Enter the starting number > ";
    7.   cin >> n;
    8.   while (n>0) {
    9.     cout << n << ", ";
    10.     --n;
    11.   }
    12.   cout << "FIRE!";
    13.   return 0;
    14. }
    KẾt quả ra màn hình
    Code:
    Enter the starting number > 8
    8, 7, 6, 5, 4, 3, 2, 1, FIRE!
    Khi chương trình chạy người sử dụng được yêu cầu nhập vào một số để đếm ngược. Sau đó, khi vòng lặp while bắt đầu nếu số mà người dùng nhập vào thoả mãn điều kiện điều kiện n>0 khối lệnh sẽ được thực hiện một số lần không xác định chừng nào điều kiện (n>0) còn được thoả mãn.
    Chúng ta cần phải nhớ rằng vòng lặp phải kết thúc ở một điểm nào đó, vì vậy bên trong vòng lặp chúng ta phải cung cấp một phương thức nào đó để buộc condition trở thành sai nếu không thì nó sẽ lặp lại mãi mãi. Trong ví dụ trên vòng lặp phải có lệnh --n; để làm cho condition trở thành sai sau một số lần lặp.
    2.2. Vòng lặp do-while
    Dạng thức:
    Code:
    do statement while (condition);
    Chức năng của nó là hoàn toàn giống vòng lặp while chỉ trừ có một điều là điều kiện điều khiển vòng lặp được tính toán sau khi statement được thực hiện, vì vậy statement sẽ được thực hiện ít nhất một lần ngay cả khi condition không bao giờ được thoả mãn. Ví dụ, chương trình dưới đây sẽ viết ra bất kì số nào mà bạn nhập vào cho đến khi bạn nhập số 0.
    C++ Code:
    1. // number echoer
    2. #include <iostream.h>
    3. int main ()
    4. {
    5.   unsigned long n;
    6.   do {
    7.     cout << "Enter number (0 to end): ";
    8.     cin >> n;
    9.     cout << "You entered: " << n << "\n";
    10.   } while (n != 0);
    11.   return 0;
    12. }
    Kết quả
    Code:
    Enter number (0 to end): 12345
    You entered: 12345
    Enter number (0 to end): 160277
    You entered: 160277
    Enter number (0 to end): 0
    You entered: 0
    Vòng lặp do-while thường được dùng khi điều kiện để kết thúc vòng lặp nằm trong vòng lặp, như trong ví dụ trên, số mà người dùng nhập vào là điều kiện kiểm tra để kết thúc vòng lặp. Nếu bạn không nhập số 0 trong ví dụ trên thì vòng lặp sẽ không bao giờ chấm dứt.
    2.3 Vòng lặp for .
    Dạng thức:
    Code:
    for (initialization; condition; increase) statement;
    và chức năng chính của nó là lặp lại statement chừng nào condition còn mang giá trị đúng, như trong vòng lặp while. Nhưng thêm vào đó, for cung cấp chỗ dành cho lệnh khởi tạo và lệnh tăng. Vì vậy vòng lặp này được thiết kế đặc biệt lặp lại một hành động với một số lần xác định.
    Cách thức hoạt động của nó như sau:
    C++ Code:
    1. 1, initialization được thực hiện. Nói chung nó đặt một giá khí ban đầu cho biến điều khiển. Lệnh này được thực hiện chỉ một lần.
    2. 2, condition được kiểm tra, nếu nó là đúng vòng lặp tiếp tục còn nếu không vòng lặp kết thúc và statement được bỏ qua.
    3. 3, statement được thực hiện. Nó có thể là một lệnh đơn hoặc là một khối lệnh được bao trong một cặp ngoặc nhọn.
    4. 4, Cuối cùng, increase được thực hiện để tăng biến điều khiển và vòng lặp quay trở lại bước 2.
    Sau đây là một ví dụ đếm ngược sử dụng vòng for.
    C++ Code:
    1. // countdown using a for loop
    2. #include <iostream.h>
    3. int main ()
    4. {
    5.   for (int n=10; n>0; n--) {
    6.     cout << n << ", ";
    7.   }
    8.   cout << "FIRE!";
    9.   return 0;
    10. }
    Kết quả
    Code:
    10, 9, 8, 7, 6, 5, 4, 3, 2, 1, FIRE!
    Phần khởi tạo và lệnh tăng không bắt buộc phải có. Chúng có thể được bỏ qua nhưng vẫn phải có dấu chấm phẩy ngăn cách giữa các phần. Vì vậy, chúng ta có thể viết for (;n<10 hoặc for (;n<10;n++).
    Bằng cách sử dụng dấu phẩy, chúng ta có thể dùng nhiều lệnh trong bất kì trường nào trong vòng for, như là trong phần khởi tạo. Ví dụ chúng ta có thể khởi tạo một lúc nhiều biến trong vòng lặp:
    C++ Code:
    1. for ( n=0, i=100 ; n!=i ; n++, i-- )
    2. {
    3.   // cái gì ở đây cũng được...
    4. }
    Vòng lặp này sẽ thực hiện 50 lần nếu như n và i không bị thay đổi trong thân vòng lặp:

    n=0, i=100: Phần khởi tạo. Ban đầu n nhận giá trị 0, i nhận giá trị 100;
    n!=i: Phần điều kiện. Khi gặp điều kiện thị nó dừng.
    n++, i--: Thực thi việc tăng giảm theo mỗi vòng lặp.
    Đã được chỉnh sửa lần cuối bởi hung.tran : 25-11-2007 lúc 06:53 PM.

  9. #9
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,742

    Lâu lắm mới đọc lại bài này. Cho đến hôm nay Kevin mới không ngại để tuyên bố là: Kevin đã học lập trình C/C++ chỉ ở cộng đồng C Việt này, bắt đầu từ những dòng code "Hello C World" như trên mà không qua một trường lớp nào dậy cả.

    Công ty người Việt đã không chịu nhận Kevin vào làm, vì thế Kevin đã bôn ba đi làm việc với nhiều người ở nhiều nước khác nhau như Nga, Mỹ, Úc, Thái Lan, Trung Quốc, Horland,... và cũng đã có thời gian rất dài là nhân viên lập trình C/C++, PHP, CSS, Javascript cho công ty của Mỹ, làm việc tại văn phòng của họ ở Bangkok, Thái Lan cho đến khi bạo loạn xảy ra ở Bangkok. Hiện tại Kevin vẫn còn là chuyên viên làm việc từ xa về SEO cho một công ty của Úc. (Kevin là tên dùng để giao dịch và làm việc với Họ, và thấy mình cũng có duyên với tên đó nên đã đổi tên nick thành tên này)

    Bây giờ họ còn là những đối tác tốt đối với công ty của Kevin ở Việt Nam, và họ cũng có mong muốn Kevin tiếp tục làm việc với họ ở Úc với mức lương mà người Việt mong ước là khoảng $3000 - $5000/month (Trong trường hợp công việc ở Việt Nam gặp khó khăn). Còn Kevin thì muốn phát triển ở Việt Nam, bởi Việt Nam là quê hương, nơi mà Kevin đã xây dựng cộng đồng C Việt này!

    Các bạn thấy đó: C/C++ thật là đơn giản, và nó chẳng bao giờ lỗi thời! Những ai đang đọc bài viết này hãy đam mê và cố gắng để làm tốt hơn Kevin nhé! Kevin làm được, các bạn chắc chắn phải làm tốt hơn, vì các bạn được đào tạo và đã có sẵn cộng đồng C Việt này với số lượng bài viết cũng như số lượng người rất đông luôn sẵn sàng giúp bạn!

    Luôn nhớ rằng: Học không có nghĩa là đến trường, chúng ta hãy học một cách thực sự thay vì nghĩ học là đến trường để lấy bằng!
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

Các đề tài tương tự

  1. Mu Mới Ra - Mu Việt Mu Online 2013 Đông Nhất hiện nay
    Gửi bởi 210794 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 17-03-2013, 08:24 AM
  2. Mu Mới - Mu Việt - Mu Online Hay Nhất Mọi Thời đại
    Gửi bởi 210794 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 16-03-2013, 09:34 AM
  3. [ Vuaphapsu.com ] Games Online 3D Client Lần Đầu Tiên Xuất Hiện Tại Việt Nam Tháng 11/2012
    Gửi bởi zynrik trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 07-11-2012, 08:08 PM
  4. [ Vuaphapsu.com ] Games Online 3D Client Lần Đầu Xuất Hiện Tại Việt Nam 11/2012
    Gửi bởi zynrik trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 04-11-2012, 03:48 PM
  5. [ Vuaphapsu.com ] Games Online 3D Client Lần Đầu Xuất Hiện Tại Việt Nam 11/2012
    Gửi bởi zynrik trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 04-11-2012, 02:33 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn