Viết một chương trình C nhập vào 3 số nguyên.. Viết hàm trả về con trỏ trỏ tới giá trị lớn nhất của một mảng các số double.. Viết hàm đảo ngược một mảng các số nguyên theo hai cách: dùng
Trang 1TRƯỜNG CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
BÁO CÁO BÀI THỰC HÀNH SỐ 1 HỌC PHẦN: THỰC HÀNH KỸ THUẬT LẬP TRÌNH
Giảng viên hướng dẫn: Lê Thị Hoa
Mssv: 20215528
Hà Nội , năm 2023
Trang 2Bài thực hành số 1 – Tuần 7
Mục lục nội dung
Bài 1.1 Viết một chương trình C nhập vào 3 số nguyên Thiết lập một con trỏ
để lần lượt trỏ tới từng số nguyên và hiển thị kết quả giá trị tham chiếu ngược của con trỏ 4
Bài 1.2 Viết chương trình in ra địa chỉ của 5 phần tử đầu tiên trong mảng được
định nghĩa sau đây: int a[7]= {13, -355, 235, 47, 67, 943, 1222}; 6
Bài 1.3 Viết chương trình nhập giá trị cho 3 biến số nguyên x, y, z kiểu int Sau
đó sử dụng duy nhất một con trỏ để cộng giá trị của mỗi biến thêm 100 7
Bài 1.4 Viết hàm countEven(int*, int) nhận một mảng số nguyên và kích thước
của mảng, trả về số lượng số chẵn trong mảng??? 9
Bài 1.5 Viết hàm trả về con trỏ trỏ tới giá trị lớn nhất của một mảng các số
double Nếu mảng rỗng hãy trả về NULL 10
Bài 1.6 Viết hàm đảo ngược một mảng các số nguyên theo hai cách: dùng chỉ
số và dùng con trỏ 12
Bài 1.7 Viết chương trình nhập vào một mảng các số nguyên với số lượng các
phần tử nhập từ bàn phím Sau đó sắp xếp mảng theo thứ tự tăng dần Hiển thị danh sách mảng trước và sau khi sắp xếp 14
Bài 1.8 Viết chương trình nhập vào một ma trận 2 chiều kích thước m*n với m
và n nhập từ bàn phím Sau đó đưa ra tổng các phần tử chẵn của ma trận đó 17
Bài 1.9 Viết chương trình in ra tất cả các dãy con của một dãy cho trước Ví dụ
dãy 1 3 4 2 có các dãy con sau: 21
Bài 1.10 Viết chương trình nhập vào 2 ma trận vuông cùng kích thước n*n,
trong đó n nhập từ bàn phím Sau đó tính tổng và tích của hai ma trận đó và đưa kết quả ra màn hình 23
Trang 3Mục lục hình ảnh
Ảnh 1: Mã nguồn bài 1.1 4
Ảnh 2: Kết quả bài 1.1 4
Ảnh 3: Mã nguồn và kết quả bài 1.2 6
Ảnh 4: Mã nguồn bài 1.3 7
Ảnh 5: Kết quả bài 1.3 7
Ảnh 6: Mã Nguồn Bài 1.4 9
Ảnh 7: Kêt quả bài 1.4 9
Ảnh 8: Mã nguồn bài 1.5 10
Ảnh 9: Kết quả bài 1.5 10
Ảnh 10: Mã nguồn bài 1.6 12
Ảnh 11: Kết quả bài 1.6 12
Ảnh 12: Mã nguồn bài 1.7 14
Ảnh 13: Kết quả bài 1.7 15
Ảnh 14: Mã nguồn bài 1.8 17
Ảnh 15: Mã nguồn bài 1.8 ( ếp) 18
Ảnh 16: Kết quả bài 1.8 18
Ảnh 17: Mã nguồn bài 1.9 21
Ảnh 18: Kết quả bài 1.9 21
Ảnh 19: Mã nguồn bài 1.10 23
Ảnh 20: Mã nguồn bài 1.10 ( ếp) 23
Ảnh 21: Mã nguồn bài 1.10 ( ếp) 24
Ảnh 22: Mã nguồn bài 1.10 ( ếp) 24
Ảnh 23: Kết quả bài 1.10 25
Trang 4Bài 1.1 Viết một chương trình C nhập vào 3 số nguyên Thiết lập một con trỏ
để lần lượt trỏ tới từng số nguyên và hiển thị kết quả giá trị tham chiếu ngược của con trỏ
Ảnh 1: Mã nguồn bài 1.1
Ảnh 2: Kết quả bài 1.1
Trang 5//Bai 1.1 Viet mot chuong trinh C nhap vao 3 so nguyen Thiet lap mot con tro de lan luot tro toi tung so nguyen va hien thi ket qua gia tri tham chieu nguoc cua con tro //
//Luu y: Phep toan & tra ve dia chi cua bien
# include <stdio.h>
int main(){
int x, y, z;
int* ptr;
printf("Enter three integers: ");
scanf("%d %d %d", &x, &y, &z);
printf("\nThe three integers are:\n");
ptr = &x; // gan dia chi cua bien x cho con tro ptr
printf("x = %d\n", *ptr);
//*****************
int* ptrY,*ptrZ; // khai bao 2 con tro
ptrY= &y; ptrZ= &z; // gan dia chi bien y va z lan luot cho con tro tuong ung printf("y = %d\nz = %d\n",*ptrY,*ptrZ);
//Tran Xuan Bach - 20215528
//*****************/
return 0;
}
Trang 6Bài 1.2 Viết chương trình in ra địa chỉ của 5 phần tử đầu tiên trong mảng được
định nghĩa sau đây: int a[7]= {13, -355, 235, 47, 67, 943, 1222};
Lưu ý:
Để in địa chỉ con trỏ các bạn sử dụng ký tự định dạng %p
Để lấy địa chỉ của một biến ta có thể dùng phép toán &
Ảnh 3: Mã nguồn và kết quả bài 1.2
//bai 1.2 Viet chuong trinh in ra dia chi cua 5 phan tu dau tien trong mang duoc dinh
nghia sau day:
//int a[7]= {13, -355, 235, 47, 67, 943, 1222};
#include <stdio.h>
int main(){
int a[7]= {13, -355, 235, 47, 67, 943, 1222};
printf("address of first five elements in memory.\n");
for (int i=0; i<5;i++) printf("&a[%d] = %p\n",i,&a[i]); //in ra dia chi cua phan
tu tuong ung
//Tran Xuan Bach 20215528
return 0;
}
Trang 7Bài 1.3 Viết chương trình yêu cầu nhập giá trị cho 3 biến số nguyên x, y, z kiểu
int Sau đó sử dụng duy nhất một con trỏ để cộng giá trị của mỗi biến thêm 100
Ảnh 4: Mã nguồn bài 1.3
Ảnh 5: Kết quả bài 1.3
//Bài 1.3 Viết chương trình yêu cầu nhập giá trị cho 3 biến số nguyên x, y, z kiểu int
Sau đó sử dụng duy nhất một con trỏ để cộng giá trị của mỗi biến thêm 100
scanf("%d %d %d", &x, &y, &z);
printf("Here are the values of x, y, and z:\n");
printf("%d %d %d\n", x, y, z);
// /*****************
// gan lan luot dia chi cua bien x, y, z cho con tro ptr sau do cong 100 cho cac
tham chieu nguoc tuong ung
Trang 9Bài 1.4 Viết hàm countEven(int*, int) nhận một mảng số nguyên và kích thước
của mảng, trả về số lượng số chẵn trong mảng???
Ảnh 6: Mã Nguồn Bài 1.4
Ảnh 7: Kêt quả bài 1.4
/ / Bài 1.4 Vi ế t hàm countEven(int*, int) nh ậ n m ộ t m ả ng s ố nguyên và kích thư ớc c ủa m ả ng, trả về số lượng số chẵn trong mảng???
int counteven(int* arr, int size){
int count = 0;
// /*****************
for(int i=0;i<size;i++){ //vong lap duyet qua cac phan tu trong mang
if(!(*(arr+i)%2)) count++; // Neu phan tu dang duyet chia het cho hai thi
tang bien dem 1 dv
Trang 10Bài 1.5 Viết hàm trả về con trỏ trỏ tới giá trị lớn nhất của một mảng các số
double Nếu mảng rỗng hãy trả về NULL
for(int i= 0; i< size; i++){ //vong lap duyet cac phan tu cua a
if(*(a+i)>*max) max=a+i; //neu phan tu dang duyet lon hon max thi
gan gia tri phan tu hien tai cho max
}
//Tran Xuan Bach - 20215528
Trang 11// *****************/
return max;
}
Trang 12Bài 1.6 Viết hàm đảo ngược một mảng các số nguyên theo hai cách: dùng chỉ
số và dùng con trỏ Ví dụ mảng đầu vào là [9, 1, 4, 5, 7] thì kết quả là [7, 5, 4,
Trang 13Bài 1.7 Viết chương trình nhập vào một mảng các số nguyên với số lượng các
phần tử nhập từ bàn phím Sau đó sắp xếp mảng theo thứ tự tăng dần Hiển thị danh sách mảng trước và sau khi sắp xếp
Yêu cầu chỉ sử dụng con trỏ để truy cập mảng, không truy cập theo index mảng
Ảnh 12: Mã nguồn bài 1.7
Trang 14Ảnh 13: Kết quả bài 1.7
//Bài 1.7 Viết chương trình nhập vào một mảng các số nguyên với
số lượng các phần tử nhập từ bàn phím Sau đó sắp xếp mảng theo
thứ tự tăng dần Hiển thị danh sách mảng trước và sau khi sắp xếp
//
//Yêu cầu chỉ sử dụng con trỏ để truy cập mảng, không truy cập theo index mảng
#include <stdio.h>
#include <new> // them thu vien <new> de su dung ham new[] va delete[] trong
viec cap phat va xoa bo nho dong cho mang
// selection sort : xet tung vi tri cua mang va xep phan tu be nhat trong
cac phan tu con lai vao vi tri dang xet
for(int i=0 ; i< n ; i++){
int *min= a +i;
Trang 16Bài 1.8 Viết chương trình nhập vào một ma trận 2 chiều kích thước m*n với m
và n nhập từ bàn phím Sau đó đưa ra tổng các phần tử chẵn của ma trận đó
Ảnh 14: Mã nguồn bài 1.8
Trang 17Ảnh 15: Mã nguồn bài 1.8 ( ếp)
Ảnh 16: Kết quả bài 1.8
//Bai 1.8 Viet chuong trinh nhap vao mot ma tran 2 chieu kich thuoc m*n voi m va n nhap
tu ban phim Sau do dua ra tong cac phan tu chan cua ma tran do
#include <stdio.h>
#include <new> // them thu vien <new> de dung ham cap bo nho dong
void allocate_mem(int ***mt, int m, int n){
//#Allocate memory for the matrix
// /*****************
Trang 18Bài 1.9 Viết chương trình in ra tất cả các dãy con của một dãy cho trước Ví dụ
Ảnh 17: Mã nguồn bài 1.9
Ảnh 18: Kết quả bài 1.9
Trang 19//Bai 1.9 Viet chuong trinh in ra tat ca cac day con cua mot day cho truoc Vi du day 1
3 4 2 co cac day con sau:
#include <stdio.h>
#define arrSize 4 //
void printChildArray(int arr[],int size){
for(int i = 0; i < size; i++) // vong lap voi i la phan tu dau cua day con for(int j = i; j < size; j++){ // vong lap voi j la phan tu cuoi cua day con
for(int k = i; k <= j ; k++) // vong lap in day con i -> j
int arr[arrSize]={1,3,4,2}; // arrsize = 4
printf("Day da cho la: ");
for(int i = 0; i < arrSize; i++)
Trang 20Ảnh 21: Mã nguồn bài 1.10 ( ếp)
Ảnh 22: Mã nguồn bài 1.10 ( ếp)
Trang 21Ảnh 23: Kết quả bài 1.10
//Bai 1.10 Viet chuong trinh nhap vao 2 ma tran vuong cung kich thuoc n*n, trong do n
nhap tu ban phim Sau do tinh tong va tich cua hai ma tran do va dua ket qua ra man
hinh
//Yeu cau su dung cap phat dong de cap phat bo nho cho cac ma tran
#include <stdio.h>
#include <new> // them thu vien <new> de dung ham cap bo nho dong
void allocate_mem(int ***mt, int n){
//#Allocate memory for the matrix
*mt = new int*[n]; // cap phat bo nho cho mang mt chua n con tro cua con
tro
for (int i=0; i < n; i++)
(*mt)[i] = new int[n]; // cap phat bo nho cho moi con tro n[i] chua n so
nguyen
}
void input(int **mt, int n,char name){
//#Input elements of the matrix
//nhap cac phan tu cua mang
for (int i=0;i<n;i++)
void output(int **mt, int n){
//# Print all elements of the matrix
for (int i=0;i<n;i++){
Trang 22int** addMatrix(int **A,int **B, int n){ // ham cong ma tran
int **result; // tao ma tran moi chua ket qua
allocate_mem(&result, n); // cap phat bo nho
for (int i=0;i<n;i++)
for(int j=0;j<n;j++)
result[i][j]= A[i][j]+B[i][j]; // thuc hien phep cong ma tran
return result; // tra lai con tro de co the giai phong bo nho , tranh memory leak
}
int** timesMatrix(int **A,int **B, int n){ // ham nhan ma tran
int **result; // tao ma tran moi chua ket qua
allocate_mem(&result, n); // cap phat bo nho
for (int i=0;i<n;i++)
for(int i=0; i<n; i++)
delete [] mt[i]; // giai phong cac hang
delete [] mt; //giai phong mt