1. Trang chủ
  2. » Giáo án - Bài giảng

■ Bài tập C or C++ phần 01 đến 08 ■ Có bài giải (từ cơ bản đến nâng cao ■ Tập 1 of 2)

38 533 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 38
Dung lượng 567,32 KB

Nội dung

Bài tập lập trình C ■ C++ từ cơ bản đến nâng cao ■ 01 Phần cơ bản ■ 02 Hàm và thủ tục (Function và Procedure) ■ 03 Hàm và thủ tục đệ quy ■ 04 Mảng 1 chiều ■ 05 Mảng 2 chiều ■ 06 Chuổi (String) ■ 07 Bài tập nâng cao phần 1 ■ 08 Bài tập nâng cao phần 2

Trang 1

Biên soạn: Th.s Nguyễn Anh Việt Trang 1

Bài 01.01 – Xin chào

// Nếu dùng CodeBlock hay Dev-C thì bỏ lệnh này

char HoTen[30] ; // Có thể khai báo char *hoten thay vì char hoten[30]

printf("Nhap Ho va Ten: ");

gets(HoTen);

printf("Xin chuc mung ban %s", HoTen);

getch(); // Tạm dừng chương trình để xem kết quả

float c; // c là số thực có dấu phẩy

char pheptoan[ 2 ]; // char [ n ] chỉ chứa n-1 ký tự và ký tự kết thúc \0 printf("Nhap so thu nhat ");

scanf("%d", &a); // %d để nhập số nguyên

printf("Nhap so thu hai ");

scanf("%d", &b);

printf("Nhap phep toan (+ hay – hay * hay /) ");

scanf("%s", pheptoan); // %s để nhập ký tự

Trang 2

Biên soạn: Th.s Nguyễn Anh Việt Trang 2

if ( strcmp(pheptoan,"+")==0 ) printf("Tong so: %d", a+b) ;

else if ( strcmp(pheptoan,"+")==0 ) printf("Hieu so: %d", a-b) ;

else if ( strcmp(pheptoan,"*")==0 ) printf("Tich so: %d", a*b) ;

Bài 01.03 – Tính Luỹ thừa

Vòng lệnh For ( tên_biến = 1 ; tên_biến <=n ; tên_biến++ ) => lệnh

Bạn hãy nhập vào cơ số a và số mũ n (int) rồi in ra màn hình kết quả của phép toán an

for (i=1; i<=n; i++) luythua=luythua*a;

printf(" %d luy thua %d bang %ld", a , n, luythua); // %ld để in số lớn getch(); // Nếu dùng CodeBlock hay Dev-C thì bỏ lệnh này

Trang 3

Biên soạn: Th.s Nguyễn Anh Việt Trang 3

for (i=1; i<=n; i++) giaithua=giaithua*i;

printf("%d giai thua bang %ld ", n, giaithua );

getch(); // Nếu dùng CodeBlock hay Dev-C thì bỏ lệnh này

Trang 4

Biên soạn: Th.s Nguyễn Anh Việt Trang 4

Function là hàm do người lập trình tự tạo để thực hiện một chức năng nào đó, TD:

long long giaithua(int k) {}

là hàm dùng để tính giai thừa của một số k và trả về giá trị giai thừa của k

long long giaithua (int k) { // Giá trị trả về là số nguyên lớn long long long long gt, i; // long long để khai báo số nguyên lớn

gt=1;

for (i=1; i<=k; i++) gt=gt*i;

return gt; // Trả về giá trị gt tính được

}

Bài 02.01 – In ra giá trị giai thừa của mảng 1 chiều

Bạn hãy nhập một dãy số nguyên và tính giai thừa của từng số trong dãy đó

clrscr(); // Nếu dùng CodeBlock hay Dev-C thì bỏ lệnh này

int n, i, a[ 10 ] ; // Sử dụng tối đa 10 số trong dãy

printf("Nhap so phan tu cua day so ");

scanf("%d", &n);

for (i=1; i<=n; i++) {

printf("Nhap so phan tu thu %d ", i);

printf("Giai thua cua day so la: \n");

for (i=1; i<=n; i++) {

printf("%5d ", giaithua ( a[i] ));

}

Trang 5

Biên soạn: Th.s Nguyễn Anh Việt Trang 5

getch(); // Nếu dùng CodeBlock hay Dev-C thì bỏ lệnh này

return 0;

}

