You are on page 1of 9

CƠ BẢN KĨ THUẬT LẬP TRÌNH C

Các lệnh cơ bản

1. Nhập:
· scanf("<Mã_định_dạng>", &Tên_Biến);

· gets("<Tên_Mảng_Kí_Tự>");//Lấy chuỗi vừa nhập đổ vào mảng kí tự

VD:

char HoTen[30];
float DiemToan;

printf("\nNhap ho ten: ");


gets(HoTen);

printf("\nNhap diem toan: ");


scanf("%f",&DiemToan);

2. Xuất:

· printf("[<Chuỗi cần xuất>,<Mã định dạng>]", <Tên biến>);


VD:

printf("\nHo va ten: %s",HoTen);


printf("\nDiem toan: %f",DiemToan);

Các kiểu dữ liệu cơ bản


Tên kiểu Từ khóa Mã định dạng Kích thước

Kí tự Char %c 1 byte

Số nguyên Int %d 2 byte

Số nguyên dài Long %ld 4 byte

Số thực Float %f 4 byte

Các thư viện cơ bản


Thư viện stdio.h (Standard input output library).

Thư viện conio.h(Console input output library).

Thư viện math.h(Mathematics library).

Phuc158@yahoo.com Page 1
Cấu trúc điều khiển

1. If eslse
if (<Điều kiện>)
{
//Khối lệnh này sẽ được thực hiện nếu <Điều kiện> ĐÚNG.
}
else
{
//Khối lệnh này sẽ được thực hiện nếu <Điều kiện> SAI.
}

2. Switch
switch (<Biểu_Thức>)
{
case <Giá_Trị_1>:
//Khối lệnh này sẽ được thực hiện
//nếu giá trị của <Biểu_Thức> = <Giá_Trị_1>;
break;
case <Giá_Trị_2>:
//Khối lệnh này sẽ được thực hiện
//nếu giá trị của <Biểu_Thức> = <Giá_Trị_2>;
break;
…………
…………
…………
default:
//Khối lệnh này sẽ được thực hiện
//nếu <Biểu_Thức> != tất cả các Giá_Trị ở trên;
break;
}

3. For
for (<Khởi_Tạo_Biến_Đếm>, <Điều_Kiện>, <Thay_Đổi_Biến_Đếm>)
{
//Khối lệnh này sẽ được lặp lại nếu <Điều_Kiện> ĐÚNG;
}

4. While
while (<Điều_Kiện>)
{
//Khối lệnh này sẽ được lặp lại nếu <Điều_Kiện> == ĐÚNG;
}

5. Do…While
do
{
//Khối lệnh;
}while(<Điểu_Kiện>);

Phuc158@yahoo.com Page 2
Chú thích: <Khối lệnh> sẽ được thực hiện 1 lần rồi so <Điều kiện> nếu đúng thì tiếp tục lặp lại <Khối
lệnh>, nếu sai thì kết thúc vòng lặp.

6. Câu lệnh break và continue


for (Khởi_Tạo_Biến_Đếm, Điều_Kiện, Thay_Đổi_Biến_Đếm)
{
//Lệnh 1;
//Lệnh 2;
break;//Khi gặp lệnh này chương trình sẽ kết thúc vòng lặp ngay
//và thực hiện <Câu_Lệnh_Tiếp_Theo>

continue;//Khi gặp lệnh này: dừng tại đây


//Sau đó chạy lên <Thay_Đổi_Biến_Đếm> và tiếp tục vòng lặp
//Lệnh 3;
}
<Câu_Lệnh_Tiếp_Theo>

So sánh break và continue:

- Giống: Lệnh 3 đều không được thực hiện

- Khác:

o Break: Thoát ra khỏi vòng lặp.

o Continue: Vòng lặp vẫn được tiếp tục.

-----------------------------------------------------˜«™-----------------------------------------------------

Phuc158@yahoo.com Page 3
Bài tập:
Liệt kê ước số của số nguyên dương N:
Ý đồ:Cho i chạy từ 1 đến N-1, nếu N chia hết cho i thì i là ước số của N

void LietKeUocSo(int n)
{
for(int i=1 ; i<n ; i++)
if(n%i==0)
printf("%d ",i);
}

Tìm ước số chung lớn nhất của 2 số a,b:


Ý đồ: Trong 2 số a,b số nào lớn hơn thì lấy số đó trừ số còn lại, trừ
cho đến khi 2 số bằng nhau thì đó là ước số chung lớn nhất.

VD: 4 và 12
- 12 > 4 => 12-4 = 8 -> 4 và 8
- 8 > 4 => 8-4 = 4 -> 4 và 4
- 4 = 4 => Ước số chung lớn nhất là 4.

int UocSoChungLonNhat(int a, int b)


{
int KetQua;

while(a!=b)
{
if(a>b)
a -= b;
else
b -= a;
}

KetQua = a;

return KetQua;
}

Tìm bội số chung nhỏ nhất của 2 số a,b:


Ý đồ: BSCNN = a*b/USCLN;

int BoiSoChungNhoNhat(int a, int b)


{
int KetQua;

KetQua = a*b/UocSoChungLonNhat(a,b);

return KetQua;
}

Phuc158@yahoo.com Page 4
Số nguyên tố: là số tự nhiên lớn hơn 1, chỉ chia hết cho 1 và chính nó.
VD: 2, 3, 5, 7, 11…

