Tài liệu Nhập môn lập trình - Basic Logics - Võ Quang Hoàng Khang: NHẬP MÔN LẬP TRÌNH
Basic Logics
Logic Constructs
Programming Style
Walkthroughs
NHẬP MÔN LẬP TRÌNH
Ôn tập
• Biến là một tên tham chiếu đến một vị trị trong bộ
nhớ.
• Một kiểu dữ liệu xác định: dữ liệu lưu trữ như thế
nào và các toán tử thao tác tương ứng.
• 4 kiểu dữ liệu cơ bản trong C: int, char, float,
double
• Dữ liệu lưu trữ dưới dạng nhị phân.
• Khai báo biến trong C: type var [=initialValue];
• Tên biến phải bắt đầu bằng ký tự hoặc ‘_’,
• Tên định danh không trùng từ khóa trong C.
2Basic Logics
NHẬP MÔN LẬP TRÌNH
Mục tiêu
• Làm thế nào để viết 1 chương trình C cấu
trúc logic
• Khi viết chương trình C, những điều nên làm
là gì? Programming styles
• Làm thế để có thể hiểu một chương trình?
Walkthroughs
3Basic Logics
NHẬP MÔN LẬP TRÌNH
Nội dung
1- Các cấu trúc logic
2- Programming Styles
3- Walkthroughs
4- Bonus – Redirect a Program ( a technique is
used in the ACM Contest)
4Basic Logics
NHẬP MÔN LẬP TRÌNH
1- Logic Constructs
– Lập tr...
52 trang |
Chia sẻ: putihuynh11 | Lượt xem: 737 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu Nhập môn lập trình - Basic Logics - Võ Quang Hoàng Khang, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
NHẬP MÔN LẬP TRÌNH
Basic Logics
Logic Constructs
Programming Style
Walkthroughs
NHẬP MÔN LẬP TRÌNH
Ôn tập
• Biến là một tên tham chiếu đến một vị trị trong bộ
nhớ.
• Một kiểu dữ liệu xác định: dữ liệu lưu trữ như thế
nào và các toán tử thao tác tương ứng.
• 4 kiểu dữ liệu cơ bản trong C: int, char, float,
double
• Dữ liệu lưu trữ dưới dạng nhị phân.
• Khai báo biến trong C: type var [=initialValue];
• Tên biến phải bắt đầu bằng ký tự hoặc ‘_’,
• Tên định danh không trùng từ khóa trong C.
2Basic Logics
NHẬP MÔN LẬP TRÌNH
Mục tiêu
• Làm thế nào để viết 1 chương trình C cấu
trúc logic
• Khi viết chương trình C, những điều nên làm
là gì? Programming styles
• Làm thế để có thể hiểu một chương trình?
Walkthroughs
3Basic Logics
NHẬP MÔN LẬP TRÌNH
Nội dung
1- Các cấu trúc logic
2- Programming Styles
3- Walkthroughs
4- Bonus – Redirect a Program ( a technique is
used in the ACM Contest)
4Basic Logics
NHẬP MÔN LẬP TRÌNH
1- Logic Constructs
– Lập trình có cấu trúc
– Các cấu trúc logic
• Cấu trúc tuần tự - Sequence constructs
• Cấu trúc chọn - Selection constructs (1/2, 1/n)
• Cấu trúc lặp - Iteration constructs
5Basic Logics
NHẬP MÔN LẬP TRÌNH
1.1- Structured Programming
• Cấu trúc của code chương trình nên tổ chức
theo cách có thể hiểu được, kiểm chứng và
dễ dàng chỉnh sửa.
• sử dụng các cấu trúc logic đơn giản, mỗi
cấu trúc có một điểm bắt đầu và một điểm
kết thúc.
• Bước đầu tiên để phát triển một chương trình
là sử dụng DESIGN
– pseudo-coding hoặc
– flow charting
6Basic Logics
NHẬP MÔN LẬP TRÌNH
Structured Programming: Pseudo-code
• Ví dụ: Tính giá trị tuyệt đối của một số nguyên
được nhập từ bàn phím.
Nhắc người dùng nhập một giá trị số nguyên
Nhận một số nguyên từ người dùng và lưu trữ vào x
Nếu x là số am thì x = -x
Hiển thị x
7Basic Logics
NHẬP MÔN LẬP TRÌNH
Structured Programming: Flowcharting
• Describe the flow of a program unit symbolically
8Basic Logics
NHẬP MÔN LẬP TRÌNH
Flowcharting
• Ví dụ:
9Basic Logics
NHẬP MÔN LẬP TRÌNH
1.2- Cấu trúc tuần tự
• Một dãy tuần tự các lệnh đơn hoặc khối lệnh
• Simple Statements
expression ;
• Code Blocks
– Một khối lệnh là tập hợp các lệnh được đặt trong cặp
móc nhọn
{
statement
...
statement
}
10Basic Logics
NHẬP MÔN LẬP TRÌNH
1.3- Cấu trúc chọn
Select 1/2 Select 1/n
if
if else
If else if . else
? : (operator)
switch
Condition
?
Operation 1 Operation 2
TRUE FALSE
Integral
expression
Op1 Op2 Op3 Op4
c1 c2 c3 default
11Basic Logics
NHẬP MÔN LẬP TRÌNH
Selection Constructs: if else
if (condition)
{ statements
}
if (condition)
{ statements
}
else
{ statements
}
12Basic Logics
NHẬP MÔN LẬP TRÌNH
Selection Constructs: if else
if (condition)
{ statements
}
else
{ statements
}
Trình biên dịch không thể
xác định câu lệnh if trước
câu lệnh else.
13Basic Logics
NHẬP MÔN LẬP TRÌNH
Selection Constructs: if else
if (condition 1)
{ statements
}
else if (condition2)
{ statements
}
else
{ statements
}
Nested if
Mua N T-shirts với quảng cáo:
N<=3: 120000$/item
From 4th to 6th: 90000$/item
From 7th to 10th: 85000$/item
From 11th : 70000$/item
Mô tả biểu thức tính tiền phải trả.
N: số áo T-shirts mua, t: tiền phải trả.
if (N <=3) t = N*120000 ;
else if (N<=6) t= 3*120000 + (N-3) * 90000;
else if (N<=10)
t= 3*120000 + 3*90000 + (N-6)*85000;
else
t= 3*120000 + 3*90000 + 4*85000 + (N-10)*70000;
Begin
N,t int
Accept N
Compute t
Print out t
End
14Basic Logics
NHẬP MÔN LẬP TRÌNH
Selection Constructs: if else
if (condition 1)
{ statements
}
else if (condition2)
{ statements
}
else
{ statements
}
Begin
N,t int
Accept N
Compute t
Print out t
End
950 1250 1350 1550
100 150 200 Number of kwhs
prices
Tương tự, mô tả biểu thức
tính giá trị sẽ trả khi chúng ta
sử dụng điện năng.
Implement it to a program.
15Basic Logics
NHẬP MÔN LẬP TRÌNH
Selection Constructs: Dangling Else
• Ambiguity may arise in the case of nested if else constructs.
Sử dụng { } để xác định rõ rang các
câu lệnh
?
?
16Basic Logics
NHẬP MÔN LẬP TRÌNH
Selection Constructs: toán tử ? :
(condition) ? True_Value : False_Value
17Basic Logics
NHẬP MÔN LẬP TRÌNH
Selection Constructs:
The switch statement
switch (variable or expression)
{
case constant :
statement(s);
break;
case constant :
statement (s);
break;
default:
statement (s);
}
char / int
Nếu thiếu break, lệnh tiếp theo sẽ được thực hiện
cho đến khi gặp break hoặc tất cả các lệnh
trong switch được thực hiện
Each case is an entry of a selection
Integral
expression
Op1 Op2 Op3 Op4
c1 c2 c3 default
18Basic Logics
NHẬP MÔN LẬP TRÌNH
Selection Constructs:
The switch statement
If input is 8, what are outputs?
a) 200000 , 2
b) 300000, 3
c) 0, 0
d) 1000000, 4
e) 1500000, 10
f) None of the others
If input is 7, what are outputs?
19Basic Logics
NHẬP MÔN LẬP TRÌNH
Selection
Constructs:
switch
Viết chương trình cho
phép người dùng nhập
một biểu thức đơn
giản có chứa một
trong bốn toán tử +, -,
*, / sau đó in kết quả
ra màn hình.
Input format:
num1 operator num2,
Example: 4*5
Analysis
double num1, num2; char op
result double result
Begin
Accept num1, op, num2 “%lf%c%lf”
switch (op)
{ case ‘+’ : result = num1 + num2;
print out result;
break;
case ‘-’ : result = num1 - num2;
print out result;
break;
case ‘*’ : result = num1 * num2;
print out result;
break;
case ‘/’ : if ( num2==0)
print out “Divide by 0 “
else
{ result = num1 / num2;
print out result;
}
break;
default: print out “Op is not supported”
}
End
Implement it.
20Basic Logics
NHẬP MÔN LẬP TRÌNH
1.4- Iteration (loop) Constructs
• Loop/Iteration: Một số lệnh được thực hiện lặp đi lặp lại
• Structure of a loop:
– Khởi tạo - Initial block.
– Điều kiện - Condition.
– Các tác vụ trong mỗi lần thực hiện
• Các loại lặp: lặp xác định (fixed loops), variable loops
• Các cấu trúc lặp:
while
do while
for
21Basic Logics
NHẬP MÔN LẬP TRÌNH
Iteration
Xác định một vòng lặp:
• Tính S= 1+2+3+4+5+6+7+ + 100
Some addition are performed Loop
• Tổng của một số con số được nhập cho đến
khi người dùng nhập vào 0.
Accept and add numbers Loop
22Basic Logics
NHẬP MÔN LẬP TRÌNH
Iteration
Xác định vòng lặp cho một biểu thức:
Left side Initial block
Right side Condition
Hoạt động và chuẩn bị cho lần lặp tiếp theo:
Các nhiệm vụ trong mỗi lần lặp
S=1+2+3+4+ + 100
S=0+1+2+3+4+ + 100
S=1*2*3*4* * 100
S=1*1*2*3*4* * 100
S=0
i=1
i<=100(1) S=S+i;
(2) i=i+1;
S=1
i=1
i<=100(1) S=S*i;
(2) i=i+1;
S=1
i=2
23Basic Logics
NHẬP MÔN LẬP TRÌNH
Iteration
S= 0 , n<=0
1 + 3 + 5 + + n, n is odd
2 + 4 + 6 + + n, n is even
S= 1 + 1/10 + 1/ 21 + 1/32 + + 1 /nn-1
S= 0 , n<=0
n + (n-2) + (n-4) + + 0
Initial value:
S = 0
i = (n%2==1)? 1: 2;
Condition i <=n
Tasks: S += i;
i+=2;
Initial value:
S = 0;
i = n;
Condition i>0
Tasks: S += i;
i -=2;
Initial value:
S = 1.0;
i = 1;
Condition i <=n
Tasks: S += 1.0/ pow ( i, i-1 );
i = i +1;
24Basic Logics
math.h
NHẬP MÔN LẬP TRÌNH
Iteration: for statement
• for ( InitBlock; Condition; Task2) Task1;
• for ( Init1, Init2; Condition ; Task1, Task2);
• InitBlock;
for ( ; Condition ; Task2) Task1;
• InitBlock;
for ( ; Condition ;)
{ Task1;
Task2;
}
InitBlock
Condition?
Task1
Task2
yes
no
Điều kiện sẽ được kiểm tra trước khi thực
hiện nhiệm vụ.
25Basic Logics
NHẬP MÔN LẬP TRÌNH
Iteration
• Write a program that will
print out the ASCII table.
ASCII code : 0 255
Initialize: int code =0
Condition: code <256
Task:
Print the code using 4 format: %c, %d, %o, %X
code = code +1
26Basic Logics
NHẬP MÔN LẬP TRÌNH
Iteration
• Write a program that will calculate
1+2+3++n.
Accepted variable: int n
Sum 1 .. N int sum
Algorithm
Accept n
Loop:
Initialize i=1, sum=0
Condition i<=n
Tasks: sum += i; i++;
Print out sum
27Basic Logics
NHẬP MÔN LẬP TRÌNH
Iteration: while/dowhile statements
/* Initializations */
while (condition)
{ statements;
}
InitBlock
Condition?
Task1
Task2
yes
no
Điều kiện sẽ được kiểm tra sau khi các
nhiệm vụ được thực hiện.
/* Initializations */
do
{ statements;
}
while (condition) ;
InitBlock
Condition?
Task1
Task2
yes no
Điều kiện sẽ được kiểm tra trước khi
thực hiện nhiệm vụ.
28Basic Logics
NHẬP MÔN LẬP TRÌNH
Iteration: while/dowhile statements
• Write a program that will print
out the ASCII table.
ASCII code : 0 255
Initialize: code =0
Condition: code <256
Task:
Print the code using 4 formats: %c, %d, %o, %X
code = code +1
29Basic Logics
NHẬP MÔN LẬP TRÌNH
Iteration
• Viết một chương trình sẽ in ra tổng số các số
nguyên được nhập vào bởi người dùng. Việc
nhập sẽ dừng nếu người dùng nhập vào giá trị 0.
Nouns: inputted integer int x,
sum of integers int sum
Tasks (algorithm)
Begin
sum =0
do
{ accept x;
sum += x;
}
while (x!=0);
Print out sum
End
Implement it by
yourself.
30Basic Logics
NHẬP MÔN LẬP TRÌNH
Iteration
• Viết một chương trình cho phép người dùng nhập vào một số
ký tự cho đến khi nhấn phím ENTER (mã 10). Chương trình
sẽ in ra số chữ số, số chữ cái, số phím khác đã được nhập.
Accept a character: c=getchar();
Nouns:
character inputted char c, Number of digits int noDigits
Number of letters noLetters, Number of other keys noOthers
#define ENTER 10
Algorithm
Begin
noDigits = noLetters = noOthers = c= 0
printf(“Enter a string:”);
While (c!=ENTER)
{ accept c;
if ( c>=‘0’ && c <=‘9’) noDigits++;
else if ( (c>=‘a’ && c =‘A’ && c <=‘Z’) ) noLetters++;
else noOthers++;
}
Print out noDigits, noLetters, noOthers
End
Implement
it by
yourself.
The while statement is
intentionally used. So,
c=0 is assigned and the
condition c!=ENTER is
evaluated to TRUE
31Basic Logics
Input form:
abc1234fGH+-*/?(ENTER)
NHẬP MÔN LẬP TRÌNH
Iteration: Break/ Bypass a loop
0 1 2 3 4 5
0 1 2 3 4 5
32Basic Logics
NHẬP MÔN LẬP TRÌNH
Iteration Constructs: Flags
• To improve readability, programmers advocated:
– the use of whitespace to identify the logical structure of
the code
– the abolition of all goto statements
– the abolition of all continue statements
– the abolition of all break statements, except with switch
• A technique for avoiding jumps is called
flagging. A flag is a variable that keeps track of a
true or false state.
33Basic Logics
NHẬP MÔN LẬP TRÌNH
Iteration Constructs: Flags
Nên dùng if thay thế cho continue
34Basic Logics
NHẬP MÔN LẬP TRÌNH
Iteration Constructs: Flags
Loop vô hạn
35Basic Logics
NHẬP MÔN LẬP TRÌNH
Iteration Constructs: Flags
No flag is
used.
A flag is used.
36Basic Logics
NHẬP MÔN LẬP TRÌNH
2- Phong cách lập trình - Programming Styles
– Thói quen trong lập trình
• Một chương trình viết tốt giúp các lập trình
viên khác có thể dễ dàng hiểu nó. Coding
style là phải rõ ràng và nhất quán.
Đề xuất
– Naming: tên
– Indentation: thụt lề
– Comments: ghi chú
– Magic Values
– General Guidelines: hướng dẫn chung
37Basic Logics
NHẬP MÔN LẬP TRÌNH
Programming Styles: Naming
• Sử dụng các tên có tính mô tả để làm rõ ý nghĩa của
chúng
• Sử dụng các tên mô tả hoàn chỉnh để nhận dạng,
tránh tên bí ẩn
• Ưu tiên DANH TỪ cho tên biến
• Dùng tên biến ngắn - studentName chứ không phải
NameOfAStudent
• Các tên chỉ số rất ngắn – sử dụng trong là ký hiệu
toán học
38Basic Logics
NHẬP MÔN LẬP TRÌNH
Programming Styles: Indentation
• Thụt lề phần thân của cấu trúc khi được nhúng
trong một cấu trúc khác. For example,
•Use in-line
opening braces or
start opening
braces on a
newline but don't
mix the two
styles.
39Basic Logics
NHẬP MÔN LẬP TRÌNH
Programming Styles: Comment
• Use comments to declare what is done, rather than
describe how it is done.
• Comments introduce what follows.
• Keep them brief and avoid decoration.
40Basic Logics
NHẬP MÔN LẬP TRÌNH
Programming Styles: Magic Values
• Đây có thể là hằng số toán học, thuế suất, giá trị mặc
định hoặc tên.
• Để cải thiện khả năng đọc, chỉ định các tên tượng trưng
cho các giá trị Magic Values này và sử dụng trong suốt
đoạn mã.
• Sử dụng chỉ thị
#define SYMBOLIC_NAME value
41Basic Logics
NHẬP MÔN LẬP TRÌNH
Programming Styles: Guidelines
• Chiều dài dòng tối đa 80 ký tự - cả comment và code
• Tránh sử dụng biến toàn cục (global variables)
• Chọn loại dữ liệu cho các biến một cách khôn ngoan và
cẩn thận
• Khởi tạo giá trị cho biến nếu cần thiết
• Nếu giá trị ban đầu là một phần của một thuật toán, sử
dụng một câu lệnh gán riêng.
• Tránh dung goto, continue, break trừ trong lệnh
switch.
• Sử dụng một khoảng trắng bên cạnh một toán tử (phép
toán).
• Sử dụng dấu ngoặc mở trên cùng dòng hoặc bắt đầu
trên một dòng mới, nhưng không kết hợp hai kiểu.
42Basic Logics
NHẬP MÔN LẬP TRÌNH
Programming Styles: Guidelines
• Tránh các thuật toán kỳ quặc có thể hiệu quả nhưng
rất khó đọc
• Thêm các ghi chú tại vị trí mã đã được tinh chỉnh
để thực hiện hiệu quả
• Loại bỏ các biến không được sử dụng
43Basic Logics
NHẬP MÔN LẬP TRÌNH
3- Walkthroughs
• Hiểu code là một kỹ năng của lập trình.
• Để hiểu được mã, chúng ta nên biết làm thế
nào mã thực hiện.
• Để biết cách thực thi mã lệnh, chúng ta nên
thực hiện từng lệnh.
44Basic Logics
NHẬP MÔN LẬP TRÌNH
Walkthroughs: Demo.
a b a+b c
5 2 7 1
6 4 10 9
7 6 13 17
8 8 18 25
9 10 19 33
10 12 22 41
Output
41
45Basic Logics
NHẬP MÔN LẬP TRÌNH
Walkthroughs: Demo.
int n, i, S=0;
scanf(“%d”, &n);
for (i=1; i<=n; i+=3)
if (i%2!=0 && i%3!=0) S+=i;
printf(“%d”, S);
What is the output if the input is 15?
n 15
i 1 4 7 10 13 16
S 0+1 1 1+7 8 8+1321
S=21
46Basic Logics
NHẬP MÔN LẬP TRÌNH
Walkthroughs: Demo.
int m,n, i, S=0;
scanf(“%d%d”, &n, &m);
for (i=m; i<=n; i++) S+=i;
printf(“%d”, S);
What is the output if the input are 8 12?
Test the program:
int m,n, i, S=0;
scanf(“%da%d”, &n, &m);
for (i=m; i<=n; i++) S+=i;
printf(“%d”, S);
What is the output if the input are 8a12?
Modify Input
“%d %d” 12 8
“%d%d” 12 8
“%d%d” 12
8
“%d-%d” 12-8
47Basic Logics
NHẬP MÔN LẬP TRÌNH
Walkthroughs: Demo.
Study the following code:
int n=15;
int S=0;
i=1;
while (i<2*n)
{ S+= i;
i*=4;
}
Give your opinion.
a) S=21
b) S= 85
c) A syntax error
48Basic Logics
NHẬP MÔN LẬP TRÌNH
i= 1
2
3
4
5
6
Extra Demo: Print star characters
Print out 1*, “\n”
Print out 2*, “\n”
Print out 3*, “\n”
Print out 4*, “\n”
Print out 5*, “\n”
Print out 6*, “\n”
i
Accept N;
for ( i=1; i<=N; i++)
{ for (j=1; j<=i; j++) printf(“*”);
printf (“\n”);
}
N=6
*
**
***
****
*****
******
49Basic Logics
NHẬP MÔN LẬP TRÌNH
Extra Demo: Multiplication Table
N=5
5x 1= 5
5x 2=10
5x 3=15
5x 4=20
5x 5=25
5x 6=30
5x 7=37
5x 8=40
5x 9=45
5x10=50
Accept n;
for ( i=1; i<=10; i++)
Print out “%dx%2d=%2d\n”, n, i, n*i
50Basic Logics
NHẬP MÔN LẬP TRÌNH
Summary
• Logic constructs = Statements can be used
in a program.
– 3 Basic constructs: Sequence, selection
constructs (if, ifelse, ?:, switch), Iteration
constructs (for/ while/ do while)
• Walkthrough: Code are executed by
yourself, Tasks in a walkthrough: a record of
the changes that occur in the values of
program variables and listing of the output,
if any, produced by the program.
51Basic Logics
NHẬP MÔN LẬP TRÌNH
Thank You
52Basic Logics
Các file đính kèm theo tài liệu này:
- nhap_mon_lap_trinh_3_4_basic_logics_3623_1985377.pdf