You are on page 1of 62

Chương 0 : ÔN TẬP NGÔN NGỮ C Gv Ngô Phước Nguyên 1

Chương 0 : ÔN TẬP NGÔN NGỮ C Gv Ngô Phước Nguyên 2


Chương trình nguồn
Chương trình mã máy
3
Chương 0 : ÔN TẬP NGÔN NGỮ C Gv Ngô Phước Nguyên
Ngôn ngữ giả
Mô tả trật tự hữu hạn các bước
giải quyết bài toán

Lưu đồ Công cụ đồ họa giúp mô phỏng giải thuật

4
Chương 0 : ÔN TẬP NGÔN NGỮ C Gv Ngô Phước Nguyên
5
Chương 0 : ÔN TẬP NGÔN NGỮ C Gv Ngô Phước Nguyên
Ex : Nhập 2 số, xuất tổng của 2 số đó

Chương 0 : ÔN TẬP NGÔN NGỮ C 6


Gv Ngô Phước Nguyên
S TAR T

if (biểu thức điều kiện) IN P U T n u m

{
câu lệnh ; r = n u m M OD 2

}
No
r =0

Yes
D IS P L AY "N u m b e r i s E ve n "

S TOP
7

Chương 0 : ÔN TẬP NGÔN NGỮ C Gv Ngô Phước Nguyên


BEGIN S TA RT

INPUT num
r=num MOD 2 INP UT num

IF r=0
DISPLAY “Even Number” r = num M O D 2

ELSE
DISPLAY “Odd Number” Yes No
r =0
END IF
END
DIS P LAY "N um ber i s E ven" D IS PLA Y " Num ber is O dd"

8
Chương 0 : ÔN TẬP NGÔN NGỮ C Gv Ngô Phước Nguyên S TOP
IF LỒNG NHAU
START

INPUT YearsWithUs

INPUT bizDone

YES NO
YearsWithUs >= 10

DISPLAY “A Little more effort required”


NO
bizDone > 5000000
YES

DISPLAY “A Little more effort required”

DISPLAY “Classified as an MVS”

STOP

Chương 0 : ÔN TẬP NGÔN NGỮ C Gv Ngô Phước Nguyên 9


S TA R T

BEGIN
cn t=0
cnt=0
WHILE (cnt < 1000)
DO cn t < 1 0 0 0
DISPLAY “Scooby”
cnt=cnt+1
END DO D IS PL A Y " Sc o ob y "

END
cn t=c n t+1

Chương 0 : ÔN TẬP NGÔN NGỮ C 10


Gv Ngô Phước Nguyên S TOP
Giải thuật :
phương pháp , cách tiếp cận để giải quyết bài toán.

Đặc điểm của


giải thuật

11
Chương 0 : ÔN TẬP NGÔN NGỮ C Gv Ngô Phước Nguyên
The basic data types are

int
float char
double void

Chương 0 : ÔN TẬP NGÔN NGỮ C Gv Ngô Phước Nguyên 12


Data type Basic Data
Derived data type
Modifiers types

unsigned int
unsigned int (Permits only
positive numbers)

short int
short int (Occupies less
memory
space than int)

Long int /longdouble


long int/double (Occupies more
space than
int/double)
13
Chương 0 : ÔN TẬP NGÔN NGỮ C Gv Ngô Phước Nguyên
Dùng Chương
Phân Dữ liệu
Start Bài toán Editor trình
tích NNLT ngôn
Giải thuật
ngữ
End
No
giải thuật sai Yes
Lỗi cú pháp Dịch

Kq Chương trình Lỗi


Chạy
đúng mã máy
Yes No
Chương 0 : ÔN TẬP NGÔN NGỮ C 14
Gv Ngô Phước Nguyên
Cú pháp ngôn ngữ C
Từ khóa và cách đặt từ mới

Từ khóa: Từ cơ bản của ngôn ngữ.


Cách đặt tên 1 từ:
Ký tự đầu là chữ hay gạch nối, các ký tự
sau là chữ+số+gạch nối.
Không đặt từ trùng với từ khóa.
Không sử dụng các ký hiệu toán tử.
Không dùng ký tự khoảng trống. Mỗi khái
niệm được đặt 1 từ riêng.
memory

