



















Preview text:
lOMoAR cPSD| 61601608
[Tin học đại cương] Bài thực hành số 5
Nằm trong chuỗi bài viết về thực hành tin học đại cương, đây là bài hướng dẫn thực hành cho bài
thực hành số 5 trong quyển Bài thực hành Tin học đại cương.
Đây là bài thực hành tập trung vào nội dung: Mảng, Xâu ký tự, Cấu trúc B. BÀI TẬP Ở NHÀ Bài 5.1
Lập chương trình thực hiện các công việc sau:
1. Nhập một dãy n số bất kỳ từ bàn phím, với n<10 nhập từ bàn phím.
2. Đưa dãy số vừa nhập ra màn hình.
3. Tính: Trung bình cộng các số âm, Tổng các số dương. Đếm các số 0 trong dãy.
4. Nhập một số x bất kì từ bàn phím. In ra vị trí các số trong dãy có giá trị bằng x. 1 #include 2 #include int main(){ 3 int n; 4
printf("\n Nhap gia tri n (n<10): "); 5 scanf("%d",&n); 6 float A[n]; 7 for(int i=0; i8
o printf("\n Nhap phan tu thu %d la: ",i); 9
} o scanf("%f",&A[i]); 10 11
printf("\n => Day so vua nhap la:"); lOMoAR cPSD| 61601608 12
int j=0, dem_am=0, dem_0=0; 13
float tongam=0, tongduong=0; 14 while(j15 o printf(" %f",A[j]); 16 17 o if(A[j]<0) { 18 19 20 21 tongam += 22 A[j]; 23 dem_am++; o 24 }else if(A[j]>0){ 25 tongduong += 26 A[j]; o }else{ 27 dem_0++; o } o j++; 28 } 29 30 if(dem_am!=0){ 31
o printf("\n Trung binh cong cac so am: %f",tongam/dem_am); 32 }else{ 33
o printf("\n Day khong chua so am"); 34 } 35
36 printf("\n Tong cac so duong: %f", tongduong);printf("\n So luong so 0: %d",dem_0); 37 38 float x; 39
printf("\n Nhap gia tri muon tim x = "); 40 scanf("%f",&x); 41 42
printf("\n Vi tri cac so trong day co gia tri %f la:",x);int flag = 1; 43 for(int k=0; k44 o if(A[k]==x){ 45 flag = 0; 46 printf(" %d",k); lOMoAR cPSD| 61601608 47 o } 48 } 49 if(flag == 1){ o printf(" Khong co!",x); 50 } 51 52 getch(); 53 return 0; 54 } 55 56 57 Bài 5.2
Lập chương trình thực hiện các công việc sau:
1. Nhập một dãy n số bất kỳ vào 1 mảng với n<=10 nhập từ bàn phím.
2. Sắp xếp dãy số đã nhập theo thứ tự tăng dần, đưa kết quả ra màn hình.
3. Sắp xếp dãy số đã nhập theo thứ tự giảm dần, đưa kết quả ra màn hình.
4. Sắp xếp dãy số giảm dần theo giá trị tuyệt đối, đưa kết quả ra màn hình. 1 #include 2 #include 3 #include int main(){ 4 int n; 5
printf("\n Nhap gia tri (<= 10) cua n = "); 6 scanf("%d",&n); 7 8
floatfor(int A[n]; i=0; i9
o printf("\n Nhap gia tri cho phan tu thu %d: ",i); 10 o scanf("%f",&A[i]); 11 } 12 13
//Thuat toan sap xep trong bai deu dung Selection-sort lOMoAR cPSD| 61601608 14 //Sap xep tang dan 15 for(int i=0;i16 o for(int j=i+1;j17
if(A[i]>A[j]){ float temp = A[i]; 18 A[i]=A[j]; 19 A[j]=temp; 20 } 21 o } 22
}printf("\n Day theo thu tu tang dan: "); 23 int k=0; 24 while(k25 o printf(" %f",A[k]); 26 o k++; 27 } 28 29
//Sap xep giam danfor(int i=0;i30 o for(int j=i+1;j31 if(A[i]32 float temp = A[i]; 33 A[i]=A[j]; 34 A[j]=temp; 35 } 36 } o } 37
printf("\n Day theo thu tu giam dan: "); 38 int m=0; 39 while(m40 o printf(" %f",A[m]); 41 o m++; } 42 43 44 45 46 47 lOMoAR cPSD| 61601608 48
//Sap xep giam dan theo tri tuyet doifor(int i=0;i49 o for(int j=i+1;j50 if(fabs(A[i])51 float temp = A[i]; 52 A[i]=A[j]; 53 A[j]=temp; 54 } 55 } o } 56
printf("\n Day theo thu tu tang dan: "); 57 int t=0; 58 while(t59 o printf(" %f",A[t]); 60 o t++; 61 } 62 63 getch();return 0; 64 } 65 66 67 68 69 Bài 5.3
Lập chương trình thực hiện công việc sau:
1. Nhập một dãy n số bất kỳ từ bàn phím vào mảng a với n<=10 nhập từ bàn phím
2. Sao chép tất cả các số dương trong mảng a sang mảng b, tất cả các số âm sang mảng c
3. Đưa các mảng b, c ra màn hình 1 #include 2 #include lOMoAR cPSD| 61601608 3
void in_ket_qua(float A[], int length_A); 4 5 int main(){ 6 int n; 7
printf("\n Nhap gia tri (<=10) cua n = "); 8 9 10 11
scanf("%d",&n);float a[n], b[n], c[n]; 12 13 for(int i=0;i14
o printf("\n Nhap gia tri phan tu %d: ",i); 15 o scanf("%f",&a[i]); 16 } 17
int dem_duong=0, dem_am=0; 18 for(int i=0; i19 o if(a[i]>0){ 20 b[dem_duong]=a[i]; 21 dem_duong++; o 22 }else if(a[i]<0){ 23 c[dem_am]=a[i]; 24 dem_am++; o } 25 } 26 27
printf("\n Mang cac so duong: ");in_ket_qua(b,dem_duong); 28
printf("\n Mang cac so am: "); 29 in_ket_qua(c,dem_am); 30 31 getch(); 32 return} 0; 33 34
void in_ket_qua(float A[], int length_A){ 35
if(length_A<=0){ 36 o printf("Mang la rong"); 37 }else{ 38 o for(int i=0; i39 printf(" %f",A[i]); lOMoAR cPSD| 61601608 40 o } 41 }} 42 43 44 Bài 5.4
Dùng mảng các xâu. Khai báo char dslop[10][30]. Không dùng cấu trúc – Structure
Lập chương trình thực hiện các công việc sau:
1. Nhập vào danh sách tên các học sinh của một lớp, với số học sinh
n<=10 nhập từ bàn phím.
2. Sắp xếp danh sách lớp theo tứ tự ABC 3. Đưa danh sách đã xếp ra màn hình. 1 2 3 #include 4 #include 5 #include 6
intchar main(){ dslop[10][30]; 7 int n; 8
printf("\n Nhap vao so luong hoc sinh trong lop (<= 10) n = "); 9 scanf("%d", &n); 10 int i=0; 11 while(i12 o fflush(stdin); 13 o gets(dslop[i]); 14 o i++; 15 } 16 17 for(int j=0;j18 o for(int k=j+1;k lOMoAR cPSD| 61601608 19
if(strcmp(dslop[j],dslop[k])>0){ 20 char s[30]; 21
strcpy(s,dslop[j]);strcpy(dslop[j],dslop[k]); 22 strcpy(dslop[k], s); 23 } 24 o } 25 } 26 27
printf("\n Danh sach lop hoc sau sap xep theo thu tu ABC \n");for(int i=0;i28 o printf("%d. ",i+1); 29 o puts(dslop[i]); 30 } 31 32 getch(); 33 return 0; 34 } 35 36 Bài 5.5 Hãy định nghĩa kiểu: struct Hoso{ char HoTen[40]; float Diem; char Loai[10]; };
Viết chương trình nhập vào họ-tên, điểm của n học sinh. Xếp loại văn hóa theo cách sau: Điểm Xếp loại lOMoAR cPSD| 61601608 9, 10 Gioi 7, 8 Kha 5, 6 Trung binh dưới 5 Khong Dat
Sau đó, in danh sách theo định dạng cho trước. 1 #include 2 #include 3 #include 4
typedef struct hoso_struct{ 5 char HoTen[40]; 6 float Diem; 7 char Loai[10]; 8 } Hoso; 9 int main(){ 10 int n; 11
printf("\n Nhap so luong hoc sinh trong lop n = "); 12 scanf("%d",&n); 13 14 Hoso hoso[n]; 15 for(into float i=0;i16 17 lOMoAR cPSD| 61601608 18 o printf("%d. ",i); 19 o
printf("\n Nhap ten cua hoc sinh: 20 ",i+1); o fflush(stdin); 21
gets(hoso[i].HoTen); o printf("\n Nhap 22
diem: "); o scanf("%f",&diem); o 23
hoso[i].Diem = diem; o if(diem>=9 && 24 diem<=10){ 25 strcpy(hoso[i].Loai,"Gioi"); 26
o }else if(diem>=7 && diem<9){ 27 strcpy(hoso[i].Loai,"Kha"); o 28
}else if(diem>=5 && diem<7){ 29 strcpy(hoso[i].Loai,"Trung 30 binh"); o }else{ 31 strcpy(hoso[i].Loai,"Khong 32 dat"); 33 } o } 34
printf("%-40s %-5s %-15s\n","HO VA TEN","DIEM","XEP LOAI"); 35 for(int i=0;i36
o printf("%-40s %-2.2f %-15s\n",hoso[i].HoTen, hoso[i].Diem, hoso[i].Loai); 37 } 38 39 getch(); 40 return 0; } 41 42 43 lOMoAR cPSD| 61601608 C. BÀI TẬP TẠI PHÒNG MÁY Bài 5.6
Viết chương trình nhập vào hai ma trận A và B có cấp m, n. In ra hai ma trận ra màn hình. Tính
ma trận tổng C = A+B và in kết quả ra màn hình. 1 #include 2 #include 3 int main(){ 4 int m, n; 5
printf("\n Nhap kich thuoc cua ma tran:"); 6
printf("\n So hang m = "); scanf("%d",&m); 7
printf("\n So cot n = "); scanf("%d",&n); 8 9
floatprintf("\n Nhap cac phan tu cua ma tran A\n"); A[m][n], B[m][n]; 10 for(int i=0;i11 o for(int j=0;j12
printf("A[%d][%d] = ",i,j); 13 scanf("%f",&A[i][j]); 14 o } 15 } 16 17
printf("\n Nhap cac phan tu cua ma tran B\n");for(int i=0;i18 o for(int j=0;j20 scanf("%f",&B[i][j]); 21 o } 22 } 23 lOMoAR cPSD| 61601608 24
//tinh tong C = A+Bfloat C[m][n]; 25 for(int i=0;i26 o for(int j=0;j27 C[i][j]=A[i][j]+B[i][j]; 28 o } 29 } 30 31 //in ket qua 32
printf("Ma tran A:\n");for(int i=0;i33 o for(int j=0;j34 printf("%f ", A[i][j]); 35 o } 36 o printf("\n"); 37 } 38 39 printf("Ma tran B:\n"); 40 41 42 43 for(int i=0;i44 o for(int j=0;j45 printf("%f ", B[i][j]); 46 o } 47 o printf("\n"); 48 } 49
printf("Ma tran C = A+B:\n");for(int i=0;i50 o for(int j=0;j51 printf("%f ", C[i][j]); 52 o } 53 o printf("\n"); 54 } 55 lOMoAR cPSD| 61601608 56 getch(); 57 return 0; 58 } 59 60 61 Bài 5.7
Viết chương trình nhập vào hai ma trận A có cấp m, k và ma trận B có cấp k, n. In hai ma trận ra
màn hình. Tính ma trận tích C = A*B và in kết quả ra màn hình. 1 #include 2 #include 3 int main(){ 4 int m, k, n; 5
printf("\n Nhap kich thuoc cua ma tran A, B:"); 6
printf("\n So hang m = "); scanf("%d",&m); 7
printf("\n So cot (cot A = hang B) k = "); scanf("%d",&k); 8
printf("\n So cot n= "); scanf("%d",&n); 9 float A[m][k], B[k][n]; 10
printf("\n Nhap cac phan tu cua ma tran A\n"); 11 for(int i=0;i12 o for(int j=0;j scanf("%f",&A[i][j]); 15 o } 16 } 17 18
printf("\n Nhap cac phan tu cua ma tran B\n"); 19 for(int i=0;i20 o for(int j=0;j21
printf("B[%d][%d] = ",i,j);scanf("%f",&B[i][j]); 22 o } 23 } lOMoAR cPSD| 61601608 24
25 //tinh tong C = A*B 26 float C[m][n]; 27 for(into for(int i=0;i28 float temp=0; 29 for(int t=0;t30 temp +=A[i][t]*B[t][j]; 31 } 32 C[i][j]=temp; 33 o } 34 } 35 //in ket qua 36 printf("Ma tran A:\n"); 37 for(int i=0;i38 o for(int j=0;j39 printf("%f ", A[i][j]); 40 o } 41 o printf("\n"); 42 } 43 printf("Ma tran B:\n"); 44 for(int i=0;i45 o for(int j=0;j46 printf("%f ", B[i][j]); 47 o } 48 o printf("\n"); 49 } 50
printf("Ma tran C = A*B:\n");for(int i=0;i51 o for(int j=0;j52 printf("%f ", C[i][j]); 53 o } 54 o printf("\n"); 55 } 56 57 getch(); lOMoAR cPSD| 61601608 58 return 0; 59 } 60 61 62 63 64 65 66 Bài 5.8
Xem một phân số là cấu trúc có 2 trường là tử số và mẫu số. Hãy viết chương trình thực hiện các
phép tính cộng, trừ, nhân, chi hai phân số. (Các kết quả phải tối giản) 1 #include 2 #include 3 #include 4
typedef struct phanso_struct{ 5 int TuSo; 6 int MauSo; 7 } PhanSo; 8 9
// Khai bao hamint bcnn(int a, int b); // Ham tim BCNN 10
int ucln(int a, int b); // Ham tim UCLN 11
PhanSo toi_gian(int tuso, int mauso); // Ham toi gian phan so 12
void in_ket_qua(PhanSo p); // Ham in ket qua ra man hinh 13 14 int main(){ 15
PhanSo ps1, ps2;printf("\n Nhap gia tri cho phan so thu nhat:"); 16
printf("\n Tu so: "); scanf("%d",&ps1.TuSo); 17
printf("\n Mau so: "); scanf("%d",&ps1.MauSo); 18
printf("\n Nhap gia tri cho phan so thu hai:"); lOMoAR cPSD| 61601608 19
printf("\n Tu so: "); scanf("%d",&ps2.TuSo); 20
printf("\n Mau so: "); scanf("%d",&ps2.MauSo); 21 in_ket_qua(ps1); 22 in_ket_qua(ps2); 23 24
//Phep tinh cong 2 phan so 25
int mTong = bcnn(ps1.MauSo, ps2.MauSo); 26
intPhanSo psTong = toi_gian(tTong, mTong); tTong =
ps1.TuSo*(mTong/ps1.MauSo)+ps2.TuSo*(mTong/ps2.MauSo); 27 28
//Phep tinh hieu 2 phan so 29
int mHieu = bcnn(ps1.MauSo, ps2.MauSo); 30
int tHieu = ps1.TuSo*(mHieu/ps1.MauSo)-ps2.TuSo*(mHieu/ps2.MauSo); 31
PhanSo psHieu = toi_gian(tHieu, mHieu); 32 33
//Phep tinh tich 2 phan soint mTich = ps1.MauSo * ps2.MauSo; 34
int tTich = ps1.TuSo * ps2.TuSo; 35
PhanSo psTich = toi_gian(tTich, mTich); 36 37
//Phep tinhs thuong 2 phan soint mThuong = ps1.MauSo * ps2.TuSo; 38
int tThuong = ps1.TuSo * ps2.MauSo; 39 PhanSo psThuong =
toi_gian(tThuong, mThuong); 40 41
printf("Tong: "); in_ket_qua(psTong); 42
printf("Hieu: "); in_ket_qua(psHieu); 43
printf("Tich: "); in_ket_qua(psTich);printf("Thuong: "); in_ket_qua(psThuong); 44 45 getch(); 46 return 0; 47 } 48 49 int ucln(int a, int b){ 50
intint abs_a = abs(a);abs_b = abs(b); 51 if(abs_a==0 || abs_b==0){ 52 o return a+b; 53 } lOMoAR cPSD| 61601608 54 while(abs_a!=abs_b){ 55 o if(abs_a56 abs_b=abs_b-abs_a; 57
o }else {abs_a=abs_a-abs_b; 58 o } 59 } 60 return abs_a; 61 } 62 63
intreturn bcnn(int (a*b)/(ucln(a,b)); a, int b){ 64 } 65 66
PhanSo toi_gian(int tuso, int mauso){ 67 PhanSo ps; 68
int uc = ucln(tuso, mauso); 69
intint t = tuso/uc;m = mauso/uc; 70 ps.TuSo = t; 71 ps.MauSo = m; 72 return ps; 73 } 74 75
voidprintf("\nTu so: in_ket_qua(PhanSo p){ %-d",p.TuSo); 76
printf("\nMau so: %-d\n\n",p.MauSo); 77 } 78 79 80 81 82 83 84 85 86 87 lOMoAR cPSD| 61601608 88 89 90 Bài 5.9
Lập chương trình thực hiện các công việc sau:
1. Nhập các xâu s1, s2.
2. Đưa ra màn hình giá trị strlen(s1), strlen(s2).
3. Thực hiện lệnh strcpy(s1, s2) sau đó đưa s1, s2 ra màn hình.
4. Đưa giá trị strcmp(s1, s2), strcmp(s2, s1) ra màn hình. Giải thích ý nghĩa của 2 giá trị
5. Thực hiện các lệnh strcat(s1, s2) sau đó đưa s1, s2 ra màn hình 1 #include 2 #include 3 #include 4
int main(){ 5 char s1[20], s2[20]; 6 char s11[20], s21[20]; 7 char s12[20], s22[20]; 8 9
printf("Nhap chuoi s1 = "); fflush(stdin);gets(s1); strcpy(s11, s1); strcpy(s12, s1); 10
printf("Nhap chuoi s2 = "); fflush(stdin); 11
gets(s2); strcpy(s21, s2); strcpy(s22, s2); 12 13
printf("Do dai cua s1: %d\n",strlen(s1)); 14
printf("Do dai cua s2: %d\n",strlen(s2)); 15 16
strcpy(s11, s21);printf("Sau khi thuc hien strcpy(s1, s2) co: s1 = %s, s2 = %s\n", s11, s21); 17 18
printf("strcmp(s1, s2) = %d, strcmp(s2, s1) = %d\n",strcmp(s1, s2), strcmp(s2, 19 20 strcat(s12, s22); 21
printf("Sau khi thuc hien strcat(s1, s2) co: s1 = %s, s2 = %s", s12, s22); 22 23 getch(); lOMoAR cPSD| 61601608 24 25 return 0; 26 } 27 28 Bài 5.10
Viết chương trình nhập vào họ-tên của một người, cắt bỏ khoảng trắng bên phải, trái và khoảng
trắng không có nghĩa trong chuỗi. In ra màn hình họ-tên dưới dạng chữ thường và chữ hoa. 1 #include 2 #include 3 #include #include 4 5 int main(){ 6 char ho_ten[30]; 7 8
printf("Nhap vao ho va ten: ");fflush(stdin); 9 gets(ho_ten); 10
// Bo khoang trang ben phai 11 while(1){ 12 o if(ho_ten[0]==' '){ 13 strcpy(ho_ten, ho_ten+1); 14 o }else{ 15 break; 16 o } 17 } 18
// Bo khoang trang ben trai while(1){ lOMoAR cPSD| 61601608 19 o int l = 20 strlen(ho_ten)-1; o 21 if(ho_ten[l]==' '){ 22 ho_ten[l]='\0'; 23 o }else{ 24 break; 25 } o } 26 27
// Bo khoang trang khong co nghia o giuaint k=0, l = strlen(ho_ten); 28 while(k29
o if((ho_ten[k]==' ') && (ho_ten[k+1] == ' ')){ 30
strcpy(ho_ten+k, ho_ten+k+1); 31 o }else{ 32 k++; 33 o } 34 35 36 37 } 38 39 for(int m = 0; m40
} o ho_ten[m] = toupper(ho_ten[m]); 41 printf("Ho va ten:%s\n",ho_ten); 42 43 for(int m = 0; m44
o ho_ten[m] = tolower(ho_ten[m]); 45 } 46
printf("Ho va ten:%s",ho_ten); 47 48 getch();return 0; 49 } 50 51 52