Tải bản đầy đủ (.doc) (21 trang)

ĐỀ CƯƠNG NGÔN NGỮ LẬP TRÌNH C pot

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (519.74 KB, 21 trang )

ĐỀ CƯƠNG NGÔN NGỮ LẬP TRèNH C
( Cao Đẳng )
By:
Cõu 1: Trỡnh bày một số quy tắc cần thiết khi viết chương trỡnh băng ngôn ngữ C? Cho VD minh họa?
Trả lời:
*Các Quy tắc cần thiết khi viết chương trình bàng ngôn ngữ lập trình C:
Quy tắc 1: Mỗi câu lệnh có thể viết trên một hay nhiều dòng nhưng phải được kết thúc bằng dấu chấm phẩy ;
Quy tắc 2: Khi viết lời giải thích cần phải đặt lời giải thích giữa dấu /* và dấu */ và có thể được viết
- Trên một dòng: sử dụng dấu // ( nội dung chú thích ).
VD: int x ; // biến chứa số đếm
- Trên nhiều dòng: /* nội dung
…………… */
VD: int x ; /*biến chứa số đếm
…………………
………………*/
Quy tắc 3: Trước khi sử dụng một hàm cần biết nó nằm trong thư viện nào và phải dùng toán tử #include nạp
thư viện đó vào chương trình.
VD: để dùng hàm printf() ta phải nạp thư viện stdio.h như sau:
#include “stdio.h”
Quy tắc 4: Một chương trình có thể có nhiều hàm nhưng chỉ có duy nhất một hàm chính (hàm main)
Cõu 2: trỡnh bày cỏc kiểu dữ liệu trong ngụn ngữ C, cho vớ dụ.?
Trả lời:
-Kiểu char ( kiểu ký tự ) VD: unsigned 0 ữ 255.
-Kiểu nguyờn . VD: unsigned short 0 – 65535.
-Kiểu dấu phẩy động VD: float 3.4E – 38 đến 3.4E+38.
Cõu 3 : Trỡnh bày khỏi niệm kiểu hằng, cấu trỳc khai bỏo hằng trong ngụn ngữ C. cho vớ dụ minh họa?.
Trả lời:
-Hằng là các đại lượng cố định không thay đổi trong khi tính toán.
-Cấu trỳc: # define <tờn hằng> <giỏ trị>
-VD: #define max 100
#define sodem //kiểu nguyờn


#define KT ‘A’ // kiểu giỏ trị
Cõu 4: trỡnh bày khỏi niệm kiểu biến, cấu trỳc khai bỏo biến?. cho vớ dụ minh họa?.
Trả lời:
- Biến là giá trị có thể thay đổi được trong khi tính toán, và được khai báo trước khi sử dụng.
-Cấu trỳc: < kiểu biến > <tờn biến>
-VD: int a,b,c; // khai bỏo biến kiểu nguyờn
long y; // khai bỏo biến kiểu long.
unsigned char z; // khai bỏo kiểu kớ tự
Cõu 5: Trỡnh bày khỏi niệm mảng dữ liệu?. cấu trỳc khi khai bỏo kiểu mảng. ?cho vớ dụ minh họa.?
Trả lời:
- Mảng là tập hợp cỏc phần tử cú cựng 1 dữ liệu và cựng 1 tờn.
- Cấu trỳc: kiểu mảng < tờn mảng> [ số phần tử ]
- VD: int A[ 10 ]; //khai bỏo mảng kiểu nguyờn 10 phần tử
By:
Cõu 6: Trỡnh bày phương pháp lấy địa chỉ của biến và địa chỉ của mảng , phần tử mảng.
Cho vớ dụ minh họa?
Trả lời:
- Mỗi biến được cấp phát một vùng nhớ gồm một số byte liên tiếp. Số hiệu của byte đầu chính là địa chỉ của
biến. Địa chỉ của biến sẽ được sử dụng trong một số hàm ta sẽ nghiên cứu sau này (Ví dụ như hàm scanf ).
Để lấy địa chỉ của một biến ta sử dụng phép toán :
& tên biến
-Địa chỉ đầu của một mảng
Tên mảng biểu thị địa chỉ đầu của mảng. Như vậy ta có thể dùng a thay cho &a[0].
- Lấy địa chỉ một phần tử của mảng
Có một vài hạn chế trên các mảng hai chiều. Chẳng hạn có thể lấy địa chỉ của các phần tử của mảng một
chiều, nhưng nói chung không cho phép lấy địa chỉ của phần tử của mảng hai chiều. Như vậy máy sẽ
chấp nhận &a[i] nhưng không chấp nhận phép tính &y[i][j].
Câu7: Trình bày khái niệm về cấu trúc hàm, cấu trúc hàm tả lại giá trị và hàm không trả lại giá trị.
Cho ví dụ minh họa?
Trả lời:

