Tải bản đầy đủ (.pdf) (20 trang)

Bài giảng Tin học đại cương Phần 2: Bài 7 - Nguyễn Thành Kiên

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 (617.46 KB, 20 trang )

TIN HỌC ĐẠI CƯƠNG
Bài 7. CẤU TRÚC.

 

                       Nguyễn Thành Kiên
          Bộ môn Kỹ thuật máy tính
       Khoa Công nghệ thông tin – ĐHBK HN


Bài 7. CẤU TRÚC





7.1. Khái niệm cấu trúc
7.2. Khai báo và sử dụng cấu trúc
7.3. Xử lí dữ liệu cấu trúc
7.4. Mảng cấu trúc

2


Bài 7. CẤU TRÚC





7.1. Khái niệm cấu trúc


7.2. Khai báo và sử dụng cấu trúc
7.3. Xử lí dữ liệu cấu trúc
7.4. Mảng cấu trúc

3


7.1. Khái niệm cấu trúc


Khi cần lưu danh sách sinh viên với các 
thông tin liên quan đến điểm các môn 
học, dùng mảng được không?

    Kiểu cấu trúc (Structure) là kiểu dữ liệu bao 
gồm nhiều thành phần, mỗi thành phần có thể 
có kiểu khác nhau, mỗi thành phần được gọi là 
một trường (field).
4


7.2. Khai báo và sử dụng cấu trúc


Khai báo kiểu dữ liệu cấu trúc 


Cú pháp:
struct tên_cấu_trúc
{

