Lập trình đọc vào từ bàn phím 2 giá trị a, b rồi tính y 15 x2 x 7.2 trong đó

Loading Preview

Sorry, preview is currently unavailable. You can download the paper by clicking the button above.

giáo trình lập trình c

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây [401.56 KB, 55 trang ]

LẬP TRÌNH C
I.MỘT SỐ KHÁI NIỆM CƠ BẢN TRONG C
1.1. Bộ ký tự
Mọi ngôn ngữ lập trình đều được xây dựng từ một bộ ký tự nào đó. Ngôn ngữ C được xây dựng trên bộ ký tự sau:
26 chữ cái hoa : A B C .. Z
26 chữ cái thường : a b c .. z
10 chữ số : 0 1 2 .. 9
Các ký hiệu toán học : + - * / = [ ]
Ký tự gạch nối : _
Các ký tự khác : . , : ; [ ] {} ! \ & % # $ ...
Dấu cách [space] dùng để tách các từ.
@Lưu ý: Khi viết chương trình, ta không được sử dụng bất kỳ ký tự nào khác ngoài các ký tự trên.
1.2 Từ khóa
Từ khoá là những từ được sử dụng để khai báo các kiểu dữ liệu, để viết các toán tử và các câu lệnh. Bảng dưới đây liệt
kê các từ khoá của TURBO C:
Asm
break
case
cdecl
Char
const
continue
default
Do
double
else
enum
extern
far
float
for


Goto
huge
if
int
interrupt
long
near
pascal
register
return
short
signed
sizeof
static
struct
switch
tipedef
union
unsigned
void
volatile
while
@Lưu ý:
- Không được dùng các từ khoá để đặt tên cho các hằng, biến, mảng, hàm,...
- Từ khoá phải được viết bằng chữ thường, ví dụ: viết từ khoá khai báo kiểu nguyên là int chứ không phải là INT.
1.3 Tên
Khái niệm tên rất quan trọng trong quá trình lập trình, nó không những thể hiện rõ ý nghĩa trong chương trình mà còn
dùng để xác định các đại lượng khác nhau khi thực hiện chương trình. Tên thường được đặt cho hằng, biến, mảng, con
trỏ, nhãn,… Chiều dài tối đa của tên là 32 ký tự.
Tên biến hợp lệ là một chuỗi ký tự liên tục gồm: Ký tự chữ, số và dấu gạch dưới. Ký tự đầu của tên phải là chữ hoặc dấu


gạch dưới. Khi đặt tên không được đặt trùng với các từ khóa.
Ví dụ 1.1:
Các tên đúng: delta, a_1, Num_ODD, Case
Các tên sai:
3a_1 [ký tự đầu là số]
num-odd [sử dụng dấu gạch ngang]
int [đặt tên trùng với từ khóa]
del ta [có khoảng trắng]
f[x] [có dấu ngoặc tròn]
Ví dụ 1.2: number khác Number
case khác Case [case là từ khóa, do đó bạn đặt tên là Case vẫn đúng]
@Lưu ý: Trong C, tên phân biệt chữ hoa, chữ thường
1.4 Kiểu dữ liệu
Có 4 kiểu dữ liệu cơ bản trong C là: char, int, float, double.
TT
Kiểu dữ liệu
Kích thước
1
unsigned char
1 byte
2
char
1 byte
3
enum
2 bytes
4
unsigned int
2 bytes
5


short int
2 bytes
6
int
2 bytes

Miền giá trị
0 đến 255
– 128 đến 127
– 32,768 đến 32,767
0 đến 65,535
– 32,768 đến 32,767
– 32,768 đến 32,767


7
8
9
10
11

unsigned long
long
float
double
long double

4 bytes
4 bytes
4 bytes


8 bytes
10 bytes

0 đến 4,294,967,295
– 2,147,483,648 đến 2,147,483,647
3.4 * 10–38 đến 3.4 * 1038
1.7 * 10–308 đến 1.7 * 10308
3.4 * 10–4932 đến 1.1 * 104932