- Khái niệm: Hàm có thể xem là một đơn vị độc lập của chương trình. Các hàm có vai trò ngang nhau, vì vậy
không có phép xây dựng một hàm bên trong các hàm khác
Xây dựng một hàm bao gồm :-Khai báo kiểu , đặt tên hàm , khai báo các đối và đưa ra câu lệnh cần thiết để
thực hiện yêu cầu đề ra.
- Hàm trả lại giá trị:

Cấu trúc: <Kiểu hàm> <Tên hàm> ( <khai báo các đối số>)
{
// Khai báo các biến cục bộ
// Các câu lệnh
// [return[biểu thức];]
}
-VD: Tìm giá trị lớn nhất của 2 số
int Max(int x , int y )
{ int z=0;
if(x>y) z=x;
else z=y;
return z;
}
- Hàm không trả lại giá trị
→ Cấu trúc:
void <Tên hàm> ( <khai báo các đối số>)
{
// Khai báo các biến cục bộ
// Các câu lệnh
By:
}
-VD: Tìm giá trị của 2 số
int 2; // biến khai báo toàn cục
void Max(int x , int y )

{
if(x>y) z=x;
else z=y;
}
Câu 8: Trình bày biểu thức và các phép toán số học. Cho ví dụ minh họa.?
Trả lời:
- Biểu thức : kết hợp giữa các phép toán và các toán hạng để diễn tả một công thức toán học nào đó , Mỗi biểu
thức có sẽ có một giá trị
- Các phép toán hai ngôi số học là
Phép toán ý nghĩa Ví dụ
+ Phép cộng a+b
- Phép trừ a-b
* Phép nhân a*b
/ Phép chia a/b ( Chia số nguyên sẽ chặt phần thập phân )
% Phép lấy phần dư a%b ( Cho phần dư của phép chia a cho b )
Có phép toán một ngôi - ví dụ -(a+b) sẽ đảo giá trị của phép cộng (a+b).
Ví dụ1 :
11/3=3
11%3=2
-(2+6)=-8
Các phép toán + và - có cùng thứ tự ưu tiên, có thứ tự ưu tiên nhỏ hơn các phép * , / , % và cả ba phép
này lại có thứ tự ưu tiên nhỏ hơn phép trừ một ngôi.
Ví dụ2 :
x =0; // lệnh gán giá trị 0 cho biến x
i++; // lệnh tăng đơn vị cho biến i( i=i+1)
y=11;
x=y%10; //x=1
y/=10 ; //y=1
Câu 9: Trình bày các phép toán quan hệ, Cho ví dụ minh họa?
Trả lời :

- Các phép toán quan hệ và ví dụ:
Phép
toán
ý nghĩa Ví dụ
> So sánh lớn hơn
a>b
4>5 có giá trị 0
By:
>= So sánh lớn hơn hoặc bằng
a>=b
6>=2 có giá trị 1
< So sánh nhỏ hơn
a<b
6<=7 có giá trị 1
<= So sánh nhỏ hơn hoặc bằng
a<=b
8<=5 có giá trị 0
== So sánh bằng nhau
a==b
6==6 có giá trị 1
!= So sánh khác nhau
a!=b
9!=9 có giá trị 0
Câu 10 : Trình bày các phép toán tăng, giảm, lệnh gán và biểu thức. Cho ví dụ minh họa?
Trả lời :
- Các phép toán tăng, giảm.
C đưa ra hai phép toán một ngôi để tăng và giảm các biến . Toán tử tăng là ++ sẽ cộng 1 vào toán hạng của
nó, toán tử giảm thì sẽ trừ toán hạng đi 1.
Ví dụ :
n=5

