Cấu trúc và hàm

Một phần của tài liệu TÀI LIỆU THAM KHẢO HƯỚNG DẪN THỰC HÀNH CƠ SỞ LẬP TRÌNH TRƯỜNG ĐẠI HỌC NGÂN HÀNG TP. HỒ CHÍ MINH KHOA HỆ THỐNG THÔNG TIN QUẢN LÝ (Trang 153 - 156)

Kiểu cấu trúc có thể xuất hiện với vai trò là kiểu trả về và kiểu tham số với hai phương án truyền tham trị và truyền tham chiếu.

Ví dụ 8.9. Truyền tham trị kiểu cấu trúc cho hàm

#include <stdio.h> #include <conio.h> struct Student { char name[50]; int age; };

148

void displayInfo(struct Student st); int main() {

struct Student st;

printf ("Nhap ten cua Sinh vien: "); scanf ("%[^\n]%*c", st.name); printf ("Nhap tuoi cua Sinh vien: "); scanf ("%d", &st.age);

displayInfo(st); // Truyen tham tri kieu cau truc cho ham return 0;

}

void displayInfo (struct Student st) {

printf ("\nHIEN THI THONG TIN SINH VIEN VUA NHAP\n"); printf ("Ho va ten: %s", st.name);

printf ("\nTuoi: %d", st.age); }

Ở ví dụ trên biến st có kiểu cấu trúc Student được tạo. Biến được truyền vào tham số của hàm displayInfo thông qua câu lệnh displayInfo(st).

Ví dụ 8.10. Giá trị trả về thuộc kiểu cấu trúc

#include <stdio.h> struct Student {

char name[50]; int age;

};

struct Student setupInfo();

void displayInfo(struct Student st); int main() { struct Student st; st = setupInfo(); displayInfo(st); getchar(); return 0; }

struct Student setupInfo() { struct Student st;

printf ("Nhap ho va ten cua sinh vien: "); scanf ("%[^\n]%*c", st.name);

printf ("Nhap tuoi cua sinh vien: "); scanf ("%d", &st.age);

return st; }

149 void displayInfo (struct Student st) {

printf ("\nHIEN THI THONG TIN SINH VIEN VUA NHAP\n"); printf ("Ho va ten: %s", st.name);

printf ("\nTuoi: %d", st.age); }

Ở đây, hàm setupInfo() được gọi thông qua câu lệnh st=setupInfo(). Hàm trả về

kiểu cấu trúc Student. Cấu trúc trả về được hiển thị trong hàm main().

Ví dụ 8.11. Truyền tham chiếu kiểu cấu trúc cho hàm

#include <stdio.h>

typedef struct complexNumber {

float real; float imaginary; } complexNumber;

void complexNumberSum (complexNumber n1, complexNumber n2, complexNumber *result);

int main() {

complexNumber n1, n2, result;

printf ("NHAP SO PHUC THU 1:\n"); printf ("Nhap phan thuc: ");

scanf ("%f", &n1.real); printf ("Nhap phan ao: "); scanf ("%f", &n1.imaginary);

printf ("NHAP SO PHUC THU 2:\n"); printf ("Nhap phan thuc: ");

scanf ("%f", &n2. real); printf ("Nhap phan ao: "); scanf ("%f", &n2.imaginary);

complexNumberSum (n1, n2, &result); printf ("\nKET QUA:");

printf ("\nTong phan thuc = %.1f\n", result.real); printf ("Tong phan ao = %.1f", result.imaginary); return 0;

}

void complexNumberSum (complexNumber n1, complexNumber n2, complexNumber *result)

{

150

result ->imaginary = n1. imaginary + n2. imaginary; }

Ở ví dụ trên, 3 cấu trúc n1, n2 và địa chỉ của result được truyền vào hàm

complexNumberSum. Ở đây, result được truyền bằng tham chiếu. Khi biến result trong

hàm complexNumberSum bị thay đổi, biến result trong hàm main() cũng thay đổi theo.

Một phần của tài liệu TÀI LIỆU THAM KHẢO HƯỚNG DẪN THỰC HÀNH CƠ SỞ LẬP TRÌNH TRƯỜNG ĐẠI HỌC NGÂN HÀNG TP. HỒ CHÍ MINH KHOA HỆ THỐNG THÔNG TIN QUẢN LÝ (Trang 153 - 156)