1.5 Lời chú thích
Trong khi lập trình cần phải ghi chú để giải thích các biến, hằng, thao tác xử lý giúp cho chương trình rõ ràng dễ hiểu, dễ
nhớ, dễ sửa chữa và để người khác đọc vào dễ hiểu. Trong C có các ghi chú sau: // hoặc /* nội dung ghi chú */
Tóm lại, đối với ghi chú dạng // dùng để ghi chú một hàng và dạng /* …. */ có thể ghi chú một hàng hoặc nhiều hàng.
II. CẤU TRÚC CỦA MỘT CHƯƠNG TRÌNH C
Một chương trình bao gồm một hoặc nhiều hàm, mỗi hàm được người lập trình tổ chức để giải quyết một hoặc một số công
việc nào đó của bài toán cần giải quyết. Một chương trình C để có thể thực thi được luôn cần phải có hàm main[].
Cấu trúc cơ bản của chương trình như sau:
• Các #include [ dùng để khai báo sử dụng các hàm chuẩn]
• Các #define [ dùng để định nghĩa các hằng ]
• Khai báo các đối tượng dữ liệu ngoài [ biến, mảng, cấu trúc vv..].
• Khai báo nguyên mẫu các hàm.
• Hàm main[].
• Định nghĩa các hàm [ hàm main có thể đặt sau hoặc xen vào giữa các hàm khác].

1
2
3
4
5
6


7
8
9

Ví dụ 1.3:
?
#include
//k.báo sử dụng thư viện xuất/nhập chuẩn của C
void main[void]
{
double x,y;
//Khai báo 2 biến x,y
//kiểu số thực
printf["\n Nhap x va y"];
//xuất dữ liệu ra màn hình
scanf["%lf%lf",&x,&y];
//nhập dữ liệu từ bàn phím
}

//và lưu vào vùng địa chỉ

@Lưu ý: Một số qui tắc cần nhớ khi viết chương trình:
- Mỗi câu lệnh có thể viết trên một hay nhiều dòng nhưng phải kết thúc bằng dấu [;].
- Trong chương trình, khi ta sử dụng các hàm chuẩn, ở đầu chương trình ta phải khai báo sử dụng, ví dụ: #include "stdio.h".
III. HẰNG - BIẾN - TOÁN TỬ - BIỂU THỨC
3.1 Khai báo hằng
Hằng là các đại lượng mà giá trị của nó không thay đổi trong quá trình tính toán. Nguyên tắc đặt tên hằng theo nguyên
tắc đặt tên của C.
+ Khai báo
Cú pháp:


#define
Diễn giải:
#define: Từ khóa để định nghĩa một biến hằng
: là tên của hằng mà ta cần định nghĩa
: Giá trị khởi gán cho hằng
Ví dụ:
#define MAX 1000
Lúc này, tất cả các tên MAX trong chương trình xuất hiện sau này đều được thay bằng 1000. Vì vậy, ta thường gọi
MAX là tên hằng, nó biểu diễn số 1000.
3.2 Khai báo biến
+ Khai báo
Cú pháp:


1
2
3
4
5
6
7
8

;
Diễn giải:
- : là kiểu dữ liệu muốn khai báo cho biến
- : gồm các tên biến có cùng kiểu dữ liệu, mỗi tên biến cách nhau dấu phẩy [,], cuối cùng là dấu chấm
phẩy [;].
Ví dụ
int iTuoi; //khai báo biến iTuoi có kiểu int


float fTrongLuong; //khai báo biến fTrongLuong có kiểu float
char cKyTu1, cKyTu2; //khai báo biến cKyTu1, cKyTu2 có kiểu char
+ Vừa khai báo vừa khởi gán giá trị cho biến
Có thể kết hợp việc khai báo với toán tử gán để biến nhận ngay giá trị lúc mới khai báo.
Ví dụ
Khai báo trước, gán giá trị sau
?
void main[void]
{
int a, b, c;
a = 1;
b = 2;
c = 5;

}

1
2
3
4
5

