” statement: Phat biéu bat ky compound statement: Phat biéu phttc hay khối lệnh, phải được bao trong cặp ngoặc SẼ tạo ra việc lặp vô tận, và chỉ có thê kết thúc bằng một trong các phát
Trang 12, ACPrU ED
Trang 2TAI LIEU THAM KHAO
1 Giáo trình tin hoc (tập 1, 2), Hồ Sĩ Đàm & Lê Khắc Thành, NXB DHQGHN
2 Hướng dẫn thực hành và ứng dụng Windows XP, Nguyễn Tiến, Đặng Xuân
Hường & Nguyễn Văn Hoài, NXB Thống kê
3 Ngôn ngữ lập trình C, Quách Tuần Ngọc , Nhà xuất bản Giáo dục
# Kỹ thuật lập trình C, Pham Van Át, Nhà xuất bản Khoa học kỹ thuật
Trang 4Khoa CNTT ~ Truong CDKT Ly Tu Trong
printf("Tong cac so le: d\n", odd);
printf ("Tong cac so chan: td\n", even) ;
printf ("Tong day so: $d", sum) ;
Tong cac so le: 2589
tong cac so chan: 2558
'A' hoặc ‘a’ (Area): tinh diện tích hình cầu 4 = 7-7?
“C° hoặc *c' (Circumference): tinh chu vi hình cầu € = 2 Tr
-V' hoặc *v' (Volume): tínhthể tích hình cầu ‘= 22 -}
3 Viết chương trình dùng các cấu trúc lặp for, while, do while dé in dãy các số
nguyên lẻ nhỏ hơn 100 theo chiều ngược với mẫu sau:
99, 97, 95, .,3, 1
4 Viết chương trình tính tổng và tích của dãy số gồm n>0 phân tử Trong đó n được nhập
vào từ bàn phím khi thực hiện chương trình:
117
Trang 5
printf ("Cac so nguyen tu 1 %d:\n\n", MAX);
do printf ("%6d", i++); while (i<=MAX) ;
else // i la so chan
event=i ;
116
Trang 6do statement; while (condition) ;
Thuc hién phat biéu statement khi condi tion van còn có tri true
condition: Biểu thức điều kiện bất kỳ bao gồm các tóan tử so sánh, logic, bitwise với kết
quả là một giá trị logic true (1) hoặc £a1se (0) Biểu thức điều kiện conđi tion phải được viết trong cặp ngoặc “ ( ) ”
statement: Phat biéu bat ky
compound statement: Phat biéu phttc hay khối lệnh, phải được bao trong cặp ngoặc
SẼ tạo ra việc lặp vô tận, và chỉ có thê kết thúc bằng một trong các phát biéu break,
goto hodc return
2 Ví dụ
a Vidul
Viết lại chương trình in ra màn hình các số nguyên từ 1 đến 100, mỗi giá trị in ra trong 6 vi
trí, dùng cấu tric do while
Trang 7else /⁄/ i la so chan
event=i;
itt;
}
printf ("Tong cac so le: %d\n", odd);
printf ("Tong cac so chan: %d\n", even);
printf ("Tong day so: %d", sum);
ong cac so chan: 2558
Jong day so: 5858
114
Trang 8Viết lại chương trình tính tổng cdc sé chin va tổng các số lẻ từ dãy số nguyên 1, 2,
dùng cau tric while thay vì for
Trang 9Khoa CNTT — Truong CDKT Ly Tu Trong
1 CAU TRUC while
1 Cú pháp
while (condition) statement;
khi giá trị của biéu thirc condition con 1a true thi thuc hién statement
Trang 10int i, sum, odd, even;
odd = even = sum = 0;
for (i=1; i<=MAX; i++)
{
sumt+=i ;
if (i%2!=0) // ilasole odd+=i ; |
event=1;
Printf ('"Tong cac so le: d\n", odd);
printf ("Tong cac so chan: d\n", even) ;
printf ("Tong day so: $d", sum);
getch();
Kết quả:
DI
ong cac so le: 2500
ong cac so chan: 2550
Hong đau so: 50858
LH
Trang 11printf ("Cac so nguyen tu 1 %d:\n\n", MAX);
for (i=0; i<=MAX; itt)
Trang 12Lặp lại việc thực hiện phát biêu statement với số lần xác định tùy thuộc vào
init expression va cond expression
cond_ expzession: Biểu thức điều kiện để kết thúc vòng lặp Biểu thức phải có kiểu số
học hoặc con trỏ (pointer) và giá trị biểu thức được định giá mỗi khi bắt đầu một lần lặp va thường có kiểu Ï logic (false/true)
loop _ expression: Biểu thức dùng để định giá sau mỗi lần lặp và dùng cho bước lặp sau trong biểu thức điều kiện cond_expression Biểu thức này không bị hạn chế về kiểu
đữ liệu
Khi trong vòng lặp for có phát biểu continue thì 1oop_expression được định gia va điều khiển được đưa về đầu vòng lặp Khi có phát biểu break trong vòng lặp fo+ thì
loop_expression không được thực hiện và điều khiển được đua ra sau for
statement: Phát biểu sẽ được thực hiện khi điều kiện trong cond_expression van
Trang 13
Khoa CNTT - Trường CDKT Ly Tu Trong
a/b) ;
else
printf ("%5.2£ tc %5.2f = %s\n", a, op, b,
ERR_OP) ; break;
Trang 14He dem 3 khong xac dinh
Viết lại chương trình ví đụ 2 ở mục 1.2.2 dùng cấu tric switch thay vì dùng cầu trúc if
"Toan tu khong hop le"
"Phep chia cho zero”
printf("Nhap 2 so bat ky: ");
Trang 16(default: default statement; ]
expression = constant]: thuc hién statement]
expression = constant2: thuc hién statement2
expression = default ¢ (constant1, constant2, ): thuc hién default statement
expression: Biéu thitc cho két quả là kiểu đữ liệu đếm được, nghĩa là các giá trị rời rac kiéu char, int, long
coensCanL1, constant2, : Giá trị kết quả tương ứng của biểu thức expression
statement1, statement2, default_statement: Phát biểu bất kỳ
default: Trường hợp biểu thức expression cho kết quả khác với các hằng
_ Constan£1, constant2, đã liệt kê
break: Thông thường sau mỗi khối case cần có một phát biêu break nhằm chuyên điều khiến ra ngòai switch Điều này sẽ làm cho các phát biểu ở các khối case sau đó không được thực hiện Hãy thử bỏ các phát biểu break trong các ví dụ bên đưới để thấy tác dụng
Trang 17oan tu khong hop lem
42.66 ¢ 8.00 = Phep chia cho zero
H CẤU TRUC switch
104
Trang 18Khoa CNTT - Trường CĐKT Lý Tự Trọng
Nhập vào 2 giá trị số thực bất kỳ và 1 ký hiệu tóan từ số hoc (+, -, *, /), tinh va in ra man
hình kết quả biểu thức tương ứng
#define SUB ta!
#define MUL tae
#define EBRR OP "Toan tu khong hop le"
#define ERR_DIV "Phep chia cho zero"
void main (void)
{
float a,b;
char op;
printf£("Nhap 2 so bat ky: ");
scanf ("$F $f", &a, &b) ;
if (op==DIV)
Trang 19
Khoa CNTT —- Truong CDKT Ly Tu Trong
statement: Mét phat biéu bat ky va co thé la phép gan, biéu thitc, phép gọi hàm, và cũng
có thể là một cầu trúc điều khiển bất kỳ Kết thúc một phát biểu phải có một dấu chấm phẩy
é6 Q32
af
compound statement: Phát biểu phức hay khối lệnh Khi có từ 2 phát biểu trở lên trong một cấu trúc điều khiển, thì các phát biểu này phải được bao trong cặp ngoặc nhọn “{ }” Kết thúc một compound statement khéng c6 ddu cham phay
printf ("Nhap 2 so nguyen bat ky: ");
scanf ("$d %d", &a, &b);
Trang 202 Viết chương trình nhập một chữ hoa và đổi sang chữ thường
3 Viết chương trình nhập một chữ thường và đổi sang chữ hoa
4 Viết chương trình nhập vào một số nguyên là tổng số giây (second), đôi ting số gidy sang giờ, phút, giây và in ra màn hình theo dang hh:mm:ss
5 Viét chuong trinh nhap mét sé unsigned int và đếm tổng số bit 1 của số đã nhập
BÀI 16: CẤU TRÚC ĐIỀU KIỆN
statement2;
néu condition c6 giá tri true thi thuc hién statement] ,
ngược lại (£a1 se) thì thực hiện statement2
condition: Bieu thức điêu kiện bất kỳ bao gôm các tóan tử so sánh, logic, bitwise với kết
quả là một giá trị logic true (1) hoặc £a1se (0) Biểu thức điều kiện condition phải được
viết trong cặp ngoặc “ ( ) ”
101
Trang 21
BAI TAP
Trang 22Chượng trình sau hiện lên màn hình 1 menu gồm 4 mục Người dùng gõ l trong các phím 1,
2, 3 hoặc E để chọn mục tương ứng Nếu phím gõ vào không thuộc 4 mục này sẽ bị báo lỗi Chọn e hoặc E (exit) để kết thúc chương trình
key=getch () ;
switch (key)
Trang 23
Chương trình đơn giản dưới đây cho phép lặp ởi lặp lại việc nhận | phim tir ban phim và in
ra màn hình ký tự tương ứng va ma ASCII cua ky tự đó (được ghi trong ngoặc) Chương
trình được kết thúc khi người dùng gõ phím 'q' hoặc 'Q'
Trang 24hong tin da nhap:
Trang 25Khoa CNTT - Trường CDKT Ly Ty Trong
char name[30]; //Chuoi chua Ten
int age; //Tuoi
Pprintf ("Nhap thong tin cua ban:\n") ;
printf ("Ten: Wy;
scanf ("$[A-Za-z]", name) ; //Chi chap nhan chu cai
printf ("Tuoi: ");
scanf ("%$d", Gage) ; //So nguyen
printf ("Trong luong: ");
scanf("%f", &weight) ; _ #/§o thuc float
printf("\nThong tin da nhap:\n") ;
Printf("Ten: %s\tTuoi: %d\tTrong luong: %5.2fkg", name, age, weight) ;
getch () ;
}
Kết quả:
96
Trang 26Ký tự không trắng (non-whitespace) bao gồm các ký tự không thuộc tập các ký tự trắng đã
nêu trên
scanfQ có khả năng kiểm tra sự hợp lệ của các ký tự thuộc một tập xác định được ghi trong
cặp dẫu ngoặc vuông [ ] Những ký tự ghi trong cặp dẫu ngoặc này được xem là hợp lệ |
Vidu:
scanf(" %[A-Za-z]"", myString);
sẽ chỉ chấp nhận các chữ cái A-Z và a-z, bat ky 1 ký tự khác không thuộc tập này sẽ bị bỏ qua và không được ghi vào chuỗi myString Nếu muốn cho phép có khỏang trồng trong
chuỗi nhập, ta ghỉ thêm khôang trống vào tập hợp
scanf("%[ A-Za-z]", myString);
Ngòai ra nếu ky tự đầu tiên trong cặp ngoặc vuông là dấu '^' thì scanf() sẽ chỉ chập nhận những ký tự không thuộc tập ký tự ghi trong cặp ngoặc này Chẳng hạn
scanf('%[^\n]", myString);
sẽ chấp nhận tất cả các ky ty, ngoai trừ ký tự newline '\n’
Giá trị trả về của hàm scanfQ tùy thuộc vào tình trạng nhập liệu trước đó:
Số lượng argument da duoc doc, néu không có lỗi
0, nếu không có argument nào được đọc
EOF, néu đọc đến cuối file
size Kích thước tôi đa của ving nhap (input field)
h Giá trị nhập được chứa theo dạng short int
| Giá trị nhập được chứa theo dạng long int hoặc double
L Giá trị nhập được chứa theo dạng long double
* Vùng nhập bị bỏ qua và không được ghi
35
Trang 271234.123085 : :1234.12305:
%ox Số thập olục phan (hexadecimal)
Trang 28Khoa CNTT - Trường CDKT Lý Tự Trọng
Cánh trai (left justify)
+ Dau + hoặc — trước giá trị
Space Số dương với khỏang trang trước giá trị
0 Điền số 0 cho giá trị số
# Ký hiệu hệ thống đếm trước giá trị số: 0 với octal
width Kích thước tôi thiểu của giá trị xuất
prec Số số lẻ sau dấu chấm thập phân
h Thê hiện sé short int
| Thê hiện số long int (1đ) hoặc double (if)
L Thé hién s6 long double (Lf)
Trang 29Khoa CNTT ~ Truong CDKT Ly Ty Trong
BAI 15: CAC HAM NHAP XUAT
“ed Số nguyên có đấu (signed integer) dang decimal
%i Số nguyên cé dau (signed integer) dang decimal
“oe Số dạng khoa hoc (scientific notation) với chữ thường "e" (exponent)
%E Số dạng khoa học (scientific notation) với chữ hoa "E" (exponent)
%f Số thực với dấu chấm động (floating point)
%G | Dạng ngắn của %E hay %f
%0 Số bát phân (octal)
“ou Số nguyên không dấu (unsigned integer)
"Xx Số thập lục phân không dấu (unsigned hexadecimal) với chữ thường
%X Số thập lục phân không dấu (unsigned hexadecimal) với chữ hoa
Trang 30Khoa CNTT - Trường CĐKT Lý Tự Trọng
BÀI TẬP
1 Viết chương trình in ra màn hình hình chữ nhật gồm các dấu * (không dùng vòng lặp)
2 Sửa lại chương trình Listingl.epp ở trang 6 để tính tích và thương của 2 giá trị (đối với
phép chia cần kiểm tra số chia khác không)
3 Viết chương trình nhập vào một giá trị, sau đó kiểm tra và in ra thông báo cho biết đó là số đương hay số âm, số lẻ hay số chẵn
Trang 31Khoa CNTT — Truong CDKT Ly Tu Trong
Trang 32Khoa CNTT ~_ Truong CDKT Ly Tu Trong
2 Cach khai bao va goi ham
Một hàm được xác định thông qua các yếu tố sau:
— Tén ham (function name)
— Danh sách tham só (parameters) và kiểu của tham số (data type)
—_ Tham số vào (input parameters) va tham s6 ra (output parameters)
— Kiểu dữ liệu trả về của ham (return data type)
Khai báo Prototype cia ham:
return type Junction_name(parameter list);
int Maxvalue(int a, int b);
float add(float x, float b);
sum = add((float)a, (float)b);
Vidu 2: Nhập 2 gid trị thực a và b, in ra số max, min và tôn 8 của chúng
float MaxVal(float a, float b);
float MinVal(float a, float b);
float Sum(float a, float b);
89
c
Trang 33Khoa CNTT - Trường CĐKT Lý Tự Trọng
Các tập tin header thường dùng đến gồm stdio.h, conio.h, stdlib.h, string.h, math.h và
time.h
Danh sách các hàm thường dùng được định nghĩa trong các tập tin header nêu trên được mô
tả trong phần phụ lục cuối tài liệu
1 Tập tin header
Các tập tin header trong C/C++ là một thành phân rất quan trọng không thể tách rời từ giai
đoan thiết kế chương trình đến gian đọan biên dịch và liên kết vdé tao ra tập tin đối tượng (.obj) và tập tin nhị phân thi hành được (.exe, đll) Các mô tả dữ liệu, các chỉ dẫn biên dịch,
các khai báo prototype hàm thường được bố trí trong các tập tin header
Khi muốn sử dụng các hằng, biến, hàm hay các mô tả khác trong một tập tin header, ta cần
viết dẫn hướng đến tập tin header đó tại đầu chương trình trước cài đặt hàm main() và khai
Đối với tập tin header do người dùng viết thường được đặt trong thư mục làm việc hiện thời,
nên ta cân viét:
Trang 34Khoa CNTT ~ Truong CDKT Ly Tu Trong
I CHUYEN DOI KIEU Di LIEU
Trong quá trình viết chương trình, ta phải xử lý trên nhiều kiểu dữ liệu (data type) khac nhau,
typecast: Kiéu đữ liệu đích
item: hang, bién, hàm, biểu thức muốn chuyên kiểu
” b=(int)x;
IV CAC HAM CO-SAN TRONG C/C++
C/C++ tich hop sin một số lượng lớn các hàm (predefined functions) dé thực hiện các tác vụ khác nhau, các hàm được phân chia theo từng nhóm xử lý khác nhau và được định nghĩa và phân phối trong các tập tin header dj kèm với đuôi ".h" Muốn dùng hàm nào ta cần dùng dẫn hướng (directive) #include <header_file> ghi rõ tên tập tin header có định nghĩa hàm đó
Dé biết thêm chỉ tiết về các tập tin header, xem phụ lục cuối tài liệu
8
Trang 35: NẠP a Ee REPRE RRO ee Ae a ONES Sees ee
O | Nhóm biêu thức con (a*b+c)/(a*d)
{] Trich phan tir a(i] voi bién a la m6t array và bién i la index
student.name, student.age struct/class
struct/class
& Địa chỉ của &a cho địa chỉ của biến a
Con trỏ/giá trị biên con ¬ eek
*a cho giá trị của biên con trỏ a
II LENH VA KHOI LENH
~ Trong C/C++ mai lệnh đơn (single statement) là một khai báo hay phát biêu được ghi trên 1 dong đơn và kết thúc bằng dâu chấm phây (;)
~ Trong khi đó, một khối lệnh (statement block/compound statemen?) là tập các lệnh: đơn và được bao trong cặp ngoặc nhọn ({})
Vi du:
int count=5; // Lénh don
printf("Cac so tu 5 den 0: \n"); // Lénh don
while(count>=0)
Lénh don Khối lệnh
prmff("%đ, ", count); // Lệnh đơn count ; // Lệnh đơn
86
Trang 36Lưu ý: Giả sử a là biễn kiểu số nguyên thì:
+†a và a++ đều tăng giá trị biến a lên | đơn vị, tuy nhiên có sự khác biệt Chúng ta hay xem
2 ví dụ đơn giản sau:
exprl: Biểu thức, biến, hằng, hàm bất kỳ tương ứng với condition có tri logic TRUE
expr2: Biêu thức, biến, hang, ham bat kỳ tương ứng với condifion có trị logic FALSE
Yí dụ: Xác định số lớn hơn trong 2 số a và b
Trang 37| Bitwise inclusive OR b=(a|5); cho kết qua b=13
“ Bitwise excluse OR (XOR) b=(a^5); cho kết quả b=9
~ Bu | (one's compliment) b=~a; cho két qua b=3
Dịch sang trái n bịt, tương ứng với | b=(a<<2);
= phép nhân cho 2" sẽ tương ứng b = 12*2° = 12*4 = 48
Dịch sang phải n bit, tương ứng với Doane) ;
d Toán tử tang gam
Gồm các tóan tử thực hiện trên các biến hay biểu thức có giá trị nguyên như char, int, short,
long Các tóan tử này thực hiện việc tăng giảm giá trị của biến hay biểu thức 1 don vi
84
Trang 38Khoa CNTT — Trường CDKT Ly Tu Trong
/(*#\ % &&
T- |
a+b#*c
KP Đ)— 4# a* ©) (2x a) (num % 2) != ọ
a==b có két qua false
8!=b có kết quả true
biểu thức logic, trong đó các tóan hạng là các biến, giá trị
toan logic 14 một giá tri logic TRUE hoặc
Trang 39base_type: Tén kiéu cơ sở hay kiêu đã được định nghĩa trước
new_ype: Tên kiêu dữ liệu mới
typedef struct STUDENT
BÀI 14: BIỂU THỨC —- TÓAN TỬ - CÂU LENH
I BIEU THUC VA TOAN TU
1 Khái niệm về biểu thức
Biểu thức là một công thức tính toán bao gồm các phép toán, hằng, biến, hàm, và các dấu
Trang 40Nn0a CNT T — Trường CDK T Ly Tu Trong
horizontal tab, tab ngang (theo giá tri tab hiện Printf("horizonta thời)
tab\t");
sir[0]=^0':
printf( "backslash\\"); printf( "Vsingle