C bài tập gán giá trị cho mảng 1 chiều năm 2024

− Mảng (array) một chiều là một cấu trúc dữ liệu bao gồm một dãy các phần tử có cùng cấu trúc được lưu trữ liên tiếp trong bộ nhớ. − Mảng (array) là một tập hợp các biến có cùng kiểu và cùng tên. − Việc truy xuất đến một phần tử trong mảng được thực hiện thông qua một biến chỉ số (index).

01 HÌNH ẢNH MẢNG MỘT CHIỀU

01 CHỈ SỐ CÁC PHẦN TỬ TRONG MẢNG MỘT CHIỀU

0 1 2 3 4 5

01 KHAI BÁO MẢNG MỘT CHIỀU

− Để khai báo biến có kiểu là mảng ta khai báo sau: 00001. <KDL> <Tênbiến>[<hằngsố>];

− Trong đó: + KDL: là KDL của 1 phần tử trong mảng. + Hằng số: là 1 số nguyên dương chỉ số lượng phần tử tối đa có thể có trên một chiều trong mảng. − Ví dụ 01: 00002. int a[100];

− Trong ví dụ trên ta có các thông tin: + Tên biến mảng a. + Số phần tử tối đa của mảng a là 100. + Kiểu dữ liệu của các phần tử trong mảng là int. + Kích thước của biến a là 400 byte (do biến kiểu int chiếm 4 byte, điều này còn tùy thuộc vào môi trường). − Ví dụ 02:

  1. float b[50];

− Trong ví dụ trên ta có các thông tin:

  • Tên biến mảng b.
  • Số phần tử tối đa của mảng b là 50.
  • Kiểu dữ liệu của các phần tử trong mảng là float.

01 KỸ THUẬT NHẬP MẢNG

01.05 Nhập mảng một chiều từ bàn phím

Bài cơ sở 001. Định nghĩa hàm nhập mảng một chiều các số nguyên.

− Khai báo hàm.

  1. void Nhap(int [],int &);

− Nhìn khai báo hàm trên và trả lời các câu hỏi + Tên hàm là gì? + Kiểu dữ liệu trả về? + Mấy tham số đầu vào? + Tham số thứ nhất có kiểu dữ liệu là gì? + Tham số thứ hai có kiểu dữ liệu là gì? + Loại tham số thứ nhất là gì? Tại sao? + Loại tham số thứ hai là gì? Tại sao? − Các trả lời + Tên hàm? - Tên hàm là Nhap. + Kiểu dữ liệu trả về? - Không có. + Mấy tham số đầu vào? - Hai tham số đầu vào. + Tham số thứ nhất có kiểu dữ liệu là gì? - Tham số thứ nhất là mảng một chiều các số nguyên, + Tham số thứ hai có kiểu dữ liệu là gì? - Tham số thứ hai có kiểu dữ liệu là số nguyên. + Loại tham số thứ nhất là gì? Tại sao? - Tham số thứ nhất là tham biến. - Trước khi gọi hàm nhập ta chưa có mảng một chiều các số nguyên, sau khi gọi hàm nhập xong ta đã có mảng, như vậy tham số này phải được thiết kế là tham biến. - Hơn nữa trong C/C++ hàm nhận tham số đầu vào là mảng (một chiều, hai chiều, ba chiều,...) thì tham số đó là tham biến. + Loại tham số thứ hai là gì? Tại sao?

  1. void Nhap(int a[],int &n)
  2. {
  3. cout << “Nhap n: ";
  4. cin >> n;
  5. srand(time(NULL));
  6. for (int i = 0; i < n; i++)
  7. a[i] = rand()%(200+1) - 100;
  8. }

Bài cơ sở 004. Định nghĩa hàm tạo ngẫu nhiên mảng một chiều các số thực.

− Khai báo hàm.

  1. void Nhap(float [],int &);

