1. Trang chủ
  2. » Công Nghệ Thông Tin

Ôn tập lập trình C++

20 147 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 20
Dung lượng 45,32 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Đế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 1

1 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 2

scanf("%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 3

printf("\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 4

if(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 5

7 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 6

for(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 7

9 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 8

if(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 10

int 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 11

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]);

} }

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 12

SapTangDan(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 13

void 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 14

return 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 15

PHANSO 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 16

return 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

Ngày đăng: 14/04/2018, 02:12

TỪ KHÓA LIÊN QUAN

w