++n Cho ta n=6
n Cho ta n=4
Ta có thể viết phép toán ++ và trước hoặc sau toán hạng như sau : ++n, n++, n, n
Sự khác nhau của ++n và n++ ở chỗ: trong phép n++ thì tăng sau khi giá trị của nó đã được sử dụng, còn
trong phép ++n thì n được tăng trước khi sử dụng. Sự khác nhau giữa n và n cũng như vậy.
Ví dụ :
n=5
x=++n Cho ta x=6 và n=6
x=n++ Cho ta x=5 và n=6
- Lệnh gán và biểu thức
Biểu thức gán là biểu thức có dạng :
v = e
Trong đó v là một biến ( hay phần tử mảng ), e là một biểu thức. Giá trị của biểu thức gán là giá trị của
e, kiểu của nó là kiểu của v. Nếu đặt dấu ; vào sau biểu thức gán ta sẽ thu được phép toán gán có dạng :
v=e;
Biểu thức gán có thể sử dụng trong các phép toán và các câu lệnh như các biểu thức khác. Ví dụ như
khi ta viết
a=b=5;
thì điều đó có nghĩa là gán giá trị của biểu thức b=5 cho biến a. Kết qủa là b=5 và a=5.
By:
Hoàn toàn tương tự như :
a=b=c=d=6; gán 6 cho cả a, b, c và d
Ví dụ :
z=(y=2)*(x=6); { ở đây * là phép toán nhân }
gán 2 cho y, 6 cho x và nhân hai biểu thức lại cho ta z =12.
Câu 11: Trình bày thứ tự ưu tiên của các phép toán. Cho ví dụ minh họa?
Trả lời:
- Thứ tự ưu tiên các phép toán
-Các phép toán có độ ưu tiên khác nhau, điều này có ý nghĩa trong cùng một biểu thức sẽ có một số
phép toán này được thực hiện trước một số phép toán khác.

-Thứ tự ưu tiên của các phép toán được trình bày trong bảng sau:
TT Phép toán Trình tự kết hợp
1 () [] -> Trái qua phải
2 ! ~ & * - ++ (type ) sizeof Phải qua trái
3 * ( phép nhân ) / % Trái qua phải
4 + - Trái qua phải
5 << >> Trái qua phải
6 < <= > >= Trái qua phải
7 == != Trái qua phải
8 & Trái qua phải
9 ^ Trái qua phải
10 | Trái qua phải
11 && Trái qua phải
12 || Trái qua phải
13 ?: Phải qua trái
14 = += -= *= /= %= <<= >>= &= ^= |= Phải qua trái
15 , Trái qua phải
Chú thích:
Các phép toán tên một dòng có cùng thứ tự ưu tiên, các phép toán ở hàng trên có số ưu tiên cao hơn
các số ở hàng dưới.
Đối với các phép toán cùng mức ưu tiên thì trình tự tính toán có thể từ trái qua phải hay ngược lại
được chỉ ra trong cột trình tự kết hợp.
Ví dụ :
* px=*( px) (Phải qua trái)
8/4*6=(8/4)*6 (Trái qua phải)
By:
Nên dùng các dấu ngoặc tròn để viết biểu thức một cách chính xác.
Câu 12 : Trình bày cấu trúc giải thuật của cấu trúc điều khiển IF . IF ELSE. Cho ví dụ minh họa.?
Trả lời :
* Cấu trúc lệnh if

- Khái niệm: Lệnh if cho phép thực hiện lệnh khi biểu thức điều kiện của toán tử điều kiện if được thoả
mãn.
- Cấu trúc:
if (<Biểu thức điều kiện>)
{
// Nội dung thoả mãn điều kiện
}
- Thuật toán
- Cấu trúc lệnh if else
- Khái niệm: Lệnh if … else cho phép thực hiện “ Nội dung thoả mãn điều kiện” khi biểu thức điều kiện
của toán tử if được thoả mãn. Ngược lại, nếu biểu thức điều kiện không thoả mãn thì thực hiện “ Nội dung
không thoả mãn điều kiện”.
- Cấu trúc:
if(<Biểu thức điều kiện>)
{
// Nội dung thoả mãn điều kiện
}
else
{
By:
T tử
Nội dung
- Ví dụ: Lập trình tìm giá trị cực đại của hai số a, b.
#include<Regx52.h>
unsigned char a,b,Max;
void main()
{
Max=0;
a = 4;
b = 9;

while(1)
{
if(a>b) Max=a;
if(a<b) Max=b;
};
}
// Nội dung không thoả mãn điều kiện
}
- Thuật toán :
Câu 13: Trình bày cấu trúc và giải thuật của cấc trúc điều khiển SWITCH và FOR cho ví dụ minh họa?
Trả lời :
- Cấu trúc toán tử SWITCH
- Khái niệm: Là cấu trúc tạo nhiều nhánh đặc biệt. Nó căn cứ vào giá trị một biểu thức nguyên để chọn
một trong nhiều cách nhảy.
- Cấu trúc:
switch ( <Biểu thức nguyên> )
{
case kq1:
{
//khối lệnh 1
break;
}
case kq2:
{
// khối lệnh 2
break;
}

case kqk:
{

By:
Biểu
thức
Nội dung 1 Nội dung 2
VD:
One: if (a>0) b=1;
else b=0;
Tow: if (a>0) a=10;
else { a=5; b=6; }
// khối lệnh k
break;
}
default:
{
//khối lệnh k+1
break;
}
}
- Thuật toán:

