Upload
trinhthuan
View
229
Download
7
Embed Size (px)
Citation preview
22/04/2011
1
LẬP TRÌNH C (CƠ BẢN)
1
YÊU CẦU
Môi trường cài đặt: Microsoft Visual C++6.0 hoặc Microsoft Visual .Net 2005 (Viếtứng dụng dạng Console)
Làm bài tập (tại lớp và ở nhà) đầy đủ Hình thức thi: Viết (60 phút), được tham
khảo tài liệu
2
NỘI DUNG
Chương 1: Khái niệm cơ bản về lập trìnhvà môi trường cài đặt
Chương 2: Giới thiệu ngôn ngữ C Chương 3: Cấu trúc điều khiển Chương 4: Hàm con Chương 5: Kiểu dữ liệu mảng
3
Chương 1 Khái niệm cơ bản
về lập trình và giới thiệu môi trường cài đặt
4
LẬP TRÌNH ?
Giải thuật
Ngôn ngữLập trình
5
Các đặc điểm cần có của một chương trình
Đúng đắn, chính xác (correctness).Chắc chắn (robustness).Thân thiện (user friendliness).Khả năng thích nghi (adapability): Chương trình có khả
năng để phát triển tiến hóa theo yêu cầu.Tính tái sử dụng (reuseability): Chương trình có thể
dùng để làm một phần trong một chương trình lớn khác.Tính hiệu quả (efficiency).Tính khả chuyển (porability): Khả năng chuyển đổi giữa
các môi trường.Tính an toàn (security).Tính dừng (halt).
6
22/04/2011
2
CÁC NGÔN NGỮ LẬP TRÌNH
Fortran Pascal Java C C++ C# VB.Net …. 7
CÁC MÔI TRƯỜNG HỖ TRỢ LẬP TRÌNH
Borland C++ Microsoft Visual Basic Microsoft Visual C++ JBuider Visual .Net …
8
CÁCH VIẾT MỘT CHƯƠNG TRÌNH
Đọc kỹ yêu cầu bài toán Xác định dữ liệu đầu vào: giá trị, kiểu Xác định kết quả: giá trị, kiểu Xác định giải thuật / công thức để xử lý dữ
liệu đầu vào thành kết quả Kiểm tra lỗi cú pháp Chạy và nhập dữ liệu thử cho nhiều trường
hợp khác nhau để đánh giá chương trình 9
Hướng dẫn cài đặt và sử dụng Microsoft Visual C++ 6.0
10
BỘ CÀI ĐẶT GỒM
Đĩa Ms Visual Studio 6.0 MSDN cho Visual Studio 6.0 SP6.0 cho Visual Studio 6.0
11
TẠO MỚI PROJECT Bước 1: Khởi động VC++6.0 Bước 2: Chọn menu File/New…
1
2
3
12
22/04/2011
3
Tab Projects chọn Win32 Console Application
Project name: Nhập tên của dự án (Ví dụ đặt tên làBaiTap1)
Location: Vị trí lưu dự án
VC sẽ tạo một thư mục với tên là tên Project tại vị trí đãchỉ định. Bên trong thư mục này sẽ chứa toàn bộ các fileliên quan đến Project. Nếu muốn sao chép Project thì chỉviệc chép thư mục này.
1
2
3
13
Bước 3: Chọn OKBước 4: Chọn An empty Project, sau đó chọn Finish
14
Bước 5: Chọn OK, kết thúc việc tạo Project
15
Giao diện sau khi tạo Project
1. Chọn Tab FileView
2. Chọn dấu + để xem bên trong
16
Giao diện gồm 2 phần chính Cửa sổ bên trái: cửa sổ Workspace (nếu
không thấy cửa sổ này thì vào menu View/Workspace hoặc nhấn phím Alt + số 0)
Cửa sổ bên phải: cửa sổ viết code
17
MÔ TẢ CỬA SỔ WORKSPACESau khi chọn dấu + ở tab FileView,sẽ xuất hiện 3 thư mục: Source Files (*.cpp): Chứa các
file cài đặt các hàm Header Files (*.h): Chứa các file
khai báo (hàm, biến toàn cục, kiểucấu trúc, …)
Resource Files: Chứa các tàinguyên (icon, bitmap, dialog, …).Đối với lập trình ứng dụngConsole thì không dùng đến. 18
22/04/2011
4
Để dễ dàng viết và quản lý code theo phươngpháp lập trình thủ tục, mỗi Project mới, ta quiước như sau: Trong Header File, tạo 1 file tên khaibao.h:
Chứa các khai báo hàm, hằng số, … Trong Source File, tạo 2 file cài đặt hàm: File main.cpp: Cài đặt hàm main() File caidat.cpp: Cài đặt các hàm con đã khai
báo 19
QUI ƯỚC CÁCH TẠO FILE KHAI BÁO (KHAIBAO.H)
Click phải vào thư mục Header File, chọn Add Files to Folder …
20
Nhập khaibao.h vào ô File nameChọn OK, sau đó chọn Yes(Lưu ý: Không thay đổi đường dẫn thư mục –
chỉ nhập tên file) 21
CÁCH TẠO FILE CÀI ĐẶT (MAIN.CPP, CAIDAT.CPP)
Click phải vào thư mục Source File, chọnAdd Files to Folder …Nhập main.cpp vào ô File name, chọn OK,
sau đó chọn YesTương tự, tiếp tục tạo file caidat.cpp(Mẹo: Có thể tạo 2 file cùng một lúc bằng cách:Nhập “main.cpp” “caidat.cpp” vào ô File name:
Tên file phải nằm trong cặp dấu nháy kép (“), mỗitên file cách nhau bởi khoảng trắng)
22
VIẾT LỆNH CHO FILE KHAIBAO.H
Double click vào file khaibao.h trong thưmục Header File
Chọn Yes
23
Cửa sổ soạn thảo code cho file khaibao.hchuyển sang chế độ cho phép soạn thảo
Nhận biết file đang mở
Cửa sổ soạn thảo file khaibao.h
24
22/04/2011
5
CẤU TRÚC FILE KHAIBAO.H
#pragma onceCác khai báo thư viện, hàm, hằng số, …
25
CẤU TRÚC FILE MAIN.CPP
Cách chọn file main.cpp tương tự như chọnfile khaibao.h#include “khaibao.h”void main(){
Các lệnh;} 26
CẤU TRÚC FILE CAIDAT.CPP
#include “khaibao.h”void HamA(){
các lệnh;}void HamB(){
Các lệnh;}
27
DỊCH, SỬA LỖI VÀ CHẠY CHƯƠNG TRÌNH
Biên dịch và kiểm tra lỗi: Nhấn F7 Nếu có thông báo lỗi (error) thì nhấn F4
để tìm, quan sát và sửa lỗi (cửa sổ lỗi xuấthiện bên dưới màn hình soạn thảo code)
Chạy chương trình: Ctrl + F5
28
VÍ DỤ
Viết chương trình hiển thị lên màn hìnhdòng chữ: “Xin chào mọi người”
Do đây là ví dụ rất đơn giản nên chỉ cóphần khai báo (file khaibao.h) và hàmmain() (file main.cpp) nên không có phầncài đặt hàm con (file caidat.cpp)
29
FILE KHAIBAO.H
#pragma once#include <iostream.h>
30
22/04/2011
6
FILE MAIN.CPP
#include "khaibao.h"void main(){
cout<<“Xin chao moi nguoi";}
31
XEM KẾT QUẢ CHẠY CHƯƠNG TRÌNH NHẤN CTRL + F5
32
MỞ PROJECT CÓ SẴNCách 1: Mở từ menu VC Khởi động VC Vào menu File/ Open Workspace Chọn thư mục chứa Project, chọn tên Project, sau đó
chọn Open
33
Cách 2: Mở trực tiếp từ ExploreMở thư mục chứa Project
Double click vào 1 trong 2 file có đánh dấu mũi tên(Lưu ý: Khi chép Project có thể xóa thư mục Debug, vì thư mục này sẽ được tạo khi chạy chương trình)34
CHƯƠNG 2GIỚI THIỆU NGÔN NGỮ C
35
ĐẶC ĐIỂM NGÔN NGỮ C
Bộ lệnh phù hợp với phương pháp lậptrình cấu trúc.
Kiểu dữ liệu phong phú, cho phép địnhnghĩa kiểu dữ liệu mới.
Gồm một hoặc nhiều hàm rời nhau. Linh động về cú pháp.
36
22/04/2011
7
CÁC KHÁI NIỆM
LệnhLệnh thực hiện một chức năng nào đó(khai báo, gán, xuất, nhập, …) và đượckết thúc bằng dấu chấm phẩy (;)
Khối lệnhKhối lệnh gồm nhiều lệnh và được đặttrong cặp dấu ngoặc { } 37
QUI ƯỚC VIẾT LỆNH TRONG C
Mỗi lệnh nằm trên một dòng. Cuối dònglệnh PHẢI có dấu chấm phẩy (;).Lệnh quá dài có thể được viết thành nhiều
dòng sao cho mỗi lệnh phải được quan sáttrọn vẹn trong pham vi cửa sổ lệnh.
38
QUI ƯỚC VIẾT LỆNH TRONG C
Không nên đặt nhiều lệnh trên cùng mộtdòng, ngay cả các khai báo biến, nếu cácbiến có khác kiểu cũng nên đặt trên cácdòng khác nhau.Dòng ghi chú (comment): Từ vị trí cụ thể đến cuối dòng: dùng // ngay tại
vị trí đó. Tạo nhiều dòng ghi chú: dùng cặp ký tự /*
ngay trước dòng đầu tiên, và cặp ký tự */ ngaysau dòng cuối cùng.
39
BIẾNMột biến đại diện cho một vùng nhớ hay tập các
vùng nhớ trên bộ nhớ chính của máy tính. Tênbiến được dùng để tham khảo đến những vùng nhớnày.
Biến để lưu trữ các giá trị do người dùng nhập vàohoặc các giá trị tạm thời trong quá trình tính toán.
Mỗi biến sẽ có tên và kiểu dữ liệu tương ứng.Kiểu dữ liệu của biến xác định những giá trị kiểunào có thể được lưu trong biến (ví dụ số haychữ…).
PHẢI khai báo BiẾN trước khi sử dụng40
CÁC KIỂU DỮ LIỆUGồm 2 loại: Kiểu cơ sở
Tích hợp sẵn trong ngôn ngữ Số nguyên Số thực Luận lý Mảng (xét sau) Chuỗi (xét sau)
Kiểu tự định nghĩa (xét sau)Dùng những kiểu cơ sở để xây dựng thành nhữngkiểu dữ liệu mới cho phù hợp với bài toán.
41
CÁC KIỂU DỮ LIỆU CƠ SỞSTT KIỂU GHI CHÚ KÍCH THƯỚC
KIỂU LIÊN TỤC (SỐ THỰC)1 float 4 bytes2 double 8 bytes3 long double 8 bytes
KIỂU RỜI RẠC (SỐ NGUYÊN)
1 char Ký tự 1 byteSố nguyên 1 byte
2 unsigned char Số nguyên dương 1 byte3 short Số nguyên 2 bytes4 unsigned short Số nguyên dương 2 bytes5 int Số nguyên 4 bytes6 unsigned int Số nguyên dương 4 bytes7 long Số nguyên 4 bytes8 unsigned long Số nguyên dương 4 bytes
KIỂU LUẬN LÝ1 bool Gồm 2 giá trị: true hoặc false
42
22/04/2011
8
KHAI BÁO BIẾNCú pháp<Kiểu dữ liệu> tênbiến;Ví dụ:
int a; //Khai báo biến để lưu số nguyên tên afloat c; //Khai báo biến để lưu số thực tên c
Khai báo nhiều biến cùng kiểu<Kiểu dữ liệu> tênbiến1, tênbiến2, tênbiến3;Ví dụ:int a, x, y;
43
KHAI BÁO BIẾNQui tắc đặt tên biến Bắt đầu bằng một ký tự. Các ký tự trong tên biến chỉ có thể là các ký tự chữ, số
hoặc dấu gạch dưới (_) Không có khoảng trắng trong tên biến. Không dài quá 256 ký tự. Không được trùng với các từ khoá của C
struct, long, int, while, for, if, else, continue, typedef, do, goto, case, define, …
Không được trùng với phạm vi khai báo. Tên gợi nhớ.
Phân biệt chữ hoa và thường44
KHAI BÁO VÀ KHỞI GÁN GIÁ TRỊ BAN ĐẦU CHO BIẾN
<Kiểu dữ liệu> tênbiến = giá trị;
Ví dụ:int a = 5;float b = 5.4, c = 9.2;char ch = ‘n’;
45 46
STT PHÉPTOÁN Ý NGHĨA GHI CHÚ
PHÉP TOÁN SỐ HỌC1 + Cộng2 - Trừ3 * Nhân4 / Chia lấy phần nguyên5 % Chia lấy phần dư
PHÉP TOÁN QUAN HỆ1 > Lớn hơn2 < Nhỏ hơn3 >= Lớn hơn hoặc bằng4 <= Nhỏ hơn hoặc bằng5 = = Bằng nhau6 != Khác nhau
KÝ HIỆU CÁC PHÉP TOÁN
47
PHÉP TOÁN LOGIC1 ! NOT2 && AND3 || OR
TOÁN TỬ TĂNG GIẢM1 ++ Tăng 1 Nếu toán tử tăng giảm đặt
trước thì tăng giảm trước rồi tính biểu thức hoặc ngược lại.2 -- Giảm 1
PHÉP TOÁN THAO TÁC TRÊN BIT1 & AND2 | OR3 ^ XOR4 << Dịch trái5 >> Dịch phải6 ~ Lấy phần bù theo bit
Ví dụ:int x = 5, y = 11;int z = ++x + y++;
Kết quả: x=6; y=12; z=17
Toán tử điều kiện(biểu thức điều kiện)?<biểu thức cho trường hợp
đúng>:<biểu thức cho trường hợp sai>Ví dụ:int n;(n%2==0)? n ++ : n --;
nếu n = 10 thì giá trị n = 11 nếu n = 21 thì giá trị n = 20
48
22/04/2011
9
THỨ TỰ ƯU TIÊN PHÉP TOÁN
Toán tử Độ ưu tiên Trình tự kết hợp() [] -> 1 Từ trái qua phải! ~ ++ -- - + * & sizeof 2 Từ phải qua trái* / % 3 Từ trái qua phải+ - 4 Từ trái qua phải<< >> 5 Từ trái qua phải< <= >= > 6 Từ trái qua phải== != 7 Từ trái qua phải& 8 Từ trái qua phải| 9 Từ trái qua phải^ 10 Từ trái qua phải&& 11 Từ trái qua phải|| 12 Từ trái qua phải? : 13 Từ phải qua trái= += -= *= /= %= 14 Từ phải qua trái
49
CÁC LỖI THƯỜNG GẶP KHI VIẾT CHƯƠNG TRÌNH Quên khai báo các biến sử dụng trong chương trình. Lưu một giá trị vào một biến nhưng không cùng kiểu dữ liệu với
biến. Sử dụng biến trong một biểu thức khi nó chưa có giá trị. Lỗi này
thì không được phát hiện bởi trình biên dịch, khi đó giá trị củabiến là một giá trị bất kỳ và kết quả của biểu thức là vô nghĩa.
Sử dụng giá trị của phép chia không chính xác. Lỗi này thườngxuất hiện trong các biểu thức có nhiều toán hạng và lỗi này rất khóphát hiện.Ví dụ: 3.2 + 2/3 + 1.5 thì sẽ cho kết quả sẽ bằng 4.7 thay vì kếtquả đúng phải bằng 5.36666666666667
Sử dụng một biểu thức mà trong đó chứa nhiều loại dữ liệu nhưnglại không biết chắc chắn kiểu dữ liệu của kết quả. 50
HÀM NHẬP XUẤT TRONG CONSOLE Thư viện hàm: iostream.h Hàm nhập giá trị từ bàn phím: cin>>tênbiến;
Ví dụ: int a;cin>>a; //Người dùng nhập giá trị từ phím sẽ lưu vào biến a
Hàm xuất giá trị ra màn hình: cout<<tênbiến hoặc chuỗi ký tự;Ví dụ: int a = 5;
cout<<“Gia tri cua a = “<<a;Các biến và chuỗi cách nhau bởi dấu << (chuỗi nằm trong cặp dấu nháy kép “” )Ví dụ:
int b = 7, c = 9;cout<< “Gia tri của b =“ << b << “ gia tri cua c = “ << c; 51
XUẤT CÓ ĐỊNH DẠNG
Thư viện iomanip.h
cout<<setw(n)<<tênbiến; Chừa 1 khoảng n ký tự để xuất giá trị
Ví dụ:int a=7, b=9;cout<<a<<setw(5)<<b;//Chừa 5 vị trí để xuất giá trị b
Kết quả: 7 952
XUẤT CÓ ĐỊNH DẠNGcout<<setprecision(n);Xuất số thập phân gồm n-1 chữ số lẻ (phần thập phân)
Ví dụ:float a=7.56745F, b=5.339F;cout<<a<<endl;cout<<setprecision(3)<<a<<endl;cout<<setprecision(2)<<b<<endl;cout<<setprecision(5)<<b;
Kết quả:7.567457.575.35.339
53
XUẤT KÝ TỰ ĐẶC BIỆT Ký tự Ý nghĩa Ví dụ
\’ Xuất dấu nháy đơncout<<“ \’ ”;Kết quả: ‘
\” Xuất dấu nháy đôicout<<“ \” ”;Kết quả: “
\\ Xuất dấu chéo ngược “\”cout<<“ \\ ”;Kết quả: \
\0 Ký tự Null Dùng để gán ký tự kết thúc của chuỗi
\a Alert : Tiếng bip
\t Tab vào một đoạn ký tự trắngcout<<"xyz\tzyx”;Kết quả: xyz zyx
\b Xuất lùi về saucout<<"xyz\t\bzyx”;Kết quả: xyzzyx
\nhoặc endl
Xuống dòngcout<<"xyz\nzyx”;Kết quả: xyz
zyx
\r Về đầu dòngcout<<"xyz\rzyx”;Kết quả: zyx
54
22/04/2011
10
BÀI TẬPCho biết kết quả của những lệnh sau:int a, b;b=a++ + ++a + --a;cout<<"a=“<<a<<“, b=“<<b;Với a = 2 Kết quả:Với a = 9 Kết quả:----------------------------------------------------------------------int a, b;b=--a + --a;--b;cout<<"a=“<<a<<“, b=“<<b;Với a = 19 Kết quả:Với a = 10 Kết quả:
55
int a, b;b=a%2 + a/2 + --a;cout<<"a=“<<a<<“, b=“<<b;Với a = 17 Kết quả:Với a = 3 Kết quả:------------------------------------------------------------------------ ----------------------------------------------------------------------
int a, b;b=a/3 + a--;cout<<"a=“<<a<<“, b=“<<b;Với a = 8 Kết quả:Với a =21 Kết quả:------------------------------------------------------------------------ ----------------------------------------------------------------------
int k;cout<<(k%3==0)?k++: k--;Với k =10 Kết quả:Với k =15 Kết quả:
56
Các định danh nào sau đây là không hợp lệ? i. Mainii. Tinh Tongiii. Tinh-Tongiv. Tinh_Tongv. x_Mu_2 vi. 2_Mu_2vii. using viii. class ix. Tien$ x. default xi. yahoo.com
57
Cho biết những chỗ sai và sửa lại cho đúngint n = -100;uint i = -100;int = 2.9;long m = 2, p = 4;int 2k;float y = y * 2;char ch = “b”;
Viết chương trình in ra màn hình thông tin cá nhân theomẫu sau:Ho ten:Lop:Thong tin lien lac:
Dia chi:So dien thoai:
58
Viết chương trình nhập vào giờ phút và giây, đổi ra giâyvà xuất kết quả ra màn hình.
Viết chương trình nhập vào 3 số nguyên a, b và c, tínhgiá trị trung bình cộng của 3 số trên và xuất kết quả ramàn hình.
Viết chương trình nhập vào số nguyên dương n, tính tổngtừ 1 đến n và xuất kết quả ra màn hình.
Viết chương trình cho phép nhập vào một số đo nhiệt độtheo độ Fahrenheit và xuất ra nhiệt độ tương đương củanó theo độ Celsius, sử dụng công thức chuyển đổi:
Viết chương trình nhập vào 3 số nguyên a, b và c, chobiết 3 số vừa nhập có thứ tự tăng dần (a<b<c) không?Và xuất kết quả.
59
)32(95 00 FC
CHƯƠNG 3 CẤU TRÚC ĐIỀU KHIỂNLƯU ĐỒ (FLOWCHART)
60
22/04/2011
11
PHÂN TÍCH LỆNH ĐỂ XÁC ĐỊNH KẾT QUẢ Xác định xem chương trình có sử dụng những biến nào; Giá trị ban đầu của mỗi biến; Những biến nào sẽ bị thay đổi trong quá trình chạy chương trình
thì lập thành bảng có dạng sau:
61
Bước (hoặc lần lặp hoặc dòng lệnh
thực hiện)Biến 1 Biến 2 … Biến k
Kết quả trả về(hoặc in ra màn
hình)0 Giá trị 0 Giá trị 0 … Giá trị 01 Giá trị 1 Giá trị 1 … Giá trị 12 Giá trị 2 Giá trị 2 … Giá trị 2... … … … …… … … … …
Lưu ý từng lệnh và xét kỹ giá trị của biểu thức điềukiện trong đoạn chương trình
CÁC KÝ HIỆU LƯU ĐỒ
62
CẤU TRÚC TUẦN TỰ
Tuần tự thực thi tiến trình, mỗi lệnh được thực thi theo một chuỗi từ trên xuống, xong lệnh này rồi chuyển xuống lệnh kế tiếp.
63 64
void main(){ int a, b, tong, hieu, tich;
float thuong;cout<<"Nhap vao a: “;cin>>a;cout<<"Nhap vao b: “;cin>>b;tong = a + b;hieu = a - b;tich = a * b;thuong = (float)a / b;cout<<"Tong: " <<tong;cout<<"Hieu: “<<hieu;cout<<"Tich: “<<tich;cout<<"Thuong: “<<thuong;
}
65
CẤU TRÚC RẼ NHÁNH
Cấu trúc rẽ nhánh chỉ cho máy tính chọn thực hiện mộtdãy lệnh nào đó dựa vào kết quả của một điều kiện (biểuthức quan hệ hay biểu thức so sánh)
Gồm 2 dạng:Chỉ xét trường hợp đúngif (biểu thức điều kiện){
<khối lệnh> ;}Nếu biểu thức điều kiện cho kết quả true thì thực hiện khối lệnh bên trong if.
66
22/04/2011
12
Ví dụ: Viết chương trình nhập vào một số nguyêntừ 1 đến 10, nếu nhập sai thì thông báo
67
void main(){
int k;cout<<"Hay nhap mot so tu 1 den 10: “;cin>>k;if (k < 1 || k > 10)
cout<<"So ban vua nhap khong hop le";
}
68
Xét cả hai trường hợp đúng và sai:if (biểu thức điều kiện){
<khối lệnh 1>;}else{
<khối lệnh 2>;}
Nếu biểu thức điều kiện cho kết quả true thì thực hiện khối lệnh 1, ngược lại thì cho thực hiện khối lệnh thứ 2
69
Ví dụ 1: Nhập vào số nguyên a và b, nếu a là bội số của b thì inthông báo “a là bội số của b”, ngược lại in “a khong la boi so cua b”
70
void main(){
int a, b;cout<<“Nhap vao a: “;cin>>a;cout<<“Nhap vao b: “;cin>>b;if(a%b= =0)
cout<<“a la boi so cua b”;else
cout<<“a khong la boi so cua b”;}
71
Ví dụ 2: Giải và biện luận phương trình: ax+b=0
72
22/04/2011
13
void main(){ float a, b;
cout<<"Nhap vao a: “;cin>>a;cout<<“Nhap vao b: “;cin>>b;if (a == 0)
if (b == 0)cout<<"Phuong trinh vo so nghiem”;
elsecout<<"Phuong trinh vo nghiem”;
elsecout<<"Phuong trinh co nghiem x = “<< -b / a;
} 73
BÀI TẬP – CHO BIẾT KẾT QUẢ
int a=9, b=6;a++;a=a+b--;a=a+(--b);if(a%2==0)
cout<<"Gia tri cua a la chan”;cout<<"Tong cua a va b la: " <<(a + b);
74
int a=7, b=8;a++;a=a+b--;--b;a--;a = (--a)+(--b);if(a%2 != 0)
cout<<"a la so le”;else
cout<<"a la so chan”;cout<<"Gia tri cua a: " <<a; 75
int x = 5, y;y = x++ + 5;cout<<"x= " <<x<<", y= “<<y;y *= 6;x = y % 7;cout<<"x= “<<x<<", y= “<<y<<", y/x= “<<y/x;
76
BÀI TẬP – VẼ LƯU ĐỒ VÀ VIẾT CHƯƠNG TRÌNH
1. Nhập vào hai số nguyên a, b. In ra màn hình giá trị lớn nhất.
2. Cho ba số a, b, c đọc vào từ bàn phím. Hãy tìm giá trị lớn nhất của ba số trên và in ra kết quả.
3. Cho ba số a, b, c đọc vào từ bàn phím. Hãy in ra màn hình theo thứ tự tăng dần các số. (Chỉ được dùng thêm hai biến phụ).
4. Viết chương trình nhập vào một số nguyên n gồm ba chữ số. Xuất ra màn hình chữ số lớn nhất ở vị trí nào?Ví dụ: n=291. Chữ số lớn nhất nằm ở hàng chục (chữsố 9). 77
5. Viết chương trình nhập vào số nguyên n gồm ba chữ số. Xuất ra màn hình theo thứ tự tăng dần của các chữ số.Ví dụ: n=291. Xuất ra 129.
6. Nhập vào ngày, tháng, năm. Kiểm tra xem ngày, tháng, năm đó có hợp lệ hay không? In kết quả ra màn hình.
7. Nhập vào giờ, phút, giây. Kiểm tra xem giờ, phút, giây đó có hợp lệ hay không? In kết quả ra màn hình.
8. Viết chương trình nhập vào ngày, tháng, năm hợp lệ. Cho biết năm này có phải là năm nhuận hay không? In kết quả ra màn hình.
9. Viết chương trình tính diện tích và chu vi các hình: tam giác, hình vuông, hình chữ nhật và hình tròn với những thông tin cần được nhập từ bàn phím.
78
22/04/2011
14
10. Viết chương trình tính tiền cước TAXI. Biết rằng:km đầu tiên là 13000đ.Mỗi km tiếp theo là 12000đ.Nếu lớn hơn 30km thi mỗi km thêm sẽ là 11000đ.Hãy nhập sô km sau đo in ra sô tiền phải tra.
11. Nhập vào 3 sô nguyên dương. Kiểm tra xem 3 sôđo có lập thành tam giác không? Nếu có hãy cho biếttam giác đo thuộc loại nào? (Cân, vuông, đều, …).
12. Viết chương trình nhập vào sô nguyên dương n.Kiểm tra xem n có phải là sô chính phương haykhông? (sô chính phương là sô khi lấy căn bậc 2 cókết quả là nguyên).
79
CẤU TRÚC LỰA CHỌNswitch (biểu thức)
case n1: các câu lệnh ;
break ;case n2:
các câu lệnh ;break ;
………case nk:
<các câu lệnh> ;break ;
[default: các câu lệnh]
80
Với:ni là các hằng số nguyên hoặc ký tự.Phụ thuộc vào giá trị của biểu thức viết sau switch, nếu: Giá trị này = ni thì thực hiện câu lệnh sau case ni. Khi giá trị biểu thức không thỏa tất cả các ni thì thực
hiện câu lệnh sau default nếu có, hoặc thoát khỏi câu lệnh switch.
Khi chương trình đã thực hiện xong câu lệnh của caseni nào đó thì nó sẽ thực hiện luôn các lệnh thuộc case bên dưới nó mà không xét lại điều kiện (do các niđược xem như các nhãn) Vì vậy, để chương trình thoát khỏi lệnh switch sau khi thực hiện xong một trường hợp, ta dùng lệnh break. 81
Ví dụ: Nhập vào số nguyên n có giá trị từ 1 đến 5. In cách đọc của số đó ra màn hình.
void main(){ int n;
cout<<"Nhap vao n (1<=n<=5): “;cin>>n;switch (n){
case 1: cout<<"So mot”; break;case 2: cout<<"So hai"; break;case 3: cout<<"So ba”; break;case 4: cout<<"So bon”; break;case 5: cout<<"So nam”; break;default : cout<<"Khong doc duoc";
}}
82
BÀI TẬP – VẼ LƯU ĐỒ VÀ VIẾT CHƯƠNG TRÌNH
13. Viết chương trình nhập vào 1 sốnguyên dương gồm 3 chữ số, in ra cáchđọc của số này
Sites.google.com/site/thaitranminh
83
CẤU TRÚC LẶP
84
22/04/2011
15
FOR
for (<biểu thức khởi gán> ; <biểu thức điều kiện> ; <biểu thức tăng/giảm>)
{<khối lệnh>;
}
Bất kỳ biểu thức nào trong 3 biểu thức nói trên đều có thể vắng nhưng phải giữ dấu chấm phẩy (;)
85
HOẠT ĐỘNG
86
Bước 1: Khởi gán cho biểu thức 1Bước 2: Kiểm tra điều kiện của biểu thức 2.
Nếu biểu thức 2 bằng true thì cho thực hiện các lệnh của vòng lặp, thực hiện biểu thức 3. Quay trở lại bước 2.Ngược lại thoát khỏi lặp.
87
Ví dụ: In ra màn hình 10 dòng chữ “Xin chao”
88
void main(){
for (int buoc = 1; buoc <= 10; buoc++)cout<<"Xin chao“<<endl;
}
89
Ví dụ: Tính tổng: , với n>0
90
nS 321
22/04/2011
16
WHILE
< Khởi gán>while ( <biểu thức điều kiện>)
lệnh/ khối lệnh;<biểu thức tăng/ giảm>
Lưu ý: Cách hoạt động của while giống for
91
Ví dụ: In ra màn hình 10 dòng chữ “Xin chao”
void main(){
int buoc = 1; while(buoc <= 10){
cout<<"Xin chao“<<endl;buoc++;
}} 92
DO … WHILE
< Khởi gán>do{
<khối lệnh>;<biểu thức tăng/ giảm>;
} while (biểu thức điều kiện); Thực hiện khối lệnh cho đến khi biểu thức có giá trị bằng false. Cấu trúc lặp do…while thường dùng cho
trường hợp nhập có kiểm tra điều kiện 93
Ví dụ: Nhập vào một số nguyên dương, nếu nhập vào sốbằng hoặc nhỏ hơn 0 thì thông báo lỗi và yêu cầu nhậplại.
void main(){
int n;do{cout<<"Nhap vao mot so nguyen duong: ";cin>>n;if (n <= 0)
cout<<"Nhap sai, hay nhap lai!“<<endl;} while (n <= 0);cout<<"Ban da nhap dung, ket thuc chuong trinh”;
}
94
Ngược lại với cấu trúc lặp forvà while (kiểm tra điều kiện trước khi thực hiện lặp), vòng lặpdo…while thực hiện lệnh lặp rồi mới kiểm tra điều kiện. Do đó vòng lặp do...while thực hiện lệnh ít nhất một lần.
95
LỆNH BREAK VÀ CONTINUE
Lệnh break: thoát khỏi các cấu trúc switch,while, for, do…while chứa nó gần nhất(đang chứa break) tại thời điểm break đượcgọi thi hành mà không cần kiểm tra kết quảcủa biểu thức điều kiện. Tuy nhiên, cầnphân biệt với lệnh return là lệnh trả về từhàm, nghĩa là thoát khỏi hàm đang thi hành,nên cũng giúp thoát luôn khỏi tất cả cácvòng lặp.
96
22/04/2011
17
LỆNH BREAK VÀ CONTINUE
Lệnh continue: được sử dụng trong cácvòng lặp như while, for, do…while. Khilệnh continue được gọi thì chương trình sẽquay trở về đầu vòng lặp để bắt đầu lần lặpmới (có kiểm tra điều kiện lặp để xác địnhcó lặp tiếp hay không). Nếu có các lệnh cònlại (cùng trong vòng lặp) đặt sau continuesẽ không được thực hiện. Nói tóm lại, lệnhcontinue dùng để bỏ qua một lần lặp nào đónếu thỏa điều kiện.
97
Ví dụ: Cho phép người dùng nhập liên tục số nguyên dương, nếu nhập số nguyên âm thì dừngvoid main(){ int n;
while (true){
cout<<"Nhap gia tri n: “;cin>>n;if (n <= 0){
cout<<"Ket thuc vong lap”;break;
}}
}98
Ví dụ: In ra màn hình giá trị từ 10 đến 20 trừ đi số 13 và số 17.
void main(){
for (int k = 10; k <= 20; k++){
cout<<k<<" ";if (k == 13 || k == 17)
continue;}
}99
CHO BIẾT KẾT QUẢint a=18;for(int i = 1; i <= a; i++)
if(a%i == 0)cout<<i <<“\t”;
---------------------------------------------------------------------for(int i = 0; i < 5; i++){
for(int j = 0; j <= i; j++)cout<<j<<“\t”;
cout<<endl;} 100
int i = 10, s = 0;while(i > 0){
if(i%2 == 0)s+=i;
elseif(i > 5)
s+=2*i;i--;
}cout<<“s = ” <<s; 101
int a = 18, i = 1;do{
if(a%i == 0)cout<<i<<“\t”;
i++;} while(i <= a);
102
22/04/2011
18
int a = 11, b = 16, i = a;while( i < b ){
if(i%2 == 0){
Console.Write(i + "\t");break;
}i++;
} 103
int a = 10, s = 0, i = 0;while( i < a ){
i++;if (i % 2 == 0)
continue;else
s=s+i;}cout<<"s = " <<s; 104
int i = 1, s = 0;while(true){
s = s + i++;if (i % 2)
i = i + 2;else
i = i + 1;if (i > 20)
break;}cout<<"s = " <<s;
105
14. Viết chương trình nhập số nguyên dương n. Liệt kê n số nguyên tố đầu tiên.
15. Viết chương trình nhập vào hai số nguyên dương a và b. Tìm ước số chung lớn nhất và bội số chung nhỏ nhất của a và b.
16. Viết chương trình nhập vào một số nguyên n gồm tối đa 10 chữ số (4 bytes). In ra màn hình giá trị nhị phân của số trên. (Hướng dẫn: chia lấy dư cho 2 và xuất theo thứ tự ngược lại).
17. Viết chương trình đếm số ước số của số nguyêndương N.Ví dụ: N=12số ước số của 12 là 6
106
18. Một số hoàn thiện là một số có tổng các ước số của nó (không kể nó) bằng chính nó. Hãy liệt kê các số hoàn thiện nhỏ hơn 5000.Ví dụ: số 6 là số hòan thiện vì tổng các ước số là 1+2+3 = 6.
19. Nhập vào ngày, tháng, năm. Cho biết đó là ngày thứ mấy trong năm.
20. In ra dãy số Fibonaci f1 = f0 =1; fn = fn-1 + fn-2; (n>1)
107
XÁC ĐỊNH KẾT QUẢ BẰNG CÔNG CỤ DEBUG
Dùng để xác định lỗi logic (lỗi thiết kế giải thuật) trong chương trình. Mặc dù chương trình không còn lỗi nhưng khi chạy chương trình vẫn ra kết quả sai, những lỗi đó có thể là:
Dùng chấm phẩy sau: if, else, for, while, do…while mà chưa thực hiện lệnh;
Không dùng cặp dấu ngoặc nhọn ({}) để bao khối lệnh;Khai báo sai kiểu dữ liệu;Chia cho 0;Không có điều kiện dừng (điều kiện dừng sai);Phân tích thuật toán thiếu (chưa vét hết các trường hợp)
hoặc sai;
108
22/04/2011
19
Bước 1: Đặt dấu nháy vào vị trí bắt đầucần kiểm tra lỗi
109
Bước 2: Nhấn phím Ctrl + F10
110
Quan sát vị trí dấu mũi tên trên cửa sổ viết code đểxác định xem chương trình chạy đến dòng lệnhnào và sẽ thực hiện lệnh tương ứng.
Cửa sổ Locals (nếu không thấy cửa sổ này thì cóthể vào menu View\ Debug Windows\ Variableshoặc nhấn phím Alt+4) sẽ thể hiện tên (name), giátrị (value) và kiểu (type) của các biến cục bộ trongđoạn chương trình.
Cửa sổ Watch (nếu không thấy cửa sổ này vàomenu View\ Debug Windows\ Watch hoặc nhấnAlt+3) cũng có thể quan sát chi tiết biến tương tựnhư cửa sổ Locals, nhưng chỉ thể hiện những biếnnào mà ta nhập tên biến tương ứng vào cửa sổ này.
111
Bước 3: Nhấn phím F10 để thực hiệnlệnh kế tiếp (hoặc phương thức kếtiếp).Nếu muốn xem lệnh thực hiện bêntrong của hàm thì nhấn phím F11 (nếulệnh là lời gọi thực hiện phương thức –lưu ý: không nên nhấn phím F11 khithực hiện các phương thức thư viện (vídụ: cin, cout)
112
Chương 4HÀM CON
22/04/2011
113
CẤU TRÚC CHƯƠNG TRÌNH C
22/04/2011
114
Khai báo
Cài đặt hàm
Hàm main()
CH
ƯƠ
NG
TR
ÌNH
C
Khai báo thư viện hàmKhai báo hàmKhai báo hằng số …
Cài đặt tất cả những hàm con đã được khai báo
Gọi thực hiện các hàm theo yêu cầu của bài toán
22/04/2011
20
int Tong(int a, int b){
int s=a+b;return s;
}
void main(){
int kq = Tong (12, 3);
cout<<“Tong cua 12 va 3: “<<kq;}
22/04/2011
115
Truyền đối số
Tham số
Gọi hàm
KHÁI NIỆM
Hàm là một đoạn chương trình độc lập thực hiện trọn vẹn một công việc nhất định sau đó trả về giá trị cho chương trình gọi nó, hay nói cách khác hàm là sự chia nhỏ của chương trình.
Mục đích sử dụng hàm: Khi có một công việc giống nhau cần thực hiện ở nhiều vị trí.Khi cần chia một chương trình lớn phức tạp thành các đơn thể nhỏ (hàm con) để chương trình được trong sáng, dễ hiểu trong việc xử lý, quản lý việc tính toán và giải quyết vấn đề.
22/04/2011
116
Mẫu tổng quát của hàm<Kiểu dữ liệu> TênHàm([ds các tham số]);Trong đó: Kiểu dữ liệu trả về của hàm (kết quả của hàm/ đầu ra), gồm
2 loại void: Không trả về giá trị float / int / long / char */ kiểu cấu trúc / … : Trả về giá
trị kết quả có kiểu dữ liệu tương ứng với bài toán (chỉ trảvề được 1 giá trị theo kiểu dữ liệu)
22/04/2011
117
TênHàm: Đặt tên theo qui ước sao cho phản ánh đúngchức năng thực hiện của hàm
Danh sách các tham số (nếu có): đầu vào của hàm (trongmột số trường hợp có thể là đầu vào và đầu ra của hàmnếu kết quả đầu ra có nhiều giá trị - Tham số này gọi làtham chiếu)
22/04/2011
118
HÀM TRẢ VỀ KIỂU VOID
Cài đặtvoid TênHàm([danh sách các tham số]){ Khai báo các biến cục bộ
Các câu lệnh / khối lệnh hay lời gọi đến hàm khác.}Gọi hàmTênHàm(danh sách tên các đối số);Những phương thức loại này thường rơi vào những nhóm chức năng: Nhập / xuất dữ liệu , thống kê, sắp xếp, liệt kê
22/04/2011
119
VÍ DỤ 1Viết chương trình nhập số nguyên dương n và in ra màn hình các ước số của nPhân tích bài toán: Input: n (Để xác định tham số) Kiểu dữ liệu: số nguyên dương (int).
Output: In ra các ước số của n (Để xác định kiểu dữ liệu trả về của hàm) Xuất ra màn hình Không trả về giá trị Kiểu dữ
liệu của hàm là void . Xác định tên hàm: Hàm này dùng in ra các ước số của n
nên có thể đặt là LietKeUocSvoid LietKeUocSo(int n);
22/04/2011
120
22/04/2011
21
File khaibao.h#pragma once#include <iostream.h>void LietKeUocSo(int n);
File caidat.cpp#include “khaibao.h”void LietKeUocSo(int n){
for (int i = 1; i <= n; i++)if (n % i == 0)
cout<<i<<“\t”;}
File main.cpp#include “khaibao.h”void main(){
int n;cout<<"Nhap so nguyen duong n: ";cin>>n;cout<<"Cac uoc so cua “<<n<<“: “;LietKeUocSo(n);
}
22/04/2011
121
Có dấu chấm phẩy
Không dấu chấm phẩy
Kết quả chương trình
22/04/2011
122
HÀM TRẢ VỀ 1 GIÁ TRỊCài đặt<Kiểu dữ liệu trả về> TênHàm([danh sách các tham số]){
<Kiểu dữ liệu trả về> kq; Khai báo các biến cục bộ
Các câu lệnh / khối lệnh hay lời gọi đến hàm khác.return kq;
}Gọi hàm<Kiểu dữ liệu trả về của hàm> Tên biến = TênHàm (danh sách tên các
đối số);Những phương thức này thường rơi vào các nhóm: Tính tổng, tích,trung bình, đếm, kiểm tra, tìm kiếm
22/04/2011
123
VÍ DỤ 2 Viết chương trình nhập số nguyên dương n và tính tổng
Phân tích bài toán: Input: n (Để xác định tham số) Kiểu dữ liệu: số nguyên dương (int).Output: Tổng S (Để xác định kiểu dữ liệu phương thức) Trả về giá trị của S. S là tổng các số nguyên dương nên S cũng là số nguyên dương Kiểu trả về của hàm là int (hoặc long).
Xác định TênHàm: Dùng tính tổng S nên có thể đặt là TongSint TongS(int n);
22/04/2011
124
0;321 nnSn
File khaibao.h#pragma once#include <iostream.h>int TongS(int n);
File caidat.cpp#include “khaibao.h”int TongS(int n){
int kq = 0;for (int i = 1; i <= n; i++)kq + = i;return kq;
}
File main.cpp#include “khaibao.h”void main(){
int n, S;cout<<"Nhap vao so nguyen n: ";cin>>n;S = TongS(n);cout<<"Tong tu 1 den n: " <<S;
}
22/04/2011
125
Kết quả
22/04/2011
126
22/04/2011
22
THAM SỐ LÀ THAM CHIẾU
Tham số làm kết quả đầu ra Tham số vừa làm đầu vào và đầu ra Dùng dấu & phía trước tên tham số khi cài đặt hàm
22/04/2011
127
VÍ DỤ 3
Xét chương trình hoán vị 2 số nguyên a, b cho trước Viết chương trình với 2 trường hợp3.1. Trường hợp không dùng tham chiếu3.2. Trường hợp dùng tham chiếu
22/04/2011
128
void HoanVi(int a, int b){
int tam = a;a = b;b = tam;cout<<"Trong HoanVi: a = “<<a<<“ ;b = “<<b;
}
void main(){
int a = 5, b = 21;cout<<"Truoc khi HoanVi: a = “<<a<<“ ; b = “<<b;HoanVi(a, b);cout<<"Sau khi goi HoanVi: a = “<<a<<“ ;b = “<<b;
}
22/04/2011
129
Kết quả
22/04/2011
130
void HoanVi(int &a, int &b){
int tam = a;a = b;b = tam;cout<<"Trong HoanVi: a = “<<a<<“ ;b = “<<b;
}
void main(){
int a = 5, b = 21;cout<<"Truoc khi HoanVi: a = “<<a<<“ ; b = “<<b;HoanVi(a, b);cout<<"Sau khi goi HoanVi: a = “<<a<<“ ;b = “<<b;
}
22/04/2011
131
Kết quả
22/04/2011
132
22/04/2011
23
NGUYÊN TẮC XÂY DỰNG HÀM
Trước khi xây dựng hàm phải trả lời những câu hỏi sau: Hàm trả về gì? Xác định kiểu dữ liệu trả về của hàm Hàm làm gì? Xác định tên hàm Cần những thông tin gì để hàm xử lý? Xác định tham số
Ứng với mỗi thông tin đã xác định, xác định xem đã có giá trị trước khi vào hàm chưa, - Nếu chưa có Tham chiếu- Nếu có mà sau khi thực hiện xong hàm vẫn không thay đổi Tham trị (không là tham chiếu)- Nếu có mà sau khi thực hiện xong hàm thì giá trị cũng bị thay đổi theo Tham chiếu
22/04/2011
133
BÀI TẬP 1
Xác định các khai báo hàm của các bài toán sau:1.Viết chương trình tính diện tích và chu vi của hình chữ
nhật với chiều dài và chiều rộng được nhập từ bàn phím.2.Viết chương trình tính diện tích và chu vi hình tròn với
bán kính được nhập từ bàn phím.3.Nhập vào 3 số thực a, b, c và kiểm tra xem chúng có
thành lập thành 3 cạnh của một tam giác hay không? Nếu có hãy tính diện tích, chiều dài mỗi đường cao của tam giác và in kết quả ra màn hình.
4.Viết chương trình nhập 2 số nguyên dương a, b. Tìm USCLN và BSCNN của hai số nguyên đó
22/04/2011
134
BÀI TẬP 2
1. Cài lại các bài tập ở chương 2 bằng phương pháp hàm2. Viết chương trình nhập số nguyên dương n, tính tổng các
ước số dương của n.Ví dụ: Nhập n=6
Tổng các ước số từ 1 đến n: 1+2+3+6=12.3. Nhập vào giờ, phút, giây. Kiểm tra xem giờ, phút, giây đó
có hợp lệ hay không? In kết quả ra màn hình.
22/04/2011
135
BÀI TẬP VỀ NHÀ
1. Cài đặt hoàn chỉnh bài tập 1 Gợi ý bt tam giác Công thức tính diện tích
s = sqrt(p*(p-a)*(p-b)*(p-c) ) Công thức tính các đường cao:
ha = 2s/a, hb=2s/b, hc=2s/c.2. Viết chương trình nhập số nguyên dương n gồm k chữ
số, đếm xem n có bao nhiêu chữ số là số nguyên tố.
22/04/2011
136
4. Viết chương trình tính tiền thuê máy dịch vụ Internet vain ra màn hình kết quả. Với dư liệu nhập vào là giơ bắtđầu thuê (GBD), giơ kết thúc thuê (GKT), sô máy thuê(SoMay). Điều kiện cho dư liệu nhập: 6<=GBD<GKT<=21.
Giơ là sô nguyên. Đơn gia : 2500đ cho mỗi giơ máy trước 17:30 va
3000đ cho mỗi giơ máy sau 17:30.5. Viết chương trình tính tiền lương ngày cho công nhân,
cho biết trước giơ vào ca, giơ ra ca của mỗi người.Gia sư rằng: Tiền tra cho mỗi giơ trước 12 giơ là 6000đ va sau 12
giơ là 7500đ. Giơ vào ca sớm nhất là 6 giơ sáng va giơ ra ca trê
nhất là 18 giơ (Gia sư giơ nhập vào nguyên).
22/04/2011
137