Truy xuất đến từng trường của biến cấu trúc

Một phần của tài liệu Bài giảng Tin học cơ sở 3 (Ngôn ngữ lập trình C) (Trang 136 - 155)

Bài 7: Kiểu cấu trúc – kiểu bản ghi

1. Truy xuất đến từng trường của biến cấu trúc

Cú pháp: <Biến cấu trúc>.<Tên trường>

Ví dụ :

Viết chương trình cho phép đọc dữ liệu từ bàn phím cho biến mẩu tin SinhVien và in biến mẩu tin đó lên màn hình:

#include<conio.h>

#include<stdio.h>

#include<string.h>

typedef struct {

int Ngay;

int Thang;

int Nam;

}NgayThang;

Ví dụ (tiếp)

typedef struct {

char MSSV[10];

char HoTen[40];

NgayThang NgaySinh;

int Phai;

char DiaChi[40];

} sinhvien;

/* Hàm in lên màn hình 1 mẩu tin SinhVien*/

int InSV(SinhVien s) {

printf("MSSV: | Ho va ten | Ngay Sinh | Dia chi\n");

printf("%s | %s | %d-%d-%d | %s\n", s.MSSV, s.HoTen, s.NgaySinh.Ngay,

s.NgaySinh.Thang, s.NgaySinh.Nam, s.DiaChi);

}

Ví dụ (tiếp)

int main() {

SinhVien SV;

printf("Nhap MSSV: "); gets(SV.MSSV);

printf("Nhap Ho va ten: "); gets(SV.HoTen);

printf("Sinh ngay: "); scanf("%d",&SV.NgaySinh.Ngay);

printf("Thang: "); scanf("%d",&SV.NgaySinh.Thang);

printf("Nam: "); scanf("%d",&SV.NgaySinh.Nam);

printf("Gioi tinh (0: Nu), (1: Nam): "); scanf("%d",&SV.Phai);

fflush(stdin);

printf("Dia chi: "); gets(SV.DiaChi);

InSV(SV);

getch();

}

Viết chương trình nhập danh sách học viên gồm các trường họ tên, tuổi, điểm, và nhập vào một tên để tìm kiếm tên này trong danh sách.

#include<stdio.h>

#include<string.h>

#include<conio.h>

typedef struct

{ char Ten[30];

int tuoi ; float diem ; } HV ;

int nhap(HV hvs[], int &n) {

int i ;

printf(“nhap vao so hoc sinh: “);

scanf(“%d”,&n);

for ( i = 0 ; i < n ; i++) // Nhập các học viên {

printf ("\n Nhap so lieu cho HV thu %d", i+1 ) ; printf (" Ho va ten = " ) ;

gets( hvs[i].Ten);

fflush(stdin);

printf ("tuoi = ");

scanf ( "%d" , &hvs[i].tuoi);

fflush(stdin);

printf("diem = ");

scanf ("%f", &hvs[i].diem );

fflush(stdin);

}

{ int i;

printf(“Danh sach hoc sinh vua nhap la: \n”);

for (i=1; i<n; i++)

printf(“%s \t %d \t %f \n”, hvs[i].Ten, hvs[i].tuoi, hvs[i].diem);

}

int timkiem(HV hvs[ ], int n) Tim kiem ten, có n, và hvs phải lấy từ hàm main() { char tentim[30];

printf("Nhap vao ten can tim: ");

gets(tentim); fflush(stdin); // chống trôi lệnh bool thay;

thay = 0 ; i = 0 ; /* thay = 0 : không thay, thay = 1 : tim thay */

while ((!thay)&&(i<n))// thay=0, va i<n { if ( strcmp(hvs[i].Ten , tentim)== 0 ) {

thay = 1 ;

printf ("Da tim thay %s, tuoi %d, va diem %.1f ", hvs[i].Ten , hvs[i].tuoi, hvs[i].diem );

}

else i++;

}

if (!thay )

printf("\n Khong tim thay %s", tentim); getch( );

int sapxep(HV hvs[], int n) { int j;

HV tam;

// float diem1, diem2;

for ( i = 0 ; i < n ; i++)

{ for ( j =i+1 ; j < n ; j++) {

if (hvs[i].diem > hvs[j].diem) { tam =hvs[i];

hvs[i] =hvs[j];

hvs[j]= tam;

} } }

{

int n;

HV hs[100];

nhap(hs,n);

hienthi(hs,n);

timkiem(hs,n);

sapxep(hs,n);

getch();

}

switch(chon)

{ case 1: nhap(hs,n);

case 2: hienthi(hs,n);

case 3: timkiem(hs,n);

case 4: sapxep(hs,n);

}

getch();

} Hoặc