Vừa khai báo vừa gán giá trị:
?
void main[void]
{
int a = 1, b = 2, c = 5;

}
+ Phạm vi của biến


Khi lập trình, phải nắm rõ phạm vi của biến. Nếu khai báo và sử dụng không đúng, không rõ ràng sẽ dẫn đến sai sót khó
kiểm soát được.
a. Khai báo biến ngoài [biến toàn cục]:
Vị trí biến đặt bên ngoài tất cả các hàm, cấu trúc...Các biến toàn cục có ảnh hưởng đến toàn bộ chương trình. Chu trình
sống của nó là bắt đầu từ khi chạy chương trình đến lúc kết thúc chương trình.
b. Khai báo biến trong [biến cục bộ]:
Vị trí biến đặt bên trong hàm, cấu trúc…. Chỉ ảnh hưởng nội bộ bên trong hàm, cấu trúc đó…. Chu trình sống của nó bắt
đầu từ lúc hàm, cấu trúc được gọi thực hiện đến lúc thực hiện xong.
3.3 Biểu thức
Biểu thức là sự phối hợp của những toán tử và toán hạng.
Ví dụ:
a+b
b = 1 + 5 * 2/i
a = 6 % [7 + 1]
x++ * 2/4 + 5 – power[i, 2]
Toán hạng sử dụng trong biểu thức có thể là hằng số, biến, hàm.
3.4 Phép toán
Trong C có 4 nhóm toán tử chính yếu sau đây:
+ Phép toán số học
+ : phép cộng
– : phép trừ
* : phép nhân
/ : phép chia
% : phép chia lấy phần dư, được áp dụng trên các toán hạng có kiểu dữ liệu char, int, long
+ Phép toán quan hệ
> : lớn hơn
>= : lớn hơn hoặc bằng
< : nhỏ hơn
> : dịch phải
b]? a:b;
kết quả là max = 5
IV. NHẬP VÀ XUẤT DỮ LIỆU
4.1 Lệnh xuất
Cú pháp:
printf ["chuỗi định dạng"[, đối mục 1, đối mục 2,…]];
Chức năng: Đưa kết quả các ra màn hình
- : dùng để định dạng cho dữ liệu xuất ra màn hình của các
- , …: là các mục dữ kiện cần in ra màn hình. Các có thể là biến, hằng hoặc biểu


thức phải được định trị trước khi in ra.
- Chuỗi định dạng: được đặt trong cặp nháy kép [" "], gồm 3 loại:


1
2
3
4
5
6
7

+ Đối với chuỗi kí tự ghi như thế nào in ra giống như thế ấy.
+ Đối với những kí tự chuyển đổi dạng thức cho phép kết xuất giá trị của các đối mục ra màn hình tạm gọi là mã định dạng.
Sau đây là các dấu mô tả định dạng:
%c : Ký tự đơn
%s : Chuỗi
%d : Số nguyên hệ thập phân
%f : Số chấm động [ký hiệu thập phân]
%e : Số chấm động [ký hiệu có số mũ]
%g : Dùng %e hoặc %f, tuỳ theo loại nào ngắn hơn, không in các số 0 vô nghĩa
%x : Hệ 16 không dấu
%u : Số thập phân không dấu
%o : Số nguyên bát phân không dấu
l : Tiền tố dùng kèm với %d, %u, %x, %o để chỉ số nguyên dài [ví dụ %ld]
Ví dụ:
?
#include
//cần khai báo tiền xử lý stdio.h, vì trong hàm main[]
// có dùng hàm printf


void main [void]
{
printf[“Hello!”];
}

1
2
3
4
5
6
7
8

//Cho ra màn hình kết quả: Hello
Ví dụ:
?
#include
//cần khai báo tiền xử lý stdio.h, vì trong hàm main[]
// có dùng hàm printf
void main [void]
{
int n=65;
printf[“Gia tri cua n la: %d”,n];
}
//Cho ra màn hình kết quả: Gia tri cua n la:65
//%d dùng để định dạng cho giá trị của n
// nếu thay %d thành %c thì kết quả cho ra màn hình là: Gia tri cua n la A, vì %c là mã định dạng cho ký tự, tương ứng với
mã 65 là ký tự A
+ Các ký tự điều khiển và ký tự đặc biệt