-VD: cho biến a nhận giá trị từ 0 đến 3
Switch (a)
{
case 0:
{ p=a
c=5
break;
}
case 1:
{ p=b

c=2
break;
}
default :
{ p=c
b=5
By:
BT
1
BT
2
BT
n
Nội dung 1 Nội dung 2 Nội dung n GT mặc
định
break;
}
}
- Cấu trúc FOR
- Khái niệm: Toán tử for dùng để xây dựng cấu trúc lặp.
- Cấu trúc: for ( <Biểu thức 1>; <Biểu thức 2>; <Biểu thức 3>)
{
// Lệnh hoặc khối lệnh ;
};
- Thuật toán:
Câu 14 : Trình bày cấu trúc và giải thuật của cấu trúc điều khiển Do While và While.
Cho ví dụ minh họa?
Trả lời :
* Cấu trúc while
- Khái niệm: Cấu trúc while dùng để xây dựng chu trình lặp.

- Cấu trúc:
while ( <Biểu thức điều kiện> )
{
//Lệnh hoặc khối lệnh
By:
B T
2
Nội Dung
X Lý 3
End
Ví dụ:
For (i=0; i<4 ; i++)
{
A [i]=0;
};
}
Ví dụ :
do
{
y*=10;
z =x/y;
} while(x>0);
*Câu lệnh do while
- Khái niệm: do while dùng đẻ xây dựng chu chương trình lặp.
- Cấu trúc: do
{
//Lệnh hoặc khối lệnh;
} while ( <Biểu thức điều kiện> );
- Thuật toán :
Câu 15: Trình bày khái niệm con trỏ , cấu trúc khai báo con trỏ , gán địa chỉ và truy xuất con trỏ. Cho ví

dụ minh họa.
Trải lời :
*Khái niệm con trỏ: con trỏ là biến chứa địa chỉ của một biến khác.
*Cấu trúc khai báo biến con trỏ:
<kieu con tro>*<ten con tro>
VD: int*p; //khai báo tên con trỏ p
char * st; //khai báo biến con trỏ kiểu ký tự
* Địa chỉ con trỏ
- Con trỏ chứa địa chỉ của đối tượng nên nó có thể xâm nhập vào đối tượng gián tiếp qua con trỏ. Giả sử x là
một biến kiểu int, và giả sử px là con trỏ được tạo ra theo một cách nào đó.
By:
End
B Thức
Nội dung Ví dụ :
do
{
B[i] = A[i];
i++;
} while(x>=9);
* Các ví dụ :
- Ví dụ 1: Xây dựng một hàm dùng để hoán vị giá trị của hai biến kiểu nguyên không dụng con trỏ.
#include <Regx52.h>
int x,y;
void hoanvi(float x,float y);
void main()
{
x=3; y=7;
while(1) hoanvi(x,y);
}
void hoanvi(int x,int y)