Data 25 25
25 trong ô nhớ

Mỗi ô nhớ có 1 địa chỉ xác định

Chương 0 : ÔN TẬP NGÔN NGỮ C 16


Gv Ngô Phước Nguyên
Khi nói đến biến, 4
vấn đề mà ta cần
quan tâm

Chương 0 : ÔN TẬP NGÔN NGỮ C 17


Gv Ngô Phước Nguyên
int a ;
KHAI BÁO BiẾN float a,b,c ;
char kt[20] ;

int a= 5 ;
KHAI BÁO VÀ
float a,b =2.5, c=3.1 ;
KHỞI TẠO BiẾN
char kt[20]={‘a’,’k’,’d’ } ;

Chương 0 : ÔN TẬP NGÔN NGỮ C 18


Gv Ngô Phước Nguyên
10 -4 -23456

123U 24UL

”A” ‘A’ ‘0’


“HELLO”
Chương 0 : ÔN TẬP NGÔN NGỮ C
Gv Ngô Phước Nguyên 19
Chương 0 : ÔN TẬP NGÔN NGỮ C 20
Gv Ngô Phước Nguyên
== != > >= < <=
! && ||

>> <<
Đk ?bt1:bt2

& | ^

+= -= *= /= % ++ -- + - * / % ++ --
Chương 0 : ÔN TẬP NGÔN NGỮ C 21
Gv Ngô Phước Nguyên
(1) Ngoặc từ trong ra ngoài.
(2) TT Số học (nhân chia trước cộng trừ sau,
kết hợp trái phải).
(3) TT So sánh (trái phải).
(4) TT luận lý ( NOT -> AND -> OR)
Cuối cùng là toán tử gán.
(Xem thêm trong help với từ khóa precedence)

Chương 0 : ÔN TẬP NGÔN NGỮ C 22


Gv Ngô Phước Nguyên
KỸ THUẬT PHÂN TÍCH BÀI TOÁN ĐƠN GiẢN
#include <stdio.h> // Xuất-nhập
Nhặt các Biến a, b, c #include <conio.h> // ngưng
danh từ (chọn kiểu lớn)
void main()
{ int a, b, c;
Bài toán
<Câu lệnh tương đương>
Cắt câu Bắt đầu <Câu lệnh tương đương>
theo Đ. từ 1 biến a;
getch();
động từ, Đ. từ 2 biến b;
Sắp xếp ... }
lại cho Ngưng.
hợp lý
( giải thuật )
Chương 0 : ÔN TẬP NGÔN NGỮ C 23
Gv Ngô Phước Nguyên
Một tác vụ cần phải thực hiện cho việc
giải bài toán

Một nhóm phát biểu được đặt tên

Chương 0 : ÔN TẬP NGÔN NGỮ C 24


Gv Ngô Phước Nguyên
Chương 0 : ÔN TẬP NGÔN NGỮ C 25
Gv Ngô Phước Nguyên
Kiểu dữ liệu Tên_hàm (danh sách các đối số)
{
[ khai báo biến ;]
các câu lệnh ;
[ return ; ]
}

void sapxep (int a[], int n )


int sum (int a, int b ) {
{ //các câu lệnh ;
return a+b ; }
}
Chương 0 : ÔN TẬP NGÔN NGỮ C 26
Gv Ngô Phước Nguyên
Tham trị : biến gốc chỉ truyền trị
cho đối số của hàm. (bản sao của trị)

Tham biến : biến gốc sẽ bị


thay đổi khi hàm thực thi

Chương 0 : ÔN TẬP NGÔN NGỮ C 27


Gv Ngô Phước Nguyên
void InputArr(int a[ ] , int &n) Khi hàm thực thi xong :
{ ta có mảng a với n phần
printf(“\nEnter n :” ); tử trong bộ nhớ.
scanf (“%d”, &n ) ;
for (int i =0 ; i<n ; i++)
{
printf(“a[%d]=“, i ); Tham biến
scanf (“%d”, &a[i] );
}
}