\n : Nhảy xuống dòng kế tiếp canh về cột đầu tiên.
\t : Canh cột tab ngang.
\r : Nhảy về đầu hàng, không xuống hàng.
\a : Tiếng kêu bip.
\\ : In ra dấu \
\" : In ra dấu "
\' : In ra dấu '
%%: In ra dấu %
Vi dụ:


4.2 Lệnh nhập
Cú pháp: scanf ["chuỗi định dạng"[, đối mục 1, đối mục 2,…]];
Chức năng: Đọc dữ liệu từ bàn phím
- Đạnh dạng tương tự như hàm printf
Ví dụ
?
1
#include
2
void main[void]
3
{
4
5
float a,b,c
6
printf["nhap vao he so a, b, c"];
7
scanf["%f%f%f", &a,&b,&c];


8
}
-Nhập vào 3 số a, b,c phải cách nhau bằng khoảng trắng hoặc enter.
- Các ký tự định dạng là tương ứng từng cặp 1 của các biến
- Ký tự & là ký tự lấy địa chỉ của biến vì hàm scanf sẽ đọc dữ liệu từ bàn phím lưu vào vùng địa chỉ được xác định
4.3. Bài tập
1. Viết chương trình đọc vào 2 số nguyên và in ra kết quả của phép [+], phép trừ [-], phép nhân [*], phép chia [/].
2. Viết chương trình đọc từ bàn phím 3 số nguyên biểu diễn ngày, tháng, năm và xuất ra màn hình dưới dạng
"ngay/thang/nam".
V. CÂU LỆNH ĐIỀU KIỆN
5.1 Lệnh if
Câu lệnh if cho phép lựa chọn một trong hai nhánh tùy thuộc vào giá trị của biểu thức logic là đúng [true] hay sai [false]
- Dạng 1
Cú pháp:
if [bt_logic]


;
Diễn giải: Nếu bt_logic có giá trị đúng thì thực hiện khối lệnh và thoát khỏi if, ngược lại không làm gì cả và thoát
khỏi if.
Ví dụ 1: Viết chương trình nhập vào 2 số nguyên a, b. Tìm và in ra số lớn nhất.
a. Phác họa lời giải:
Trước tiên ta cho giá trị a là giá trị lớn nhất bằng cách gán a cho max [max là biến được khai báo cùng kiểu dữ liệu
với a, b]. Sau đó so sánh b với a, nếu b lớn hơn a ta gán b cho max và cuối cùng ta được kết quả max là giá trị lớn
nhất.
b. Viết chương trình
?
1
2
3


4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

#include
void main[void]{
int ia, ib, imax;
printf["Nhap vao so a: "];
scanf["%d", &ia];
printf["Nhap vao so b: "];
scanf["%d", &ib];
imax = ia;
if [ib > ia]
imax = ib;


printf["So lon nhat = %d.\n", imax];
}

- Dạng 2
Cú pháp:
if [bt_logic]
;
else
;
Diễn giải: Nếu bt_logic có giá trị đúng thì thực hiện khối lệnh 1 và thoát khỏi if, ngược lại thực hiện khối lệnh 2 và
thoát khỏi if.
Ví dụ 2: Viết chương trình nhập vào 2 số nguyên a, b. In ra thông báo "a bằng b" nếu a = b, ngược lại in ra thông báo "a
khác b".
a. Phác họa lời giải:
So sánh a với b, nếu a bằng b thì in ra câu thông báo "a bằng b", ngược lại in ra thông báo "a khác b".
b. Viết chương trình:
?
1
2
3
4
5
6
7

#include
void main[void]
{
int ia, ib;



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

printf["Nhap vao so a: "];
scanf["%d", &ia];
printf["Nhap vao so b: "];
scanf["%d", &ib];
if [ia == ib]
printf["a bang b\n"];
else
printf["a khac b\n"];
}
?Lưu ý: Nếu , bao gồm từ 2 lệnh trở lên thì phải đặt trong cặp dấu {}


