1. Viết hàm nhập mảng một chiều các số nguyên
Phải luôn luôn định trước số phần tử cần dùng cho mảng. Trong C/C++, mảng được đánh chỉ số từ 0.
Nếu là mảng các số thực chỉ việc thay
int a[]
thành float a[]
và đổi mã đặc tả của hàm scanf
trong vòng lặp thành %f
.Code C:
//Cách 1: Nhập n trong hàm nhập mảng void InputArray1(int a[], int &n) { printf("Nhập số phần tử: "); scanf("%d", &n); for(int i = 0; i < n; i++); { printf("A[%d] = ", i); scanf("%d", &a[i]); } } //Cách 2: Nhập n ngoài hàm nhập mảng void InputArray2(int a[], int n) { for(int i = 0; i < n; i++) { printf("A[%d] = ", i); scanf("%d", &a[i]); } }
2. Viết hàm xuất mảng một chiều các số nguyên
Code C:
void OutputArray(int a[], int n) { for(int i = 0; i < n; i++) printf("%d\t", a[i]); }
3. Viết hàm tìm giá trị lớn nhất trong mảng nguyên một chiều
Code C:
int MaxOfArray(int a[], int n) { int max = a[0]; for(int i = 1; i < n; i++) if(a[i]>max) max = a[i]; return max; }
4. Viết hàm tìm chỉ số của phần tử có giá trị lớn nhất trong mảng nguyên một chiều
Code C:
int IndexOfMaxOfArray(int a[], int n) { int index = 0; for(int i = 0; i < n; i++) if(a[i]>a[index]) index = i; return index; }
5. Viết hàm tìm giá trị trung bình của các phần tử chẵn trong mảng nguyên một chiều
Dùng một biến lưu tổng giá trị các phần tử chẵn và một biến đếm các phần tử chẵn, giá trị trung bình sẽ bằng tổng chia cho biến đếm.
Code C:
float AverageOfEvenOfArray(int a[], int n) { float sum = 0; int dem = 0; for(int i = 0; i < n; i++) if(a[i]%2==0) { sum += a[i]; dem++; } return sum / dem; }
6. Viết hàm tìm số nguyên tố lớn nhất trong mảng nguyên một chiều
Trả về số nguyên tố lớn nhất nếu tìm được, trả về -1 nếu không tìm được.
Code C:
int MaxPrimeOfArray(int a[], int n) { int max = -1; for(int i = 0; i < n; i++) if(IsPrime(a[i]) && a[i]>max) max = a[i]; return max; }
7. Viết hàm kiểm tra một mảng có là mảng đối xứng
Ví dụ:
a[] = {1, 2, 3, 2, 1,}
, b[] = {1, 4, 4, 1}
là mảng đối xứng, c[] = {1, 2, 3, 3, 1}
không là mảng đối xứng.Trả về 1 nếu là mảng đối xứng, trả về 0 nếu không là mảng đối xứng.
Code C:
//Cách 1 int DoiXung(int a[], int n) { for(int i = 0; i < n; i++) if(a[i] != a[n-1-i]) return 0; return 1; } //Cách 2 int DoiXung(int a[], int n) { for(int i = 0, j = n-1; i < j; i++, j--) if(a[i]!=a[j]) return 0; return 1; }
8. Viết hàm xoá một phần tử trong mảng nguyên một chiều
Code C:
void XoaPhanTu(int a[], int &n, int index) { for(int i = index; i < n-1; i++) a[i] = a[i+1]; n--; }
9. Viết hàm xoá các phần tử giống nhau trong mảng sao cho mỗi phần tử trong mảng đều có giá trị khác nhau
Code C:
void XoaGiongNhau(int a[], int &n) { for(int i = 0; i < n-1; i++) for(int j = i+1; j < n; ) { if (a[i] == a[j]) XoaPhanTu(a, n, j); else j++; //Xoá triệt để các số liền nhau rồi mới tăng j } }
Làm sao để thao tác với mảng ban đầu (phần tử và thứ tự phần tử) như lúc ban đầu sau khi thao tác với một hàm. Vì sau khi thao tác với hàm thì mảng sẽ bị thay đổi, ví dụ như xóa phần tử. Mong bạn giúp đỡ. :)
Trả lờiXóaNếu bạn truyền tên mảng vào hàm để thao tác thì coi như bạn đã truyền con trỏ đến mảng nên sao khi thao tác chắc chắn sẽ bị thay đổi.
XóaCách đơn giản là bạn có thể tạo mảng copy trong hàm và thao tác với nó.
Thân mến.
A cho e hỏi luôn tiện với ạ?
Trả lờiXóaTại sao đối số của hàm khai báo là: ví dụ:
void doixung(int a[],int n)
int *p
doixung(p,n) => ok chạy
a[?] không có chỉ số '?' .Tại sao lại có thể không cần chỉ số trong đó?
Với trường hợp a[50] chẳng hạn ở trong hàm khi khai báo.
void doixung(int a[50],int n)
int *p;
Trong trường hợp này khi gọi hàm lại không thể truyền được tham số dạng con trỏ ?
doixung(p,n) => báo lỗi
a[] trong void doixung(int a[], int n) là tham số hình thức. Vì vậy, nó phải tồn tại trước 1 mảng a[] bên ngoài rồi khi bạn truyền vào mới có thể chạy được.
Xóaa[50] là một mảng tĩnh được cấp phát vùng nhớ nên khi bạn truyền vào có thể chạy được.
p là một con trỏ chưa trỏ đến đâu cả, vì vậy phải cấp phát vùng nhớ cho p.
int *p = new int[n]; //cấp phát vùng nhớ
doixung(p,n); //OK, chạy được
Mấy bài tập này hữu ích quá . Tks ad nhiều nhé !
Trả lờiXóaAd thêm mấy bài chèn, xóa đầu, xóa đuôi, gộp mảng vào cho đủ bộ
Trả lờiXóaviết hàm tăng 1 số 1 đơn vị thì viết sao ạ
Trả lờiXóafor(int i=0;i<n;i++)
Xóaa[i]+=1;
Này chạy trên C++ hả ?
Trả lờiXóaEm sai chỗ nào ạ : :((((
Trả lờiXóa/* Nhap và hien thi mot day so nguyen gom n phan tu
tim va in ra so nguyen to lon nat co trong mang */
#include
#include
#include
#include
void Nhap (int a[], int n)
{
for(int i = 0; i < n; i++)
{
printf("a[%d] = ", i);
scanf("%d", &a[i]);
}
}
void Hienthi(int a[], int n)
{
int i;
printf("cac PT trong mang\n");
for(i=0;i1;
}
}
void SonguyentoMax (int a[], int n)
{
int i;
int max = -1 ;
printf(" So nguyen to lon nhat trong mang la : ");
for ( i =0 ; i < n ; i ++)
{
if(KTNT(a[i]) && a[i] > max)
{
max = a[i];
}
printf("%d\t", a[i]);
}
int main()
{
int a[20];
int n;
int i;
int max;
printf("Nhap so phan tu: ");
scanf("%d", &n);
Nhap(a,n);
Hienthi(a,n);
SonguyentoMax(a,n);
return 0;
}
Bạn sai ở chỗ "printf("%d\t", a[i]);" lệnh này dùng để in các phần tử trong mảng (do nằm trong vòng lặp), thiếu lệnh in ra giá trị max nên không thấy được kết quả.
Xóakhong đúng với yêu cầu
Trả lờiXóadcc
Trả lờiXóa