Đếm số lượng số chẳn có trong mảng 1 chiều …... Nhập xuất ma trận... Mảng 2 chiều /* Đề bài: Nhập vào mảng 2 chiều các số nguyên, xuất ra mảng vừa nhập và thực hiện các thao tác sau: a/
Trang 11 Tính tổng S(n)= 1+ ½ + 1/3+1/4+…+1/n
#include<stdio.h>
#include<conio.h>
int main()
{ int i, n;
float S;
S = 0; i = 1;
do
{
printf("\nNhap n: ");
scanf("%d", &n);
if(n < 1) { printf("\nN phai > = bang 1 Xin nhap lai !");
} }while(n < 1);
while(i <= n)
{
S = S + 1.0 / i; // ph?i nh? là 1.0 / i i++;
}
printf("i = %d", i);
printf("\nS = %f", S);
printf("\nTong 1 + 1/2 + + 1/%d la %.2f: ",n, S);
getch();
return 0;
}
2 Tìm số đảo ngược của số nguyên dương n Vd nhập
123456 thì in ra 654321.
#include<stdio.h>
#include<conio.h>
int main() {
int n;
int SoNghichDao = 0;
do { printf("\nNhap n: ");
scanf("%d", &n);
}while(n < 0 && printf("\nLoi: (n >= 0)"));
printf("\nSo dao nguoc cua %d la: ", n);
do { printf("%d", n % 10);
}while( n /= 10);
getch();
return 0;
}
3 Viết chương trình in ra tam giác cân có độ cao h.
#include<stdio.h>
#include<conio.h>
int main() { int i, j, n;
printf("\nNhap n: ");
Trang 2scanf("%d", &n);
// Câu a: tam giac can dac nam giua mang
hinh
for(i = 1; i <= n; ++i)
{
for(j = 1; j <= n + i - 1; ++j) {
printf((j < n - i + 1) ? " " :
"%c", 234);
} putchar('\n');
}
// Câu b: tam giac can rong nam giua mang hinh
for(i = 1; i <= n; ++i)
{
for(j = 1; j <= n + i - 1; ++j) {
printf((j == n - i + 1 || j == n + i - 1 || i == n) ? "%c" : " ", 234);
} putchar('\n');
}
printf("\n");
// Câu c: tam giac vuong can dac
for(i = 1; i <= n; ++i)
{
for(j = 1; j <= n; ++j) {
printf((j <= i) ? "%c" : " ", 234);
} printf("\n\n");
} // Câu d: tam giac vuong can rong for(i = 1; i <= n; ++i)
{
for(j = 1; j <= n; ++j) {
printf((j == i || j == 1 || i == n) ? "*" : " ");
} printf("\n");
getch();
return 0;
}
4 Viết hàm tìm giá trị lớn nhất trong mảng 1 chiều các số thực
#include<stdio.h>
#include<conio.h>
#define MAX 100
void nhapmang_1Chieu (float a[], int &n)
{
do {
Trang 3printf("\nNhap so phan tu: ");
scanf("%d", &n);
if(n <= 0 || n > MAX) {
printf("\nSo phan tu khong hop le Xin kiem tra lai !");
} }while(n <= 0 || n > MAX);
for(int i = 0; i < n; i++)
{
printf("\nNhap a[%d]: ", i);
scanf("%f", &a[i]);
}
}
float lonnhat(float a[], int n)
{
float ln = a[0];
for(int i = 0; i < n; i++)
{
if(a[i] > ln) {
ln = a[i];
} }
return ln;
}
void xuat_mang_1Chieu (float a[], int n)
{
for(int i = 0; i < n; i++) {
printf("%8.3f", a[i]);
} }
int main() {
int n;
float a[MAX];
nhapmang_1Chieu(a, n);
xuat_mang_1Chieu(a, n);
float ln = lonnhat(a, n);
printf("\nPhan tu lon nhat trong mang la
%.3f", ln);
getch();
return 0;
}
5 Tính tổng các giá trị âm trong mảng 1 chiều
float tongam(float a[], int n) {
float s = 0;
for(int i = 0; i < n; i++)
Trang 4if(a[i] < 0) {
s = s + a[i];
} }
return s;
}
int main()
{
int n;
float a[MAX];
nhap(a, n);
xuat(a, n);
float tong = tongam(a, n);
printf("\nTong cac so am trong mang la %.3f",
tong);
getch();
return 0;
}
6 Đếm số lượng số chẳn có trong mảng 1 chiều
… #include<math.h>
int DemSoChan(int a[ ], int n)
{
int dem = 0;
for(int i = 0; i < n; i++) {
if(a[i] % 2 == 0) {
dem++;
} }
return dem;
}
int main() {
int n;
int a[MAX];
int x;
nhap(a, n);
xuat(a, n);
int SoChan = DemSoChan(a, n);
printf("\nSo luong so chan la %d", SoChan);
getch();
return 0;
}
Trang 57 Sắp xếp mảng giảm dần 1 chiều
… #include <math.h>
void HoanVi(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
void SapXepGiamDan(int a[], int n)
{
for(int i = 0; i < n - 1; i++)
{
for(int j = i + 1; j < n; j++) {
if(a[i] < a[j]) {
HoanVi(a[i], a[j]);
} }
}
}
int main()
{
int n;
int a[MAX];
nhap(a, n);
xuat(a, n);
SapXepGiamDan(a, n);
printf("\nMang sau khi sap xep giam: "); xuat(a, n);
getch();
return 0;
}
8 Nhập xuất ma trận.
Tỉnh tổng các phần tử trên đường chéo chính, chéo phụ
#include<stdio.h>
#include<conio.h>
#include<math.h>
#define MAX 100
void NhapMaTran(int a[][MAX], int &n)
{
do {
printf("\nNhap n: ");
scanf("%d", &n);
if(n < 1 || n > MAX) {
printf("\nSo phan tu khong hop le Xin kiem tra lai !");
} }while(n < 1 || n > MAX);
Trang 6for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++) {
printf("\nNhap vao a[%d]
[%d] = ", i, j);
scanf("%d", &a[i][j]);
} }
}
void XuatMaTran(int a[][MAX], int n)
{
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++) {
printf("%4d",a[i][j]);
} printf("\n\n");
}
}
int TinhTongCacPhanTuTrenDuongCheoChinh(int
a[][MAX], int n)
{
int S = 0;
for (int i = 0; i < n; i++)
{
S += a[i][i];
} return S;
}
int TinhTongCacPhanTuTrenDuongCheoPhu(int a[]
[MAX], int n) {
int S = 0;
for (int i = 0; i < n; i++) {
S += a[i][n - 1 - i];
} return S;}
int main() {
int a[MAX][MAX], n;
NhapMaTran(a,n);
XuatMaTran(a,n);
int tong = TinhTongCacPhanTuTrenDuongCheoChinh(a, n);
printf("\nTong cac phan tu tren duong cheo chinh = %d", tong);
int tongph = TinhTongCacPhanTuTrenDuongCheoPhu(a, n);
printf("\nTong cac phan tu tren duong cheo phu = %d", tongph);
getch();
return 0;
Trang 79 Tính tổng 2 ma trận
#include<stdio.h>
#include<conio.h>
#include<math.h>
#define MAX 100
void NhapMaTran(int a[][MAX], int &dong, int &cot)
{
for(int i = 0; i < dong; i++)
{
for(int j = 0; j < cot; j++) {
printf("\nNhap a[%d][%d] =
", i, j);
scanf("%d", &a[i][j]);
} }
}
void XuatMaTran(int a[][MAX], int dong, int cot)
{
for(int i = 0; i < dong; i++)
{
for(int j = 0; j < cot; j++) {
printf("%4d", a[i][j]); }
printf("\n\n");
} }
void TinhTong2MaTran(int a[][MAX], int b[][MAX], int c[][MAX], int dong, int cot)
{
for(int i = 0; i < dong; i++) {
for(int j = 0; j < cot; j++) {
c[i][j] = a[i][j] + b[i][j]; }
} }
int main() {
int a[MAX][MAX], b[MAX][MAX], c[MAX] [MAX], dong, cot;
//Nh?p s? dòng do
{
printf("\nNhap vao so dong: "); // Cách tà d?o: scanf("dong =
%d",&dong); // Lúc nh?p ph?i vi?t thêm ch? ( dong = ) ? khung console
scanf("%d",&dong);
Trang 8if(dong < 1 || dong > MAX) {
printf("\nSo dong khong hop
le Xin kiem tra lai!");
}
}while(dong < 1 || dong > MAX);
//Nh?p s? c?t
do
{
printf("\nNhap vao so cot: ");
scanf("%d",&cot);
if(cot < 1 || cot > MAX) {
printf("\nSo cot khong hop
le Xin kiem tra lai!");
}
}while(cot < 1 || cot > MAX);
printf("\nNhap vao ma tran A: \n");
NhapMaTran(a, dong, cot);
printf("\nNhap vao ma tran B: \n");
NhapMaTran(b, dong, cot);
printf("\nMa tran A vua nhap: \n");
XuatMaTran(a, dong, cot);
printf("\nMa tran B vua nhap: \n");
XuatMaTran(b, dong, cot);
TinhTong2MaTran(a, b, c, dong, cot);
printf("\nMa tran C = A + B \n");
XuatMaTran(c, dong, cot);
getch();
return 0;
}
** tích 2 ma trận
void TinhTich2MaTran(int a[][MAX], int b[][MAX],
int t[][MAX], int donga, int cota, int cotb) {
for(int i = 0; i < donga; i++) {
for(int j = 0; j < cotb; j++) {
t[i][j] = 0;
for(int k = 0; k < cota; k++) {
t[i][j] += a[i][k] * b[k][j];
} }
Trang 9} }
10 Mảng 2 chiều
/* Đề bài: Nhập vào mảng 2 chiều các số nguyên,
xuất ra mảng vừa nhập và thực hiện các thao
tác sau:
a/ Tính tổng các phần tử của mảng
b/ Tìm Min - Max của mảng
c/ Đếm số lượng các số chẵn trong mảng
d/ Sắp xếp mảng tăng dần/giảm dần theo chiều từ trên xuống
dưới, từ trái qua phải
Yêu cầu: Làm hoàn toàn bằng đệ quy */
#include <stdio.h>
#include <conio.h>
#include <limits.h>
//void NhapMang(int *a, int n)
//{
// if(n == 0)
//
// NhapMang(a, n - 1);
// printf("\nNhap vao a[%d] = ", n - 1);
// scanf("%d", &a[n - 1]);
//}
void NhapMang(int **a, int dong, int cot, int i = 0) {
if(i == dong * cot) {
return; // K?t thúc
} printf("\nNhap vao a[%d][%d] = ", i / cot, i % cot);
scanf("%d", &a[i / cot][i % cot]);
NhapMang(a, dong, cot, i + 1);
}
void XuatMang(int **a, int dong, int cot, int i = 0) {
if(i == dong * cot) {
return;
} if(i % cot == 0) {
printf("\n");
} printf("%4d", a[i / cot][i % cot]);
XuatMang(a, dong, cot, i + 1);
}
Trang 10int TinhTong(int **a, int dong, int cot, int i = 0, int
Tong = 0)
{
if(i == dong * cot)
{
return Tong;
}
return TinhTong(a, dong, cot, i + 1, Tong + a[i
/ cot][i % cot]);
}
int TimMin(int **a, int dong, int cot, int i = 0, int Min
= INT_MAX)
{
if(i == dong * cot)
{
return Min;
}
return TimMin(a, dong, cot, i + 1, a[i / cot][i
% cot] < Min ? a[i / cot][i % cot] : Min);
}
int TimMax(int **a, int dong, int cot, int i = 0, int Max
= INT_MIN)
{
if(i == dong * cot)
{
return Max;
}
return TimMax(a, dong, cot, i + 1, a[i / cot][i
% cot] > Max ? a[i / cot][i % cot] : Max);
}
int DemSoLuongSoChan(int **a, int dong, int cot, int i
= 0, int dem = 0) {
if(i == dong * cot) {
return dem;
}
return DemSoLuongSoChan(a, dong, cot, i +
1, a[i / cot][i % cot] % 2 == 0 ? dem + 1 : dem); }
void HoanVi(int &a, int &b) {
int Temp = a;
a = b;
b = Temp;
}
void SapTangDan(int **a, int dong, int cot, int i = 0) {
if(i == dong * cot - 1) {
return;
}
Trang 11for(int k = i + 1; k < dong * cot; k++)
{
if(a[i / cot][i % cot] > a[k / cot][k % cot])
{
HoanVi(a[i / cot][i % cot], a[k / cot][k % cot]);
} }
SapTangDan(a, dong, cot, i + 1);
}
void SapGiamDan(int **a, int dong, int cot, int i = 0)
{
if(i == dong * cot - 1)
{
return;
}
for(int k = i + 1; k < dong * cot; k++)
{
if(a[i / cot][i % cot] < a[k / cot][k % cot])
{
HoanVi(a[i / cot][i % cot], a[k / cot][k % cot]);
} }
SapGiamDan(a, dong, cot, i + 1);
}
int main() {
int dong = 3, cot = 3;
int **a = new int*[dong]; // C?p phát s? dòng
// V?i m?i dòng thì c?p phát s? c?t tuong ?ng for(int i = 0; i < dong; i++)
{
a[i] = new int[cot];
}
NhapMang(a, dong, cot);
XuatMang(a, dong, cot);
printf("\nTong la: %d", TinhTong(a, dong, cot));
printf("\nMin = %d & Max = %d", TimMin(a, dong, cot), TimMax(a, dong, cot));
printf("\nSo luong so chan = %d", DemSoLuongSoChan(a, dong, cot));
SapGiamDan(a, dong, cot);
printf("\nMang sau khi sap giam dan la: "); XuatMang(a, dong, cot);
Trang 12SapTangDan(a, dong, cot);
printf("\nMang sau khi sap tang dan la: ");
XuatMang(a, dong, cot);
/* Gi?i phóng con tr? c?p 2 */
for(int i = 0; i < dong; i++) {
delete[] a[i];
} delete[] a;
getch();
return 0;
}
11 Con trỏ
** Khai báo và khởi tạo
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int main()
{
int a = 5, *pa = &a;
printf("\nGia tri bien pa: %d", pa);
// -> pa và &a đều chỉ địa chỉ của biến a
printf("\nDia chi cua bien a: %d", &a);
// -> *pa và a đều chỉ nội dung của biến a
printf("\nGia tri vung nho pa tro den: %d", *pa); printf("\nGia tri cua bien a: %d", a);
printf("\nDia chi bien pa: %d", &pa);
// -> địa chỉ biến pa, // có 2 cái địa chỉ // 1 là địa chỉ của biến con trỏ pa // 2 là địa chỉ mà con trỏ pa trỏ đến // Toán tử * để lấy ra giá trị mà con trỏ đang trỏ đến
// Ko để toán tử gì cả thì lấy ra địa chỉ
mà con trỏ đang trỏ đến // Nếu để cả dấu & trước tên con trỏ thì ta đang lấy ra "địa chỉ của riêng" con trỏ
getch();
return 0;
}
12 SourceCode Phân số
#include<stdio.h>
#include<conio.h>
struct PhanSo {
float TuSo;
float MauSo;
};
typedef struct PhanSo PHANSO;
Trang 13void NhapPhanSo(PHANSO &);
void XuatPhanSo(PHANSO);
PHANSO RutGonPhanSo(PHANSO);
PHANSO TinhTong2PhanSo(PHANSO, PHANSO);
PHANSO TinhHieu2PhanSo(PHANSO, PHANSO);
PHANSO TinhTich2PhanSo(PHANSO, PHANSO);
PHANSO TinhThuong2PhanSo(PHANSO, PHANSO);
bool KiemTraPhanSoToiGian(PHANSO);
void QuiDong2PhanSo(PHANSO &, PHANSO &);
bool KiemTraPhanSoDuong(PHANSO);
bool KiemTraPhanSoAm(PHANSO);
int SoSanh2PhanSo(PHANSO, PHANSO);
PHANSO operator +(PHANSO, PHANSO);
PHANSO operator -(PHANSO, PHANSO);
PHANSO operator *(PHANSO, PHANSO);
PHANSO operator /(PHANSO, PHANSO);
void NhapPhanSo(PHANSO &ps)
{
float temp;
printf("\nNhap vao tu so: ");
scanf("%f", &temp);
ps.TuSo = temp;
do
{
printf("\nNhap vao mau so: ");
scanf("%f", &temp);
ps.MauSo = temp;
if(ps.MauSo == 0) {
printf("\nMau so phai khac
0 Xin kiem tra lai !");
} }while(ps.MauSo == 0);
}
void XuatPhanSo(PHANSO ps) {
printf("%.2f / %.2f", ps.TuSo, ps.MauSo); }
float TimUCLN(float a, float b) {
if(a < 0) {
a = a * -1;
} if(b < 0) {
b = b * -1;
}
if(a == 0 && b !=0) {
Trang 14return b;
}
else if( b == 0 && a != 0 )
{
return a;
}
while(a != b) {
if(a > b) {
a = a - b;
} else
b = b - a;
} return a;
}
// Bài 506: Rút gon phân số
PHANSO RutGonPhanSo(PHANSO a)
{
float UCLN = TimUCLN(a.TuSo, a.MauSo);
a.TuSo = a.TuSo / UCLN;
a.MauSo = a.MauSo / UCLN;
return a;
}
// Bài 507: tính tổng 2 phân số
PHANSO TinhTong2PhanSo(PHANSO a, PHANSO b)
{
PHANSO ketqua;
ketqua.TuSo = a.TuSo * b.MauSo + a.MauSo
* b.TuSo;
ketqua.MauSo = a.MauSo * b.MauSo;
return ketqua;
} // Bài 508 : tính hiệu 2 phân số PHANSO TinhHieu2PhanSo(PHANSO a, PHANSO b) {
PHANSO ketqua;
ketqua.TuSo = a.TuSo * b.MauSo - a.MauSo
* b.TuSo;
ketqua.MauSo = a.MauSo * b.MauSo;
return ketqua;
} // Bài 509 : tính tích 2 phân số PHANSO TinhTich2PhanSo(PHANSO a, PHANSO b) {
PHANSO ketqua;
ketqua.TuSo = a.TuSo * b.TuSo;
ketqua.MauSo = a.MauSo * b.MauSo;
return ketqua;
}
// Bài 510 tính thương 2 phân số PHANSO TinhThuong2PhanSo(PHANSO a, PHANSO b)
Trang 15PHANSO ketqua;
ketqua.TuSo = a.TuSo * b.MauSo;
ketqua.MauSo = a.MauSo * b.TuSo;
return ketqua;
}
// Bài 511 kiểm tả phân số tối giản
bool KiemTraPhanSoToiGian(PHANSO a)
{
PHANSO c = RutGonPhanSo(a);
if (c.TuSo == a.TuSo && c.MauSo == a.MauSo)
return true;
return false;
}
// Bài 512 quy đồng 2 phân số
void QuiDong2PhanSo(PHANSO &a, PHANSO &b)
{
PhanSo temp;
temp.TuSo = a.TuSo;
temp.MauSo = a.MauSo;
a.TuSo *= b.MauSo;
a.MauSo *= b.MauSo;
b.TuSo *= temp.MauSo;
b.MauSo *= temp.MauSo;
}
//513 Kiểm tra phân số dương bool KiemTraPhanSoDuong(PHANSO a) {
if (a.TuSo >= 0 && a.MauSo > 0) return true;
return false;
} //514 Kiểm tra phân só âm bool KiemTraPhanSoAm(PHANSO a) {
if (a.TuSo < 0 || a.MauSo < 0) return true;
return false;
}
//515 So sánh 2 phân số: hàm trả về 1 trong 3 giá trị: 0,-1,1
int SoSanh2PhanSo(PHANSO a, PHANSO b) {
float kq1 = a.TuSo / a.MauSo;
float kq2 = b.TuSo / b.MauSo;
if (kq1 < kq2) return -1;
if (kq1 > kq2) return 1;
Trang 16return 0;
}
//516 Ð?nh nghia toán t? operator + cho 2 phân s?
PHANSO operator +(PHANSO a, PHANSO b)
{
PhanSo kq;
kq.TuSo = a.TuSo * b.MauSo + a.MauSo * b.TuSo;
kq.MauSo = a.MauSo * b.MauSo;
return kq;
}
//517 Ð?nh nghia toán t? operator - cho 2 phân s?
PHANSO operator -(PHANSO a, PHANSO b)
{
PHANSO kq;
kq.TuSo = a.TuSo * b.MauSo - a.MauSo * b.TuSo;
kq.MauSo = a.MauSo * b.MauSo;
return kq;
}
//518 Ð?nh nghia toán t? operator * cho 2 phân s?
PHANSO operator *(PHANSO a, PHANSO b)
{
PhanSo kq;
kq.TuSo = a.TuSo * b.TuSo;
kq.MauSo = a.MauSo * b.MauSo;
return kq;
}
//519 Ð?nh nghia toán t? operator / cho 2 phân s?
PHANSO operator /(PHANSO a, PHANSO b)
{ PhanSo kq;
kq.TuSo = a.TuSo * b.MauSo;
kq.MauSo = a.MauSo * b.TuSo;
return kq;
}
//520 Ð?nh nghia toán t? operator ++ cho 2 phân s? PHANSO operator ++ (PHANSO &a)
{ a.TuSo += a.MauSo;
return a;
} //521 Ð?nh nghia toán t? operator cho 2 phân s? PHANSO operator ++ (PHANSO &a)
{ a.TuSo -= a.MauSo;
return a;
} int main() {
PHANSO ps1, ps2;
NhapPhanSo(ps1);
XuatPhanSo(ps1);
NhapPhanSo(ps2);
XuatPhanSo(ps2);
// 506