You are on page 1of 4

Câu 1

Chỉ cần viết khai báo của hàm.


// Tim gia tri lon nhat
double gtln(double *a, int n);

// Tim diem lon nhat cho mang sinh vien


double diemln(struct SinhVien *a, int n);

// Sap xep mang so nguyen


void sapxep(int *a, int n);

// Ghi mang so thuc xuong tap tin


void ghimang(double *a, int n, char *tentep);

Câu 2
Đầu tiên ta cần sử dụng các thư viện
#include "stdio.h"
#include "string.h"

Để nhập số phần tử trong khoảng, tốt nhất ta dùng dowhile


int NhapSoPhanTu() {
int n;
do { printf("Nhap n:"); fflush(stdin); scanf("%d", &n); } while(n<5||n>10);
return n;
}

Nhập mảng trong trường hợp này ta không phải nhập số phần tử mà ta truyền vào số phần tử.
void NhapMang(char a[][30], int n) {
int k;
for(k=0; k<n; k++) {
printf("Nhap chuoi thu %d:", k+1);
fflush(stdin); gets(a[k]);
}
}

Tìm giá trị lớn nhất hay tìm chuỗi dài nhất
int TimGTLN(char a[][30], int n) {
int k, m;
m = 0;
for(k=0; k<n; k++) if(m < strlen(a[k]) ) m = strlen(a[k]);
return m;
}

Sắp xếp mảng


void SapXepMang(char a[][30], int n) {
int k, i;
for(i=n; i>1; i--) for(k=0; k<i-1; k++)
if( strcmp(a[k], a[k+1]) > 0 ) {
char t[30];
strcpy(t, a[k]); strcpy(a[k], a[k+1]); strcpy(a[k+1], t);
}
}

1
In mảng
void InMang(char a[][30], int n) {
int k;
for(k=0; k<n; k++) printf("%s\n", a[k]);
}

Chương trình chính


void main() {
char a[10][30];
int k = NhapSoPhanTu();
NhapMang(a, k);
printf("\n\nDo dai lon nhat la %d\n", TimGTLN(a, k));
SapXepMang(a, k);
printf("\n\nSau khi sap xep\n");
InMang(a, k);
}

Câu 3
Đầu tiên ta phải include một vài thư viện vào. Tốt nhất ta nên include một số thư viện quen biết
phòng khi sử dụng đến.
#include "math.h"
#include "stdio.h"
#include "conio.h"

Để nhập mảng, trước hết ta cần nhập số hàng, sau đó là số cột, rồi đến giá trị của các phần tử.
Nhưng do ta cần truyền số hàng và số cột ra ngoài, ta khai báo thêm hai biến con trỏ p và q.
void NhapMang(int a[30][30], int *p, int *q) {
int i, k, hang, cot;

clrscr();
printf("Nhap so hang:"); scanf("%d", &hang); *p = hang;
printf("Nhap so cot:"); scanf("%d", &cot); *q = cot;

for(i=0; i<hang; i++) for(k=0; k<cot; k++) {


printf("Nhap phan tu hang %d cot %d:", i+1, k+1);
scanf("%d", &a[i][k]);
}

getch();
}

Để in mảng, cách tốt nhất là in mỗi hàng trên một dòng màn hình. Sau khi in hết một dòng, ta dùng
điều khiển "\n" để xuống dòng
void InMang(int a[30][30], int hang, int cot) {
int i, k;
clrscr();
for(i=0; i<hang; i++) {
for(k=0; k<cot; k++) printf("%6d", a[i][k]);
printf("\n");
}
getch();
}

2
Để in ra số chính phương, trước tiên chúng ta hãy viết hàm kiểm tra chính phương. Đầu vào của
hàm là số thực, đầu ra là một con số cho biết số đầu vào có là chính phương (1) hay không là chính
phương (0).
int chinhphuong(double x) {
if(x<0) return 0;
x = sqrt(x);
if(x != floor(x)) return 0;
return 1;
}

void InChinhPhuong(int a[30][30], int hang, int cot) {


int i, k;
clrscr();
for(i=0; i<hang; i++) {
for(k=0; k<cot; k++)
if( chinhphuong(a[i][k]) ) printf("%6d", a[i][k]);
else printf("%6c", '*');

printf("\n");
}
getch();
}

Trường hợp nguyên tố hoàn toàn tương tự trường hợp chính phương. Học sinh tự giải trường hợp
này bằng cách viết thêm hàm nguyento
void InNguyenTo(int a[30][30], int hang, int cot) {
//tuong tu
}

Để in ra tổng, chúng ta cần tính tổng trước. Gọi si là tổng của hàng thứ i, chúng ta tính tổng si bằng
vòng lặp, sau đó in ra si. Tương tự như vậy với hàng
void InTong(int a[30][30], int hang, int cot) {
int i, k;
clrscr();
for(i=0; i<hang; i++) {
int si = 0;
for(k=0; k<cot; k++) si += a[i][k];
printf("Tong cua hang %d la %d\n", i, si);
}

for(k=0; k<cot; k++) {


int sk = 0;
for(i=0; i<hang; i++) sk += a[i][k];
printf("Tong cua cot %d la %d\n", k, sk);
}
getch();
}

3
Chương trình chính gọi các hàm đơn lẻ trong mệnh đề switch. Chúng ta nhớ sử dụng break sau
mỗi lần gọi.
void main() {
int sohang, socot; int a[30][30];
int x;

do {
clrscr();
printf("\nMAIN MENU");
printf("\n 1.Nhap so hang va so cot gia tri mang");
printf("\n 2. In mang vua nhap");
printf("\n 3. In ra cac phan tu chinh phuong");
printf("\n 4. In ra cac phan tu nguyen to");
printf("\n 5. In ra tong hang va cot");
printf("\n ESC. Thoat khoi chuong trinh");

x = getch();

switch(x) {
case '1':NhapMang(a, &sohang, &socot); break;
case '2':InMang(a, sohang, socot); break;
case '3':InChinhPhuong(a, sohang, socot); break;
case '4':InNguyenTo(a, sohang, socot); break;
case '5':InTong(a, sohang, socot); break;
case 27: return;
} //switch

} while (x!=27);

} //main

You might also like