Lập trình tính toán khoa học kỹ thuật - Buổi 5: Hàm và chương trình - Lê Hoàng Sơn
Bài tập
1. Viết hàm tính n!
2. Viết hàm tính tổng S = 1+2n+ .+mn
3. Viết lại bài số đối xứng (Lesson 4) thành dạng hàm.
4. Số hoàn hảo là số nguyên dương có tổng các ước số
nguyên dương bé hơn nó bằng chính nó. Hãy tìm tất
cả các số hoàn hảo nhỏ hơn một số N cho trước.
5. Nhập vào số N. In ra N số Fibonacci đầu tiên
6. Tìm tất cả các ước của số N
7. Nhập hai dãy kích thước N từ bàn phím. Trộn hai dãy
này thành một dãy tăng.
8. Viết các hàm nhập, in và tính tổng hai ma trận cỡ m x
n thành các hàm
20 trang |
Chia sẻ: dntpro1256 | Lượt xem: 735 | Lượt tải: 0
Bạn đang xem nội dung tài liệu Lập trình tính toán khoa học kỹ thuật - Buổi 5: Hàm và chương trình - Lê Hoàng Sơn, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Lập trình tính toán khoa học kỹ thuật 1
Buổi 5: Hàm và chương trình
Giảng viên: TS. Lê Hoàng Sơn
lehoangson@hus.edu.vn
Lê Hoàng Sơn 2/20
Nội dung chính
Hàm & chương trình con 1
Bài tập 2
Lê Hoàng Sơn 3/20
1. Hàm
Là một đoạn chương trình độc lập thực hiện trọn vẹn
một công việc rồi trả về một giá trị cho chương trình đã
gọi nó.
Hỗ trợ cho chương trình chính nhằm thực hiện một số
thao tác cụ thể.
Một chương trình C bao gồm một hoặc nhiều hàm.
Hàm main() là thành phần bắt buộc của chương trình
Đặc điểm của hàm:
Là một đơn vị độc lập của chương trình.
Không cho phép xây dựng một hàm bên trong một hàm khác.
Lê Hoàng Sơn 4/20
Cú pháp Hàm
KiểuDL: hàmA (tham số)
{
danh sách biến;
các lệnh;
return KiểuDL;
}
int main() {
hàmA();
}
Kiểu dữ liệu (KiểuDL): Giá trị trả
về của hàm được xác định dựa
vào mục đích của hàm. VD: int,
float, double, void
Tên hàm (hàmA): theo quy ước
đặt tên biến
Tham số: danh sách các giá trị
đầu vào (tham trị) và đầu ra
(tham biến) của hàm
Danh sách biến: là các biến chỉ
sử dụng trong từng hàm con
Gọi hàm trong main() bằng tên
hàm và tham số
Lê Hoàng Sơn 5/20
Ví dụ: Tính lũy thừa m của x
# include
# include
# include
double luy_thua(int x, int m) {
double ket_qua;
ket_qua = pow(x,m);
return ket_qua;
}
int main() {
int a, n;
printf("\n Nhap vao a va so mu n:");
scanf("%d%d", &a,&n);
printf("\n Luy thua a^n = %5.3f",luy_thua(a,n));
getch();
return 0;
}
Trả về lũy thừa m của x
Gọi hàm
Định nghĩa hàm
Lê Hoàng Sơn 6/20
Ví dụ: Vẽ dấu *
# include
# include
void line(int num) {
int i;
for(i = 0; i < num; i++)
printf("*");
printf("\n");
}
int main() {
int so;
printf("\n Nhap vao so dau *:");
scanf("%d", &so);
line(so);
getch();
return 0;
}
Không có giá trị trả về
Gọi hàm
Hàm vẽ dấu *
Lê Hoàng Sơn 7/20
Nguyên tắc hoạt động của hàm
Trong hàm main() khi gặp hàm thì cấp phát bộ nhớ cho
các tham số và biến của hàm
Gán giá trị cho tham số hàm
Thực hiện các lệnh trong thân hàm
Khi gặp câu lệnh return hoặc dấu hiệu kết thúc hàm thì
giải phóng bộ nhớ của các tham số và biến của hàm
Thoát khỏi hàm quay về thời điểm sau khi gọi hàm trong
main()
Lê Hoàng Sơn 8/20
Tham số của hàm
Tham trị: các giá trị sẽ truyền cho hàm (Input).
Tham trị không bảo lưu lại những kết quả thay
đổi của nó được tính toán trong Hàm khi Hàm
kết thúc.
Ví dụ: int so;
line(so);
Tham biến: các giá trị của biến mà ta mong
muốn nhận được sau khi kết thúc hàm (output).
Khai báo dưới dạng địa chỉ.
Lê Hoàng Sơn 9/20
Ví dụ: Đếm số lần xuất hiện và in vị trí cuối trong dãy
# include
# include
int dem(float *a, int kichthuoc, float b,
int *vitri)
{
int i, so = 0;
for(i = 0; i < kichthuoc; i++)
if(a[i] == b)
{
so++;
*vitri = i;
}
return so;
}
int main() {
float m[5], n; int i, vitri, solan;
for(i = 0; i < 5; i++) {
printf("\n Nhap vao so thu
%d:",i+1);
scanf("%f", &m[i]);
}
printf("\n Nhap vao so can tim:");
scanf("%f", &n);
solan = dem(m,5,n,&vitri);
printf("\n So lan xuat hien = %d, vi
tri cuoi = %d",solan,vitri);
getch();
return 0;
}
Lê Hoàng Sơn 10/20
Kết quả
Lê Hoàng Sơn 11/20
Phạm vi của biến
Biến cục bộ: các biến sử dụng trong từng hàm kể cả
hàm main(). Kết thúc hàm sẽ giải phóng bộ nhớ của các
biến này.
Biến toàn cục: các biến khai báo từ đầu chương trình và
không thuộc về hàm nào. Mục đích để sử dụng chung
giữa các hàm.
Nên khai báo ít biến toàn cục để tránh lãng phí bộ nhớ.
Nếu tên biến toàn cục và cục bộ trùng nhau thì sẽ ưu
tiên cho biến cục bộ
Lê Hoàng Sơn 12/20
Ví dụ: Kiểm tra một số có phải số nguyên tố
# include
# include
int n; //biến toàn cục
int languyento(int so) {
int i, kt = 1; //biến cục bộ
for(i = 2; i < so; i++)
if(so % i == 0) {
kt = 0;
break;
}
return kt;
}
int main() {
printf("\n Nhap vao so can kiem
tra: ");
scanf("%d", &n);
if (languyento(n))
printf("\n Day la so nguyen
to");
else
printf("\n Day khong la so
nguyen to");
getch();
return 0;
}
Lê Hoàng Sơn 13/20
Kết quả
Lê Hoàng Sơn 14/20
Ví dụ: Sắp xếp dãy tăng dần
# include
# include
# include
float *a; int n, i, j;
float *nhapday(int *n) {
float *b;
printf("\n Nhap vao so phan tu: ");
scanf("%d", n);
b = (float *) calloc(*n,
sizeof(float));
for(i = 0; i < *n; i++) {
printf("\n Nhap A[%d] = ",i);
scanf("%f",&b[i]);
}
return b;
}
void sapxep(float *a, int n) {
float tam;
for(i = 0; i < n -1; i++)
for(j = i + 1; j < n ; j++)
if (a[i] > a[j]) // đổi chỗ
{
tam = a[i];
a[i] = a[j];
a[j] = tam;
}
}
void inday(float *a, int n) {
puts("Day sau khi da sap xep la:");
for(i = 0; i < n; i++)
printf("%f\t",a[i]);
}
Lê Hoàng Sơn 15/20
Ví dụ: Sắp xếp dãy tăng dần (tiếp)
int main() {
a = nhapday(&n);
sapxep(a,n);
inday(a,n);
getch();
return 0;
}
Lê Hoàng Sơn 16/20
Tóm tắt bài học
Hàm và chương trình con
Cấu trúc hàm
Các loại tham số
Phạm vi của biến
Lê Hoàng Sơn 17/20
Câu hỏi thảo luận
Lê Hoàng Sơn 18/20
Nội dung chính
Hàm & chương trình con 1
Bài tập 2
Lê Hoàng Sơn 19/20
Bài tập
1. Viết hàm tính n!
2. Viết hàm tính tổng S = 1+2n+.+mn
3. Viết lại bài số đối xứng (Lesson 4) thành dạng hàm.
4. Số hoàn hảo là số nguyên dương có tổng các ước số
nguyên dương bé hơn nó bằng chính nó. Hãy tìm tất
cả các số hoàn hảo nhỏ hơn một số N cho trước.
5. Nhập vào số N. In ra N số Fibonacci đầu tiên
6. Tìm tất cả các ước của số N
7. Nhập hai dãy kích thước N từ bàn phím. Trộn hai dãy
này thành một dãy tăng.
8. Viết các hàm nhập, in và tính tổng hai ma trận cỡ m x
n thành các hàm.
Lập trình tính toán khoa học kỹ thuật
C l i c k t o e d i t c o m p a n y s l o g a n .
Lê Hoàng Sơn
Các file đính kèm theo tài liệu này:
- bai_giang_thcs3_5_562_2047001.pdf