ngôn ngữ lập trình c/c++

25
Trường Đại Học Bách Khoa Hà Nội Viện: Điện Tử - Viễn Thông Bộ Môn: Điện tử - Kỹ thuật máy tính 1 Ngôn ngữ lập trình C/C++ Chương 1: Ôn tập ngôn ngữ C Các kiểu dữ liệu có cấu trúc

Upload: tawana

Post on 09-Jan-2016

76 views

Category:

Documents


5 download

DESCRIPTION

Ngôn ngữ lập trình C/C++. Chương 1 : Ôn tập ngôn ngữ C Các kiểu dữ liệu có cấu trúc. Các kiểu dữ liệu có cấu trúc. Kiểu liệt kê: enum Kiểu bản ghi: struct Kiểu hợp: union Kiểu bản ghi có trường ở mức bit: bit field struct. Kiểu enum. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Ngôn ngữ lập trình C/C++

Trường Đại Học Bách Khoa Hà NộiViện: Điện Tử - Viễn Thông

Bộ Môn: Điện tử - Kỹ thuật máy tính

1

Ngôn ngữ lập trình C/C++

Chương 1: Ôn tập ngôn ngữ C

Các kiểu dữ liệu có cấu trúc

Page 2: Ngôn ngữ lập trình C/C++

Các kiểu dữ liệu có cấu trúc

2

Kiểu liệt kê: enum Kiểu bản ghi: struct Kiểu hợp: union Kiểu bản ghi có trường ở mức bit: bit field struct

Page 3: Ngôn ngữ lập trình C/C++

Kiểu enum

3

Ý nghĩa: là kiểu dữ liệu mà miền giá trị của nó là một số giá trị mà ta muốn và có thể liệt kê ra.

VD: các giá trị logic (true, false), các ngày trong một tuần, các mức tính thuế thu nhập,v.v

Các thao tác cơ bản: Định nghĩa: tạo ra một kiểu dữ liệu mới trước khi khai báo

sử dụng Khai báo: khai báo các biến kiểu enum đã được định nghĩa ở

trên Gán giá trị: cập nhật giá trị cho biến kiểu enum

Page 4: Ngôn ngữ lập trình C/C++

Kiểu enum – Định nghĩa

4

Cách định nghĩa: Kiểu liệt kê được định nghĩa với từ khóa enum, và có hai cách có thể được dùng để định nghĩa: Cách 1: không cần dùng từ khóa typedef và Cách 2: có sử dụng từ khóa typedef này.

Page 5: Ngôn ngữ lập trình C/C++

Kiểu enum – Định nghĩa

5

Cách 1: không dùng từ khóa typedef.

enum tên_kiểu {phần_tử_1, phần_tử_2, …, phần_tử_N};

VD:

enum ngayTrongTuan {ThuHai, ThuBa, ThuTu, ThuNam, ThuSau, ThuBay, ChuNhat};

enum gioitinh {Nam, Nu}; 

Page 6: Ngôn ngữ lập trình C/C++

Kiểu enum – Định nghĩa

6

Cách 2: sử dụng từ khóa typedef.

typedef enum { phần_tử_1, phần_tử_2, …, phần_tử_N } tên_kiểu ;

VD:

typedef enum {True, False} boolean;

Page 7: Ngôn ngữ lập trình C/C++

Kiểu enum – Khai báo

7

Khai báo biến kiểu enum tương tự như cách khai báo các biến thông thường:

Cú pháp:tên_kiểu v;tên_kiểu v1,v2;

VD: ngayTrongTuan d1, d2; //Khai báo 2 biến

enum gioitinh gt = Nam; //Khai báo và khởi tạo giá trị

Page 8: Ngôn ngữ lập trình C/C++

Kiểu enum – Khai báo

8

Page 9: Ngôn ngữ lập trình C/C++

Kiểu enum – Gán giá trị

9

Bản chất giá trị liệt kê của kiểu enum là các hằng số nguyên, với phần tử liệt kê đầu tiên có giá trị là 0, phần tử thứ hai có giá trị là 1, v.v

