- Kết quả trả về của hàm là ký tự được ấn.
HÀM MAIN CÓ THAM SỐ – CON TRỎ HÀM
2.1. 2.7 Mảng các cấu trúc
Khai báo
Mảng mà các thành phần có kiểu cấu trúc được gọi là mảng cấu trúc. Khai báo một mảng các cấu trúc hoàn toàn tương tự như đối với khai báo một mảng bình thường, chỉ có một điểm khác là thay cho tên các kiểu dữ liệu bình thường là một tên kiểu dữ liệu cấu trúc.
Ví dụ về khai báo một mảng có cấu trúc:
struct hoc_sinh dshs[100]; /*hoc_sinh là kiểu cấu trúc trong 1.2*/
Việc sử dụng các mảng cấu trúc sẽ làm cho việc xử lý một tập hợp các biến cấu trúc trở nên dễ nhìn hơn. Các quy định về mảng cũng được áp dụng đối với mảng các cấu trúc.
3. BÀI TẬP MINH HỌA
Bài 1
/*Chương trình minh họa kiểu cấu trúc enum (dùng khai báo typedef)*/
#include <stdio.h>
typedef enum light_status {Red, Green, Off}; void test_it(void);
int check_lights(enum light_status condition); main() { test_it(); } void test_it() { char input;
enum light_status reading;
printf("\n\n1] Red 2] Green 3] Off \n\n"); printf("Chon kha nang bang so => "); input = getchar();
switch (input) {
case '1' : reading = Red; break;
case '2' : reading = Green; break;
case '3' : reading = Off; break; } /* End of switch */ check_lights(reading); }
int check_lights(enum light_status condition) {
switch(condition) {
case Red : printf("Kiem tra ap suat nguon."); break;
case Green: printf("He thong OK."); break;
case Off : printf("Kiem tra cau tri he thong."); break;
} /* Kết thúc switch */ }
Kết quả:
1] Red 2] Green 3] Off Chon kha nang bang so =>2 He thong OK.
Bài 2
/*Chương trình minh họa cách nhập dữ liệu vào một cấu trúc */
#include <stdio.h> main()
{
struct {
char manufacturer[20]; /* sản phẩm điện trở. */ int quantity; /* Số lượng chuyển giao. */ float price_each; /* Giá của mỗi điện trở. */ } resistors; /* Biến cấu trúc. */
float total_value; /* Tổng giá trị. */ /* Hiện thị các biến: */
/* Nhập tên của sản phẩm: */ printf("Tên của sản phẩm => "); gets(resistors.manufacturer); /*Nhập số lượng xuất: */ printf("Số lượng xuất => "); scanf("%d",&resistors.quantity); /* Nhập giá của mỗi sản phẩm: */ printf("Giá của mỗi sản phẩm => "); scanf("%f",&resistors.price_each); /*Tính tổng giá trị: */
total_value = resistors.quantity * resistors.price_each; /* Xuất các giá trị: */
printf("\n\n");
printf("Mục: Điện trở\n\n");
printf("Sản phẩm: %s\n",resistors.manufacturer); printf("Đơn giá: $%f\n",resistors.price_each);
printf("Số lượng: %d\n",resistors.quantity); printf("Tổng giá trị: $%f\n", total_value); }
Kết quả
Tên của sản phẩm => Ohmite Số lượng xuất => 10
Giá của mỗi sản phẩm => 0.05 Mục: Điện trở Sản phẩm: Ohmite Đơn giá: $0.050000 Số lượng: 10 Tổng giá trị: $0.500000 Bài 3
/*Chương trình minh họa con trỏ cấu trúc*/
#include <stdio.h> typedef struct {
char manufacturer[20]; /*Tên điện trở. */ int quantity; /* Số lượng chuyển giao. */ float price_each; /* Đơn giá. */
} parts_record; main() {
parts_record *rcd_ptr; /* Con trỏ cấu trúc. */
float total_value; /* Tổng giá trị. */ /* Nhập tên điện trở: */
printf("Tên của sản phẩm => "); gets(rcd_ptr -> manufacturer);
/* Số lượng chuyển giao: */
printf("Số lượng xuất => "); scanf("%d",rcd_ptr -> quantity);
/* Nhập đơn giá: */
printf("Giá của mỗi sản phẩm => "); scanf("%f",rcd_ptr -> price_each);
/* Tính tổng giá trị: */
total_value = rcd_ptr -> quantity * rcd_ptr -> price_each;
/* Xuất: */
printf("Mục: Điện trơ\n\n");
printf("Sản phẩm: %s\n",rcd_ptr -> manufacturer); printf("Đơn giá: $%f\n",rcd_ptr -> price_each); printf("Số lượng: %d\n",rcd_ptr -> quantity); printf("Tổng giá trị: $%f\n", total_value); }
Kết quả
Tên của sản phẩm => Ohmite Số lượng xuất => 10
Giá của mỗi sản phẩm => 0.05 Mục: Điện trở Sản phẩm: Ohmite Đơn giá: $0.050000 Số lượng: 10 Tổng giá trị: $0.500000 Bài 4
/*Chương trình minh họa hàm với kiểu cấu trúc*/
#include <stdio.h> typedef struct {
char manufacturer[20]; /* Tên điện trở. */
int quantity; /* Số lượng xuất. */
float price_each; /* Đơn giá. */
} parts_record;
parts_record get_input(void); /* Phần nhập dữ liệu. */
void display_output(parts_record resistor_record); /* Phần xuất dữ liệu.*/
main() {
parts_record resistor_box; /* Khai báo một biến cấu trúc. */
resistor_box = get_input(); /* Nhập dữ liệu. */
display_output(resistor_box); /* Xuất dữ liệu. */
}
parts_record get_input(void) /* Nhập dữ liệu. */
{ parts_record resistor_information; parts_record resistor_information; /* Nhập tên sản phẩm: */ printf("Tên của sản phẩm => "); gets(resistor_information.manufacturer); /* Số lượng xuất: */
printf("Số lượng xuất => ");
scanf("%d",&resistor_information.quantity);
/* Đơn giá: */
scanf("%f",&resistor_information.price_each); return(resistor_information);
}
void display_output(parts_record resistor_information) {
/* Xuất: */
printf("\n\n");
printf("Mục: Điện trở\n\n");
printf("Sản phẩm: %s\n",resistor_information.manufacturer); printf("Đơn giá: $%f\n",resistor_information.price_each); printf("Số lượng: %d\n",resistor_information.quantity); }
Kết quả
Tên của sản phẩm => Ohmite Số lượng xuất => 10
Giá của mỗi sản phẩm => 0.05 Mục: Điện trở Sản phẩm: Ohmite Đơn giá: $0.050000 Số lượng: 10 4. CÁC BÀI TẬP TỰ LÀM Bài 1
Viết chương trình dùng cấu trúc để ghi ngày sinh, ngày tuyển dụng và bậc lương của nhân viên.
Bài 2
Viết chương trình sắp xếp một danh sách các cấu trúc
Gợi ý: ••• typedef struct { char Ho[18]; char Ten[8]; int Bacluong; } Person; •••
void Compare(Person *p, Person *q) { int k; k=strcmp(p->Ten,q->Ten); if(k==0) k=strcmp(p->Ho,q->Ho); return k;
}
•••
Bài 3
Viết chương trình nhập một danh sách học sinh bao gồm Họ, Tên, Tuổi, Điểm Toán, Điểm Lý, Điểm Hóa và Điểm Trung Bình. Sắp xếp Tên, Họ theo thứ tự tăng dần. Sau đó xuất ra danh sách này gồm Họ, Tên và Điểm Trung Bình.
BÀI 12