Chương 0 : ÔN TẬP NGÔN NGỮ C 28


Gv Ngô Phước Nguyên
void swap ( int a, int b ) Trước khi hoán vị : a=5 b =3
{
int temp ;
temp = a ; Sau khi hoán vị : a=5 b =3
a=b;
b = temp; void main ( )
} {
int a= 5, b = 3;
swap (a,b) ;
5 3 ..................
}
a b
Chương 0 : ÔN TẬP NGÔN NGỮ C 29
Gv Ngô Phước Nguyên
Phát biểu tác vụ thật rõ ràng : động từ + các danh từ bổ nghĩa

int | long| ....Tên hàm ( kiểu tham trị, kiểu &tham biến)
void
{
[<biến cục bộ>]
< code thực thi tác vụ >
return [biểu thức] ;
}

Chương 0 : ÔN TẬP NGÔN NGỮ C 30


Gv Ngô Phước Nguyên
Chương 0 : ÔN TẬP NGÔN NGỮ C 31
Gv Ngô Phước Nguyên
Chương 0 : ÔN TẬP NGÔN NGỮ C 32
Gv Ngô Phước Nguyên
KỸ THUẬT PHÂN TÍCH CHƯƠNG
TRÌNH THÀNH HÀM #include <stdio.h> // Xuất-nhập
#include <conio.h> // ngưng
Nhặt các Biến a, b, c void Hàm1 ( Type a)
danh từ (chọn kiểu lớn) { }
int Hàm2(Type b)
Bài toán Bắt đầu { ...... return 3*b; }
Đ. từ 1 biến a; // phức tạp void main()
Cắt câu Đ. từ 2 biến b; // phức tạp { int a, b, c;
theo Đ. từ 3 biến c; // Đơn giản
Hàm1(a); // gọi hàm
động từ, ...
Sắp xếp Ngưng. printf(“%d\n”, Hàm2(b) );
lại cho ( giải thuật ) <Câu lệnh tương đương>
hợp lý getch();
Chương 0 : ÔN TẬP NGÔN NGỮ C 33
Việc đơn giản: Nhập/xuất vài biến
Gv Ngô Phước đơn
Nguyên
}
Viết chương trình nhập số nguyên dương. Tính giai thừa và xuất
kết quả ra màn hình.

Số nguyên
Danh từ
long n, gthua ;
Giai thừa

Nhập
long giaithua( int n)
Động từ
Tính Giai thừa {
//code tính giai thừa
Xuất
}
Nhập, xuất biến đơn  tác vụ đơn giản  sử dụng hàm có sẵn của
ngôn ngữ.
Chương 0 : ÔN TẬP NGÔN NGỮ C 34
Gv Ngô Phước Nguyên
Chương 0 : ÔN TẬP NGÔN NGỮ C 35
Gv Ngô Phước Nguyên
Data Type *p ;
memory
p1 = &a ;

100
&a 15
Int *p1 100
int n 15 p1 a
100

Chương 0 : ÔN TẬP NGÔN NGỮ C 36


Gv Ngô Phước Nguyên
& : Lấy địa chỉ của 1 biến.
* : Truy cập trị tại 1 địa chỉ.
new : cấp phát mới 1 vùng nhớ , trả về 1
pointer.
delete pointer : Trả vùng nhớ đã cấp phát động.
++ : Lấy địa chỉ phần tử sau.
-- : Lấy địa chỉ phần tử trước đó.
= : Gán 2 pointer với nhau.
So sánh 2 pointer cho biết vị trí trước sau của 2
dữ liệu.
Chương 0 : ÔN TẬP NGÔN NGỮ C 37
Gv Ngô Phước Nguyên
Đơn vị thay đổi trị của pointer khi cộng trừ
là kích thước của kiểu dữ liệu mà pointer
này chỉ đến

Chương 0 : ÔN TẬP NGÔN NGỮ C 38


Gv Ngô Phước Nguyên
-7
6

400 30

200 10 200 10

p3 p3 p3 p3 400

P2 p2 p2 200 p2 200

p1 100 p1 100 p1 100 p1 100


100 n 4 100 n 3 100 n 3 n 3

