Tải bản đầy đủ (.pdf) (22 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (5.02 MB, 22 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>TRƯỜNG CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG </b>

<b>BÁO CÁO </b>

<b>BÀI THỰC HÀNH SỐ 1 </b>

<b>HỌC PHẦN: THỰC HÀNH KỸ THUẬT LẬP TRÌNH</b>

Giảng viên hướng dẫn: Lê Thị Hoa

Mssv: 20215528

<b>Hà Nội , năm 2023</b>

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

<b>Bài thực hành số 1 – Tuần 7 </b>

Mục lục nội dung

<b>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ỏ </b>

để 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>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 </b>

định nghĩa sau đây: int a[7]= {13, -355, 235, 47, 67, 943, 1222}; ... 6

<b>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 </b>

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

của mảng, trả về số lượng số chẵn trong mảng??? ... 9

<b>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ố </b>

double. Nếu mảng rỗng hãy trả về NULL. ... 10

<b>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ỉ </b>

số và dùng con trỏ. ... 12

<b>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 </b>

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>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 </b>

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>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ụ </b>

dãy 1 3 4 2 có các dãy con sau: ... 21

<b>Bài 1.10 Viết chương trình nhập vào 2 ma trận vng cùng kích thước n*n, </b>

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

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

<b>Bài 1.1. Viết một </b>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

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="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; }

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

<b>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 </b>

định nghĩa sau đây: int a[7]= {13, -355, 235, 47, 67, 943, 1222};

<b>Lưu ý: </b>

Để in địa chỉ con trỏ các bạn sử dụng ký tự định dạng <b>%p</b>

Để lấy địa chỉ của một biến ta có thể dùng phép toán <b>&</b>

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

}

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

<b>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 </b>

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

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="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; }

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

<b>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 </b>

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

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

<b>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ố </b>

double. Nếu mảng rỗng hãy trả về NULL.

}

//Tran Xuan Bach - 20215528

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

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

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

<b>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ỉ </b>

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].

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

<b>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 </b>

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

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="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;

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="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; }

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

<b>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 </b>

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

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

<b>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ụ </b>

Ảnh 17: Mã nguồn bài 1.9

Ảnh 18: Kết quả bài 1.9

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="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); }

</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">

Ảnh 21: Mã nguồn bài 1.10 ( ếp)

Ảnh 22: Mã nguồn bài 1.10 ( ếp)

</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="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++){

</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="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;

}

</div>

×