Bài 02.02 – In ra giá trị luỹ thừa 2 của các phần tử trong mảng 1 chiều

Bạn hãy nhập một dãy số nguyên và tính luỹ thừa 2 của từng số trong dãy đó

for (i=1; i<=n; i++) {

printf("Nhap so phan tu thu %d ", i);

scanf("%d", &a[i]);

}

printf("Day so da nhap la: \n");

for (i=1; i<=n; i++) {

printf("%5d ", a[i]);

}

printf("\n");

printf("Luy thua 2 cua day so la: \n");

for (i=1; i<=n; i++) {

printf("%5d ", luythua (a[i], 2 ));

}

getch(); // Nếu dùng CodeBlock hay Dev-C thì bỏ lệnh này

return 0;

}

Trang 6

Biên soạn: Th.s Nguyễn Anh Việt Trang 6

Procedure (void) cũng tương tự như Function, có thể có đối số, nhưng không giá trị trả về TD: void nhandoimang() ;

Bài 02.03 – In ra giá trị nhân đôi của các phần tử trong mảng 1 chiều

Bạn hãy nhập một dãy số nguyên và nhân đôi từng số trong dãy đó

clrscr(); // Nếu dùng CodeBlock hay Dev-C thì bỏ lệnh này

printf("Nhap so phan tu cua day so ");

scanf("%d", &n);

for (i=1; i<=n; i++) {

printf("Nhap so phan tu thu %d ", i);

scanf("%d", &a[i]);

}

printf("Day so da nhap la: \n");

for (i=1; i<=n; i++) {

printf("%5d ", a[i]);

}

printf("\n");

nhandoimang () ; // Chú ý nếu không có () thì mảng không được nhân đôi

printf("Mang da nhan voi 2: \n");