5.2 Cấu trúc if …else if
Cú pháp:
if [bt_logic1]
khối lệnh 1;
else if [bt_logic 2]
khối lệnh 2;

else if [bt_logic n-1]
khối lệnh n-1;
else
khối lệnh n;
Diễn giải: Nếu bt_logic 1 có giá trị đúngthì thực hiện khối lệnh 1 và thoát khỏi cấu trúc if. Ngược lại, nếu bt_logic 2 có
giá trị đúngthì thực hiện khối lệnh 2 và thoát khỏi cấu trúc if.

Ngược lại, nếu bt_logic n-1 đúngthì thực hiện khối lệnh n-1 và thoát khỏi cấu trúc if, ngược lại thì thực hiện khối lệnh n.
Ví dụ 3: Viết chương trình nhập vào 2 số nguyên a, b. In ra thông báo "a lớn hơn b" nếu a>b, in ra thông báo "a nhỏ hơn
b" nếu aa. Phác họa lời giải
Trước tiên so sánh a với b. Nếu a > b thì in ra thông báo "a lớn hơn b", ngược lại nếu a < b thì in ra thông báo "a nhỏ hơn
b", ngược với 2 trường hợp trên thì in ra thông báo "a bằng b".
b. Viết chương trình:
?
1
2
3
4
5
6
7
8


9
10
11
12
13

#include
void main[void]
{
int ia, ib;
printf["Nhap vao so a: "];scanf["%d", &ia];
printf["Nhap vao so b: "];scanf["%d", &ib];
if [ia>ib]


14
15
16
17

printf["a lon hon b.\n"];
else if...}

5.3 Lệnh switch
Cú pháp:
switch [biểu thức]
{
case giá trị 1 : khối lệnh 1;
break;
case giá trị 2 : khối lệnh 2;


break;

case giá trị n : khối lệnh n;
break;
default : khối lệnh;
[break;]
}
Diễn giải: Khi giá trị của biểu thức bằng giá trị i thì lệnh i sẽ được thực hiện. Nếu saulệnh i không có lệnh break thì
tiếp tục thực hiện các lệnh sau nó. Ngược lại thoát khỏi cấu trúc switch. Nếu giá trị biểu thức không trùng với bất
kỳ giá trị i nào thì lệnh tương ứng với từ khóa default sẽ được thực hiện.
Lưu ý:
- Không đặt dấu chấm phẩy sau câu lệnh switch.
- Biểu thức phải là có kết quả làgiá trị nguyên [char, int, long,…]
- Lệnh 1, 2…n có thể gồm nhiều lệnh, nhưng không cần đặt trong cặp dấu { }
Ví dụ 4: Nhập vào một tháng trong năm, cho biết tháng này thuộc quý nào trong năm
?
1
2
3
4
5
6
7
8
9
1
0
11
1
2


1
3
1
4
1
5
1
6
1
7
1
8
1

#include
#include
void main[void]
{
int ithang;
printf["Nhap vao thang: "];
scanf["%d", &ithang];
switch[ithang]
{
case 1: case 2: case 3 : printf["Quy 1.\n"];break;
case 4: case 5: case 6: printf["Quy 2.\n"];break;
case 7: case 8: case 9: printf["Quy 3.\n"];break;
case 10: case 11: case 12: printf["Quy 4.\n"];break;
default : printf["Phai nhap vao so trong khoang 1..12\n"];



9
2
0
2
1
2
2
2
3
2
4
2
5
2
6
2
7

}
getch[]; //Dừng màn hình để xem kết quả, gõ phím bất kỳ để tiếp
tục

2
8
2

}

9
3


