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 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 #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 8ptr= &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 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
}
//Tran Xuan Bach - 20215528 // *****************/ return count; }
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
}
//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, 1, 9]
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
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 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 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 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 22for(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;
}