1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

22 0 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

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 1

TRƯỜ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 2

Bà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 4

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ỏ

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

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};

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 7

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

Ả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 #include <stdio.h>

int main() { int x, y, z; int *ptr;

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 8

ptr= &x; *ptr+= 100; ptr= &y; *ptr+= 100; ptr= &z; *ptr+= 100;

//Tran Xuan Bach - 20215528 // *****************/

printf("Once again, here are the values of x, y, and z:\n"); printf("%d %d %d\n", x, y, z);

return 0; }

Trang 9

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

Ả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

}

//Tran Xuan Bach - 20215528 // *****************/ return count; }

Trang 10

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

}

//Tran Xuan Bach - 20215528

Trang 11

// *****************/ return max; }

Trang 12

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ỏ Ví dụ mảng đầu vào là [9, 1, 4, 5, 7] thì kết quả là [7, 5, 4, 1, 9]

Trang 13

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

Ả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

int *a; int n, tmp; int main(){

printf("Enter the number of elements: "); scanf("%d", &n);

//#Allocate memory // /*****************

a = new int[n]; //cap phat bo nho dong cho mang a voi n phan tu kieu int// *****************/

for(int i = 0; i < n; i++) scanf("%d", a + i); printf("The input array is: \n"); for(int i = 0; i < n; i++) printf("%d ", *(a + i)); printf("\n"); //#Sort array // /*****************

// 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; for(int j= i; j< n ; j++) if(*min>*(a +j)) min= a +j; int temp;

temp=*(a+i); *(a+i)=*min; *min=temp;

Trang 15

}

//Tran Xuan Bach 20215528 // *****************/ printf("The sorted array is: \n"); for(int i = 0; i < n; i++) printf("%d ", *(a + i)); printf("\n"); delete [] a; return 0; }

Trang 16

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 đó

Ảnh 14: Mã nguồn bài 1.8

Trang 18

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ụ

Ả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 printf("%d ",arr[k]);

printf("\n"); } }

//Tran Xuan Bach 20215528 int main(){

int arr[arrSize]={1,3,4,2}; // arrsize = 4 printf("Day da cho la: ");

for(int i = 0; i < arrSize; i++) printf("%d ",arr[i]); printf("\n");

printf("Day con cua day da cho la: \n"); printChildArray(arr,arrSize); }

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++) for(int j=0;j<n;j++){

printf("%c[%d][%d] = ",name,i,j); scanf("%d",&mt[i][j]); }

}

void output(int **mt, int n){ //# Print all elements of the matrix for (int i=0;i<n;i++){

Trang 22

for(int j=0;j<n;j++) printf("%5d ",mt[i][j]); printf("\n"); } }

int** 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 j=0;j<n;j++){ result[i][j]=0; for(int k=0;k<n;k++)

result[i][j]+= A[i][k]*B[k][j]; //thuc hien phep nhan ma tran }

return result; // tra lai con tro de co the giai phong bo nho , tranh memory leak

}

void free_mem(int **mt, int n){ //# Free memory for(int i=0; i<n; i++)

delete [] mt[i]; // giai phong cac hang delete [] mt; //giai phong mt }

//Tran Xuan Bach 20215528 int main(){

int n, **A,**B; //khai bao n, matran A,B printf("Nhap n = ");

free_mem(A, n); //Giai phong bo nho free_mem(B, n); //

free_mem(C, n); // return 0;

}

Ngày đăng: 11/06/2024, 17:41

Xem thêm:

w