Các giá trị này có thể được đặt tường minh khi định nghĩa hay khai báo.

VD:

typedef enum {True=1, False=0} boolean;

enum Colors {BLUE=1,RED=3,GREEN=2} c;

Page 10: Ngôn ngữ lập trình C/C++

Ví dụ

10

Viết một chương trình nhập một giá trị nguyên biểu một trong các ngày trong một tuần. Chương trình sẽ kiểm tra giá trị đó để in ra ngày tương ứng. Việc làm trên sẽ lặp lại cho đến khi giá trị nhập vào là -1 thì kết thúc chương trình.

Page 11: Ngôn ngữ lập trình C/C++

Ví dụ

11

#include <stdio.h>

#include <conio.h>

main(){

enum day {monday, tuesday, wednesday,

thursday, friday, saturday, sunday};

enum day d;

do {

printf("Nhap ngay hom nay:(nhap -1 de thoat)");

scanf("%d",&d);

switch (d) {

case monday:

printf("Hom nay la thu hai\n");break;

case tuesday:

printf("Hom nay la thu ba\n");break;

case wednesday:

printf("Hom nay la thu tu\n");break;

case thursday:

printf("Hom nay la thu nam\n");break;

case friday:

printf("Hom nay la thu sau\n");break;

case saturday:

printf("Hom nay la thu bay\n");break;

case sunday:

printf("Hom nay la chu nhat\n");break;

default:

if (d !=-1) printf("Du lieu khong hop le\n");

}

} while (d != -1);

getch();

}// end main

Page 12: Ngôn ngữ lập trình C/C++

Kiểu struct

12

Ý nghĩa: là cấu trúc cho phép bên trong chứa các trường dữ liệu mà có kiểu dữ liệu có thể khác nhau

Các thao tác cơ bản: Định nghĩa Khai báo biến Truy nhập vào các trường Gán giá trị

Page 13: Ngôn ngữ lập trình C/C++

Kiểu struct – Định nghĩa

13

Có hai cách để định nghĩa kiểu struct: Cách 1: không sử dụng từ khóa typedef Cách 2: sử dụng từ khóa typedef

Page 14: Ngôn ngữ lập trình C/C++

Kiểu struct – Định nghĩa

14

Cách 1: không sử dụng từ khóa typedef

struct tên_kiểu {

Khai báo các trường;

};

 VD:

struct ngaysinh {

int ngay;

int thang;

int nam;

};

struct nguoi {

char ten[30];

int tuoi;

char gioitinh; // ‘M’ cho nam, ‘F’ cho nữ

struct ngaysinh sinhngay;

};

Page 15: Ngôn ngữ lập trình C/C++

Kiểu struct – Định nghĩa

15

Cách 2: sử dụng từ khóa typedef

typedef struct {

Khai báo các trường;

} tên_kiểu ;

 

VD:

typedef struct {

char sohieu[30] ;

char chuyennganh;

int soluong;

} lophoc ;

Page 16: Ngôn ngữ lập trình C/C++

Kiểu struct – Khai báo

16

Tương tự kiểu enum, việc khai báo biến kiểu struct cũng có thể theo 1 trong 2 cách:

Cách 1: khai báo sau khi định nghĩa kiểu struct

Cách 2: kết hợp khai báo và định nghĩa kiểu

Page 17: Ngôn ngữ lập trình C/C++

Kiểu struct – Khai báo

17

Cách 1:[struct] tên_kiểu v;

[struct] tên_kiểu v1,v2;

Cách 2: struct tên_kiểu {

Khai báo các trường;

} v1, v2;

lophoc lh1, lh2;struct ngaysinh ns;

struct ngaysinh { int ngay; int thang; int nam;} ns1, ns2;

Page 18: Ngôn ngữ lập trình C/C++

Truy nhập vào các trường

18

Có 2 cách truy nhập: Cách 1: dùng biến thông

thường, sử dụng cú pháp “tên_biến.tên_trường”