int n =4; *p1=3; p2= new int; p3= new int [n];
int *p1 = &n; *p2= 10; p3[0]= 30; p3[1]=6;
int *p2, *p3; p3[2]=-7;
Chương 0 : ÔN TẬP NGÔN NGỮ C 39
Gv Ngô Phước Nguyên
-7 -7 -7
6 6 -100

400 30 400 30 400 11

200 10

p3 400 p3 400 p3 400 p3 0


p2 0 p2 100 p2 400 p2 0
p1 100 p1 100 p1 100 p1 100
n 4 100 n 5 100 n 3 100 n 3

delete p2; p2= p1; p2= p3; delete [] p3;


p2 = NULL; *p2=5; *p2= 11; p3= p2= NULL;
*(p2+1) = -100;
Chương 0 : ÔN TẬP NGÔN NGỮ C 40
Gv Ngô Phước Nguyên
Mảng= Nhóm trị cùng kiểu, có chung tên, mỗi
phần tử được quản lý bằng chỉ số đi từ 0.

KHAI BÁO MẢNG

Kiểu dữ liệu Tên mảng [index] ;

int a[10] ;
char s[80] ; Số phần tử
Chương 0 : ÔN TẬP NGÔN NGỮ C 41
Gv Ngô Phước Nguyên
12 45 7 9 11 32 55 476 78 90

a 0 1 2 3 4 5 6 7 8 9

Mảng a có 10 phần tử, được đánh chỉ số từ 0 đến 9


index
Kiểu a[maxn] ; int n ;
Kiểu *a; int n ;

Chương 0 : ÔN TẬP NGÔN NGỮ C 42


Gv Ngô Phước Nguyên
Trị của phần tử thứ i

Địa chỉ của phần tử thứ i

Chương 0 : ÔN TẬP NGÔN NGỮ C 43


Gv Ngô Phước Nguyên
void Nhập (int*&a, int &n)
void Nhập ( int a[] , int &n)
long Tổng (int *a, int n)
int TimMax ( int a[] , int n)

Chương 0 : ÔN TẬP NGÔN NGỮ C 44


Gv Ngô Phước Nguyên
Chương 0 : ÔN TẬP NGÔN NGỮ C 45
Gv Ngô Phước Nguyên
MA TRẬN Nhóm trị cùng kiểu có chung tên, các phần tử
được bố trí thành các hàng các cột.

Kích thước của ma trận = số hàng * số cột

Cách 1 :

Kiểu m [maxh][maxc] ;
int h, c;

Chương 0 : ÔN TẬP NGÔN NGỮ C 46


Gv Ngô Phước Nguyên
Kiểu * m1; Cách 2
int h,c;
 Cấp phát bộ nhớ: m= new Kiểu [h*c];
 Địa chỉ phần tử hàng i cột j : m+i*c+j
 Trị của phần tử hàng i cột j : *(m+i*c+j)
 Địa chỉ phần tử hàng i, cột j &m[i][j] ;
Trị phần tử hàng i, cột j m[i][j]

Chương 0 : ÔN TẬP NGÔN NGỮ C 47


Gv Ngô Phước Nguyên
Cấp phát bộ nhớ cho hàng i:
m[i] = new Kiểu[c];
• Khai báo và quản lý ma trận động: Dùng pointer.
Kiểu** m ;
int h,c ;
Cấp bộ nhớ:
m= new Kiểu* [h];
for (int i=0; i<h; ++i) m[i]= new Kiểu[c];
Địa chỉ phần tử hàng i cột j : & m[i][j]
Trị của phần tử hàng i cột j : m[i][j]

Chương 0 : ÔN TẬP NGÔN NGỮ C 48


Gv Ngô Phước Nguyên
Nhập ma trận 2 chiều, tính tổng từng
THÍ DỤ hàng của ma trận

#include <stdio.h> int tonghang(int a[ ] , int n )