for (i=1; i<=n; i++) {

Trang 7

Biên soạn: Th.s Nguyễn Anh Việt Trang 7

Bài 02.04 – In ra giá trị nhân 4 của các phần tử trong mảng 1 chiều

Bạn hãy nhập một dãy số nguyên và nhân 4 từng số trong dãy đó Chỉ được sử dụng void nhandoimang như trong Bài 02.03 và không sửa lệnh a[i]=a[i]*2 => a[i]=a[i]*4 trong void này

(Dãy 1, 4, 7, 5, 2 => In ra 4, 16, 28, 20, 8)

Bài 02.05 – In ra số nguyên tố trong mảng 1 chiều

Bạn hãy nhập một dãy số nguyên và in ra các số nguyên tố trong dãy đó Số nguyên tố là các số chỉ chia hết cho 1 và chính nó như 2, 3, 5, 7, 11, 13, …

(Dãy 1, 4, 7, 5, 23 => In ra 7, 5, 23)

#include <stdio.h>

#include <conio.h>

#include <math.h> // Dùng để tính sqrt (căn số bậc 2)

int nguyento (int k) {

if (k<2) return 0 ; // Các số nhỏ hơn 2 không phải số nguyên tố

int i;

for (i=2; i<=int(sqrt(k)); i++) if (k%i==0) return 0 ; // Thử chia k cho

// 2 đến căn của k nếu chia hết thì không là nguyên tố

return 1 ; // không chia hết số nào thì là nguyên tố

}

int main(){

int n, i, a[10];

clrscr(); // Nếu dùng CodeBlock hay Dev-C thì bỏ lệnh này

printf("Nhap so phan tu cua day so ");

scanf("%d", &n);

for (i=1; i<=n; i++) {

printf("Nhap so phan tu thu %d ", i);

scanf("%d", &a[i]);

}

printf("Day so da nhap la: \n");

for (i=1; i<=n; i++) {

printf("%5d ", a[i]);

}

printf("\n");

printf("Cac so nguyen to trong day: \n");

for (i=1; i<=n; i++) {

if ( nguyento (a[i])== 1 ) printf("%5d ", a[i]);

}

getch(); // Nếu dùng CodeBlock hay Dev-C thì bỏ lệnh này

return 0;

}

Trang 8

Biên soạn: Th.s Nguyễn Anh Việt Trang 8

Đệ quy là các Function hay Procedure gọi lại chính nó trong bản thân của hàm hay thủ tục, TD: long long giaithua (int k ) là hàm đệ quy dùng để tính giai thừa của một số k và trả về giá trị giai thừa của k

long long giaithua (int k) {

if (k==1) return 1;

else return giaithua(k-1)*k; // Gọi lại chính hàm giaithua

}

Bài 03.01 – In ra giá trị giai thừa của mảng 1 chiều bằng đệ quy

Bạn hãy nhập một dãy số nguyên và tính giai thừa của từng số trong dãy đó

clrscr(); // Nếu dùng CodeBlock hay Dev-C thì bỏ lệnh này

printf("Nhap so phan tu cua day so ");

scanf("%d", &n);

for (i=1; i<=n; i++) {

printf("Nhap so phan tu thu %d ", i);

scanf("%d", &a[i]);

}

printf("Day so da nhap la: \n");

for (i=1; i<=n; i++) {

printf("%5d ", a[i]);

}

printf("\n");

printf("Giai thua cua day so la: \n");

for (i=1; i<=n; i++) {

Trang 9

Biên soạn: Th.s Nguyễn Anh Việt Trang 9

Bài 03.02 – In ra giá trị luỹ thừa 2 của các phần tử trong mảng 1 chiều

Bạn hãy nhập một dãy số nguyên và tính luỹ thừa 2 bằng đệ quy của từng số trong dãy đó

clrscr(); // Nếu dùng CodeBlock hay Dev-C thì bỏ lệnh này

printf("Nhap so phan tu cua day so ");

scanf("%d", &n);

for (i=1; i<=n; i++) {

printf("Nhap so phan tu thu %d ", i);

scanf("%d", &a[i]);

}

printf("Day so da nhap la: \n");

for (i=1; i<=n; i++) {

printf("%5d ", a[i]);

}

printf("\n");

printf("Luy thua 2 cua day so la: \n");

for (i=1; i<=n; i++) {

Trang 10

Biên soạn: Th.s Nguyễn Anh Việt Trang 10

Bài 03.03 – In ra giá trị nhân 3 của các phần tử trong mảng 1 chiều

Bạn hãy nhập một dãy số nguyên và nhân đôi từng số trong dãy đó

clrscr(); // Nếu dùng CodeBlock hay Dev-C thì bỏ lệnh này

printf("Nhap so phan tu cua day so ");

scanf("%d", &n);

for (i=1; i<=n; i++) {

printf("Nhap so phan tu thu %d ", i);

scanf("%d", &a[i]);

}

printf("Day so da nhap la: \n");

for (i=1; i<=n; i++) {

printf("%5d ", a[i]);

}

printf("\n");

nhanmang (3);

printf("Day so da nhan voi 3 la: \n");

for (i=1; i<=n; i++) {

Bài 03.04 – In ra giá trị nhân 7 của các phần tử trong mảng 1 chiều

Bạn hãy nhập một dãy số nguyên và nhân 7 từng số trong dãy đó

(Dãy 1, 4, 7, 5, 2 => In ra 7, 28, 49, 35, 14)

Trang 11

Biên soạn: Th.s Nguyễn Anh Việt Trang 11

Bài 03.05 – In ra số siêu nguyên tố có 4 chữ số

Bạn hãy tìm các số siêu nguyên tố có 4 chữ số Số siêu nguyên tố là các số nguyên tố và khi bỏ đi các chữ số bên phải thì nó cũng là số nguyên tố như 3137 (3137, 313, 31, 3 đều là số nguyên tố)

if (dem==0) printf("Khong co so sieu nguyen to nao");

getch(); // Nếu dùng CodeBlock hay Dev-C thì bỏ lệnh này

return 0;

}

Trang 12

Biên soạn: Th.s Nguyễn Anh Việt Trang 12

Bài 04.01 – Mảng 1 chiều

(Mảng int a [10] là dãy chứa 10 số nguyên từ a[0] đến a[9] )

Bạn hãy nhập một dãy số nguyên và tính Tổng các số trong dãy đó

#include <stdio.h>

#include <conio.h>

int main(){

clrscr(); // Nếu dùng CodeBlock hay Dev-C thì bỏ lệnh này

int n, i, tong=0 , a[10]; // Nếu không gán tong=0 sẽ tính tổng sai

printf("Nhap so phan tu cua day so ");

printf("Day so da nhap la: \n");

for (i=0; i<=n-1; i++)

printf("%5d ", a[i]);

printf("\n");

for (i=0; i<=n-1; i++)

tong=tong+a[i];

printf("Tong cua day so la: %d", tong);

getch(); // Nếu dùng CodeBlock hay Dev-C thì bỏ lệnh này

clrscr(); // Nếu dùng CodeBlock hay Dev-C thì bỏ lệnh này

int n, i, max=INT_MIN, a[10], vitri=0;

// Tìm số max, cho max=số nhỏ nhất

// Nhập dãy số

printf("Nhap so phan tu cua day so ");

scanf("%d", &n);

Trang 13

Biên soạn: Th.s Nguyễn Anh Việt Trang 13

for (i=0; i<=n-1; i++) {

printf("Nhap so phan tu thu %d ", i);

scanf("%d", &a[i]);

}

// In dãy số đã nhập

printf("Day so da nhap la: \n");

for (i=0; i<=n-1; i++)

printf("So lon nhat cua day so la: %d, tai vi tri %d", max, vitri);

getch(); // Nếu dùng CodeBlock hay Dev-C thì bỏ lệnh này

return 0;

}

Bài 04.03 – Min : Số nhỏ nhất của dãy số

(Dãy 1, 4, 7, 5, 2 có Số nhỏ nhất là 1 , nằm ở vị trí 1 )

Bạn hãy nhập một dãy số nguyên và tìm Số nhỏ nhất cùng với vị trí của nó trong dãy đó

Bài 04.04 – Max chẵn: Số chẵn lớn nhất của dãy số

clrscr(); // Nếu dùng CodeBlock hay Dev-C thì bỏ lệnh này

int n, i, max=INT_MIN, a[10], vitri=0;

int co_sochan=0;

printf("Nhap so phan tu cua day so ");

scanf("%d", &n);

Trang 14

Biên soạn: Th.s Nguyễn Anh Việt Trang 14

for (i=0; i<=n-1; i++) {

printf("Nhap so phan tu thu %d ", i);

scanf("%d", &a[i]);

if (a[i]%2==0) co_sochan=1; // Tìm xem có số chẵn nào không

}

printf("Day so da nhap la: \n");

for (i=0; i<=n-1; i++)

for (i=0; i<=n-1; i++)

if (max<a[i] && a[i]%2==0) {

Bạn hãy nhập một dãy số nguyên và tìm Tổng các số chẵn trong dãy đó

Bài 04.07 – Tìm các số chính phương (là bình phương của một số)

(Dãy 1, 4, 7, 5, 9 có các số chính phương là 1, 4, 9 )

Trang 15

Biên soạn: Th.s Nguyễn Anh Việt Trang 15

Bạn hãy nhập một dãy số nguyên và in ra các số chính phương trong dãy đó

Chú ý: Số k là số chính phương khi a[i]==pow(sqrt(a[i]),2)

for (i=0; i<=n-1; i++) {

printf("Nhap so phan tu thu %d ", i);

scanf("%d", &a[i]);

if (a[i]==pow(sqrt(a[i]),2)) co_scp=1 ;

}

printf("Day so da nhap la: \n");

for (i=0; i<=n-1; i++)

// In ra các số chính phương trong dãy số

printf("Cac so chinh phuong cua day so la:\n");

for (i=0; i<=n-1; i++)

if (a[i]==pow(sqrt(a[i]),2)) printf("%5d", a[i]);

getch(); // Nếu dùng CodeBlock hay Dev-C thì bỏ lệnh này

Trang 16

Biên soạn: Th.s Nguyễn Anh Việt Trang 16

Bài 05.01 – Mảng 2 chiều

(Mảng 2 chiều int a[10][10] là mảng chứa tối đa 10 dòng, mỗi dòng có tối đa 10 số nguyên từ a[0,0] đến a[9,9] )

a[0,0] a[0,1] a[0,2] … a[0,9]

a[1,0] a[1,1] a[1,2] … a[1,9]

a[2,0] a[2,1] a[2,2] … a[2,9]

………

a[9,0] a[9,1] a[9,2] … a[9,9]

Bạn hãy nhập một mảng số nguyên 2 chiều và tính Tổng các số trong mảng đó

#include <stdio.h>

#include <conio.h>

int main(){

clrscr(); // Nếu dùng CodeBlock hay Dev-C thì bỏ lệnh này

int m, n, i, j, a[10][10], sd, sc, tong=0;

printf("Nhap so dong cua mang 2 chieu ");

printf("Mang 2 chieu da nhap la: \n");

for (i=0; i<=sd-1; i++) {

for (j=0; j<=sc-1; j++) printf("%5d ", a[i][j]);

printf("\n");

}

for (i=0; i<=sd-1; i++)

for (j=0; j<=sc-1; j++) tong =tong+a[i][j];

printf("Tong cac so cua mang 2 chieu la: %d", tong );

getch(); // Nếu dùng CodeBlock hay Dev-C thì bỏ lệnh này

Trang 17

Biên soạn: Th.s Nguyễn Anh Việt Trang 17

Bạn hãy nhập một mảng số nguyên và tìm Số lớn nhất cùng với vị trí của nó trong mảng đó

#include <stdio.h>

#include <conio.h>

#include <limits.h>

int main(){

clrscr(); // Nếu dùng CodeBlock hay Dev-C thì bỏ lệnh này

int m, n, i, j, a[10][10], sd, sc, so_ln=INT_MIN, vitri_dong , vitri_cot ; printf("Nhap so dong cua mang 2 chieu ");

printf("Mang 2 chieu da nhap la: \n");

for (i=0; i<=sd-1; i++) {

for (j=0; j<=sc-1; j++) printf("%5d ", a[i][j]);

Trang 18

Biên soạn: Th.s Nguyễn Anh Việt Trang 18

#include <stdio.h>

#include <conio.h>

#include <limits.h>

int main(){

clrscr(); // Nếu dùng CodeBlock hay Dev-C thì bỏ lệnh này

int m, n, i, j, a[10][10], sd, sc, so_ln, vitri_cot;

printf("Nhap so dong cua mang 2 chieu ");

printf("Mang 2 chieu da nhap la: \n");

for (i=0; i<=sd-1; i++) {

for (j=0; j<=sc-1; j++) printf("%5d ", a[i][j]);

Trang 19

Biên soạn: Th.s Nguyễn Anh Việt Trang 19

Bạn hãy nhập một ma trận vuông và tìm các số trên đường chéo chính

printf("Ma tran vuong da nhap la: \n");

for (i=0; i<=sdc-1; i++) {

for (j=0; j<=sdc-1; j++) printf("%5d ", a[i][j]);

printf("\n");

}

// In đường chéo chính của ma trận vuông

printf("Duong cheo chinh cua ma tran vuong la: \n");

for (i=0; i<=sdc-1; i++) {

for (j=0; j<=sdc-1; j++)

if (i==j) printf("%5d ", a[i][j]);

else printf(" "); // 6 khoảng trắng

có các số trên đường chéo phụ là 7, 2 và 8 )

Bạn hãy nhập một ma trận vuông và tìm các số trên đường chéo phụ

Trang 20

Biên soạn: Th.s Nguyễn Anh Việt Trang 20

printf("Ma tran vuong da nhap la: \n");

for (i=0; i<=sdc-1; i++) {

for (j=0; j<=sdc-1; j++) printf("%5d ", a[i][j]);

printf("\n");

}

// In đường chéo phụ của ma trận vuông

printf("Duong cheo phu cua ma tran vuong la: \n");

for (i=0; i<=sdc-1; i++) {

for (j=0; j<=sdc-1; j++)

if (i+j==sdc-1) printf("%5d ", a[i][j]);

else printf(" "); // 6 khoảng trắng

có số lớn nhất trên đường chéo phụ là 8 )

Bạn hãy nhập một ma trận vuông và tìm số lớn nhất trên đường chéo phụ

Ngày đăng: 19/09/2017, 03:28

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w