− Định nghĩa hàm. 00036. void Nhap(float a[],int &n) 00037. { 00038. cout << “Nhap n: "; 00039. cin >> n; 00040. srand(time(NULL)); 00041. for (int i = 0; i < n; i++) 00042. a[i] = -100 + 00043. (rand()/(RAND_MAX/(100-(-100)))); 00044. }

01.05 Nhập mảng một chiều từ tập tin

Bài cơ sở 005. Định nghĩa hàm nhập mảng một chiều các số nguyên từ file.

− Khai báo hàm.

  1. void Nhap(int [], int &, string);

− Định nghĩa hàm.

  1. void Nhap(int a[], int &n, string filename)
  2. {
  3. ifstream fi(filename);
  4. fi >> n;
  5. for(int i=0; i<=n-1; i++)
  6. {
  7. fi >> a[i];
  8. }
  9. }

Bài cơ sở 006. Định nghĩa hàm nhập mảng một chiều các số thực từ file.

− Khai báo hàm. 00055. void Nhap(float [], int &, string);

− Định nghĩa hàm.

  1. void Nhap(float a[], int &n, string filename)
  2. {
  3. ifstream fi(filename);
  4. fi >> n;
  5. for(int i=0; i<=n-1; i++)
  6. {
  7. fi >> a[i];
  8. }
  9. }

01 KỸ THUẬT XUẤT MẢNG

01.06 Xuất mảng một chiều ra màn hình.........................................

Bài cơ sở 007. Định nghĩa hàm xuất mảng một chiều các số nguyên ra màn hình.

− Khai báo hàm. 00065. void Xuat(int [],int);

− Nhìn khai báo hàm trên và trả lời các câu hỏi + Tên hàm là gì? + Kiểu dữ liệu trả về? + Mấy tham số đầu vào? + Tham số thứ nhất có kiểu dữ liệu là gì? + Tham số thứ hai có kiểu dữ liệu là gì? + Loại tham số thứ nhất là gì? Tại sao? + Loại tham số thứ hai là gì? Tại sao? − Các trả lời + Tên hàm? - Tên hàm là Xuat. + Kiểu dữ liệu trả về? - Không có. + Mấy tham số đầu vào? - Hai tham số đầu vào. + Tham số thứ nhất có kiểu dữ liệu là gì?

01.06 Xuất mảng một chiều ra tập tin

Bài cơ sở 009. Định nghĩa hàm xuất mảng một chiều các số nguyên ra tập tin.

− Khai báo hàm. 00077. void Xuat(int [], int, string);

− Định nghĩa hàm.

  1. void Xuat(int a[], int n, string filename)
  2. {
  3. ofstream fo(filename);
  4. fo<<n<<endl;
  5. for(int i=0; i<=n-1; i++)
  6. fo << setw(8) << a[i];
  7. }

Bài cơ sở 010. Định nghĩa hàm xuất mảng một chiều các số thực ra tập tin.

− Khai báo hàm. 00086. void Xuat(float [], int, string);

− Định nghĩa hàm. 00087. void Xuat(float a[], int n, string filename) 00088. { 00089. ofstream fo(filename); 00090. 00091. fo << n << endl; 00092. for(int i=0; i<=n-1; i++) 00093. fo<<setw(8)<<setprecision(5)<<a[i]; 00094. }

01 CÁC HÀM CƠ BẢN THƯỜNG SỬ DỤNG

01.07 Hoán vị

Bài cơ sở 011. Định nghĩa hàm hoán vị giá trị của hai biến số nguyên.

− Khai báo hàm. 00095. void HoanVi(int &,int &);

− Định nghĩa hàm. 00096. void HoanVi(int &a,int &b) 00097. { 00098. int temp = a; 00099. a = b; 00100. b = temp; 00101. }

− Cách 02: Khai báo hàm. 00102. void HoanVi(int *,int *);

− Cách 02: Định nghĩa hàm. 00103. void HoanVi(int *a,int *b) 00104. { 00105. int temp = *a; 00106. *a = *b; 00107. *b = temp; 00108. }

− Lưu ý: Từ đây về sau chúng ta không sử dụng cách 02 trong lập trình.

Bài cơ sở 012. Định nghĩa hàm hoán vị giá trị của hai biến số thực.

− Khai báo hàm.

  1. void HoanVi(float &, float &);

− Định nghĩa hàm.

  1. void HoanVi(float &a, float &b)
  2. {
  3. float temp = a;
  4. a = b;
  5. b = temp;
  6. }

01.07 Kiểm tra nguyên tố

Bài cơ sở 013. Định nghĩa hàm kiểm tra một số nguyên 𝑘 có phải số nguyên tố hay không?

− Khai báo hàm.

  1. bool ktNguyenTo(int);

− Cách 01: Định nghĩa hàm.

  1. bool ktNguyenTo(int k)
  2. {

00148. {

  1. bool flag = false;
  2. for(int i=0; i<=k;i++)
  3. if(i*i==k)
  4. flag = true;
  5. return flag;
  6. }

01.07 Kiểm tra hoàn thiện

Bài cơ sở 015. Định nghĩa hàm kiểm tra một số nguyên 𝑘 có phải là số hoàn thiện hay không?

− Khai báo hàm. 00155. bool ktHoanThien(int);

− Cách 01: Định nghĩa hàm. 00156. bool ktHoanThien(int k) 00157. { 00158. int s = 0; 00159. for(int i=1; i<k; i++) 00160. if(k%i==0) 00161. s = s + i; 00162. if(s==k) 00163. return true; 00164. return false; 00165. }

− Cách 02: Định nghĩa hàm. 00166. bool ktHoanThien(int k) 00167. { 00168. int s = 0; 00169. for(int i=1; i<k; i++) 00170. if(k%i==0) 00171. s = s + i; 00172. return (s==k); 00173. }

− Cách 03: Định nghĩa hàm. 00174. bool ktHoanThien(int k) 00175. { 00176. int s = 0; 00177. for(int i=1;i<=k/2;i++) 00178. if(k%i==0)

  1. s = s + i;
  2. return (s==k);
  3. }

01.07 Kiểm tra đối xứng

Bài cơ sở 016. Định nghĩa hàm kiểm tra một số nguyên 𝑘 có đối xứng hay không?

− Khai báo hàm. 00182. bool ktDoiXung(int);

− Cách 01: Định nghĩa hàm. 00183. bool ktDoiXung(int k) 00184. { 00185. k = abs(k); 00186. int dn = 0; 00187. for(int t=k; t!=0; t=t/10) 00188. { 00189. int dv = t%10; 00190. dn = dn * 10 + dv; 00191. } 00192. if(dn==k) 00193. return true; 00194. return false; 00195. }

− Cách 02: Định nghĩa hàm.

  1. bool ktDoiXung(int k)
  2. {
  3. k = abs(k);
  4. int dn = 0;
  5. for(int t=k; t!=0; t=t/10)
  6. {
  7. int dv = t%10;
  8. dn = dn * 10 + dv;
  9. }
  10. return (dn==k);
  11. }

− Cách 03: Định nghĩa hàm. 00207. bool ktDoiXung(int k) 00208. { 00209. k = abs(k);

  1. for(int t=k=abs(k);t!=0;t=t/10)
  2. if((t%10)%2==0)
  3. flag = false;
  4. return flag;
  5. }

− Cách 03: Định nghĩa hàm. 00246. bool ktToanLe(int k) 00247. { 00248. bool flag = true; 00249. for(int t=k=abs(k); t!=0; t=t/10) 00250. if(t%2==0) 00251. flag = false; 00252. return flag; 00253. }

Bài cơ sở 018. Định nghĩa hàm kiểm tra một số nguyên 𝑘 có toàn chữ số chẵn hay không?

− Khai báo hàm.

  1. bool ktToanChan(int);

− Cách 01: Định nghĩa hàm. 00255. bool ktToanChan(int k) 00256. { 00257. bool flag = true; 00258. for(int t=k=abs(k); t!=0; t=t/10) 00259. { 00260. int dv = t%10; 00261. if(dv%2!=0) 00262. flag = false; 00263. } 00264. return flag; 00265. }

− Cách 02: Định nghĩa hàm. 00266. bool ktToanChan(int k) 00267. { 00268. bool flag = true; 00269. for(int t=k=abs(k); t!=0; t=t/10) 00270. if((t%10)%2!=0) 00271. flag = false; 00272. return flag; 00273. }

− Cách 02: Định nghĩa hàm.

  1. bool ktToanLe(int k)
  2. {
  3. bool flag = true;
  4. for(int t=k=abs(k); t!=0; t=t/10)
  5. if(t%2!=0)
  6. flag = false;
  7. return flag;
  8. }

01.07 Kiểm tra số nguyên có dạng 2m, 3m, 5m

Bài cơ sở 019. Định nghĩa hàm kiểm tra số nguyên 𝑘 có dạng 2 𝑚 (mN và m ≥ 0) hay không?

− Khai báo hàm.

  1. bool ktDang2m(int);

− Cách 01: Định nghĩa hàm. 00283. bool ktDang2m(int k) 00284. { 00285. if(k<1) 00286. return false; 00287. bool flag = true; 00288. for(int t=k;t>1;t=t/2) 00289. { 00290. int du = t%2; 00291. if(du!=0) 00292. flag = false; 00293. } 00294. return flag; 00295. }

− Cách 02: Định nghĩa hàm.

  1. bool ktDang2m(int k)
  2. {
  3. if(k<1)
  4. return false;
  5. bool flag = true;
  6. for(int t=k;t>1;t=t/2)
  7. if(t%2!=0)
  8. flag = false;
  9. return flag;
  10. }

− Cách 01: Định nghĩa hàm. 00329. int ChuSoDau(int k) 00330. { 00331. int dt = abs(k); 00332. while(dt>=10) 00333. dt = dt / 10; 00334. return dt; 00335. }

− Cách 02: Định nghĩa hàm. 00336. int ChuSoDau(int k) 00337. { 00338. for(int dt = abs(k);dt>=10;dt = dt/10); 00339. return dt; 00340. }

01.07 Tìm chữ số đầu tiên của một số nguyên

01.07 Tìm giá trị đảo ngược của một số nguyên

𝑘?

− Khai báo hàm.

  1. int DaoNguoc(int);

− Định nghĩa hàm (cách 01) 00342. int DaoNguoc(int k) 00343. { 00344. int dn = 0; 00345. for(int t=k;t!=0;t=t/10) 00346. { 00347. int dv = t%10; 00348. dn = dn * 10 + dv; 00349. } 00350. return dn; 00351. }

− Hàm trên đúng cho các trường hợp: + k là số dương + k là số âm + k bằng không − Cách 02: Gọn gàng, súc tích, cải tiến từ cách trên.. 00352. int DaoNguoc(int k) 00353. { 00354. int dn = 0;

  1. for(int t=k;t!=0;t=t/10)
  2. dn = dn * 10 + t%10;
  3. return dn;
  4. }

01.07 Đếm số lượng chữ số của một số nguyên

Bài cơ sở 024. Định nghĩa hàm đếm số lượng chữ số của một số nguyên?

− Khai báo hàm. 00359. int DemChuSo(int);

− Định nghĩa hàm. 00360. int DemChuSo(int k) 00361. { 00362. if(k==0) 00363. return 1; 00364. int dem = 0; 00365. for(int t=k;t!=0;t=t/10) 00366. dem++; 00367. return dem; 00368. }

− Hàm trên đúng cho các trường hợp: + k là số dương + k là số âm + k bằng không

01.07 Tính tổng các chữ số của một số nguyên.............................

− Khai báo hàm. 00369. int TongChuSo(int);

− Định nghĩa hàm. 00370. int TongChuSo(int k) 00371. { 00372. int S = 0; 00373. for(int t=abs(k);t!=0;t=t/10) 00374. S = S + t%10; 00375. return S; 00376. }