#include <conio.h> { int i, s=0 ;
#define MAX 20 for(i=0;i<n;i++)
void nhap(int m[ ] [MAX] , int n s+=a[i] ;
{ int i, j ; return s ;
for(i=0; i<n ;i++ ) }
for(j=0 ; j<n ; j++) void main ( )
{ printf (“m[%d%d]=“, i,j) ; {
scanf (“%d”, &m[i][j] ); int a[MAX ] [MAX] ;
} int n , i;
} printf(“Nhap cap ma tran:”) ;
Chương 0 : ÔN TẬP NGÔN NGỮ C 49
Gv Ngô Phước Nguyên
scanf (“%d”, &n );
Nhap (a,n) ;
printf(“\nTong tung hang ma tran :”);
for(i=0; i<n ;i++)
printf(“\nHang thu %d co tong la %d “, i ,tonghang(a,n) );
getch ( ) ;
}

Chương 0 : ÔN TẬP NGÔN NGỮ C 50


Gv Ngô Phước Nguyên
‘H’ ‘o’ ‘a’ ‘h’ ‘o’ ‘n’ ‘g’ ‘\0’
100
char S[30]=“Hoa hong”;
Chuỗi ký tự tương tự mảng các ký tự. Có 1 điều khác là byte cuối cùng mang
trị NULL (0) mang ý nghĩa byte đánh dấu kết thúc chuỗi.
S[i] là ký tự thứ i trong chuỗi.
Rất nhiều hàm thao tác chuỗi được khai báo trong string.h
Hàm scanf(“%s”, S) chỉ nhập được chuỗi không có khoảng trắng.
Nhập chuỗi có khoảng trắng bằng : gets(S);
Trước khi nhập ký tự, chuỗi, nên xả bộ đệm bàn phím bằng fflush(stdin); //
stdio.h
Chương 0 : ÔN TẬP NGÔN NGỮ C 51
Gv Ngô Phước Nguyên
Cấu trúc = Kết qủa khái quát hóa nhiều dữ liệu đơn
thành một thể thống nhất.
Cú pháp
struct EMPLOYEE
{ char Code[10];
char Name [31];
double Salary;
};
• Biến cấu trúc
EMPLOYEE e1 = { “E00001”, “Bill Gate” ,18000};
EMPLOYEE e2, e3;
EMPLOYEE * List; int n; // mảng cấu trúc
Chương 0 : ÔN TẬP NGÔN NGỮ C 52
Gv Ngô Phước Nguyên
THAO TÁC TRÊN CẤU TRÚC
Truy xuất thành phần:
strcpy(e2.Code, e1.Code);
e2.Salary = e1. Salary;
Gán cấu trúc
e3 = e1;
• So sánh 2 cấu trúc: Thường dựa trên 1 vài
thành phần của 2 cấu trúc.
if (e1.Salary < e2.Salary) { ... }
if (strcmp (e1.Name, e2.Name) <0) { ... }

Chương 0 : ÔN TẬP NGÔN NGỮ C 53


Gv Ngô Phước Nguyên
CHỦ ĐỀ 1
ĐiỀU KHIỂN &VÒNG LẶP

Bài 1 : Nhập vào 2 số nguyên dương. Tìm ước số chung lớn


nhất của 2 số này.

Bài 2 : Nhập vào số nguyên dương có nhiều chữ số.


a) Tính tổng các chữ số lẻ của nó.
b) In ra số đảo ngược .

Chương 0 : ÔN TẬP NGÔN NGỮ C 54


Gv Ngô Phước Nguyên
Bài 3 : Viết chương trình nhập 1 số nguyên dương nhiều chữ số.
b)Tính tổng các chữ số lẻ.
c)Cho biết số đó có bao nhiêu chữ số

Bài 4 : Viết chương trình nhập nhiều số nguyên. Kết thúc nhập
gỏ -999
b)Cho biết đã nhập bao nhiêu số. (không kể -999)
c)Tính tổng và trị trung bình. (không kể -999)

Chương 0 : ÔN TẬP NGÔN NGỮ C 55


Gv Ngô Phước Nguyên
Bài 5 : Viết chương trình nhập 1 mảng các số nguyên, có
tối đa 50 phần tử
a. Xuất mảng đã nhập.
b. Xuất các phần tử lẻ và chia hết cho 3 có trong mảng.
c. Xuất các cặp phần tử thỏa mãn điều kiện tổng bình
phương của chúng bằng 100.
d. Sắp xếp mảng theo thứ tự tăng dần
e. Xuất mảng sau khi sắp xếp.

