Giáo trình ngôn ngữ C


V.3.3 - Một số ví dụ về mảng hai chiều



tải về 2.34 Mb.
Chế độ xem pdf
trang51/62
Chuyển đổi dữ liệu16.03.2023
Kích2.34 Mb.
#54376
1   ...   47   48   49   50   51   52   53   54   ...   62
C ĐHQGHN

V.3.3 - Một số ví dụ về mảng hai chiều 
Ví dụ V.5: Chương trình nhập mảng A(n,m), 1
≤ n,m ≤ 5, các số nguyên từ bàn phím, in 
mảng ra màn hình theo yêu cầu các phần tử cùng một hàng được in trên một dòng của 
màn hình, các phần tử cách nhau một dấu trống. 
#include  
#include  
void main(){ 
clrscr(); //
xóa màn hình
const int max =5; // 
kích thước tối đa
int A[max][max]; 
int n,m,i,j; 
do{printf("\nNhap so dong cua mang = "); 
scanf("%d",&n); 
printf("\nNhap so cot cua mang = "); 
scanf("%d",&m); 
} while(n<1 || n>max|| m<1 || m>max); 
printf("\nNhap mang co %d dong, %d cot \n",n,m); 
for(i=0; ifor(j=0; j
printf("A[%d][%d]= ",i,j); 
scanf("%d",&A[i][j]); 

printf("\nCac phan tu mang la \n"); 
for(i=0; i{ printf("\n"); 
for(j=0; jprintf("%d ",A[i][j]); 

getch();
}


Gi¸o tr×nh tin häc c¬ së II - N
gôn ngữ
 C
77
Ví dụ V.6: Chương trình nhập 2 ma trận A(n,m), B(n,m), 1
≤ n,m ≤ 5, các số thực từ bàn 
phím, tính in ra màn hình ma trận C = A+B. 
Giải: Trước khi viết chương trình chúng ta lưu ý đến mấy vấn đề:
à
C = A+B có nghĩa là các phần của C được tính C[i][j] = A[i][j] + B[i][j] 
à
chỉ có thể cộng hai ma trận A,B cùng kích thước và C cũng cùng kích thước với A,B 
à
do các phần tử mảng có kiểu là float vì vậy khi nhập ta nên dùng biến phụ. 
#include  
#include  
void main(){ 
clrscr(); 
const int max =5; //số dòng, cột tối đa 
float A[max][max],B[max][max],C[max][max]; 
int n,m,i,j; 
float x; 
do{ 
printf("\nNhap so dong cua ma tran = "); 
scanf("%d",&n); 
printf("\nNhap so cot cua ma tran = "); 
scanf("%d",&m); 
} while(n<1 || n>max|| m<1 || m>max); 
printf("\nNhap A co %d dong, %d cot \n",n,m); 
for(i=0; ifor(j=0; j
printf("A[%d][%d]= ",i,j); 
scanf("%f",&x);A[i][j]=x; 

printf("\nNhap B co %d dong, %d cot \n",n,m); 
for(i=0; ifor(j=0; j
printf("B[%d][%d]= ",i,j); 
scanf("%f",&x);B[i][j]=x; 

for(i=0; ifor(j=0; jC[i][j]=A[i][j]+B[i][j]; 


Gi¸o tr×nh tin häc c¬ së II - N
gôn ngữ
 C
78
printf("\nCac phan tu ma tran C la \n"); 
for(i=0; i{ printf("\n"); 
for(j=0; jprintf("%4.1f ",C[i][j]); 

getch(); 

( ví dụ V.6 - chương trình tính tổng 2 ma trận ) 
Ví dụ V.7Chương trình nhập ma trận A(n,n), 1
≤ n,n ≤ 5, các số nguyên từ bàn phím, sau 
đó kiểm tra và thông báo ma trận đó có đối xứng hay không . 
Giải: Một ma trận A là đối xứng trước hết nó phải là ma trận vuông và các phần tử của 
nó đối xứng nhau qua đường chéo chính, tức là A[i][j] =A[j][i]. Vậy chúng ta kiểm tra 
một ma trận đối xứng theo cách sau: 
Với mỗi i,j (0
≤ i,j ≤n-1) nếu tồn tại i,j mà A[i][j] != A[j][i] thì ta kết luận A không đối 
xứng, ngược lại A là đối xứng.
Tất nhiên chúng ta không cần phải xét mọi cặp (i,j) có thể, vì nếu như vậy thì: 
- cặp (A[i][j] A[j][i]), và (A[j][i], A[i][j]) thực chất là một nhưng lại hai lần so 
sánh 
- phần tử trên đường chéo chính A[i][i] được so sánh với chính nó. 
Vì thế chúng ta chỉ xét các chỉ số (i,j) mà phần tử A[i][j] nằm thực sự phía trên của 
đường chéo chính. tức là chỉ cần xét các cặp phần tử (A[i][j], A[j][i]) với i chạy từ 0 tới 
n-1 và với j chạy từ i+1 tới n-1 là đủ. Hơn nữa chúng ta chỉ duyệt các cặp (A[i][j], A[j][i]) 
nếu chưa phát hiện được cặp nào khác nhau.
Vậy ta có thể mô tả như sau: 
d=0; // d là biến để đánh dấu ghi nhận có gặp một cặp (A[i][j]!= A[j][i]) thì d=1 
for(i=0; (ifor(j= 
i+1; 
(j&& (d= =0); j++) 
if(A[i][j]!=A[j][i]) 
d=1; 
Kết thúc đoạn lệnh lặp trên chỉ có hai khả năng 
- nếu d=1 tức là có cặp (A[i][j]!=A[j][i]) tức là ma trận không đối xứng. 
- ngược lại,(d=0) thì ma trận là đối xứng. 


Gi¸o tr×nh tin häc c¬ së II - N
gôn ngữ
 C
79
#include  
#include  
void main(){ 
clrscr(); 
const int max =5; // 
int A[max][max]; 
int n,d,i,j; 
do{ 
printf("\nNhap so dong, so cot cua ma tran = "); 
scanf("%d",&n); 
} while(n<1 || n>max); 
printf("\nNhap ma tran vuong cap %d \n",n,n); 
for(i=0; ifor(j=0; j
printf("A[%d][%d]= ",i,j); 
scanf("%d",&A[i][j]); 

for(i=0,d=0; (ifor(j=0; (jif(A[i][j]!=A[j][i]) d=1; 
if(d) printf("\nMa tran khong doi xung"); 
else 
printf("\nMa tran doi xung"); 
getch(); 

(Ví dụ V.6 - kiểm tra ma trận đối xứng) 

tải về 2.34 Mb.

Chia sẻ với bạn bè của bạn:
1   ...   47   48   49   50   51   52   53   54   ...   62




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương