<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1>
CHƯƠNG 2:
NHỮNG VẤN ĐỀ
</div>
<span class='text_page_counter'>(2)</span><div class='page_container' data-page=2>
Nội dung chính
Cấu trúc chương trình
Biến
Tốn tử
Các câu lệnh
Structure
</div>
<span class='text_page_counter'>(3)</span><div class='page_container' data-page=3>
1. Cấu trúc chương trình
Xét ví dụ sau:
#include <iostream.h>
using namespace std;
int main()
{
cout << “Hello world \n”;
return 0;
}
• Hàm
• Câu lệnh: kết thúc bởi dấu “;”
• #include: u cầu chương trình dịch
chèn thêm file vào mã nguồn.
• using namespace
</div>
<span class='text_page_counter'>(4)</span><div class='page_container' data-page=4>
2. Biến
Phải khai báo biến trước khi sử dụng
Có thể khai báo biến ở mọi nơi trong chương
trình
Tên biến
Phân biệt chữ hoa, chữ thường
Sử dụng các ký tự từ a-z, 0-9 và dấu “_”
Ví dụ:
int var1;
</div>
<span class='text_page_counter'>(5)</span><div class='page_container' data-page=5>
Kiểu dữ liệu đơn giản
Kiểu nguyên:
int
,
long
,
short
Kiểu ký tự:
char
– lưu mã ASCII của ký tự
Ký tự nằm trong dấu ‘’. Ví dụ: ‘a’
Ký tự đặc biệt: \n, \tab, \\, \’, \”, …
Kiểu không dấu:
unsigned char
,
unsigned int
,
unsigned short, unsigned long
Kiểu dấu phẩy động:
float
,
double
,
long
double
</div>
<span class='text_page_counter'>(6)</span><div class='page_container' data-page=6>
Kiểu dữ liệu đơn giản …
<b>Type</b>
<b>Low</b>
<b>High</b>
<b>Bytes</b>
char
-128
127
1
short
-32768
32767
2
int
-2147483648
2147483647
4
long
-2147483648
2147483647
4
float
3.4x10
-38
3.4x10
38
4
double
1.7x10
-308
1.7x10
308
8
long
double
</div>
<span class='text_page_counter'>(7)</span><div class='page_container' data-page=7>
Ép kiểu
C++ là ngơn ngữ định kiểu mạnh ().
Ví dụ:
double pi=3.14; // đúng
double x=”Hello”; // sai
Ép kiểu tự động
Ví dụ:
int i = 17;
float x = i; // gán 17 cho x
int j = 2;
float y = i/j; // gán 17/2 = 8 cho y, khơng phải là 8.5
Thực hiện phép tốn trên 2 tốn hạng có kiểu khác nhau thì tốn
hạng có kiểu thấp hơn sẽ tự động bị ép về kiểu cao hơn.
Tự ép kiểu
Ví dụ:
</div>
<span class='text_page_counter'>(8)</span><div class='page_container' data-page=8>
Biến hằng
(Constant Variables)
Giá trị của hằng không thay đổi.
Có 2 cách khai báo hằng:
const float PI=3.14;
#define PI 3.14
</div>
<span class='text_page_counter'>(9)</span><div class='page_container' data-page=9>
Sử dụng
cout
cout
là một đối tượng được định nghĩa trước trong C++, tương
ứng với luồng ra chuẩn (
standard output stream
).
Toán tử << là toán tử chèn, định hướng nội dung cần hiển thị.
Ví dụ:
string str=”Hello world”;
int i=8;
cout << str << endl; // endl (hoặc \n) là dấu hiệu xuống dòng.
cout << ”i=” << i << endl;
Để định dạng nội dung hiển thị, sử dụng
setw
(nằm trong
iomanip
)
</div>
<span class='text_page_counter'>(10)</span><div class='page_container' data-page=10>
Sử dụng
cin
cin
là toán tử được định nghĩa trước trong C+
+, tương ứng với luồng vào chuẩn (
standard
input stream
).
Toán tử >> đưa nội dung từ luồng vào chuẩn
vào biến.
Ví dụ:
int temperature;
</div>
<span class='text_page_counter'>(11)</span><div class='page_container' data-page=11>
Header File và Library File
Một số nhiệm vụ được thực hiện bởi Library Function.
Header File chứa khai báo các hàm mà ta cần sử
dụng trong chương trình.
Ví dụ:
#include <math.h>
#include ”myprog.h”
<>: yêu cầu chương trình dịch tìm từ thư mục chuẩn.
” ” : yêu cầu chương trình dịch tìm từ thư mục hiện tại.
Nếu khơng include Header File thích hợp thì chương
</div>
<span class='text_page_counter'>(12)</span><div class='page_container' data-page=12>
myprog.cpp
somelib.h
myprog.h
#include <somelib.h>
#include ”myprog.h”
myprog.obj
myprog.exe
cs.lib
user header file
compiler
linker
library header file
library file
object file
</div>
<span class='text_page_counter'>(13)</span><div class='page_container' data-page=13>
3. Toán tử
Toán tử toán học
Toán tử quan hệ
</div>
<span class='text_page_counter'>(14)</span><div class='page_container' data-page=14>
Toán tử toán học
+, -, *, /, %
Ví dụ:
int i = 1/3; // kết quả i = 0
float x = 1.0/3; // kết quả x=0.3333
int j = 7 % 3; // kết quả j=1
++, --
Ví dụ:
int i=3;
int j=7;
cout << 10 * i++; // hiển thị 30, sau đó i=4
cout << 10 * ++j; // hiển thị 80, sau đó j=8
+=, -=, *=, /=
Ví dụ:
float x=6.0;
</div>
<span class='text_page_counter'>(15)</span><div class='page_container' data-page=15>
Toán tử quan hệ
So sánh 2 giá trị.
Kết quả trả về là true hoặc false
>, <, ==, !=, >=, <=
Ví dụ:
int x=44;
int y=12;
</div>
<span class='text_page_counter'>(16)</span><div class='page_container' data-page=16>
Toán tử logic
logical and : &&
(x >= 5) && ( x <= 15) // true nếu x nằm trong [5,15]
logical or : ||
(x == 5) || ( x == 10) // true nếu x=5 hoặc x=10
logical negation : !
! (x == 5) // true nếu x khác 5
Tương tự x != 5
Toán tử điều kiện (conditional operator) : ? … :
<b><condition> ? <true expression> : < false expression></b>
Ví dụ:
min = (alpha<beta) ? alpha : beta;
Tương tự
if (alpha < beta)
min = alpha;
else
</div>
<span class='text_page_counter'>(17)</span><div class='page_container' data-page=17>
4. Các câu lệnh
Vòng lặp
Rẽ nhánh
</div>
<span class='text_page_counter'>(18)</span><div class='page_container' data-page=18>
Vòng lặp for
increment expression
test expression
initialization expression
for ( i=0; i<15; i++ )
initialization
expression
body of loop
increment
expression
test
expression
exit
true
false
• Có thể đặt nhiều biểu thức trong các phần của vòng for
( ; ; ); các biểu thức đó cách nhau bởi dấu phẩy.
• Ví dụ:
for(int j=0, float alpha=100.0; j<50; j++, alpha--)
{
</div>
<span class='text_page_counter'>(19)</span><div class='page_container' data-page=19>
Vòng lặp for ...
int i;
for (i=1; i<=15; i++) // thân vịng lặp for có 1 lệnh
cout << i*i << ” ”;
cout << endl;
for (i=1; i<=15; i++) // thân vòng lặp for có nhiều lệnh
{
cout << setw(4) << i << ” ”;
// setw(n) gán kích thước của trường hiển thị bằng n
int cube = i*i*i;
</div>
<span class='text_page_counter'>(20)</span><div class='page_container' data-page=20>
Vòng lặp while
•Vịng lặp while được sử dụng khi khơng biết trước số lần lặp.
•Lặp cho đến khi biểu thức kiểm tra vẫn có giá trị True.
•Ví dụ:
char c=’n’;
while ( c != ’y’)
{
cout << ”Do you want to continue: (y/n)” << endl;
cin >> c;
</div>
<span class='text_page_counter'>(21)</span><div class='page_container' data-page=21>
Vòng lặp while ...
test expression
while ( c != ’y’ )
{
…
}
body of loop
test
expression
exit
true
</div>
<span class='text_page_counter'>(22)</span><div class='page_container' data-page=22>
Vòng lặp do
• Trong vịng lặp do, biểu thức kiểm tra được đánh
giá ở cuối vịng lặp.
•Thân vịng lặp được thực hiện ít nhất một lần.
•Ví dụ:
char c;
do
{
cout << ”Do you want to continue: (y/n)” << endl;
cin >> c;
}
</div>
<span class='text_page_counter'>(23)</span><div class='page_container' data-page=23>
Vòng lặp do ...
body of loop
test expression
do
{ … }
while ( c != ’y’ );
test
expression
exit
true
</div>
<span class='text_page_counter'>(24)</span><div class='page_container' data-page=24>
If … Else
• Phụ thuộc vào điều kiện kiểm tra là true hay false
để quyết định nhánh thực hiện
• Ví dụ:
int x;
cout << ”Enter a number: ”;
cin >> x;
if ( x > 100)
cout << x << ” is greater than 100” << endl;
else
</div>
<span class='text_page_counter'>(25)</span><div class='page_container' data-page=25>
If … Else
test expression
if ( x > 100)
{
…
}
else
{
…
}
body of if
test
expression
exit
true
false
</div>
<span class='text_page_counter'>(26)</span><div class='page_container' data-page=26>
Lệnh switch
• Lệnh switch được sử dụng khi có nhiều nhánh rẽ
phụ thuộc vào giá trị của cùng một biến.
switch(<variable>)
{
case <constant1>:
…
break;
case <constant2>:
…
break;
default :
…
</div>
<span class='text_page_counter'>(27)</span><div class='page_container' data-page=27>
Lệnh switch ...
char c;
cout << ”Enter your choice (a/b/c) : ”;
cin >> c;
switch (c)
{
case ’a’:
cout << ”You picked a!” << endl;
break;
case ’b’:
cout << ”You picked b!” << endl;
break;
case ’c’:
cout << ”You picked c!” << endl;
break;
default:
</div>
<span class='text_page_counter'>(28)</span><div class='page_container' data-page=28>
Lệnh switch ...
variable
equals
const 1
exit
true
false
first case body
variable
equals
const 2
true
false
</div>
<span class='text_page_counter'>(29)</span><div class='page_container' data-page=29>
Một số lệnh điều khiển khác
break: thốt khỏi vịng lặp hoặc switch
continue: trở lại đầu vòng lặp.
</div>
<span class='text_page_counter'>(30)</span><div class='page_container' data-page=30>
5. Structure
Structure là một tập hợp các biến đơn giản, tương tự như record trong Pascal.
Khai báo Structure:
struct part
{
int modelnumber;
int partnumber;
float cost;
};
Định nghĩa biến kiểu Structure:
part part1;
Khởi tạo các thành phần của Structure:
part part1={6244, 373, 217.55};
Truy cập vào các thành phần của Structure
part1.modelnumber = 6244;
part.modelnumber = 6244; //sai
Hai biến cùng kiểu structure có thể gán cho nhau
</div>
<span class='text_page_counter'>(31)</span><div class='page_container' data-page=31>
Structure lồng
Thành phần của Structure có thể là một structure
khác.
struct Distance struct Room
{ {
int feet; Distance length;
float inches; Distance width;
}; };
Truy cập vào các thành phần của Structure lồng
Room dining;
dining.length.feet=13;
Khởi tạo Structure lồng:
</div>
<span class='text_page_counter'>(32)</span><div class='page_container' data-page=32>
Enumeration
Định nghĩa enum:
enum days_of_week {Sun, Mon, Tue, Wed, Thu, Fri, Sat};
Khai báo biến kiểu enum
days_of_week day1, day2;
Giá trị của các biến kiểu enum là những giá trị mà enum đã
định nghĩa trước.
Các giá trị của enum được lưu dưới dạng số nguyên,
bắt đầu từ 0.
Ta có thể thay đổi giá trị nguyên của giá trị đầu trong enum
enum days_of_week {Sun=1, Mon, Tue, Wed, Thu, Fri, Sat};
days_of_enum day=Mon;
</div>
<span class='text_page_counter'>(33)</span><div class='page_container' data-page=33>
6. Hàm
Khai báo hàm xác định tên hàm, kiểu trả về, và các tham số cần thiết trong lời
gọi hàm.
Khai báo hàm thường nằm trong Header File (.h)
Định nghĩa hàm chứa thân hàm.
Định nghĩa hàm thường nằm trong source file (.cpp)
Ví dụ
int fac(int n); // function declaration
int fac(int n) // function definition
{
int result=1;
for (int i=1; i<=n; i++)
result*=i;
return result;
}
int x=7;
</div>
<span class='text_page_counter'>(34)</span><div class='page_container' data-page=34>
Truyền trị
(Passing by Value)
Khi truyền trị, hàm sẽ tạo ra một biến cục bộ
để lưu giá trị của biến được truyền.
Giá trị của biến được truyền khơng thay đổi.
Ví dụ:
void f(int val)
{
val++;
}
int x=4;
f(x);
</div>
<span class='text_page_counter'>(35)</span><div class='page_container' data-page=35>
Truyền tham chiếu
(Passing by Reference)
Tham chiếu cung cấp bí danh (alias) cho biến.
Khi truyền tham số theo kiểu tham chiếu thì biến cục bộ là bí
danh của biến được truyền.
Địa chỉ của biến được truyền cho hàm.
Hàm có thể truy cập trực tiếp trên biến được truyền.
Ví dụ:
void swap (int & a, int& b)
{
int tmp;
tmp = a;
a = b;
b = tmp;
}
int x=3; int y=5;
</div>
<span class='text_page_counter'>(36)</span><div class='page_container' data-page=36>
Tham số hằng
Tham chiếu hằng không cho phép hàm
thay đổi giá trị của biến được truyền.
Ví dụ:
void f( int& a, const int& b ) // b là tham số hằng
{
</div>
<span class='text_page_counter'>(37)</span><div class='page_container' data-page=37>
Chồng hàm
(Overloaded Function)
Hàm chồng thực hiện các nhiệm vụ khác nhau phụ
thuộc vào các tham số truyền.
Ví dụ:
void print(int a) // in số nguyên
{
cout << ”integer : ” << a;
}
void print(string s) // in xâu ký tự
{
</div>
<span class='text_page_counter'>(38)</span><div class='page_container' data-page=38>
Inline Fuction
main()
….
….
Function1()
….
….
Function1()
….
….
Function1()
….
….
….
….
Function1()
main()
….
….
….
….
….
….
….
….
….
….
</div>
<span class='text_page_counter'>(39)</span><div class='page_container' data-page=39>
Hàm có tham số mặc định
#include <math.h>
double logn (double x, double base=10) // mặc định gán base = 10
{
return log(x)/log(base);
}
double y=5.6;
cout << ”log(y) = ” << logn(y) << endl; // sử dụng giá trị mặc định
cout << ”ln(y) = ” << logn(y,2.71828) << endl; // base = e
</div>
<span class='text_page_counter'>(40)</span><div class='page_container' data-page=40>
Phạm vi của biến
Một khối lệnh (block) nằm trong dấu { … }
Phạm vi của biến là khối lệnh mà biến được
khai báo
Biến được khai báo ở ngoài hàm là biến toàn
cục (global variable).
Khai báo biến ở block trong sẽ ẩn khai báo
</div>
<span class='text_page_counter'>(41)</span><div class='page_container' data-page=41>
Phạm vi của biến …
int x; // global variable
int main()
{
int i=3; // local variable
{
int j=5; // local variable
int i=7; // local i ẩn biến i ở ngoài
cout << i; // hiển thị 7
} // kết thúc phạm vi của j và i ở trong
cout << i; // hiển thị 3
</div>
<!--links-->