Chương 0 : ÔN TẬP NGÔN NGỮ C 56


Gv Ngô Phước Nguyên
Bài 6 : Viết lại bài 5 bằng cách cấp phát động (sử dụng con
trỏ).
Bài 7 : Viết chương trình tạo mảng 1 chiều các số nguyên, giá
trị của các phần tử là các số ngẫu nhiên được tạo ra bằng cách
sử dụng hàm randomize().
c.Xuất mảng đã nhập.
d.Tìm phần tử lớn nhất mảng và cho biết vị trí của nó trong
mảng.
e.Xuất mảng với vị trí đảo ngược.
f.Xóa phần tử ở vị trí thứ k, với k được nhập vào từ bàn phím.
g.Xuất mảng sau khi xóa
Chương 0 : ÔN TẬP NGÔN NGỮ C 57
Gv Ngô Phước Nguyên
Bài 8 : Viết chương trình nhập 1 mảng các số nguyên, sau đó
nhập 1 giá trị x. Nếu x không có mặt trong mảng thì xuất
“không có mặt” nếu có mặt thì xuất vị trí đầu tiên có mặt và
cho biết x có mặt bao nhiêu lần .
Bài 9 : Viết chương trình nhập 1 mảng các số nguyên. Xuất
tổng các vị trí lẻ, tổng các vị trí chẳn, tổng các số nguyên tố.

Bài 10 : Viết chương trình nhập 1 mảng các số nguyên. Cho


biết dãy số đó có phải là dãy số tăng dần hay không?

Chương 0 : ÔN TẬP NGÔN NGỮ C 58


Gv Ngô Phước Nguyên
.

Bài 11 : Viết chương trình nhập vào 1 dãy số nguyên. Sắp xếp
nửa đầu mảng tăng dần, nửa sau mảng giảm dần.

Bài 12 : Viết chương trình nhập vào 1 dãy số nguyên. Xuất


ngược mảng, xuất mảng giảm dần, xuất xem mỗi trị trong
mảng có mặt mấy lần.
Bài 13 : Viết chương trình nhập vào 1 dãy số nguyên. Xuất số
nguyên nhỏ nhất không có mặt trong mảng này.

Chương 0 : ÔN TẬP NGÔN NGỮ C 59


Gv Ngô Phước Nguyên
Bài 14 : Viết chương trình nhập 1 mảng các số nguyên. Xuất ra giá
trị nào có mặt nhiều nhất trong mảng và có mặt mấy lần.

Bài 15 : Viết chương trình nhập 1 mảng các số nguyên. Xuất ra giá
trị nào có mặt nhiều nhất trong mảng và có mặt mấy lần.
Ex : 2 3 8 5 9 3 4 7 3  3 có mặt 3 lần

Bài 16 : Viết chương trình nhập 2 mảng a và b các số nguyên. Chèn


xen kẻ để tạo ra mảng c. Xuất mảng c.
Ex a = 1 5 7 9 3
b= 2 4 6
c=1 2 5 4 7 6 9 3
Chương 0 : ÔN TẬP NGÔN NGỮ C 60
Gv Ngô Phước Nguyên
Bài 17 : Viết chương trình tạo 1 ma trận các số nguyên,
cấp phát tĩnh.
a)Xuất ma trận đã nhập.
b)Tính tổng ma trận
c) Tìm phần tử lớn nhất trong ma trận.
Bài 18 : Viết chương trình tạo 1 ma trận các số nguyên,
cấp phát tĩnh.
a)Xuất ma trận đã nhập.
b) Xuất tổng từng dòng ma trận
c) Xuất tổng của tam giác vuông trên của ma trận (kể cả
đường chéo) Chương 0 : ÔN TẬP NGÔN NGỮ C
Gv Ngô Phước Nguyên
61
Chương 0 : ÔN TẬP NGÔN NGỮ C 62
Gv Ngô Phước Nguyên

You might also like