Hướng dẫn sử dụng Turbo C v2.01 Turbo C là môi trường soạn thảo và biên dịch chương trình cho ngôn ngữ C trên hệ ñiều hành DOS.. Thao tác soạn thảo, biên dịch và debug lỗi chương trình
Trang 1Thực hành ngôn ngữ lập trình C
(Bài tập lập trình và ñáp án)
I Hướng dẫn sử dụng Turbo C v2.01
Turbo C là môi trường soạn thảo và biên dịch chương trình cho ngôn ngữ C trên hệ ñiều hành DOS Tệp chương trình thường có tên là tc.exe Ngoài ra nó cũng cần một số tệp khác kèm theo phục vụ cho một số mục ñích nhất ñịnh Ví dụ như các tệp tiêu ñề h, và các tệp thư viện lib hoặc obj
Thao tác soạn thảo, biên dịch và debug lỗi chương trình trên Turbo C hoàn toàn giống như khi bạn làm việc trên môi trường của Turbo Pascal Tuy nhiên cần chú ý một số ñiểm sau
ñây
1 Xác lập thư mục
Khi biên dịch chương trình, trình biên dịch cần biết thông tin nơi tìm kiếm các tệp header
và thư viện (.h, lib, obj) và thông tin này ñược ñặt trong lựa chọn Option/Directories Nếu như các bạn ñặt lựa chọn này sai thì khi dịch chương trình thường xuất hiện lỗi dạng như: Unable to open include file "stdio.h" Như vậy bạn phải ñặt ñúng ñường dẫn thư mục thì trình biên dịch mới tìm thấy tệp cần thiết Có hai ñường dẫn:
• ðường dẫn tìm các tệp tiêu ñề (.h) cho phần INCLUDE Ví dụ C:\TC\INCLUDE nếu như
các tệp tiêu ñề nằm trong thư mục này
• ðường dẫn tìm các tệp thư viện (.obj) cho phần LIB Ví dụ C:\TC\LIB nếu như các tệp
thư viện nằm trong thư mục này
2 Soạn thảo và biên dịch chương trình
Sau khi soạn thảo xong chương trình có thể cất ra ñĩa bằng menu lệnh File\Save hoặc nhấn F2 Tên tệp của bạn có ñuôi “.c” Chúng ta có thể biên dịch chương trình bằng cách nhấn F9 hoặc chạy chương trình bằng Ctrl-F9 Nếu như chương trình có lỗi thì trên màn hình sẽ xuất hiện cửa sổ liệt kê các lỗi của chương trình Khác với Turbo Pascal, tất cả các lỗi có trong chương trình C ñược hiện cùng một lúc trên một cửa sổ do vậy bạn có thể di chuyển thanh sáng trên cửa sổ lỗi ñể biết vị trí lỗi tương ứng trên chương trình và sửa nó
3 Gỡ rối chương trình
Hãy thử công cụ gỡ rối bằng các chức năng
• Chạy lần bước : F8
• Chạy ñến vị trị con trỏ : Ctrl-F4
• Xem kết quả chạy chương trình : Alt-F5
• Dừng chạy lần bước chương trình : Ctrl-F2
II Bài tập thực hành
Bài 1: Viết chương trình tìm số lớn nhất của ba số a, b, c ñược nhập vào từ bàn phím
Bài 2: Viết một chương trình cho phép tạo một menu ñơn giản sau
1 Chào
Trang 22 Cảm ơn
3 Tạm biệt Nhập lựa chọn (1-2-3):
Tuỳ vào lựa chọn của người sử dụng mà chương trình in ra dòng chữ tương ứng Nếu lựa chọn là 1-2 chương trình tiếp tục thực hiện ựể người sử dụng nhập lựa chọn mới Lựa chọn 3 cho phép kết thúc chương trình
Bài 3: Viết chương trình tìm các số có 3 chữ số xyz sao cho xyz = x3 + y3 + z3
Bài 4: Viết chương trình cho phép nhập một chuỗi kắ tự bất kì và sau ựó in ra xâu ngược của
chuỗi kắ tự ựó
Bài 5: Viết chương trình quản lắ ựiểm học sinh bằng danh sách móc nối Mỗi nút trong danh
sách là một cấu trúc bao gồm thông tin về tên và ựiểm của học sinh Xây dựng một menu cho chương trình cho ựể cho phép người sử dụng thực hiện các thao tác như thêm, sửa, xoá và tìm kiếm trong danh sách học sinh
III đáp án
Bài 1:
#include <stdio.h>
#include <conio.h>
void main(void)
{
int a, b, c, max;
do
{
/* nhập 3 số a, b, c */
printf("Nhap so thu nhat : ");
scanf("%d", &a);
printf("Nhap so thu hai : ");
scanf("%d", &b);
printf("Nhap so thu ba : ");
scanf("%d", &b);
/* tim so lon nhat */
max = a > b ? a : b;
if (max < c) max = c;
/* in ket qua */
printf("So lon nhat la: %d\n", max);
printf("An ESC de ket thuc, phim khac de tiep tuc ");
}while (getche()!=27);
}
Bài 2:
#include <stdio.h>
#include <conio.h>
Trang 3void main(void)
{
int lc;
do
{
/* in menu */
printf("Chao\n");
printf("Cam on\n");
printf("Tam biet\n");
/* nhập lựa chọn */
printf("\nNhap lua chon (1-2-3):");
scanf("%d", &lc);
/* kiểm tra lựa chọn và thực hiện */
switch(lc)
{
case 1 : printf("Chao ban\n");
break;
case 2 : printf("Cam on ban\n");
break;
case 3 : printf("Tam biet! Chuong trinh ket thuc o day\n"); break;
default : printf("Ban da nhap sai gia tri\n");
}
if (lc!=3)
{
printf("An phim bat ki de tiep tuc");
getche();
}
}while (lc!=3);
}
Bài 3:
#include <stdio.h>
#include <conio.h>
void main(void)
{
int chuso, tong, dem, i;
dem = 0;
for (i=100; i<=999; i++)
{
tong = 0;
/* lấy số thứ nhất */
chuso = i/100;
tong += chuso*chuso*chuso;
/* lấy số thứ hai */
chuso = (i/10)%10;
tong += chuso*chuso*chuso;
/* lấy số thứ ba */
chuso = i%10;
tong += chuso*chuso*chuso;
if (i==tong) printf("\nSo thu %d la: %d", ++dem, i);
}
getch();
}
Bài 4:
#include <stdio.h>
#include <string.h>
Trang 4void main()
{
char s[80], ch;
int i, n;
printf("Nhap xau: ");
gets(s);
i = 0;
n = strlen(s);
/* duyệt các kí tự một nửa ñầu của xâu */
for (i=0; i<n/2; i++)
{
/* ñổi chỗ của hai kí tự ñối xứng tại hai ñầu */
ch = s[i]; s[i]=s[n-1-i]; s[n-1-i]=ch;
}
printf("Xau nguoc la: %s", s);
}
Bài 5:
#include <stdio.h>
#include <alloc.h>
#include <stdlib.h>
struct nut_hs
{
char ten[25];
int diem;
struct nut_hs* tiep;
};
/* khai báo biến tổng thể là con trỏ ñến nút ñầu danh sách */
/* thêm một nút học sinh mới vào danh sách */
void them_nuths(char* ten, int diem);
/* xoá một nút học sinh có tên là ten */
void xoa_nuths(char *ten);
void in_ds();
/* tra ñ ểm của học sinh theo tên */
void timkiem(char *ten);
/* tạo menu lựa chọn công việc */
void tao_menu();
void main()
{
tao_menu();
}
void tao_menu()
{
char ten[25];
int diem;
int chon;
do
{
printf("1 Nhap hoc sinh\n");
printf("2 Xoa hoc sinh\n");
printf("3 In danh sach hoc sinh\n");
printf("4 Tim kiem\n");
printf("0 Thoat\n");
printf("Lua chon: ");
scanf("%d", &chon);
switch(chon)
{
Trang 5case 1:
fflush(stdin);
printf("Ten: "); gets(ten);
if (strcmp(ten, "")!=0)
{
printf("Diem: "); scanf("%d", &diem);
them_nuths(ten, diem);
}
break;
case 2:
fflush(stdin);
printf("Ten hoc sinh can xoa: "); gets(ten); xoa_nuths(ten);
break;
case 3:
in_ds();
break;
case 4:
fflush(stdin);
printf("Ten hoc sinh: "); gets(ten);
timkiem(ten);
break;
case 0:
printf("Tam biet");
break;
default:
printf("Nhap lai gia tri khac\n");
}
}while(chon!=0);
}
void them_nuths(char* ten, int diem)
{
struct nut_hs * hs;
/* tạo nút mới và copy dữ liệu */
hs = (struct nut_hs*)malloc(sizeof(struct nut_hs)); strcpy(hs->ten, ten);
hs->diem = diem;
/* nối nút vào ñầu danh sách, danh sách ko sắp xếp */ hs->tiep = nutdauds;
nutdauds = hs;
}
void xoa_nuths(char *ten)
{
struct nut_hs * hs, *p;
hs = nutdauds;
p = NULL; /* p trỏ tới nút trước nút cần xoá */
while(hs!=NULL&&strcmp(hs->ten, ten)!=0)
{
p = hs; /* xác lập lại cho p trỏ tới trước hs */
hs = hs->tiep;
}
if (hs !=NULL) /* nếu tìm thấy nút cần xoá */
{
/* kiểm tra có nút ñứng trước nút cần xoá không */
if (p !=NULL)
p->tiep = hs->tiep;
else /* nút ñầu danh sách sẽ là nút sau nút cần xoá */ nutdauds = hs->tiep;
free(hs);
}
}
Trang 6void in_ds()
{
struct nut_hs * hs;
printf("Danh sach ten va diem hoc sinh:\n");
/* duyệt danh sách bằng vòng for */
for(hs=nutdauds; hs!=NULL; hs=hs->tiep)
printf("%s: %d\n", hs->ten, hs->diem);
}
void timkiem(char *ten)
{
struct nut_hs *hs;
hs = nutdauds;
while(hs!=NULL&&strcmp(hs->ten, ten)!=0)
{
hs = hs->tiep;
}
if (hs!=NULL)
printf("Diem cua hoc sinh la %d\n", hs->diem); else
printf("Khong tim thay hoc sinh co ten dua vao\n"); }