LẬP TRÌNH C TRÊN LINUX
TS. Lê Văn Vinh
Bộ môn Vật lý tin học
Viện Vật lý kỹ thuật
Đại học Bách khoa Hà nội
1
Lập trình cấu trúc
2
Hàm (Function)
Trong C mọi chương trình con là hàm, không có sự phân biệt
giữa hàm và thủ tục.
Cách tiếp cận phân tích bài toán theo hướng top-down: xác
định chức năng của các hàm.
Một chương trình C là một tập hợp các hàm tương tác bằng
cách gọi lẫn nhau và truyền các thông tin qua lại giữa các
hàm.
Các hàm có thể được dùng lại nhiều lần => thành lập các thư
viện hàm. (vd: stdio, stdlib, conio, math, string,…)
Hai loại hàm trong C:
Hàm chuẩn trong các thư viện C: printf, scanf, các hàm tính toán
toán học, xử lý xâu ký tự, …
Hàm do người dùng định nghĩa.
3
Hàm
Là một đoạn mã lệnh độc lập, được đặt tên,
thực hiện một nhiệm vụ cụ thể và có thể trả
về một giá trị cho chương trình gọi hàm
Sử dụng hàm trong chương trình giúp:
Chia nhỏ chương trình thành những mô đun nhỏ
dễ quản lý
Thống nhất các đoạn mã tương tự nhau, sử dụng
nhiều lần trong một chương trình
Tái sử dụng mã lệnh trong nhiều hơn một chương
trình.
4
Các hàm trong C:
5
Ví dụ về hàm:
#include <stdio.h>
/* nguyen mau ham*/
int cube(int x);
void main()
{
int a, kq;
printf("Cho mot so nguyen:"); scanf("%d", &a);
kq=cube(a);
printf("\n Gia tri lap phuong cua %d la %d", a, kq);
}
/* Ham tinh lap phuong */
int cube(int x)
{
int x3;
x3 = x*x*x;
return x3;
}
6
Hoạt động của Hàm:
7
Khai báo Hàm:
8
File tiêu đề
9
Định nghĩa Hàm:
10
Các thành phần của Hàm:
11
Ví dụ 2:
Chuyển đổi từ góc sang radian:
#include <stdio.h>
#include <math.h>
#define PI 3.14159
/* nguyen mau ham*/
float Radian(float x);
void main() {
float ang, adj, opp;
printf("Nhap gia tri cua goc (theo do:"); scanf("%f", &ang);
printf("Nhap canh ke:"); scanf("%f", &adj);
opp= adj*tan(Radian(ang));
printf("Canh doi la: %f\n", opp);
}
/* Ham tinh Radian */
float Radian(float deg) {
float result;
result = PI * deg/180.0;
return result;
}
12
Tên hàm:
13
Danh sách tham số:
14
Giá trị trả về:
15
Thân hàm:
16
Hàm tìm ƯSCLN
int USCLN(int a, int b)
{
a=abs(a);
b=abs(b);
while(a!=b)
{
if(a>b)
a=a-b;
else
b=b-a;
}
return a;
}
17
Phạm vi truy cập của biến:
18
Phạm vi truy cập
19
Biến tự động:
20
Cấp lưu trữ:
21
Biến tự động:
/* Hoán vị giá trị hai số nguyên */
#include <stdio.h>
void swap(auto int* , auto int* ); /* Hàm nguyên mẫu */
main()
{
auto int x, y;
x = 10; y = 20;
printf("Ban đầu x = %d, y = %d", x, y);
swap( &x, &y);
printf("Sau đó x = %d, y = %d", x, y);
}
/* Định nghĩa hàm swap */
void swap( auto int* a, auto int* b)
{
auto int temp;
temp = *a;
*a = *b;
*b = temp;
}
22
Biến toàn cục
23
Biến toàn cục:
#include <stdio.h>
long fibo(int count);
long f1=1,f2=1;/* khai báo biến toàn cục */
main()
{
int count,n;
printf("\nn =");scanf("%d",&n);
for(count=1;count<=n; ++count)
printf("\ni=%2d F=%ld", count,fibo(count));
}
long int fibo(int count)
{
long int f;
f=(count<3) ? 1: f1+f2;
f2=f1; f1=f;
return f;
}
24
Biến tĩnh
25