bài giảng này cung cấp cho các bạn kiến thức cơ bản đến chuyên sau của cấu trúc vòng lập trong lập trình sẽ là tài liệu cực hay cho các bạn tring việc học tập và nghiên cứu,là bài viết tham khảo cho các bạn khi làm bài báo cáo thuyết trình.hi vọng bài viết sẽ cung cấp được lượng kiến thức cần thiết nhất cho các bạn
Trang 1Cùng Đại học Hoa Sen xây dựng tương lai
Nhập Môn Lập Trình
Cấu trúc Vòng Lặp For, While, Do … While
Trang 2Cùng Đại học Hoa Sen xây dựng tương lai
Road Map
Lưu đồ: cấu trúc vòng lâp
Biểu thức và các phép toán trong ngôn ngữ lập trinh C
Biểu thức, toán hạng và toán tử
Phép toán: số học, quan hệ, luận lý, trên bít, tăng giảm
Phép toán điều kiện
Cấu trúc vòng lặp trong ngôn ngữ lập trinh C
Trang 3Cùng Đại học Hoa Sen xây dựng tương lai
Cấu trúc chương trình
Tầm vực biến
Khối lệnh
Trang 4Cùng Đại học Hoa Sen xây dựng tương lai
Nó có thể lặp lại một số bước với số lần lặp xác định theo yêu
cầu của bài toán hoặc đến khi một số điều kiện nhất định được thỏa
Trang 5Cùng Đại học Hoa Sen xây dựng tương lai
viết DISPLAY “Scooby” 1000 lần thì rất tốn công sức
Có thể tinh giản vấn đề bằng cách viết câu lệnh DISPLAY
chỉ một lần, sau đó đặt nó trong cấu trúc vòng lặp, và chỉ thị máy tính thực hiện lặp 1000 lần cho câu lệnh trên
Do loop 1000 times
DISPLAY “Scooby”
End loop
Trang 6Cùng Đại học Hoa Sen xây dựng tương lai
Trang 7Cùng Đại học Hoa Sen xây dựng tương lai
Trang 8Cùng Đại học Hoa Sen xây dựng tương lai
Trang 9Cùng Đại học Hoa Sen xây dựng tương lai
END IF cnt=cnt+1
END DO
sum = sum/cntNegNum /* something wrong here */
DISPLAY “Average of negative number”, sum
END
Trang 10Cùng Đại học Hoa Sen xây dựng tương lai
Road Map
Lưu đồ: cấu trúc vòng lâp
Biểu thức và các phép toán trong ngôn ngữ lập trinh C
Biểu thức, toán hạng và toán tử
Phép toán: số học, quan hệ, luận lý, trên bít, tăng giảm
Phép toán điều kiện
Cấu trúc vòng lặp trong ngôn ngữ lập trinh C
Trang 11Cùng Đại học Hoa Sen xây dựng tương lai
Trang 12Cùng Đại học Hoa Sen xây dựng tương lai
Trang 13Cùng Đại học Hoa Sen xây dựng tương lai
Trang 14Cùng Đại học Hoa Sen xây dựng tương lai
Trang 15Cùng Đại học Hoa Sen xây dựng tương lai
15
& And bit (giao từng cặp bit)
| Or bit (hoặc từng cặp bit)
^ Xor bit (exclusive)-cặp bit khác nhau trả
về 1
<< Dịch trái
>> Dịch phải
Trang 16Cùng Đại học Hoa Sen xây dựng tương lai
Trang 17Cùng Đại học Hoa Sen xây dựng tương lai
17
++ x Tăng x lên 1 trước khi dùng
x ++ Tăng x lên 1 sau khi dùng x Giảm x xuống 1 trước khi dùng
x Giảm x xuống 1 sau khi dùng
Ví dụ : n = 3;
A = ++n; A sẽ được gán giá trị là 4
A = n++; A sẽ được gán giá trị là 3
Trang 18Cùng Đại học Hoa Sen xây dựng tương lai
• Prefix: changed before its value is used
q = 2 * ++ a; /* first, increment a by 1;
/* then, multiply a by 2 and assign to q */
• Postfix: changed after its value is used
q = 2 * a++; /* first, multiply a by 2 and assign to q;
/* then, increment a by 1 */
Các Phép Toán
Trang 19Cùng Đại học Hoa Sen xây dựng tương lai
Trang 20Cùng Đại học Hoa Sen xây dựng tương lai
Don’t Be Too Clever
Trong ngôn ngữ lập trình C, chương trình biên dịch (complier)
có thể chọn arguments trong hàm để xử lý trước nhằm nâng hiệu quả của chúng Tuy nhiên, điều này có thể gây vấn đề nếu chúng
Trang 21Cùng Đại học Hoa Sen xây dựng tương lai
21
Phép toán điều kiện (biểu thức điều kiện)
<Điều Kiện> ? <biểu thức 1> : <biểu thức 2>;
ĐK đúng
ĐK sai
Ví dụ : kq = (5>3+1) ? 10 : 20; kq =10
Trang 22Cùng Đại học Hoa Sen xây dựng tương lai
22
Toán Tử Trong Ngôn Ngữ C
tính
++ (postfix) (postfix) () (function call) [ ] { } L-R
++ (prefix) (prefix) - + ~ ! sizeof *() &()
Trang 23Cùng Đại học Hoa Sen xây dựng tương lai
Trang 24Cùng Đại học Hoa Sen xây dựng tương lai
Trang 25Cùng Đại học Hoa Sen xây dựng tương lai
Trang 26Cùng Đại học Hoa Sen xây dựng tương lai
Road Map
Lưu đồ: cấu trúc vòng lâp
Biểu thức và các phép toán trong ngôn ngữ lập trinh C
Biểu thức, toán hạng và toán tử
Phép toán: số học, quan hệ, luận lý, trên bít, tăng giảm
Phép toán điều kiện
Cấu trúc vòng lặp trong ngôn ngữ lập trinh C
Trang 27Cùng Đại học Hoa Sen xây dựng tương lai
Khởi tạo biến
Thay đổi g.trị của biến
Trang 28Cùng Đại học Hoa Sen xây dựng tương lai
- Thân của vòng for : có thể là một lệnh, một khối lệnh.
* Lưu ý các vòng lặp có thể lồng vào nhau
Vòng lặp: for
Trang 29Cùng Đại học Hoa Sen xây dựng tương lai
Trang 30Cùng Đại học Hoa Sen xây dựng tương lai
z = z+I
DISPLAY z END
Mã giả
(Pseudocode)
Trang 31Cùng Đại học Hoa Sen xây dựng tương lai
#include “conio.h”
void main() {
Trang 32Cùng Đại học Hoa Sen xây dựng tương lai
Lưu đồ:
Nếu thỏa đk thì thực hiện lệnh, sai
thì thoát
Vòng lặp: while
Cú pháp:
Trang 33Cùng Đại học Hoa Sen xây dựng tương lai
Trang 34Cùng Đại học Hoa Sen xây dựng tương lai
N=N-1;
Xuất N Kết thúc
Mã giả
(Pseudocode)
Trang 35Cùng Đại học Hoa Sen xây dựng tương lai
#include “conio.h”
void main() {
int N;
printf("Nhap N:");
scanf("%d",&N);
while (N%5!=0) {
N=N-1;
} printf(“So can tim:%d",N);
getch();
}
Mã nguồn
(Code)
Trang 36Cùng Đại học Hoa Sen xây dựng tương lai
đk
Lệnh;
sai đúng
Vòng lặp do…while
Trang 37Cùng Đại học Hoa Sen xây dựng tương lai
z
Trang 38Cùng Đại học Hoa Sen xây dựng tương lai
Nhập x
Trang 39Cùng Đại học Hoa Sen xây dựng tương lai
Bắt đầu
Nhập x do
Nhập n
while (n=0)
Tính z = (2*x*x + 3*n)/(n*n)
In z ra màn hình Kết thúc
Mã giả
(Pseudocode)
Trang 40Cùng Đại học Hoa Sen xây dựng tương lai
Trang 41Cùng Đại học Hoa Sen xây dựng tương lai
Lệnh break cho phép thoát khỏi vòng lặp của các lệnh for,
while, do while và cấu trúc switch…case
Trong thân các vòng lặp for, while và do…while khi gặp lệnh continue, máy tính sẽ bỏ qua các lệnh còn lại để trở về đầu vòng lặp.
Lệnh continue
Trang 42Cùng Đại học Hoa Sen xây dựng tương lai
printf(“i = %d \n”,i);
} getch();
}
Lệnh if(! i) tương tự if( i==0), tức là mỗi lần kiểm tra i==0 thì giảm
đi 1 trước.
Trang 43Cùng Đại học Hoa Sen xây dựng tương lai
{ for (int i=0; i<5; i++)
{ printf("Faculty of Science & Technology!\n");
if (i<4) continue;
printf("Hoa Sen University!\n");
} getch();
}
Trang 44Cùng Đại học Hoa Sen xây dựng tương lai
Nếu muốn lặp vô tận ta sử dụng các dạng lặp sau đây:
Trang 45Cùng Đại học Hoa Sen xây dựng tương lai
45
• a == b : so sánh bằng (a test for equality)
• a = b : gán giá trị (assignment expression) Giá trị LUÔN đúng
Trang 46Cùng Đại học Hoa Sen xây dựng tương lai
Trang 47Cùng Đại học Hoa Sen xây dựng tương lai
Trang 48Cùng Đại học Hoa Sen xây dựng tương lai
• Lý do: biểu thức so sánh thực hiện từ trái sang phải
2 < k < 7 tương đương với (2 < k ) < 7
Vì 2 < k là đúng nên giá trị của nó là 1 Do đó:
2 < k < 7 tương đương với 1 < 7 if( 2 < k && k < 7) /* ĐÚNG */
/* true luôn được in */
Trang 49Cùng Đại học Hoa Sen xây dựng tương lai
}
• Lý do: x == 9.9 vượt quá độ chính xác của máy Do đó x != 9.9
LUÔN ĐÚNG Chương trình sẽ vào vòng lặp vô tận
• Cách viết chính xác: x <= 9.9;
Trang 50Cùng Đại học Hoa Sen xây dựng tương lai
Trang 51Cùng Đại học Hoa Sen xây dựng tương lai
#include
int A, B, C;
const max=100;
int tong2so(int a, int b);
void hoanvi(int a, int b);
void main()
{ int x, y, z;
……
z = tong2so(x,y)
Xây dựng các hàm
Trang 52Cùng Đại học Hoa Sen xây dựng tương lai
Tầm vực biến là phạm vi hoạt động của biến
Có 2 loại biến:
•Biến toàn cục: có tầm vực trong toàn bộ chương trình
•Biến cục bộ: có tầm vực trong nội bộ 1 hàm
Tầm vực biến (variable scope)
Trang 53Cùng Đại học Hoa Sen xây dựng tương lai
Biến nội bộ
Trang 54Cùng Đại học Hoa Sen xây dựng tương lai
- Các khối lệnh có thể lồng nhau: Bên trong một khối lệnh có thể
có một khối lệnh khác Sự lồng nhau như thế là không hạn chế.
- Thân hàm cũng là một khối lệnh
Khối lệnh (block)
Trang 55Cùng Đại học Hoa Sen xây dựng tương lai
Khối lệnh
Khối lệnh con Khối lệnh con
Trang 56Cùng Đại học Hoa Sen xây dựng tương lai
56
BÀI TẬP THỰC HÀNH
Trang 57Cùng Đại học Hoa Sen xây dựng tương lai
a) Diện tích hình tròn (cho bán kính)
b) Diện tích hình tam giác (cho đáy và chiều cao)
2 Viết một đoạn mã giả và vẽ một lưu đồ để nhập điểm của 20 sinh viên
cho các môn : Vật lý, Hóa học, và Sinh học Sau đó hiển thị điểm trung bình và tổng của những điểm này Đồng thời in ra danh sách tất cả sinh viên có điểm trung bình trên 9.0
3 Given that value is an int, what output would the following loop
Trang 58Cùng Đại học Hoa Sen xây dựng tương lai
Bài tập điểm cộng về nhà
4 Write pseudo code and make flowcharts for the following:
a Accept year from the user Display if the year is leap.
b Accept the month number e.g 1,2 And display the month name
5 Write the pseudo code to display the following output using for loop:
*
* *
* * *
6 Write pseudo code to :
a) Determine sum of first ten natural numbers
b) Determine the product and count of numbers accepted from the user
c) A contractor wants to calculate the salary of all his employees He knows the number of work days put in by each employee Each employee is paid a sum of $100 per day.
Trang 59Cùng Đại học Hoa Sen xây dựng tương lai
a) Display the cube of first N natural numbers.
b) Generate the following series: 1, 3, 5, 7, 9, …
c) Generate the series: 3, 7, 15, 31, …
8 Illustrate program logic with flowcharts and pseudo codes for the following:
a) Accept a number from the user Reverse it and display it.
b) Accept two numbers find the highest common factor between the two
c) Display all numbers divisible by 5 between 10 and 30.
9 Write a pseudo code to simulate a calculator Input a number an operator and
another number and display the result on the screen
10 Three numbers are said to form a Pythagorean triplet if the sum of squares of two numbers is equal to the square of the third number Write a pseudo code to input three numbers and find if three numbers form a Pythagorean triplet.
Trang 60Cùng Đại học Hoa Sen xây dựng tương lai
Trang 61Cùng Đại học Hoa Sen xây dựng tương lai
#include <stdio.h>
int main(void) {
Trang 62Cùng Đại học Hoa Sen xây dựng tương lai
int k;
for(k = 1, printf("%d: Hi!\n", k); printf("k = %d\n",k), k*k < 26;
k+=2, printf("Now k is %d\n", k) ) printf("k is %d in the loop\n",k);
return 0;
}
Trang 63Cùng Đại học Hoa Sen xây dựng tương lai
Trang 64Cùng Đại học Hoa Sen xây dựng tương lai
Trang 65Cùng Đại học Hoa Sen xây dựng tương lai
Declarations and initializations
int a = 1, b = 2, c = 3;
Expression Equivalent expression Value
a && b && c (a && b) && c
a && b II c
a II b && c
a II !b && !!c + 4
a += !b && c == !5
Trang 66Cùng Đại học Hoa Sen xây dựng tương lai
Bài tập điểm cộng về nhà
17 Complete the following table
Declarations and initializations
Trang 67Cùng Đại học Hoa Sen xây dựng tương lai
used to control a for loop In the following code an attempt is being made
to sum the integers from 1 to 5 What is the effect of mixing up the expressions? First, simulate what happens manually, and then write a test program to find out if you were correct.
int i, sum = 0;
for ( i = 1; ++i; i <= 5) printf(“i = %d sum = %d\n”, i, sum += i);
Trang 68Cùng Đại học Hoa Sen xây dựng tương lai
3/ Viết chương trình nhập vào 2 số Tìm USCLN và MSCNN của 2 số đó.
4/ Viết chương trình nhập vào 1 số nguyên Kiểm tra đó có phải là số chính
phương hay không?
5/ Viết chương trình tính n!
6/ Viết chương trình nhập số nguyên N Hỏi N có bao nhiêu chữ số.
7/ Viết chương trình nhập vào số N tìm tổng các số trong nó (vd: 1234 tổng=10) 8/ Viết chương trình in các kí tự từ ‘A’ đến ‘Z’ xuôi và ngược, chữ hoa và chữ thường 9/ Viết chương trình in bảng cửu chương n.
Trang 69Cùng Đại học Hoa Sen xây dựng tương lai
10/ Viết chương trình in n số Fibonaci đầu tiên.
Trang 70Cùng Đại học Hoa Sen xây dựng tương lai
2/ Viết chương trình nhập vào 1 số nguyên N In tất cả nhưng số lẽ
nhỏ hơn hoặc bằng N và không chia hết cho 3.
3/ Tính biểu thức sau (N là số nguyên, x là số thực):
n x n
n Z
Trang 71Cùng Đại học Hoa Sen xây dựng tương lai
Lưu ý khi làm bài tập:
SV hãy vẽ lưu đồ hoặc mã giả
trước khi viết chương trình