0
3
1
3
2
3
3
3
4
5.4 Bài thực hành
1. Viết chương trình nhập vào số nguyên dương, in ra thông báo số vừa nhập là số chẵn hay lẻ.
Hướng dẫn: Nhập vào số nguyên dương x. Kiểm tra nếu x chia hết cho hai [tức x chia 2 dư 0] thì x là số chẵn, ngược
lại là số lẻ.
2. Viết chương trình nhập vào 4 số nguyên. Tìm và in ra số lớn nhất.
Hướng dẫn: Ta có 4 số nguyên a, b, c, d. Tìm 2 số nguyên lớn nhất x, y của 2 cặp [a, b] và [c, d]. Sau đó so sánh 2 số
nguyên x, y để tìm ra số nguyên lớn nhất.
3. Viết chương trình giải phương trình bậc nhất: ax +b =0
Hướng dẫn: Nhập vào 2 biến a, b
Nếu a=0 thì
Nếu b=0 thì
Phương trình vô số nghiệm
Ngược lại
Phương trình vô nghiệm
Hết nếu
Ngược lại
x= -b/a
Hết nếu
4. Viết chương trình giải phương trình bậc 2: ax2 + bx + c = 0, với a, b, c nhập vào từ bàn phím.
Hướng dẫn: Nhập vào 3 biến a, b, c.
Nếu a=0 thì


Giải phương trình bậc nhất
Ngược lại
Tính Delta = b*b - 4*a*c
Nếu Delta < 0 thì


Phương trình vô nghiệm
Ngược lại
Nếu Delta = 0 thì
x1 = x2 = - b/[2*a]
Ngược lại
x1 = [- b - sqrt[Delta]]/[2*a]
x2 = [- b + sqrt[Delta]]/[2*a]
Hết Nếu
Hết Nếu
Hết nếu
- Sqrt[Delta] là hàm lấy căn bậc hai của Delta
5. Viết chương trình nhập vào giờ phút giây [hh:mm:ss]. Cộng thêm số giây nhập vào và in ra kết quả dưới dạng
hh:mm:ss.
Hướng dẫn: Nhập giờ, phút, giây vào 3 biến gio, phut, giay và nhập và0 giây công thêm cho biến them:
phut = [phut + [giay + them]/60]%60
giay = [giay + them]%60
gio = [gio + phut/60]%24
6. Viết chương trình nhập vào tháng, in ra tháng đó có bao nhiêu ngày.
Hướng dẫn: Nhập vào tháng
Nếu là tháng 1, 3, 5, 7, 8, 10, 12 thì có 30 ngày
Nếu là tháng 4, 6, 9, 11 thì có 31 ngày
Nếu là tháng 2 và là năm nhuận thì có 29 ngày ngược lại 28 ngày
[Năm nhuận là năm chia hết cho 4]
7. Viết chương trình xác định biến ký tự color rồi in ra thông báo


- RED, nếu color = 'R' hoặc color = 'r'
- GREEN, nếu color = 'G' hoặc color = 'g'
- BLUE, nếu color = 'B' hoặc color = 'b'
- BLACK, nếu color có giá trị khác.
8. Viết chương trình nhập vào 2 số x, y và 1 trong 4 toán tử +, -, *, /. Nếu là + thì in ra kết quả x + y, nếu là – thì in ra x
– y, nếu là * thì in ra x * y, nếu là / thì in ra x / y [nếu y = 0 thì thông báo không chia được].
9. Viết chương trình nhập vào điểm 3 môn thi: Toán, Lý, Hóa của học sinh. Nếu tổng điểm >= 15 và không có môn nào
dưới 4 thì in kết quả đậu. Nếu đậu mà các môn đều lớn hơn 5 thì in ra lời phê "Học đều các môn", ngược lại in ra
"Học chưa đều các môn", các trường hợp khác là "Thi hỏng".
10. Viết chương trình nhập số giờ làm và lương giờ rồi tính số tiền lương tổng cộng. Nếu số giờ làm lớn hơn 40 thì
những giờ làm dôi ra được tính 1,5 lần.
11. Viết chương trình tính tiền điện gồm các khoảng sau:
- Tiền thuê bao điện kế: 1000đ/tháng
- Định mức sử dụng điện cho mỗi hộ là: 50 KW với giá 230đ/KW
- Nếu phần vượt định mức

Chủ Đề