int KiemTraSoNguyenTo(int n)
{
int KetQua = 1;//0: false, 1: true

for(int i=2;i<(int)sqrt(n);i++)
if(n%i == 0)
KetQua = 0;

return KetQua;
}

Số hoàn thiện: là số có tổng các ước số bé hơn nó bằng chính nó.


VD: 6 =1+2+3; 28 =1+2+4+7+14; 496 =1+2+4+8+16+31+62+124+248.

Ý đồ:
- Tính tổng các ước sô
- So sánh ước số với N, nếu bắng => Hoàn thiện

int KiemTraSoHoanThien(int n)
{
int KetQua = 0;
int TongUocSo = 0;

//Tinh tong cac uoc so cua so nguyen duong n


for(int i=1 ; i<n ; i++)
{
if(n%i==0)
TongUocSo += i;
}

//Neu TongUOcSo = n thi do la so hoan thien


if(TongUocSo == n)
KetQua = 1;

return KetQua;
}

Số chính phương: là số có căn bậc 2 là một số nguyên.


Ý đồ: sqrt(N) == (int)sqrt(N) => N là số chính phương
VD:
· sqrt(10) = 3.16227
· (int)sqrt(10)= 3
=> 3.16227 != 3 => 10 Không là số chính phương

· sqrt(9) = 3
· (int)sqrt(9)= 3
=> 3 = 3 => 9 là số chính phương
Phuc158@yahoo.com Page 5
int KiemTraSoChinhPhuong(int n)
{
int KetQua = 0; //0: false, 1: true

if(sqrt(n) == (int)sqrt(n))
KetQua = 1;

return KetQua;
}

Đếm số lượng chữ số của số nguyên N:


Ý đồ: Trong khi N>0 thì N = N/10 và tăng biến đếm

VD: N = 123
- Biến đếm = 0
- 123 > 0 => Biến đếm = 1; N = 123/10 = 12
- 12 > 0 => Biến đếm = 2; N = 12/10 = 1
- 1 > 0 => Biến đếm = 3; N = 1/10 = 0
- 0>0: sai => Thoát khỏi vòng lặp, Biến đếm = 3 => N có 3 chữ số.

int DemChuSo(int n)
{
int KetQua=0;

while(n>0)
{
KetQua++;
n = n/10;
}

return KetQua;
}

Tìm chữ số đảo ngược của 1 số.


Ý đồ:
- Gọi M là số đảo. Khởi tạo M=0.
- Trong khi N>0
o M = M*10 + N%10
o N = N/10

VD: 123 => 321


- M = 0;
- N=123 > 0 => M = 0*10 + 123%10 = 3; N = 123/10 = 12
- N=12 > 0 => M = 3*10 + 12%10 = 32; N = 12/10 = 1
- N=1 > 0 => M = 32*10 + 1%10 = 321; N = 1/10 = 0
- N=0 > 0 : Sai => Thoát khỏi vòng lặp => M = 321.

Phuc158@yahoo.com Page 6
int SoDaoNguoc(int n)
{
int m = 0;

while(n>0)
{
m = m*10 + n%10;
n = n/10;
}

return m;
}

Kiểm tra số nguyên dương N có phải là số đối xứng hay không?


Số đối xứng: 123321, 12321 …

Ý đồ:
1. Xác định cơ số: VD: 123321 => Cơ số = 100000
2. Xử lý: Trong khi Cơ_Số > 1.
o Nếu Số_Đầu != Số_Đuôi => Không đối xứng; thoát khỏi vòng lặp.
o Ngược lại:Bỏ số đầu, bỏ số đuôi, Cơ_Số/100;

int KiemTraDoiXung(int n)
{
int KetQua = 1; //0: true, 1: false

int CoSo = 1;

//Xac dinh co so
while((n/CoSo)>9)
CoSo *=10;

//Xử lý
while(CoSo>1)
{
if((n%10)!=(n/CoSo)) //Nếu số đuôi khác số đầu
{
KetQua = 0;
break;
}
else
{
n = (n%CoSo)/10; //Bỏ số đầu và số đuôi
CoSo /=100;
}
}

return KetQua;
}

Phuc158@yahoo.com Page 7
Kiểm tra các chữ số của số nguyên dương N tăng dần từ trái sang phải:
Ý đồ:
- Xét giảm dần từ phải qua trái.
- Chữ số bên phải luôn luôn > chữ số bên trái.

int KiemTraTangDan(int n)
{
int KetQua = 1;

while(n>9)
{
if(n%10 < (n/10)%10)
{
KetQua = 0;
break;
}

n = n/10;
}

return KetQua;
}

Kiểm tra số N có dạng lũy thừa:


Ý đồ:
- Gọi K = 0;
- Trong khi N >= Cơ_Số;
o Nếu N không chia hết cho Cơ_Số => K=0 và break;
o Nếu N chia hết cho Cơ_Số => Tăng K; N = N/10;

int KiemTraLuyThua(int n,int CoSo)


{
int k=0;

while(n>=CoSo)
{
if((n%CoSo) == 0)
{
k++ ;
n = n/CoSo;
}
else
{
k=0;
break;
}
}

return k;
}

Phuc158@yahoo.com Page 8
Tài liệu tham khảo:
- Bài tập kĩ thuật lập trình – Nguyễn Tấn Trần Minh Khang.

- Bài tập ngôn ngữ lập trình C (từ A đến Z) – Huỳnh Tấn Dũng - Hoàng Đức Hải.

Phuc158@yahoo.com Page 9

You might also like