  <khai báo các trường dữ liệu>;
};
struct point_3D
struct sinh_vien
{
    char ma_so_sv[10];
    char ho_va_ten[30]; 
    float diem_TinDC; 


{
      float x;
      float y;
      float z;
}

5


7.2. Khai báo và sử dụng cấu trúc
Khai báo biến cấu trúc
C1: struct  tên_cấu_trúc  tên_biến; 


struct sinh_vien a, b, c;

C2: kết hợp đồng thời vừa khai báo kiểu dữ liệu 
cấu trúc vừa khai báo biến:
struct [tên_cấu_trúc]
{

<khai báo các trường>;
} tên_biến_cấu_trúc; 
6


Ví dụ khai báo biến cấu trúc
struct diem_thi
{
float diem_Toan;
float diem_Ly;
float diem_Hoa;
các cấu trúc có thể lồng nhau 
}
mức độ lồng là không hạn chế  
struct thi_sinh
{
char SBD[10];
char ho_va_ten[30];
struct diem_thi ket_qua;
} thi_sinh_1, thi_sinh_2;
7


7.2. Khai báo và sử dụng cấu trúc


Ngôn ngữ C còn cho phép khai báo trực tiếp 
trường dữ liệu là cấu trúc bên trong cấu trúc 
chứa nó 
struct thi_sinh

{
char SBD[10];
char ho_va_ten[30];
struct diem_thi
{
       float diem_Toan;
float diem_Ly;
float diem_Hoa;
}ket_qua;
} thi_sinh_1, thi_sinh_2;

8


7.2. Khai báo và sử dụng cấu trúc


Định nghĩa kiểu DL cấu trúc với typedef




Khai báo biến cấu trúc phải bắt đầu bằng 
từ khóa struct, sau đó đến tên cấu trúc rồi 
mới đến tên biến => quên từ khóa struct
=> đặt tên mới cho kiểu dữ liệu cấu trúc 
bằng câu lệnh typedef 

typedef  struct  tên_cũ  tên_mới; 


typedef struct [tên_cũ]
{
<khai báo các trường>;
}danh_sách_các_tên_mới; 

Lưu ý: Được phép đặt tên_mới trùng với tên_cũ. 

9


7.2. Khai báo và sử dụng cấu trúc


Ví dụ:

   

struct point_3D
{
float x, y, z;
} P;
struct point_3D M;
typedef struct point_3D point_3D;
point_3D N;

typedef struct point_2D
{
float x, y;
}point_2D, diem_2_chieu, ten_bat_ki;
point_2D X;

diem_2_chieu Y;
ten_bat_ki Z;

10


Bài 7. CẤU TRÚC





7.1. Khái niệm cấu trúc
7.2. Khai báo và sử dụng cấu trúc
7.3. Xử lí dữ liệu cấu trúc
7.4. Mảng cấu trúc

11


7.3. Xử lí dữ liệu cấu trúc


Truy nhập các trường DL của cấu trúc 
tên_biến_cấu_trúc.tên_trường 


ta có thể “đối xử” với 
tên_biến_cấu_trúc.tên_trường giống 
như một biến thông thường có kiểu dữ liệu 

là kiểu dữ liệu của tên_trường 

12


Ví dụ cách sử dụng
biến cấu trúc

#include <stdio.h>
#include <conio.h>
void main()
{
struct point_2D
{
char ten_diem;
struct
{
float x, y;
} toa_do;
} p;
float temp_float;
char temp_char;
printf(“\n Hay nhap thong tin ve mot diem”);
printf(“\n Ten cua diem: “); fflush(stdin); scanf(“%c”,&temp_char);
p.ten_diem = temp_char;
printf(“\n nhap vao hoanh do cua diem: “); scanf(“%f”,&temp_float);
p.toa_do.x = temp_float;
// giả sử điểm đang xét nằm trên đường thẳng y = 3x + 2;
p.toa_do.y = 3*p.toa_do.x + 2;
printf(“\n %c = (%5.2f,%5.2f)”,p.ten_diem, p.toa_do.x, p.toa_do.y);

getch();
}

13


7.3. Xử lí dữ liệu cấu trúc


Phép gán giữa các biến cấu trúc


Có thể thực hiện phép gán biến cấu trúc
struct s
{

char ho_ten[20];
float diem;

}a, b, c;
float temp_f;
printf("\na.ho_ten: ");fflush(stdin); gets(a.ho_ten);
printf("\na.diem = ");scanf("%f",&temp_f);
a.diem = temp_f;
strcpy(c.ho_ten, a.ho_ten);
c.diem = a.diem;
b = a;

14



7.3. Xử lí dữ liệu cấu trúc


Con trỏ cấu trúc 




Con trỏ cấu trúc chứa địa chỉ của một cấu 
trúc.
Cú pháp khai báo 

struct <tên cấu trúc> * <tên biến con trỏ>; 


Truy nhập vào trường DL của cấu trúc từ 
biến con trỏ cấu trúc:



(*<tên biến con trỏ cấu trúc>).<tên trường DL>
<tên biến con trỏ cấu trúc>­><tên trường DL> 

15


Bài 7. CẤU TRÚC






7.1. Khái niệm cấu trúc
7.2. Khai báo và sử dụng cấu trúc
7.3. Xử lí dữ liệu cấu trúc
7.4. Mảng cấu trúc

16


7.4. Mảng cấu trúc


Cú pháp khai báo:

struct <tên cấu trúc> <tên mảng cấu trúc> [số phần tử]; 



Ví dụ:

struct sinh_vien
{
char ho_ten[20];
float diem_thi;
};
struct sinh_vien lop_CNTT[50];

17



#include <stdio.h>
#include <conio.h>
#include <string.h>
void main()
{
struct sinh_vien
{
char ma_sv[10];
char ho_ten[20];
float diem_thi;
};
struct sinh_vien sv[3];
int i;
clrscr();
for(i=0;i<3;i++)
{
char str[20];
float diem;
printf(“\n Nhap thong tin cho sinh vien thu %d”,i+1);
printf(“\n Ma so sinh vien:”); fflush(stdin); gets(str); strcpy(sv[i].ma_sv,str);
printf(“\n Ho va ten: “); fflush(stdin); gets(str); strcp(sv[i].ho_ten,str);
printf(“\n Diem thi: “); scanf(“%f”,&diem); sv[i].diem_thi = diem;
}
printf(“\n Thong tin ve cac sinh vien”);
for(i=0;i<3;i++)
{
printf(“\n Sinh vien thu %d ”,i+1);
printf(“%-10s %-20s %-3.1f”,sv[i].ma_sv, sv[i].ho_ten, sv[i].diem_thi);

}
getch();
}

Ví dụ về cách sử dụng
mảng cấu trúc

18


Bài tập 1




Viết 1 chương trình thực hiện những công việc sau:
Yêu cầu người dùng nhập vào một số nguyên dương n với 5 ≤ 
n ≤ 20 (có kiểm tra tính hợp lệ).
Yêu cầu người dùng nhập vào thông tin của n sinh viên gồm:













Họ và tên: có kiểu dữ liệu là xâu kí tự gồm không quá 30 kí tự
Lớp: xâu kí tự có độ dài không quá 5 kí tự
Điểm thi Tin đại cương: là một số nguyên có giá trị từ 0 đến 10
Điểm thi Toán.

Đưa ra màn hình danh sách các sinh viên cùng thông tin của họ 
mà người dùng vừa nhập vào
Hiển thị danh sách các sinh viên thi qua môn Tin.
Hiển thị danh sách sinh viên được sắp xếp theo chiều giảm 
dần của điểm thi Tin đại cương.
Đưa ra màn hình danh sách sinh viên với họ và tên được sắp 
xếp theo chiều của bảng chữ cái.
19


Bài tập 2
Viết 1 chương trình thực hiện những công việc sau:
Yêu cầu người dùng nhập vào một số nguyên dương n với 10   n 
 20 (có kiểm tra tính hợp lệ)
Yêu cầu người dùng nhập vào thông tin của n mặt hàng gồm:
Tên mặt hàng: có kiểu dữ liệu là xâu kí tự gồm không quá 30 kí tự
Số lượng: là một số nguyên dương.
Đơn giá: là một số thực dương.

Đưa ra màn hình danh sách các mặt hàng cùng các thông tin liên 
quan (số lượng và đơn giá).
Tìm và đưa ra màn hình danh sách các mặt hàng có số lượng nhỏ 
hơn một số nguyên nhập từ bàn phím. Mẫu hiển thị là:
Tên mặt hàng

Số lượng
Tìm và đưa ra màn hình những mặt hàng có giá trị lớn hơn một số 
thực được nhập từ bàn phím, biết rằng giá trị của một loại 
mặt hàng tính bằng số lượng mặt hàng đó nhân với đơn giá 
của nó. Mẫu đưa ra màn hình là
Tên mặt hàng
Số lượng
Đơn giá
Giá trị20



×