Cách 2: dùng biến con trỏ, sử dụng cú pháp “tên_biến->tên_trường”

typedef struct { char sohieu[30] ; char chuyennganh; int soluong;} lophoc ;lophoc lh;lophoc * p = & lh;

scanf(“%s”, lh.sohieu);scanf(“%c”, &p->chuyennganh);scanf(“%d”, &p->soluong);

Page 19: Ngôn ngữ lập trình C/C++

Kiểu struct - Gán giá trị

19

Hai biến cùng một kiểu struct có thể được gán cho nhau. Việc gán này sẽ cho thay cho việc gán lần lượt tất cả các trường của hai biến này cho nhau.

VD:

lh1.sohieu = lh2.sohieu;lh1.chuyennganh= lh2.chuyennganh;lh1.soluong = lh2.soluong;

lophoc lh1, lh2;lh1=lh2;

Page 20: Ngôn ngữ lập trình C/C++

Ví dụ

20

Viết chương trình quản lý một danh sách nhân viên với các chức năng: Nhập vào một danh sách N nhân viên (N là hằng số cho

trước) In ra nội dung danh sách đó

Page 21: Ngôn ngữ lập trình C/C++

Ví dụ:

21

#include <stdio.h>

#define N 3

int main(){

struct person {

char name[30];

int age;

char sex; //'M' for male

//and 'F' for female

} ; //end struct

struct person pList[N];

int i;

printf("Nhap danh sach nhan vien\n");

for (i=0;i<N;i++) {

printf("Nhan vien thu %d\n",i+1);

printf("Ten:"); scanf("%s",pList[i].name); printf("Tuoi:"); scanf("%d",&pList[i].age); printf("Gioi tinh (M hoac F):"); scanf("%c",&pList[i].sex);} //end for

//In danh sách ra màn hìnhprintf("Ho ten Tuoi Gioi tinh\n");for (i=0;i<N;i++){ printf("%s%d",pList[i].name,

pList[i].age); if (pList[i].sex=='M') printf("Nam\n"); else printf("Nu\n");} //end for

} //end main

Page 22: Ngôn ngữ lập trình C/C++

Các cấu trúc tiết kiệm kích thước lưu trữ

22

Cấu trúc union: về ý nghĩa sử dụng thì tương tự như cấu trúc struct. Tuy nhiên, ở mỗi thời điểm trong chương trình thì chỉ dùng đến một trường trong số tất cả các trường, vì kích thước lưu trữ chỉ đủ để lưu trữ cho một trường

Cấu trúc bit field: chính là cấu trúc struct, nhưng các trường có thể khai báo kích thước lưu trữ đến mức bit (1 hoặc nhiều bit).

Page 23: Ngôn ngữ lập trình C/C++

Tóm tắt

23

Các kiểu dữ liệu có cấu trúc trong C enum struct union bit field

Cảm ơn!

Page 24: Ngôn ngữ lập trình C/C++

Bài tập

24

Bài 1: Viết chương trình giải một phương trình bậc 2, với các thông số của phương trình (gồm các hệ số, số nghiệm và giá trị mỗi nghiệm) được đưa vào trong cấu trúc struct. Yêu cầu chương trình: Nhập ba hệ số a,b,c từ bàn phím (với a ≠ 0) In ra màn hình số nghiệm và giá trị mỗi nghiệm

Bài 2: Mở rộng bài 1 thêm khả năng kiểm tra sự hợp lệ của dữ liệu nhập vào (với a phải ≠ 0), và cho phép giải nhiều PTB 2.

Page 25: Ngôn ngữ lập trình C/C++

Bài tập

25

Bài 3: Viết chương trình xây dựng kiểu số phức dùng cấu trúc struct, và cho phép thực hiện các thao tác cơ bản +,-,*,/ hai số phức. Yêu cầu chương trình: Nhập 2 số phức a và b từ bàn phím In ra nội dung của a và b, đồng thời a+b,a-b,a*b và a/b.

Bài 4: Viết chương trình tính tổng một dãy N số phức có giá trị được nhập từ bàn phím.