1. Trang chủ
  2. » Giáo án - Bài giảng

NGÔN NGỮ lập TRÌNH

142 57 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 142
Dung lượng 555,79 KB

Nội dung

NGƠN NGỮ LẬP TRÌNH C/C++ Vũ Song Tùng NỘI DUNG Đặc điểm C/C++ Các thành phần Biểu thức toán tử 22 Hàm, mảng trỏ 45 Kiểu liệu trừu tượng 77 Các cấu trúc liệu 123 I Đặc điểm C/C++ Ngơn ngữ C • Ngơn ngữ lập trình hàm • Linh hoạt việc sử dụng kiểu biến • Truy cập trực tiếp nhớ thơng qua trỏ • Định nghĩa kiểu biến struct • Có thể chia nhỏ chương trình thành nhiều mơ-đun I Đặc điểm C/C++ Ngơn ngữ C++ • • • • Kế thừa đặc điểm C Đa hình kỹ thuật xếp chồng (overload) Hướng đối tượng lớp (class) Sử dụng lại mã kỹ thuật kế thừa (inheritance) II Các thành phần Bộ ký tự Chú thích Định danh Hằng Biến Vào/ra II Các thành phần 2.1 Bộ ký tự • • • • Chữ thường : a – z Chữ hoa : A – Z Chữ số : – Phần lớn dấu (trừ @ $) Ví dụ # include < iostream > void m ain() { int Arr[] = { 1, 2, 3, }; for (int i= 0; i< 4; i+ + ) std::cout < < Arr[i] < < '\t'; } II Các thành phần 2.2 Chú thích • Dùng để mơ tả hàm hay đoạn chương trình // H àm tính x^ n // x - sốốthực, n - sốốnguyên dương double pow er(double x,int n) { /* double g = 1; for (int i= 0; i< n; i+ + ) g *= x; return g; */ if (n = = 0) return 1; // x^ = return x * pow er(x, n - 1); } Mơ tả hàm Có thể dùng để bỏ tạm thời đoạn chương trình Làm rõ nghĩa II Các thành phần 2.3 Định danh • Tên đặt cho hàm, biến, kiểu liệu v.v… • Các quy tắc định danh – Chỉ dùng chữ cái, chữ số dấu gạch nối – Ký tự không chữ số – Khơng phép trùng từ khóa Chú ý Ngơn ngữ C/C++ phân biệt chữ hoa chữ thường Ví dụ void _foo() // quy cách { int so nguyen; // saivìcó chứa dấố u cách int soN guyen; // quy cách } II Các thành phần 2.4 Hằng • Các giá trị cụ thể chương trình • Có thể số nguyên, số thực, ký tự xâu ký tự Ví dụ // sốốnguyên kiêể u int 05 // sốốnguyên biêể u diêễ n hệ 0x5 // sốốnguyên biêể u diêễ n hệ 16 5u // U u – sốốnguyên kiêể u unsigned 5l // L l– sốốnguyên kiêể u long 5.0 // sốốnguyên kiêể u double '5' // ký tự có giá trịsốố(m ã ASCII) 53 'A' // ký tự có giá trịsốố(m ã ASCII) 65 "5" // xấu ký tự gốồ m ký tự '5'và ký tự N U LL II Các thành phần 2.4 Hằng Bảng 2.1 Các ký tự đặc biệt Ký tự Mô tả \t TAB \n ENTER \’ Nháy đơn \” Nháy kép \\ \ (phân biệt với // đường dẫn) \0 Ký tự NULL (giá trị 0) 10 VI Các cấu trúc liệu Array, BoundStack BoundQueue LinkedList Binary Search Tree Link đến file code đầy đủ: https://docs.google.com/open?id=0B4vBa0QnLWSraGRyVkJKaFUwekE 128 VI Các cấu trúc liệu 6.1 Array, BoundStack BoundQueue tem plate < class T> class Array { protected: T *data; int size; public: Array(); Array(int length); Array(const Array& a); ~ Array(); public: void CopyFrom (T *); int Size(); public: T& operator[](int index); Array& operator= (const Array& a); }; 129 VI Các cấu trúc liệu 6.1 Array, BoundStack BoundQueue tem plate < class T> class BoundStack : protected Array< T> { int top; public: BoundStack(); BoundStack(int size); public: void Push(T value); T Pop(); T Top(); int IsEm pty(); int IsFull(); int Count(); T operator[](int index); }; 130 VI Các cấu trúc liệu 6.1 Array, BoundStack BoundQueue tem plate < class T> class BoundQ ueue : protected Array< T> { int front, rear; int count; void Inc(int & i); public: BoundQ ueue(); BoundQ ueue(int size); public: void Enqueue(T value); T D equeue(); int IsEm pty(); int IsFull(); int Count(); T operator[](int index); }; 131 VI Các cấu trúc liệu 6.1 Array, BoundStack BoundQueue • Ứng dụng stack QuickSort tem plate < class T> class Sort { class Segm ent { public: int Lb, U b; Segm ent() { } Segm ent(int l, int r) : Lb(l), U b(r) { } void Sw ap(T & a, T & b) { T t = a; a = b; b = t; } int D oPart(Array< T> & ); // Phấn đoạn Array // Săố p xêố p Array đoạn [Lb, U b] InsertSort void D oSort(Array< T> & ); }; // Segm ent public: static void D oSort(Array< T> & ); }; 132 VI Các cấu trúc liệu 6.1 Array, BoundStack BoundQueue • Ứng dụng stack QuickSort tem plate < class T> void Sort< T> ::D oSort(Array< T> & a) { int n0 = 10, len = a.Size(); BoundStack< Segm ent> s(len/n0 + 1); s.Push(Segm ent(0, len - 1)); w hile (!s.IsEm pty()) { Segm ent b = s.Pop(); if (b.U b - b.Lb + > n0) { int j= b.D oPart(a); if (b.Lb < j- 1) s.Push(Part(b.Lb, j- 1)); if (b.U b > j+ 1) s.Push(Part(j+ 1, b.U b)); } else b.D oSort(a); } } 133 VI Các cấu trúc liệu 6.1 Array, BoundStack BoundQueue • Sử dụng class Sort # include "stdafx.h" # include "ds.h" # include < iostream > using nam espace std; int m ain() { int v[] = { 7, 5, 4, 8, 9, 1, 3, 2, 0, }; Array< int> a(10); a.C opyFrom (v); Sort< int> ::D oSort(a); for (int i= 0; i< a.Size(); i+ + ) cout < < a[i] < < ''; } 134 VI Các cấu trúc liệu 6.2 LinkedList • class LinkedList tem plate < class _Ti> class LinkedList { protected: // Đ oạn định nghĩa lớp // baseList< _Ti> h; int n; public: LinkedList() : n(0) { } ~ LinkedList() { h.m akeEm pty(); } int IsEm pty() { return n = = 0; } int C ount() { return n; } _TiPopBegin(); _TiPopEnd(); void Rem oveAll() { h.m akeEm pty(); n = 0; } void PushBegin(const _Ti& i); void PushEnd(const _Ti& i) }; 135 VI Các cấu trúc liệu 6.2 LinkedList • Các lớp class baseList { public: baseList *next, *prev; baseList() { next = prev = this; } void insertAfter(const _Ti& info); void rem ove(); void m akeEm pty(); }; class infoList : public baseList { public: _Tiinfo; infoList(const _Ti& i) : info(i) { } }; 136 VI Các cấu trúc liệu 6.2 LinkedList • Ứng dụng – đổi số đếm std::string IntToBin(int x) { std::string s; LinkedList< char> stack; { char c = (char)((x & 1) + 48); x > > = 1; stack.PushBegin(c); } w hile (x); w hile (!stack.IsEm pty()) s + = stack.PopBegin(); return s; } 137 VI Các cấu trúc liệu 6.3 Binary Search Tree • class sở tem plate < class _Ti> class baseBST { public: baseBST() { } virtualbaseBST * insert(const _Ti& ) = 0; virtualbaseBST * contents(const _Ti& ) { return ; } virtualbaseBST * rem ove(const _Ti& ) { return this; } virtualbaseBST * getSuccessor() { return 0; } virtualvoid m akeEm pty() { } virtual_Ti* Info() { return 0; } }; tem plate < class _Ti> int _com pare(const _Ti& a, const _Ti& b) { return (a < b? -1: a > b); } 138 VI Các cấu trúc liệu 6.3 Binary Search Tree • class BST tem plate < class _Ti, int com p(const _Ti& , const _Ti& ) = _com pare> class BST { // Đ oạn định nghĩa class // nullBST nullBST; baseBST< _Ti> * root; public: BST() { root = (baseBST< _Ti> *)& nullBST; } ~ BST() { root-> m akeEm pty(); } void Insert(const _Ti& info) { root = root-> insert(info); } void D elete(const _Ti& i) { root = root-> rem ove(i); } boolC ontents(const _Ti& i) { return root-> contents(i); } }; 139 VI Các cấu trúc liệu 6.3 Binary Search Tree • Định nghĩa class class nullBST : baseBST< _Ti> { public: baseBST * insert(const _Ti& i) { return new infoBST(i, this); } }; class infoBST : baseBST< _Ti> { _Tiinfo; baseBST *left, *right; public: infoBST(const _Ti& i, baseBST *nullBST) : info(i) { left = right = nullBST; } void m akeEm pty(); baseBST * insert(const _Ti& ); baseBST * contents(const _Ti& ); baseBST * rem ove(const _Ti& ); baseBST * getSuccessor(); }; 140 VI Các cấu trúc liệu 6.3 Binary Search Tree • Ứng dụng – kiểm tra khai báo biến # include "ds.h" # include < iostream > using nam espace std; class VarD ef { public: string nam e; int line; VarD ef() { } VarD ef(const char* s, int l) : nam e(s), line(l) { } static int com pare(const VarD ef& a, const VarD ef& b) { return a.nam e.com pare(b.nam e); } }; 141 VI Các cấu trúc liệu 6.3 Binary Search Tree • Ứng dụng – kiểm tra khai báo biến void m ain() { char vars[][100] = { "x", "y", "a", "b", "x", "k", "i", "k", "m ", "n" }; BST< VarD ef, VarD ef::com pare> bst; BoundQ ueue< VarD ef> e(10); for (int i= 0; i< 10; i+ + ) { VarD ef v(vars[i], i+ 1); if (!bst.C ontents(v)) bst.Insert(v); else e.Enqueue(v); } for (int i= 0; i< e.C ount(); i+ + ) { VarD ef v(e[i]); cout < < "redefi nition variable " < < v.nam e.data() < < " in line " < < v.line < < endl; } } 142 ... điểm C/C++ Ngơn ngữ C • Ngơn ngữ lập trình hàm • Linh hoạt việc sử dụng kiểu biến • Truy cập trực tiếp nhớ thơng qua trỏ • Định nghĩa kiểu biến struct • Có thể chia nhỏ chương trình thành nhiều... – Chỉ dùng chữ cái, chữ số dấu gạch nối – Ký tự không chữ số – Khơng phép trùng từ khóa Chú ý Ngôn ngữ C/C++ phân biệt chữ hoa chữ thường Ví dụ void _foo() // quy cách { int so nguyen; // saivìcó... vài ý • Kích thước kiểu phụ thuộc vào hệ thống mà chương trình biên dịch • Dùng tốn tử sizeof( ) để lấy kích thước kiểu, hay biến // Chương trình W in32 Console Application int sz; sz = sizeof(sz);

Ngày đăng: 17/08/2020, 07:44

TỪ KHÓA LIÊN QUAN