Ết quả là con trỏ đến nút tìm thấy, NULL nếu hơng tìm thấy */

Một phần của tài liệu Bài giảng ngôn ngữ lập trình C (Trang 102 - 106)

/ *g ọi hàm g() biến b được cấp phát

kết quả là con trỏ đến nút tìm thấy, NULL nếu hơng tìm thấy */

*/

struct nut_hs* tim_nuths(struct nut_hs*header, char *ten);

/* sắp xếp danh sách trỏ bởi header theo tên học sinh */

void sapxep_nuths(struct nut_hs*header); #endif

Tệp nguồn "list.c":

/* thi hành cho tệp list.h */ #include "list.h"

#include <alloc.h> #include <stdlib.h> #include <string.h>

void them_nuths(struct nut_hs**header_ptr, char* ten) {

struct nut_hs * hs;

hs = (struct nut_hs*)malloc(sizeof(struct nut_hs)); strcpy(hs->ten, ten);

hs->diem = -1; /* ban đầu chưa có điểm thi, vào điểm sau */ /* nối vào đầu danh sách */

hs->tiep = *header_ptr; *header_ptr = hs;

}

int xoa_nuths(struct nut_hs**header_ptr, char *ten) {

struct nut_hs * hs, *p; hs = *header_ptr;

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; hs = hs->tiep; } if (hs !=NULL) /* nếu tìm thấy nút cần xố */ {

/* kiểm tra có nút đứng trước nút cần xố 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á */ *header_ptr = hs->tiep; free(hs); return 1; } return 0; }

struct nut_hs* tim_nuths(struct nut_hs*header, char *ten) {

struct nut_hs * hs; hs = header;

while(hs !=NULL&&strcmp(hs->ten, ten) !=0) hs = hs->tiep;

return hs; }

void sapxep_nuths(struct nut_hs*header) {

struct nut_hs *hs1, *hs2; char ten[25];

int diem;

for (hs1=header; hs1!=NULL&&hs1->tiep!=NULL; hs1=hs1->tiep) for (hs2=hs1->tiep; hs2!=NULL; hs2=hs2->tiep)

if(strcmp(hs1->ten, hs2->ten)>0) {

/* doi cho thong tin ve hai nut trong danh sach */ strcpy(ten, hs1->ten); strcpy(hs1->ten, hs2->ten); strcpy(hs2->ten, ten); diem = hs1->diem; hs1->diem = hs2->diem; hs2->diem = diem; } } Tệp tiêu đề "func.h": #ifndef __FUNC_H #define __FUNC_H #include "list.h"

/* các chức năng quản lí của chương trình bao gồm: */ /* thêm một học sinh vào danh sách */

void themhocsinh(struct nut_hs**header_ptr); /* xoá một học sinh khỏi danh sách */ (adsbygoogle = window.adsbygoogle || []).push({});

void xoahocsinh(struct nut_hs**header_ptr); /* tra điểm cho môt học sinh trong danh sách */ void tradiem(struct nut_hs *header);

/* in danh sách học sinh */

void indanhsach(struct nut_hs *header); /* nhập điểm thi cho học sinh lớp học */ void nhapdiem(struct nut_hs *header); #endif

Tệp nguồn "func.c":

/* thi hành của các hàm khai báo trong func.h */ #include "func.h"

#include <stdio.h> #include <string.h>

void themhocsinh(struct nut_hs**header_ptr) {

char ten[25];

fflush(stdin); /* xoá vùng d?m stdin d? nh?p xâu tên */ printf("Ten: "); gets(ten);

if (strcmp(ten, "")!=0) {

printf("Da them hoc sinh %s vao danh sach\n", ten); }

}

void xoahocsinh(struct nut_hs**header_ptr) {

char ten[25];

fflush(stdin); /* xoá vùng d?m stdin d? nh?p xâu */ printf("Ten hoc sinh can xoa: "); gets(ten);

if (xoa_nuths(header_ptr, ten))

printf("Da xoa hoc sinh %s khoi danh sach\n", ten); else

printf("Khong co hoc sinh %s trong danh sach\n", ten); }

void tradiem(struct nut_hs *header) {

char ten[25]; struct nut_hs *tim;

fflush(stdin); /* xoá vùng d?m stdin d? nh?p xâu */ printf("Ten hoc sinh can tra diem: "); gets(ten); tim = tim_nuths(header, ten);

if (tim==NULL)

printf("Khong co hoc sinh %s trong danh sach\n", ten); else

if(tim->diem!=-1)

printf("Co diem thi la %d\n", tim->diem); else

printf("Chua co diem\n"); }

void indanhsach(struct nut_hs *header) {

struct nut_hs *p; int i=1;

printf("%3s%25s%8s\n", "STT", "Ho va Ten", "Diem"); for(p=header; p!=NULL; p=p->tiep)

{ (adsbygoogle = window.adsbygoogle || []).push({});

printf("%3d%-25s", i, p->ten);

if(p->diem==-1) printf("%8s\n", "Chua co"); else printf("%8d\n", p->diem);

i++; }

}

void nhapdiem(struct nut_hs *header) {

struct nut_hs *p; int diem;

for(p=header; p!=NULL; p=p->tiep) {

printf("Diem cua %s:", p->ten); scanf("%d", &p->diem); }

Tệp nguồn "menu.c": /*

chương trình chính là một menu lựa chọn công việc menu gọi các hàm chức năng có trong func.h và list.h */ #include "list.h" #include "func.h" #include <stdio.h> void main() { int chon;

struct nut_hs *header=NULL; /* con trỏ đầu danh sách học sinh */ /* tạo menu lựa chọn công việc */

do {

printf("1. Them hoc sinh\n"); printf("2. Xoa hoc sinh\n"); printf("3. Nhap diem\n"); printf("4. Tra diem\n");

printf("5. In danh sach hoc sinh\n"); printf("0. Thoat\n"); printf("Lua chon: "); scanf("%d", &chon); switch(chon) { case 1: themhocsinh(&header); break; case 2: xoahocsinh(&header); break; case 3: nhapdiem(header); break; case 4: tradiem(header); break; case 5: sapxep_nuths(header); indanhsach(header); } }while(chon !=0); } BÀI TẬP TỔNG HỢP

Câu 1: Hãy xây dựng một cuốn từ điển bằng cách dùng cây nhị phân. Hãy xây dựng các hàm xử

lý các khâu dưới đây. - Khởi tạo từ điển - Chèn vào một từ mới - In một từ

Viết một chương trình hồn chỉnh bằng cách tạo ra các bảng chọn lệnh với các chức năng sau: 1. Tạo từ điển mới

2. Đọc một từ điển từ đĩa vào 3. Thêm các từ vào

4. Xoá một từ đi

5. Hiển thị các từ theo thứ abc 6. Cất từ điển vào đĩa.

0. Thốt ra khỏi chương trình

Câu 2: Hãy xây dựng sổ tay Telephone với các tính năng sau:

1. Đọc sổ tay từ đĩa vào

2. Tìm kiếm tên người trong danh mục phone 3. Thêm vào danh mục một người

4. Xoá một người ra khỏi danh mục 5. Cất vào đĩa.

0. Thốt ra khỏi chương trình

Một phần của tài liệu Bài giảng ngôn ngữ lập trình C (Trang 102 - 106)