{
int z;
z=x; x=y; y=z;
}
Câu 16 : Trình bày con trỏ và mảng 1 chiều . cho ví dụ minh họa ?
Trả lời :
* Phép toán lấy địa chỉ :
* Tên mảng là một hằng địa chỉ
* Mảng, con trỏ và xâu ký tự :
Như ta đã biết trước đây, xâu ký tự là một dãy ký tự đặt trong hai dấu nháy kép
VD: int a[10];
a tương ứng với &a[0]
a+i tương ứng với &a[i]
*(a+i) tương ứng với a[i]
Câu 17 : Trình bày con trỏ và mảng nhiều chiều . cho ví dụ minh họa ?
Trả lời :
*Phép lấy địa chỉ : chỉ có thể áp dụng khi các phần tử mảng hai chiều có kiểu nguyên,.
* Con trỏ và mảng hai chiều : để nhập và xuất giá trị của ác phần tử hai chiều.
VD : int*p,a [2][2]
p=a ;
p tương ứng với a[0][0]
Câu 18 : Trình bày kiểu con trỏ và kiểu địa chỉ, các phép toán trên con trỏ . Cho ví dụ minh họa ?
Trả lời :
*. Kiểu con trỏ và kiểu địa chỉ
Con trỏ dùng để lưu địa chỉ. Mỗi kiểu địa chỉ cần có kiểu con trỏ tương ứng. Phép gán địa chỉ cho con
trỏ chỉ có thể thực hiện được khi kiểu địa chỉ phù hợp với kiểu con trỏ.
Ví dụ theo khai báo :
float a[20][30],*pa,(*pm)[30];
thì :
pa là con trỏ float

pm là con trỏ kiểu float [30]
a là địa chỉ kiểu float [30]
* Các phép toán trên con trỏ
Có 4 phép toán liên quan đến con trỏ và địa chỉ là :
By:
 Phép gán: chỉ thực hiện với các con trỏ cùng kiểu.
 Phép tăng giảm địa chỉ :
 Phép truy cập bộ nhớ.
 Phép so sánh.
