2.2.1. Khai báo và sử dụng biến Một biến trước khi sử dụng phải được khai báo Cú pháp khai báo: kiểu_dữ_liệu tên_biến; Hoặc: kiểu_dữ_liệu tên_biến1, , tên_biếnN; Ví dụ: Khai báo một biến x thuộc kiểu số nguyên 2 byte có dấu (int), biến y, z,t thuộc kiểu thực 4 byte (float) như sau: int x; float y,z,t;
84 trang |
Chia sẻ: thanhle95 | Lượt xem: 517 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Bài giảng Tin học đại cương - Bài 2: Kiểu dữ liệu và biểu thức trong C - Nguyễn Thanh Hùng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
1TIN HỌC ĐẠI CƯƠNGPHẦN 2: LẬP TRÌNH BẰNG NGÔN NGỮ CBÀI 2: KIỂU DỮ LIỆU VÀ BIỂU THỨC TRONG C SCHOOL OF INFORMATION COMMUNICATION TECHNOLOGY VIỆN CÔNG NGHỆ THÔNG TINTs. Nguyễn Thanh Hùng2BÀI 2 KIỂU DỮ LIỆU VÀ BIỂU THỨC TRONG C 2.1. Các kiểu dữ liệu chuẩn trong C2.2. Khai báo và sử dụng biến, hằng2.3. Các lệnh vào ra dữ liệu với các biến2.4. Các lệnh vào ra khác2.5. Các phép toán trong C2.6. Biểu thức trong C2.7. Một số toán tử đặc trưng32.1. Các kiểu dữ liệu chuẩn trong CKiểu dữ liệuÝ nghĩaKích thướcMiền dữ liệuunsigned char Kí tự không dấu1 byte 0 255 char Kí tự có dấu1 byte-128 127unsigned intSố nguyên không dấu 42.1. Các kiểu dữ liệu chuẩn trong C 52.1. Các kiểu dữ liệu chuẩn trong C6BÀI 2 KIỂU DỮ LIỆU VÀ BIỂU THỨC TRONG C 2.1. Các kiểu dữ liệu chuẩn trong C2.2. Khai báo và sử dụng biến, hằng2.3. Các lệnh vào ra dữ liệu với các biến2.4. Các lệnh vào ra khác2.5. Các phép toán trong C2.6. Biểu thức trong C2.7. Một số toán tử đặc trưng72.2.1. Khai báo và sử dụng biếnMột biến trước khi sử dụng phải được khai báo Cú pháp khai báo: kiểu_dữ_liệu tên_biến;Hoặc: kiểu_dữ_liệu tên_biến1, , tên_biếnN;Ví dụ: Khai báo một biến x thuộc kiểu số nguyên 2 byte có dấu (int), biến y, z,t thuộc kiểu thực 4 byte (float) như sau: int x; float y,z,t;8Khai báo và khởi tạo giá trị cho biếnCú pháp:kiểu_dữ_liệu tên_biến = giá_trị_ban_đầu; Hoặc:kiểu_dữ_liệu biến1=giá_trị1, biếnN=giá_trịN; Ví dụ:int a = 3;// sau lenh nay bien a se co gia tri bang 3float x = 5.0, y = 2.6; // sau lenh nay x co gia // tri 5.0, y co gia tri 2.692.2.2. Khai báo hằngCách 1: Dùng từ khóa #define: Cú pháp: # define tên_hằng giá_trị Ví dụ:#define MAX_SINH_VIEN 50#define CNTT “Cong nghe thong tin” #define DIEM_CHUAN 23.5102.2.2. Khai báo hằngCách 2: Dùng từ khóa const :Cú pháp: const kiểu_dữ_liệu tên_hằng = giá_trị;Ví dụ:const int MAX_SINH_VIEN = 50;const char CNTT[20] = “Cong nghe thong tin”;const float DIEM_CHUAN = 23.5; 112.2.2. Khai báo hằngChú ý:Giá trị của các hằng phải được xác định ngay khi khai báo.Trong chương trình, KHÔNG thể thay đổi được giá trị của hằng.#define là chỉ thị tiền xử lý (preprocessing directive)Dễ đọc, dễ thay đổiDễ chuyển đổi giữa các nền tảng phần cứng hơnTốc độ nhanh hơn12BÀI 2 KIỂU DỮ LIỆU VÀ BIỂU THỨC TRONG C 2.1. Các kiểu dữ liệu chuẩn trong C2.2. Khai báo và sử dụng biến, hằng2.3. Các lệnh vào ra dữ liệu với các biến2.4. Các lệnh vào ra khác2.5. Các phép toán trong C2.6. Biểu thức trong C2.7. Một số toán tử đặc trưng132.3. Các lệnh vào ra dữ liệuC cung cấp 2 hàm vào ra cơ bản:printf() scanf()Muốn sử dụng 2 hàm printf() và scanf() ta cần khai báo tệp tiêu đề stdio.h:#include Hoặc #include “stdio.h”142.3.1. Hàm printfa. Mục đích và cú pháp:Mục đích:Hiển thị ra màn hình các loại dữ liệu cơ bản như: Số, kí tự và xâu kí tựMột số hiệu ứng hiển thị đặc biệt như xuống dòng, sang trang,15a. Mục đích và cú pháp (tiếp)Cú pháp:printf(xâu_định_dạng [, danh_sách_tham_số]);xâu_định_dạng: Là xâu dùng để qui định cách thức hiển thị dữ liệu ra màn hình máy tính.danh_sách_tham_số: Danh sách các biểu thức sẽ được hiển thị giá trị lên màn hình theo cách thức được qui định trong xâu_định_dạng.16a. Mục đích và cú pháp (tiếp)Trong xâu_định_dạng chứa:Các kí tự thông thường: Được hiển thị ra màn hình.Các nhóm kí tự định dạng: Xác định quy cách hiển thị các tham số trong phần danh_sách_tham_số.Các kí tự điều khiển: Dùng để tạo các hiệu ứng hiển thị đặc biệt như xuống dòng (‘\n’) hay sang trang (‘\f’)17a. Mục đích và cú pháp (tiếp)Ví dụ: Chương trình sau#include #include void main(){ int a = 5; float x = 1.234; printf(“Hien thi mot so nguyen %d và mot so thuc %f”,a,x); getch();} Sẽ cho ra kết quả: Hien thi mot so nguyen 5 va mot so thuc 1.23400018a. Mục đích và cú pháp (tiếp)Trong ví dụ trên:“Hien thi mot so nguyen %d và mot so thuc %f” là xâu_định_dạnga,x là danh_sách_tham_số%d dùng để báo cho máy biết rằng cần phải hiển thị tham số kiểu nguyên (biến a) %f dùng để báo cho máy cần hiển thị tham số tương ứng (biến x) theo định dạng số thực 19a. Mục đích và cú pháp (tiếp)Nhóm kí tự định dạng thứ k trong xâu_định_dạng dùng để xác định quy cách hiển thị tham số thứ k trong danh_sách_tham_số. Số lượng tham số trong Danh_sách_tham_số bằng số lượng nhóm các kí tự định dạng trong xâu_định_dạng. Trong ví dụ trên là 2.20a. Mục đích và cú pháp (tiếp)Mỗi nhóm kí tự định dạng chỉ dùng cho một kiểu dữ liệu Ví dụ: %d dùng cho kiểu nguyên %f dùng cho kiểu thựcNếu giữa nhóm kí tự định dạng và tham số tương ứng không phù hợp với nhau thì sẽ hiển thị ra kết quả không như ý. 21Một số nhóm định dạng phổ biếnNhóm kí tự định dạngKiểu dữ liệuKết quả%cint, charKí tự đơn lẻ%i, %dint, charSố thập phân%oint, charSố bát phân(không có 0 đằng trước)%x, %Xint, charSố hexa (chữ thường/chữ hoa)%uunsigned int/charSố thập phân22Một số nhóm định dạng phổ biến (2)Nhóm kí tự định dạngKiểu dữ liệuKết quả%ld, %lilongSố thập phân%lolongSố bát phân(không có 0 đằng trước)%lx, %LXlongSố hexa (chữ thường/chữ hoa)%luunsigned longSố thập phân23Một số nhóm định dạng phổ biến (2)Nhóm kí tự định dạngKiểu dữ liệuKết quả%schar *Hiển thị xâu kí tự kết thúc bởi ‘\0’%ffloat/doubleSố thực dấu phẩy tĩnh%e, %Efloat/doubleSố thực dấu phẩy động%Hiển thị kí tự %24b. Nhóm kí tự định dạngMột số nhóm kí tự định dạng phổ biến:25b. Nhóm kí tự định dạng (tiếp)26b. Nhóm kí tự định dạng (tiếp)27b. Nhóm kí tự định dạng (tiếp)C cho phép đưa thêm một số thuộc tính định dạng dữ liệu khác vào trong xâu định dạng như: Độ rộng để hiển thị (độ rộng tối thiểu) Căn lề trái Căn lề phải.28b.1. Độ rộng hiển thịĐối với số nguyên hoặc ký tự hoặc xâu ký tự:Có dạng %md, với m là số nguyên không âmVí dụ: Có số a = 1234 Lệnh: printf("%5d",a);//danh 5 cho de hien thi a printf(“\n%5d",34); Cho ra kết quả: 1234 34 ( kí hiệu cho dấu cách đơn (space) )29b.1. Độ rộng hiển thịĐối với số nguyên hoặc ký tự hoặc xâu ký tự: Ví dụ: printf("\n%3d %15s %3c", 1, "nguyen van a", 'g'); printf("\n%3d %15s %3c", 2, "tran van b", 'k');Kết quả:1nguyen van ag2tran van bk30b.1. Độ rộng hiển thịĐối với số thực: m, n là 2 số nguyên không âm %m.nf Báo rằng cần dành: m vị trí để hiển thị số thực n vị trí trong m vị trí đó để hiển thị phần thập phân.31b.1. Độ rộng hiển thịĐịnh dạng với dữ liệu là số thực (tiếp):Ví dụ: printf("\n%f",12.345); printf("\n%.2f",12.345); printf("\n%8.2f",12.345);Kết quả:12.34500012.3512.35 32b.1. Độ rộng hiển thịKhi số chỗ cần thiết để hiển thị nội dung dữ liệu lớn hơn trong định dạng: Tự động cung cấp thêm chỗ mới để hiển thị chứ không cắt bớt nội dung của dữ liệu.Ví dụ: a=1000 printf(“So a la: %1d”, a);Kết quả: So a la: 100033b.2. Căn lề phải, lề tráiCăn lề phải: Khi hiển thị dữ liệu, mặc định C căn lề phải Căn lề trái:Nếu muốn căn lề trái khi hiển thị dữ liệu ta chỉ cần thêm dấu trừ - vào ngay sau dấu %.34b.2. Căn lề phải, lề tráiVí dụ:printf("\n%-3d %-15s %4.2f %-3c", 9, "nguyen van a", 8.5, 'g');printf("\n%-3d %-15s %4.2f %-3c", 10, “nguyen ha", 6.75, 'k');Kết quả:9nguyen van a8.50g10nguyen ha6.75k352.3.2. Hàm scanfa. Mục đích và cú pháp:Mục đích:Hàm scanf() dùng để nhập dữ liệu từ bàn phím Cú pháp:scanf(xâu_định_dạng,danh_sách_địa_chỉ);Ví dụ:scanf(“%d %f”, &a, &b); 36a. Mục đích và cú pháp (tiếp)Địa chỉ của một biến được viết bằng cách đặt dấu & trước tên biến. Ví dụ:Các biến có tên là a, x, ten_bien Thì địa chỉ của chúng lần lượt sẽ là: &a, &x, &ten_bien37a. Mục đích và cú pháp (tiếp)Xâu_định_dạng: Gồm các ký tự được qui định cho từng loại dữ liệu được nhập vào.Ví dụ: Với dữ liệu định nhập vào là kiểu nguyên thì xâu định dạng là : %dDanh_sách_địa_chỉ:Bao gồm các địa chỉ của các biến, các địa chỉ này được phân tách nhau bởi dấu phẩy (,)38a. Mục đích và cú pháp (tiếp)Danh_sách_địa_chỉ phải phù hợp với các nhóm kí tự định dạng trong xâu_định_dạng về:Số lượngKiểu dữ liệu Thứ tự39b. Nhóm kí tự định dạngMột số nhóm kí tự định dạng:40b. Nhóm kí tự định dạngMột số nhóm kí tự định dạng:41Ví dụ#include #include void main(){// khai bao bienint a;float x;char ch;char* str;42Ví dụ// Nhap du lieuprintf(“Nhap vao mot so nguyen”);scanf(“%d”,&a);printf(“\n Nhap vao mot so thuc”);scanf(“%f”,&x);printf(“\n Nhap vao mot ki tu”);fflush(stdin); scanf(“%c”,&ch);printf(“\n Nhap vao mot xau ki tu”);fflush(stdin); scanf(“%s”,str);43Ví dụ// Hien thi du lieu vua nhap vaoprintf(“\n Nhung du lieu vua nhap vao”);printf(“\n So nguyen: %d”,a);printf(“\n So thuc : %.2f”,x);printf(“\n Ki tu: %c: ”,ch);printf(“\n Xau ki tu: %s”,str);getch();}44Ví dụKết quả:Nhap vao mot so nguyen: 2007 Nhap vao mot so thuc: 18.1625 Nhap vao mot ki tu: b Nhap vao mot xau ki tu: ngon ngu lap trinh C Nhung du lieu vua nhap vao So nguyen: 2007 So thuc: 18.16 Ki tu: b Xau ki tu: ngon45c. Một số quy tắc cần lưu ýQuy tắc 1: Khi đọc sốHàm scanf() quan niệm rằng mọi kí tự số, dấu chấm (‘.’) đều là kí tự hợp lệ.Khi gặp các dấu phân cách như tab, xuống dòng hay dấu cách (space bar) thì scanf() sẽ hiểu là kết thúc nhập dữ liệu cho một số46c. Một số quy tắc cần lưu ý (tiếp)Quy tắc 2: Khi đọc kí tự: Hàm scanf() cho rằng mọi kí tự có trong bộ đệm của thiết bị vào chuẩn đều là hợp lệ, kể cả các kí tự tab, xuống dòng hay dấu cách.47c. Một số quy tắc cần lưu ý (tiếp)Quy tắc 3: Khi đọc xâu kí tự: + Hàm scanf() nếu gặp các kí tự dấu trắng, dấu tab hay dấu xuống dòng thì nó sẽ hiểu là kết thúc nhập dữ liệu cho một xâu kí tự. + Trước khi nhập dữ liệu kí tự hay xâu kí tự ta nên dùng lệnh fflush(stdin) để xóa bộ đệm.48BÀI 2 KIỂU DỮ LIỆU VÀ BIỂU THỨC TRONG C 2.1. Các kiểu dữ liệu chuẩn trong C2.2. Khai báo và sử dụng biến, hằng2.3. Các lệnh vào ra dữ liệu với các biến2.4. Các lệnh vào ra khác2.5. Các phép toán trong C2.6. Biểu thức trong C2.7. Một số toán tử đặc trưng492.4. Các lệnh vào ra khác Hàm gets(): Dùng để nhập vào từ bàn phím một xâu kí tự bao gồm cả dấu cách, điều mà hàm scanf() không làm được. Cú pháp : gets (xâu_kí_tự);Ví dụ:char* str;printf(“Nhap vao mot xau ki tu:”);fflush(stdin); gets(str);502.4. Các lệnh vào ra khác (tiếp)Hàm puts(): Hiển thị ra màn hình nội dung xâu_kí_tự và sau đó đưa con trỏ xuống dòng mới.Cú pháp: puts(xâu_kí_tự);Ví dụ: puts(“Nhap vao xau ki tu:”);Tương đương với lệnh: printf(“%s\n”,“Nhap vao xau ki tu:“).512.4. Các lệnh vào ra khác (tiếp)Hàm getch(): thường dùng để chờ người sử dụng ấn một phím bất kì rồi sẽ kết thúc chương trình.Cú pháp getch();Để sử dụng các hàm gets(), puts(), getch() ta cần khai báo tệp tiêu đề conio.h.522.4. Các lệnh vào ra khác (tiếp)Ví dụ:#include #include void main(){ // khai bao bien char* str; // Nhap du lieu puts(“Hay cho biet ho ten ban:”); fflush(stdin); gets(str);532.4. Các lệnh vào ra khác (tiếp) // Hien thi du lieu vua nhap vao printf(“Xin chao ”); puts(str); puts(“An phim bat ki de ket thuc...”); getch();}54Các lệnh nhập xuất khácKết quả:Nhap vao mot xau ki tu: ngon ngu lap trinh C Xau vua nhap vao: ngon ngu lap trinh C An phim bat ki de ket thuc ...55BÀI 2 KIỂU DỮ LIỆU VÀ BIỂU THỨC TRONG C 2.1. Các kiểu dữ liệu chuẩn trong C2.2. Khai báo và sử dụng biến, hằng2.3. Các lệnh vào ra dữ liệu với các biến2.4. Các lệnh vào ra khác2.5. Các phép toán trong C2.6. Biểu thức trong C2.7. Một số toán tử đặc trưng562.5. Các phép toán trong CBao gồm:Nhóm các phép toán số họcNhóm các phép toán thao tác trên bitNhóm các phép toán quan hệNhóm các phép toán logicNgoài ra C còn cung cấp một số phép toán khác nữa như phép gán, phép lấy địa chỉ 572.5.1. Phép toán số học582.5.2. Phép toán trên bit1)1)592.5.2. Phép toán trên bit602.5.3. Phép toán quan hệ612.5.4. Phép toán logic622.5.5. Phép toán gánCú pháp tên_biến = biểu_thức;Lấy giá trị của biểu_thức gán cho tên_biến Ví dụ:int a, b, c;a = 3;b = a + 5;c = a * b;632.5.5. Phép toán gánBiểu thức gán là biểu thức nên nó cũng có giá trị.Giá trị của biểu thức gán bằng giá trị của biểu_thức: Có thể gán giá trị của biểu thức gán cho một biến khác hoặc sử dụng như một biểu thức bình thườngVí dụ:int a, b, c; a = b = 2007; c = (a = 20) * (b = 30);642.5.5. Phép toán gánPhép toán gán thu gọn:x = x + y; giống nhưx += y;Dạng lệnh gán thu gọn này còn áp dụng được với các phép toán khác: +, -, *, /, %, >>, = + 1; ++; = - 1; --;Ví dụ:int a = 5;float x = 10;a ++; // tương đương với a = a + 1;x --; // tương đương với x = x – 1;772.7.1. Các phép toán tăng giảm một đơn vị (tiếp)Tiền tố: Thay đổi giá trị của biến trước khi sử dụngHậu tố: Tính toán giá trị của biểu thức bằng giá trị ban đầu của biến, sau đó mới thay đổi giá trị của biến Ví dụ:int a, b, c;a = 3; // a bang 3b = a++;// Dang hau to // b bằng 3; a bằng 4c = ++b;// Dang tien to // b bằng 4, c bằng 4;782.7.2. Phép toán lấy địa chỉ biến (&)& ;Ví dụ: a là kiểu dữ liệu int (2 bytes)&a; // co gia tri la 3,300,159 hay 0032:5B3F792.7.3. Phép toán chuyển đổi kiểu bắt buộc() ;Chương trình dịch sẽ tự động chuyển đổi kiểu Số nguyên int long intSố long int float Ngược lạiSố nguyên long int 50,000 không phải là một số nguyên kiểu int vì phạm vi biểu diễn của kiểu int là từ (-32,768 đến 32,767). Phải ép kiểu802.7.3. Phép toán chuyển đổi kiểu bắt buộc (tiếp)Ví dụ:#include #include void main(){ long int li; int i; float f; clrscr(); li = 0x123456; f = 123.456; i = (int) li; printf(“\n li = %ld”,li); printf(“\n i = %d”,i); i = (int) f; printf(“\n f = %f”,f); printf(“\n i = %d”,i); getch();}812.7.3. Phép toán chuyển đổi kiểu bắt buộc (tiếp)Kết quả li = 1193046 i = 13398 f = 123.456001 i = 123822.7.3. Phép toán chuyển đổi kiểu bắt buộc (tiếp)C hỗ trợ chuyển kiểu tự động trong những trường hợp sau char int long int float double long double 832.7.4. Biểu thức điều kiện Cú phápbiểu_thức_1 ? biểu_thức_2 : biểu_thức_3Giá trị của biểu thức điều kiệnGiá trị của biểu_thức_2 nếu biểu_thức_1 có giá trị khác 0 (tương ứng với giá trị logic ĐÚNG), Ngược lại: Giá trị của biểu_thức_3 nếu biểu_thức_1 có giá trị bằng 0 (tương ứng với giá trị logic SAI).Ví dụ:float x, y, z; // khai báo biếnx = 3.8; y = 2.6; // gán giá trị cho các biến x, yz = (x<y) ? x : y; // z sẽ có giá trị bằng giá trị // nhỏ nhất trong 2 số x và y84Câu hỏi ?