int main() {

int n, chon;

Printf(“Hay nhap cac so sau de thuc hien: \n”);

Printf(“ so 1: nhap\n”);

Printf(“ so 2: in danh sach vua nhap

\n”);

Printf(“ so 3: tim kiem ten trong danh sach vua nhap \n”);

Printf(“ so 4: sap xep danh sach vua nhap theo diem \n”);

Bài tập

1. Viết hàm nhập vào họ tên, điểm của n học sinh. In ra danh sách các học sinh vừa nhập.

2. Viết hàm nhập vào họ tên, điểm của n học sinh. Sắp xếp lại điểm của các HV từ thấp đến cao và in ra danh sách các học sinh vừa nhập.

3. Viết hàm nhập vào vào, họ và họ lót, tên, địa chỉ, sắp xếp tên và địa chỉ theo thứ tự alphabet, sau đó hiển thị danh sách đã được sắp xếp.

4. Tiếp

Bài tập

• Để quản lý học sinh của một lớp, người ta dùng một mảng 1 chiều gồm có n phần tử, cấu trúc của mỗi phần tử gồm có:

• Mã học sinh (MHS) kiểu xâu ký tự có độ dài 10 ký tự

• Họ đệm (HODEM) kiểu xâu ký tự có độ dài 20 ký tự

• Tên (TEN) kiểu xâu ký tự có độ dài 10 ký tự

• Lớp (LOP) kiểu xâu ký tự có độ dài 10 ký tự

• Điểm toán (TOAN) có kiểu số thực

• Điểm lý (LY) có kiểu số thực

• Điểm hóa (HOA) có kiểu số thực

• Điểm trung bình(DTB) có kiểu số thực (được tính bằng trung bình cộng của 3 điểm toán, lý, hóa)

1.Khai báo kiểu dữ liệu phù hợp theo đầu bài.

2.Viết hàm nhap() để nhập n học sinh theo cấu trúc trên.

3.Viết hàm in() để in ra danh sách các học sinh vừa nhập, mỗi học sinh hiển thị trên một dòng (gồm: Mã học sinh, họ đệm, tên, lớp, điểm toán, điểm lý, điểm hóa, điểm trung bình).

4.Viết hàm sapxeptenhs() để sắp xếp tên của học sinh theo theo thứ tự alphabet và in ra danh sách học sinh vừa sắp xếp.

5.Viết hàm timkiemtenhs() để tìm tên học sinh trong danh sách vừa

nhập. Nếu tìm thấy thì đưa ra màn hình tất cả thông tin về học sinh này, nếu không tìm thấy thì đưa ra màn hình thông báo “không tìm thấy học sinh có tên vừa nhập trong danh sách”.

6.Viết hàm main() chứa lời gọi của các hàm trên và cho phép lựa chọn các hàm trên nhiều lần cho tới khi muôn kết thúc.

#include<conio.h>

#include<string.h>

#include<stdlib.h>

struct hs {

char MHS[10];

char HODEM[20];

char TEN[10];

char LOP[10];

float TOAN;

float LY;

float HOA;

float DTB ; };

{

printf(" Nhap n = "); scanf("%d",&n);

for(int i=0;i<n;i++) {

printf(" nhap du lieu cho hoc sinh thu %d :\n",i+1);

printf(" Nhap ma hoc sinh:"); fflush(stdin); gets(s[i].MHS);

printf(" Nhap ho dem:"); fflush(stdin); gets(s[i].HODEM);

printf(" Nhap ten:"); fflush(stdin); gets(s[i].TEN);

printf(" Nhap lop:"); fflush(stdin); gets(s[i].LOP);

printf(" Diem toan:"); scanf("%f",&s[i].TOAN);

printf(" Diem ly:"); scanf("%f",&s[i].LY);

printf(" Diem hoa :"); scanf("%f",&s[i].HOA);

s[i].DTB = float((s[i].TOAN + s[i].LY + s[i].HOA))/3;

printf(" Diem trung binh %.2f : \n",s[i].DTB);

} }

{

printf(" Mahs\tHodem\tTen\tLop\tToan\tLy\tHoa\tDiemtb\n");

for(int i=0;i<n;i++) {

printf(" %4s\t%5s\t%3s\t%3s\t%4.2f\t%2.2f\t%3.2f\t

%.2f\n",s[i].MHS,s[i].HODEM,s[i].TEN,s[i].LOP,s[i].TOAN,s[i].LY,s[i ].HOA,s[i].DTB);

} }

{

int i,j;

hs tam;

for(i=0;i<n;i++)

{ for(j=i+1;j<n;j++)

{ if(strcmp(s[i].TEN,s[j].TEN) > 0) { tam =s[i];

s[i]= s[j];

s[j]= tam;

} } }

printf(" Danh sach sap xep ten la:\n");

in(s,n);

}

{ int i;

char ten[10];

printf(" \nNhap ten hoc sinh can tim :"); fflush(stdin); gets(ten);

bool thay; thay = 0; i=0;

while((!thay) && (i<n))

{ if(strcmp(s[i].TEN,ten) == 0) { thay =i;

printf(" Da tim thay %s, Mhs %s, Hodem %s, Lop %s, toan %.2f, ly %.2f, hoa %.2f, Dtb %.2f", s[i].TEN, s[i].MHS,

s[i].HODEM, s[i].LOP, s[i].TOAN, s[i].LY, s[i].HOA, s[i].DTB);

}

else i++;

}

if (thay = = 0)

printf(" Khong tim thay hoc sinh co ten vua nhap trong danh sach.\n");

}

{

int c;

printf(" Nhap 1: nhap”);

printf(" Nhap 2: in”);

printf(" Nhap 3: sap xep”);

printf(" Nhap 4: tim kiem ten”);

printf(" Nhap 5: ket thuc”);

do {

printf(" \nNhap ham can goi :");

scanf("%d",&c);

}

while((c<0) || (c>5));

return c;

}

Một phần của tài liệu Bài giảng Tin học cơ sở 3 (Ngôn ngữ lập trình C) (Trang 136 - 155)

Tải bản đầy đủ (PPT)

(155 trang)