Câu 19 : Trình cách khai báo con trỏ hàm và mảng con trỏ hàm, tác dụng của con trỏ hàm và đối của con
trỏ hàm . Cho ví dụ minh họa ?
Trả lời :
* Cách khai báo con trỏ hàm và mảng con trỏ hàm:
float (*f)(float),(*mf[50])(int);
Để khai báo :
f là con trỏ hàm kiểu float có đối là float
mf là mảng con trỏ hàm kiểu float có đối kiểu int ( có 50 phần tử
* Tác dụng của con trỏ hàm : dùng để chứa địa chỉ của hàm. Muốn vậy ta thực hiện phép gán tên hàm cho
con trỏ hàm. Để phép gán có ý nghĩa thì kiểu hàm và kiểu con trỏ phải tương thích. Sau phép gán, ta có thể
dùng tên con trỏ hàm thay cho tên hàm.
VD: double (*g)(int, double), (*mg[30])(double, float);
* Đối của con trỏ hàm : cho phép thiết kế các hàm mà tham số thực trong lời gọi tới nó lại là tên của một
hàm khác. Khi đó tham số hình thức tương ứng phải là một con trỏ hàm.
Câu 20 : Trình khái niệm về đệ quy, phương pháp dùng đệ quy và các bài toán dùng đệ quy. Cho ví dụ
minh họa ?
Trả lời :
* Khái niệm chung về đệ quy là: nó cho phép từ hàm này gọi tới hàm khác, mà nó còn cho phép từ một
điểm trong thân của một hàm gọi tới chính hàm đó.
* phương pháp xây dựng hàm đệ quy
Hàm đệ quy thường được xây dựng theo thuật toán sau :

if ( trường hợp suy biến)
{
Trình bày cách giải bài toán khi suy biến
}
else /* Trường hợp tổng quát */
{
Gọi đệ qui tới hàm ( đang viết ) với các giá
trị khác của tham số
}
* Các bài toán có thể dùng đệ quy
- Được áp dụng cho các bài toán phụ thuộc tham số có hai đặc điểm sau :
Bài toán dễ dàng giải quyết trong một số trường hợp riêng ứng với các giá trị đặc biệt của tham số.
Người ta thường gọi là trường hợp suy biến.
Trong trường hợp tổng quát, bài toán có thể quyvề một bài toán cùng dạng nhưng giá trị tham số thì bị
thay đổi. Sau một số hữu hạn bước biến đổi đệ quy nó sẽ dẫn tới trường hợp suy biến.
VD: Bài toán dùng đệ qui tìm USCLN của hai số nguyên dương a và b.
#include <regx52.h>
By:
int uscln(int a,int b ); /* Nguyên mẫu hàm*/
void main()
{ int m,n;
printf("\n Nhap cac gia tri cua a va b :");
scanf("%d%d",&m,&n);
printf("\n USCLN cua a=%d va b=%d la :%d", m, m, uscln(m, n))
}
int uscln(int a,int b)
{
if (a==b) return a;
else
if (a>b)return uscln(a-b,b);

else return uscln(a,b-a);
}
Câu 21 : Trình khái niệm về cấu trúc dữ liệu, cấu trúc của cấu trúc dữ liệu, phương pháp truy cập đến
các thành phần của cấu trúc dữ liệu. Cho ví dụ minh họa ?
Trả lời :
* K /N kiểu cấu trúc : việc định nghĩa một kiểu cấu trúc bao gồm việc nêu ra tên của kiểu cấu trúc và các
thành phần của nó theo mẫu sau:
struct tên_kiểu _cấu_trúc
{
//Khai báo các thành phần của cấu trúc
};
* Cấu trúc của cấu trúc dữ liệu: struct ( ten cấu trúc đã định nghĩa) <tên cấu trúc đã khai báo> ;
Ví dụ : struct date ngayden, ngaydi;
*Để truy cập đến một thành phần cơ bản của một cấu trúc ta sử dụng một trong các cách viết sau :
tên_cấu_trúc.tên_thành_phần
tên_cấu_trúc.tên_cấu_trúc.tên_thành_phần
tên_cấu_trúc. tên_cấu_trúc.tên_cấu_trúc.tên_thành_phần
VD : Ta xét phép toán trên các thành phần của cấu trúc nhom1, nhom2:
Câu lệnh : printf("%s",nhom1.ten);
sẽ đưa lên màn hình tên của nhom1.
Câu 22 : Trình bày chỉ thị tiền xử lý define và define có tham số. Cho ví dụ minh họa ?
Trả lời :
*chỉ thị tiền xử lý define : #deffine Tenbien=<giatri>
VD : deffine Max40
• chỉ thị tiền xử lý define có tham số : #define Max(a,b) (a>b ?a :b)
Câu 23 : Trình bày chỉ thị tiền xử lý #if, #if #else. Cho ví dụ minh họa ?
Trả lời :
*Chỉ thị tiền xử lý #if : #if(<điều kiện>)
// nội dung thỏa mãn điều kiện
#endif

By:
VD : #if(a>0)
b=5 ; c=-10 ;
#endif
* Chỉ thị tiền xử lý #if #else #endif : : #if(<điều kiện>)
// nội dung được chỉnh lý
#else
// nội dung được chỉnh lý
#endif
VD: #if(a>0)
b=5 ; c=-10 ;
#else
b=-3 ; c=1 ;
#endif
Câu 24 : Trình bày chỉ thị tiền xử lý #include, #error. Cho ví dụ minh họa ?
Trả lời :
• chỉ thị tiền xử lý #include : #include>[đường_dẫn ]tên_tệp
• chỉ thị tiền xử lý #error : sẽ dừng biên dịch chương trình và đưa ra thông báo lỗi.
VD : #if(name_table>max_table)
(id_table>max_table)
#error max_table
Câu 25 :Viêt chương trình giải phương trình ax+b=0, giá trị a và b cho biết trước?
Bài làm :
By:
Câu 26 :Viêt chương trình tìm UCLN của 2 số x và y tả lại giá trị cho biến z ?
Bài làm :
#include <REGX52.H>
int UCLN(int x,int y);
void main()
{

int USC;
USC=UCLN(2,6);
}
int UCLN(int x,int y)
{
if(x==y) return x;
else
{
if(x>y) return UCLN(x-y,y);
else return UCLN(x,y-x);
}
}
Câu 27 :Viêt chương trình tìm MAX của 2 số x và y tả lại giá trị cho biến z ?
Bài làm :
#include <regx52.h>
int a[10]; b[10];i;c;
void main()
{ i=0;
while(1)
By:
{
for(i=0;i<10;i++)
{ c=a[i]; a[i]=b[i];
b[i]=c;
}
}
}
Câu 28 :Viêt chương trình điều khiển một LED đơn tại địa chỉ 0x90 theo chế độ ON/ OFF với thời gian
thay đổi trạnh thái ≈ 1s
Bài làm :

#include <REGX52.H>
sbit led = 0x90;
void delay (unsigned short);
void main()
{
led = 0;
while(1)
{
led=1; delay(40000);
led=0; delay(40000);
}
}
void delay (unsigned short d)
{ while (d>0) d ;}
Câu 29 :Viêt chương trình điều khiển 4 LED đơn sáng luân phiên tại địa chỉ bit tương ứng la : 0x90,
0x91, 0x92, 0x93 .với thời gian thay đổi trạng thái ≈ 1s
Bài làm :
#include <REGX52.H>
sbit led1=0x90;
sbit led2=0x91;
sbit led3=0x92;
sbit led4=0x93;
void delay(unsigned short d);
void main()
{
led1=led2=led3=led4 = 0;
while(1)
{
led1=led3=1,led2=led4=0; delay(40000);
led1=led3=0, led2=led4=1; delay(40000);

}
}
void delay (unsigned short d)
By:
{ while (d>0) d ;}
Câu 30 :Viêt chương trình điều khiển một LED đơn tại địa chỉ la ( 0x90) , sử dụng hai phím Start và
Stop có địa chỉ tương ứng là 0x91 và 0x92 ?
Bài làm :
#include <REGX52.H>
sbit LED=0X90;
sbit start=0x91;
sbit stop=0x92;
bit F_start=0;
bit F_stop=0;
unsigned char i=0;
void proON(void);
void proOFF(void);
void main()
{
LED=0;start=1;stop=1;
while(1)
{
if(start==0&F_start==1)
proON();
F_start=start;
if(stop==0&F_stop==1)
proOFF();
F_stop=stop;
}
}

void proON(void)
{
LED=1;
}
void proOFF(void)
{
LED=0;
}
Câu 31 :Viêt chương trình xóa vùng nhớ gồm 10 bytes từ địa chỉ 0x30 đến 0x41 ?
Bài làm :
By:
#include <REGX52.H>
unsigned char *p;
int i=0;
void main()
{
p=0x30;
while(i<10)
{
*p=0;
p++;
i++;
}
}
Câu 32 :Viêt chương trình điều khiển LED đơn dịch chuyển từ trái qua phải trên cổng P2 có địa chỉ 0xA0
.với thời gian thay đổi trạng thái ≈ 1s
Bài làm
#include <REGX52.H> /**khai bao thu vien**/
sfr led = 0xA0; /**khai bao dia chi byte**/
void delay (unsigned short);

void traisangphai (void);
void main()
{
led = 0;
while(1) traisangphai();
}
void traisangphai (void) /** tu trai sang phai** tu D7 ve D0****/
{
unsigned char i=0;
while (i<8)
{
if(i==0) led=0x80;
if(i==1) led=0x40;
if(i==2) led=0x20;
if(i==3) led=0x10;
By:
if(i==4) led=0x08;
if(i==5) led=0x04;
if(i==6) led=0x02;
if(i==7) led=0x01;
i++;
delay(40000);
};
}
void delay (unsigned short d)
{ while (d>0) d ;}
Câu 33 :Viêt chương trình điều khiển LED đơn dịch chuyển từ phải qua trái trên cổng P2 có địa chỉ 0xA0
.với thời gian thay đổi trạng thái ≈ 1s
Bài làm
void phaisangtrai (void);

void main()
{
led = 0;
while(1) phaisangtrai();
}
void phaisangtrai (void) /*** kieu tu phai sang trai** tu D0 ve D7*****/
{
unsigned char i=0;
while (i<8)
{
if(i==0) led=0x01;
if(i==1) led=0x02;
if(i==2) led=0x04;
if(i==3) led=0x08;
if(i==4) led=0x10;
if(i==5) led=0x20;
if(i==6) led=0x40;
if(i==7) led=0x80;
i++;
delay(40000);
By:
};
}
void delay (unsigned short d)
{ while (d>0) d ;}
Câu 34 : Viêt chương trình xóa vùng nhớ từ địa chỉ 0x40 đến0x7F và lưu giá trị 5vaf 6 vào các ô nhớ liên
tiếp
Bài làm :
#include <REGX52.H> /******khai bao thu vien***/
unsigned char *p;

unsigned char Temp[30];
void DeleteMemory(void);
void WriteMemory(void);
void main()
{
while(1)
{ DeleteMemory();
WriteMemory();
}
}
void DeleteMemory(void)
{
unsigned char i=0;
p=0x40;
while(i<30)
{
Temp[i] = *p;
p++;
i++;
}
}
void WriteMemory (void)
{
P=0x40;
while (p<0x7F)
{ *p=5; p++;
*p=6; p++;
}
By:
}

Câu 35 : Cho 2 dữ liệu tại địa chỉ ô nhớ 0x35 và 0x42
a, Viết chương trình đọc dữ liệu từ 2 địa chỉ ô nhớ trên và gán cho 2 số x và y
b, Viết chương trình tìm MAX của hai số x và y đó và trả lại giá trị cho biến z.
Bài làm :
A,
By:

×