TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG TIN HỌC ĐẠI CƯƠNG Bài 11. Mảng và xâu kí tự Nội dung 1. Mảng 2. Xâu kí tự 2 1

Tài liệu tương tự
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG TIN HỌC ĐẠI CƯƠNG Bài 13. Hàm Nội dung 1. Khái niệm hàm 2. Khai báo và sử dụn

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG TIN HỌC ĐẠI CƯƠNG Bài 9. Vào ra dữ liệu trong C Các lệnh vào ra dữ liệu C cun

TRƯỜnG ĐẠI HỌC BÁCH KHOA HÀ nội VIỆn CÔnG nghệ THÔnG TIn VÀ TRUYỀn THÔnG TIN HỌC ĐẠI CƯƠNG Bài 10. Các cấu trúc lập trình trong C Nội dung 1. Cấu trúc

PowerPoint Template

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG TIN HỌC ĐẠI CƯƠNG Bài 5. Kiểu dữ liệu và biểu thức trong C Nội dung 1. Các ki

Bài 7. Con trỏ Mục tiêu: 1. Luyện tập sử dụng con trỏ và địa chỉ của các biến 2. Sử dụng con trỏ khi thao tác với mảng. Giới hạn: không dùng các thư v

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG TIN HỌC ĐẠI CƯƠNG Bài 11. Tệp tin Nội dung 1. Khái niệm cơ bản 2. Các thao tá

Trường ĐHBK Hà Nội Khoa Điện Bộ môn Điều khiển Tự động Tài liệu hướng dẫn thực hành: KĨ THUẬT LẬP TRÌNH C/C++ Bài 1: Lập trình cơ sở 1 Mục đích bài th

Hàm và lớp template trong Lập trình hướng đối tượng Hàm và lớp template trong Lập trình hướng đối tượng Bởi: unknown Trong phần này, chúng ta tìm hiểu

Chương 1:

Những cơ sở của ngôn ngữ C# Những cơ sở của ngôn ngữ C# Bởi: phamvanviet truonglapvy Trong chương này sẽ trình bày về hệ thống kiểu trong C#; phân biệ

Template and Exception Template and Exception Bởi: Thanh Hiền Vũ TEMPLATE Trong phần này, chúng ta tìm hiểu về một trong các đặc tính còn lại của C++,

ĐỀ THI GIỮA KỲ MÔN: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Đề số 1. Thời gian 120 phút (Sinh viên KHÔNG được sử dụng tài liệu hay máy tính ) Xây dựng lớp STRING và

Microsoft Word - danh-sach-lien-ket-doi-trong-c.docx

HỘI THI TIN HỌC TRẺ TỈNH AN GIANG ĐỀ CHÍNH THỨC ĐỀ THI LÝ THUYẾT BẢNG A - KHỐI TIỂU HỌC Khóa ngày: Thời gian : 20 phút (không kể thời gian

Bài tập chương 1 ngôn ngữ lập trình visual basic Bài tập chương 1 ngôn ngữ lập trình visual basic Bởi: Khoa CNTT ĐHSP KT Hưng Yên MỤC TIÊU: SAU KHI HO

Chương trình dịch

Slide 1

Câu lệnh (statement) Câu lệnh (statement) Bởi: Khuyet Danh Trong C# một chỉ dẫn lập trình đầy đủ được gọi là câu lệnh. Chương trình bao gồm nhiều câu

Hướng dẫn bắt đầu sử dụng mozabook mozabook 2 Cài đặt, bắt đầu, Bản đồ màn hình Mở ấn phẩm, Nhập PDF và PPT Dẫn đường, Cập nhật ấn phẩm Ấn phẩm mới Nộ

Danh sách tuyến tính kiểu hàng đợi Danh sách tuyến tính kiểu hàng đợi Bởi: Khoa CNTT ĐHSP KT Hưng Yên ĐỊNH NGHĨA Hàng đợi là một vật chứa (container)

Mảng Mảng Bởi: Thu Nguyen DỮ LIỆU KIỂU MẢNG (ARRAY) I. KHAI BÁO MẢNG Cú pháp: TYPE VAR <Kiểu mảng> = ARRAY [chỉ số] OF <Kiểu dữ liệu>; <Biến mảng>:<ki

Trung Tâm Gia Sư Tài Năng Việt Đề Số 1 Câu 1: Sau khi thực hiện đoạn chương trình sau, giá trị của biến S bằng bao nhiêu: S

Microsoft Word - Day_lop_4_P1.doc

Lớp đối tượng String Lớp đối tượng String Bởi: Khuyet Danh Ngôn ngữ C# hỗ trợ khá đầy đủ các chức năng của kiểu chuỗi mà chúng ta có thể thấy được ở c

Chương trình dịch

OpenStax-CNX module: m Giới thiệu về ngôn ngữ C và môi trường turbo C 3.0 ThS. Nguyễn Văn Linh This work is produced by OpenStax-CNX and licens

Tom tat luan van - Nhung cuoi.doc

Quyết định số 218/2000/QĐ-BTC ngày 29/12/2000

Microsoft Word - IP Law 2005 (Vietnamese).doc

PowerPoint Presentation

Array, Indexer và Collection Array, Indexer và Collection Bởi: phamvanviet truonglapvy Mảng (Array) Mảng là một tập hợp các phần tử có cùng kiểu, được

No tile

Chuỗi Chuỗi Bởi: phamvanviet truonglapvy Chuỗi (string) trong C# là một kiểu dựng sẵn như các kiểu int, long, có đầy đủ tính chất mềm dẻo, mạnh mẽ và

PowerPoint Presentation

Kiểu dữ liệu văn bản Kiểu dữ liệu văn bản Bởi: PGS. TS. NGƯT Phạm Văn Huấn Ngoài những dữ liệu số như các số nguyên, số thực, máy tính còn có thể lưu

Tìm hiểu ngôn ngữ lập trình Visual Basic Tìm hiểu ngôn ngữ lập trình Visual Basic Bởi: Khuyet Danh Tìm hiểu ngôn ngữ lập trình Visual Basic Tổng quan

Các Vấn Đề Cơ Sở Của Khoa Học Máy Tính Th.S GVC Tô Oai Hùng BAØI TAÄP CHÖÔNG 1 1. Viết giải thuật để mô tả thói quen mỗi buổi sáng của bạn, từ lúc ngh

Bài tập thực hành Chuyên đề 1 CNPM - Java Khoa CNTT- Trường ĐH Công nghệ TP.HCM Lab 01: LẬP TRÌNH JAVA CƠ BẢN VỚI NET BEANS A. MỤC TIÊU: Hướng dẫn tải

LỜI TỰA Sau khi cuốn sách Kinh nghiệm thành công của ông chủ nhỏ đầu tiên của tôi được phát hành, không ngờ chỉ trong vòng nửa năm đã có tới hơn một t

Hướng dẫn Bắt đầu Nhanh Microsoft Publisher 2013 trông khác với các phiên bản trước, vì vậy chúng tôi tạo ra hướng dẫn này để giúp bạn dê dàng nắm bắt

Công thái học và quản lý an toàn

Slide 1

Quyết định 460/QĐ-TCT của Tổng cục Thuế về việc ban hành quy trình Thanh tra thuế

Microsoft Word - bo_tien_xu_ly_trong_c.docx

Animation, Modules 6 - Hoạt hình, tách file

Bài tập thực hành NNLT Visual Basic GV. Nguyễn Thị Hải Bình BÀI THỰC HÀNH ÔN TẬP 1. Sinh viên ĐỌC CẨN THẨN TẤT CẢ NỘI DUNG trong bài thực hành trước k

Sunlite Suite 2 III Programming Chọn tab "All" để xem số channels của tất cả fixture của bạn. -Bạn có thể đánh số fixture của bạn bằng danh mục (index

NGÔN NGƯ LÂ P TRIǸH Biên tập bởi: nguyenvanlinh

(Tái bản lần thứ hai)

Mối quan hệ lành mạnh trên mạng Học viên sẽ khám phá các phẩm chất tạo nên một mối quan hệ lành mạnh và tử tế, cũng như vai trò của các hành vi trên m

Phân tích bài Tiếng nói của văn nghệ

Microsoft Word - Authpaper_ICO_2019.docx

Copyright vietjack.com Chuỗi (String) trong C# Trong C#, bạn có thể sử dụng các chuỗi (string) như là mảng các ký

a VĂN PHÒNG CHÍNH PHỦ CỤC KIỂM SOÁT THỦ TỤC HÀNH CHÍNH ĐIỂM BÁO Ngày 23 tháng 5 năm 2018

11 tính năng hay trong Windows 10 mà Windows 8 không có Windows 10 là một sự cải tiến đáng kể so với Windows 8. Ngoài giao diện được làm mới, hầu hết

Microsoft Word - cau-truc-du-lieu-hang-doi.docx

Ch­ng I

ĐIỂM THI KHỐI A ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG ầ ươ ữ ặ ố ả ườ ườ ườ ễ ướ ườ ườ ầ ườ ễ ữ ấ ồ ấ ứ ấ ố ấ ễ ấ ễ ả ấ ễ ướ ấ ễ ấ ễ ấ ễ ấ ễ ấ ấ ồ ố ấ ạ ấ ầ ấ ầ ấ

Giáo án Âm nhạc 9 Nhạc lí: Giới thiệu về dịch giọng Tập đọc nhạc: Giọng pha trưởng - TĐN số 3 I. Mục tiêu: - Có khái niệm sơ bộ về dịch giọng, đó là s

Document

Document

LỜI GIỚI THIỆU Chia sẽ ebook : Tham gia cộng đồng chia sẽ sách : Fanpage : C

QUY CHẾ CÔNG BỐ THÔNG TIN CÔNG TY CỔ PHẦN ĐẠI LÝ GNVT XẾP DỠ TÂN CẢNG (Ban hành kèm theo Quyết định số: 192A/QĐ-HĐQT ngày 23 tháng 3 năm 2016 của Chủ

Lập trình và ngôn ngữ lập trình

Slide 1

MỞ ĐẦU

BỘ VĂN HÓA, THỂ THAO VÀ DU LỊCH TRƯỜNG ĐẠI HỌC VĂN HÓA TP. HỒ CHÍ MINH & QUY CHẾ HỌC VỤ Tài liệu dành cho sinh viê

Trường Tiểu học Trung Lập Thượng Khối 1 Giáo viên: Nguyễn Thanh Quang Ngày dạy: thứ, ngày tháng năm 201 Môn Mỹ thuật tuần 19 Chủ đề EM VÀ NHỮNG VẬT NU

Các thanh công cụ Toolbar Các thanh công cụ Toolbar Bởi: Khoa CNTT ĐHSP KT Hưng Yên Origin cung cấp các nút thanh công cụ cho những lệnh menu thường x

Microsoft Word - Tom tat Luan van - Nguyen Thi Ngoc Quynh.doc

Các biến và các kiểu dữ liệu trong JavaScript Các biến và các kiểu dữ liệu trong JavaScript Bởi: Hà Nội Aptech Các biến (Variables) Biến là một tham c

TỔNG QUAN KINH TẾ VIỆT NAM NĂM 2012 VÀ TRIỂN VỌNG 2013 GS. Nguyễn Quang Thái 13 Hội Khoa học Kinh tế Việt Nam I- Thành tựu quan trọng về kiềm chế lạm

UART0

BỘ TÀI CHÍNH CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập - Tự do - Hạnh phúc Số: 74/2015/TT-BTC Hà Nội, ngày 15 tháng 05 năm 2015 THÔNG TƯ HƯỚNG DẪN VI

QUY ĐỊNH

CÔNG TY TNHH XÂY DỰNG TXD CẨM NANG XÂY NHÀ Dành cho người xây nhà 1 P a g e

Ngày xưa - Thành Bắc Ninh Tỉnh Bắc Ninh là cửa ngõ của cố đô Thăng Long, là vùng đất trung chuyển giữa kinh đô xưa với miền địa đầu giáp giới Trung Qu

Uû Ban Nh©n D©n tp Hµ néi Céng hoµ x· héi chñ nghÜa viÖt nam

Chuyên đề năm 2017: Học tập và làm theo tư tưởng, đạo đức, phong cách Hồ Chí Minh về phòng, chống suy thoái tư tưởng chính trị, đạo đức, lối sống, tự

TÀI LIỆU PHỔ BIẾN TẠI PHÒNG THI

APPROACH S60 Hướng dẫn sử dụng

NHẬP MÔN LẬP TRÌNH C Phân bổ thời gian thực hành (12 tuần, 5 tiết/tuần) Tuần 01-02: Chương 1. Các thành phần cơ bản của Ngôn ngữ C Chương 2. Nhập xuất

Vấn đề xử lý lỗi Vấn đề xử lý lỗi Bởi: unknown Vấn đề xử lý lỗi Bộ mã phát hiện lỗi Khi truyền tải một chuỗi các bit, các lỗi có thể phát sinh ra, bit

SM-G935F SM-G935FD Sách hướng dẫn sử dụng Vietnamese. 02/2016. Rev.1.0

DANH MỤC ĐỀ TÀI TIỂU LUẬN MÔN HỌC

Document

(Microsoft Word - 4_Vuong NC-T\ doc)

2018 Nhận xét, phân tích, góp ý cho Chương trình môn Tin học trong Chương trình Giáo dục Phổ thông mới

a VĂN PHÒNG CHÍNH PHỦ CỤC KIỂM SOÁT THỦ TỤC HÀNH CHÍNH ĐIỂM BÁO Ngày 18 tháng 6 năm 2018

Trường Đại học Dân lập Văn Lang - Nội san Khoa học & Đào tạo, số 5, 11/2005 NHÓM HỌC TẬP SÁNG TẠO THS. NGUYỄN HỮU TRÍ Trong bài viết này tôi muốn chia

Loa Máy Tính Loa Máy Tính Bởi: Lê Văn Tâm Loa máy tính là thiết bị dùng để phát ra âm thanh phục vụ nhu cầu làm việc và giải trí của con người với máy

Tài liệu Hướng dẫn sử dụng

Số 81 (7.064) Thứ Năm, ngày 22/3/ XUẤT BẢN TỪ NĂM 1985 Sáng

Microsoft Word - HIEU CHUAN CANO TO RPO

Microsoft Word - KY YEU Hoi thao Lien Hiep nam thanh + dung.doc

Microsoft Word - TT08BKHCN.doc

Hệ điều hành Bài tập tuần 6 1 Quản lý bộ nhớ Bài tập 1 : Xem thông tin bộ nhớ 1. Sử dụng top, ps đọc thông tin về kích thước vùng nhớ của 1 tiến trình

Bản ghi:

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG TIN HỌC ĐẠI CƯƠNG Bài 11. Mảng và xâu kí tự Nội dung 1. Mảng 2. Xâu kí tự 2 1

Nội dung 1. Mảng 1.1. Khái niệm mảng 1.2. Khai báo và sử dụng mảng 1.3. Các thao tác cơ bản trên mảng 1.4. Tìm kiếm trên mảng 1.5. Sắp xếp trên mảng 2. Xâu kí tự 3 1.1. Khái niệm mảng Tập hợp hữu hạn các phần tử cùng kiểu, lưu trữ kế tiếp nhau trong bộ nhớ Các phần tử trong mảng có cùng tên (là tên mảng) nhưng phân biệt với nhau ở chỉ số cho biết vị trí của nó trong mảng Ví dụ: Bảng điểm của sinh viên Vector Ma trận 4 2

1.2. Khai báo và sử dụng mảng Khai báo mảng (một chiều) KieuDuLieu tenmang [kích_thước]; Trong đó KieuDuLieu: kiểu dữ liệu của các phần tử trong mảng tenmang: tên của mảng kích_thước: số phần tử trong mảng Ví dụ int mangnguyen[10]; // khai báo mảng 10 phần tử có kiểu dữ liệu int 5 1.2. Khai báo và sử dụng mảng Cấp phát bộ nhớ Các phần tử trong mảng được cấp phát các ô nhớ kế tiếp nhau trong bộ nhớ Biến mảng lưu trữ địa chỉ ô nhớ đầu tiên trong vùng nhớ được cấp phát Ngôn ngữ C đánh chỉ số các phần tử trong mảng bắt đầu từ 0 Phần tử thứ i trong mangnguyen được xác định bởi mangnguyen [i-1] mangnguyen[0] mangnguyen[1].. mangnguyen[9] mangnguyen 6 3

1.2. Khai báo và sử dụng mảng Khai báo mảng nhiều chiều KieuDuLieu tenmang[size 1 ][size 2 ] [size k ]; Trong đó size i là kích thước chiều thứ i của mảng Mảng một chiều và mảng nhiều chiều Mỗi phần tử của mảng cũng là một mảng => mảng nhiều chiều Ví dụ int a[6][5] ; //mảng 2 chiều int b[3][4][5]; // mảng 3 chiều 7 1.2. Khai báo và sử dụng mảng Sử dụng mảng Truy cập vào phần tử thông qua tên mảng và chỉ số của phần tử trong mảng tenmang[chỉ_số_phần_tử] Chú ý: chỉ số bắt đầu từ 0 Ví dụ int a[4]; phần tử đầu tiên (thứ nhất) của mảng: a[0] phần tử cuối cùng (thứ tư) của mảng: a[3] a[i]: là phần tử thứ i+1 của a 8 4

1.2. Khai báo và sử dụng mảng Ví dụ (tiếp) int b[3][4]; phần tử đầu tiên của mảng: b[0] là một mảng một chiều phần tử đầu tiên của mảng b[0]: b[0][0] b[i][j]: là phần tử thứ j+1 của b[i], b[i] là phần tử thứ i+1 của b 9 Khai báo hằng số có kiểu mảng Sử dụng #define #define TEN_MANG {Giá_trị_1, Giá_trị_2,... Giá_trị_n} Lưu ý: không thể truy cập vào phần tử của mảng Sử dụng từ khóa const const KieuDuLieu TEN_MANG[Kích_thước] = {Giá trị_1, Giá trị_2,..., Giá_trị_n}; Lưu ý: Nếu không khai báo Kích_thước thì kích thước của mảng là số lượng giá trị sử dụng khi khai báo Nếu số lượng giá trị nhỏ hơn Kích_thước mảng, các phần tử không được gán sẽ nhận giá trị 0 10 5

Khai báo hằng số có kiểu mảng Ví dụ const int CONST_ARR1[5] = {1,2,3,4,5} CONST_ARR1: 1 2 3 4 5 const int CONST_ARR2[ ] = {1,2,3,4} CONST_ARR2: 1 2 3 4 const int CONST_ARR3[5] = {1,2,3} CONST_ARR23: 1 2 3 0 0 11 1.3. Các thao tác cơ bản trên mảng a. Nhập dữ liệu cho mảng Khởi tạo giá trị cho mảng ngay khi khai báo int a[4] = {1,4,6,2}; int b[2][3]={ {1,2,3}, {4,5,6} }: Số lượng giá trị khởi tạo không được lớn hơn số lượng phần tử trong mảng Nếu số lượng này nhỏ hơn, các phần tử còn lại được khởi tạo giá trị 0 12 6

1.3. Các thao tác cơ bản trên mảng a. Nhập dữ liệu cho mảng Có thể xác định kích thước mảng thông qua số giá trị khởi tạo nếu để trống kích thước mảng int array1 [8] = {2, 4, 6, 8, 10, 12, 14, 16}; int array2 [] = {2, 4, 6, 8, 10, 12, 14, 16}; 13 1.3. Các thao tác cơ bản trên mảng a. Nhập dữ liệu cho mảng Nhập dữ liệu từ bàn phím bằng hàm scanf int a[10]; Nhập dữ liệu cho a[1]: scanf( %d, & a[1]); Nhập dữ liệu cho toàn bộ phần tử của mảng a => Sử dụng vòng lặp for Lưu ý Tên mảng là một hằng (hằng con trỏ) do đó không thể thực hiện phép toán với tên mảng như phép gán sau khi đã khai báo 14 7

1.3. Các thao tác cơ bản trên mảng #include <stdio.h> #define MONTHS 12 int main(){ int rainfall[months], i; for ( i=0; i < MONTHS; i++ ){ printf( Nhap vao phan tu thu %d:, i+1); scanf("%d", &rainfall[i] ); } return 0; } 15 1.3. Các thao tác cơ bản trên mảng a. Nhập dữ liệu cho mảng Lưu ý Nếu số phần tử của mảng được nhập từ bàn phím và chỉ biết trước số phần tử tối đa tối đa => khai báo mảng với kích thước tối đa và sử dụng biến lưu số phần tử thực sự của mảng. Ví dụ: Khai báo mảng số nguyên a có tối đa 100 phần tử. Nhập từ bàn phím số phần tử trong mảng và giá trị các phần tử đó. 16 8

1.3. Các thao tác cơ bản trên mảng #include<stdio.h> #include<conio.h> int main(){ int a[100]; int n, i; do{ printf( \n Cho biet so phan tu cua mang: ); scanf( %d,&n); }while (n>100 n<=0); for(i = 0; i < n; i++){ printf( a[%d] = ", i); scanf("%d",&a[i]); } getch(); return 0; } 17 1.3. Các thao tác cơ bản trên mảng b. Hiển thị dữ liệu trong mảng Dùng hàm printf() Để hiển thị tất cả các phần tử: dùng vòng for Ví dụ Hiển thị một phần tử bất kì Hiển thị tất cả các phần tử, mỗi phần tử trên một dòng Hiển thị tất cả các phần tử trên một dòng, cách nhau 2 vị trí Hiển thị từng k phần tử trên một dòng 18 9

1.3. Các thao tác cơ bản trên mảng #include <stdio.h> #define MONTHS 12 int main(){ int rainfall[months], i; for ( i=0; i < MONTHS; i++ ){ printf( Nhap vao phan tu thu %d:, i+1); scanf("%d", &rainfall[i] ); } for ( i=0; i < MONTHS; i++ ) printf( "%2d, rainfall[i]); printf("\n"); return 0; } 19 1.3. Các thao tác cơ bản trên mảng c. Tìm giá trị lớn nhất, nhỏ nhất Tìm giá trị lớn nhất Giả sử phần tử đó là phần tử đầu tiên Lần lượt so sánh với các phần tử còn lại Nếu lớn hơn hoặc bằng => so sánh tiếp Nếu nhỏ hơn => coi phần tử này là phần tử lớn nhất và tiếp tục so sánh Cách làm? Tìm giá trị nhỏ nhất: tương tự 20 10

1.4. Tìm kiếm trên mảng Bài toán Cho mảng dữ liệu a và một giá trị k Tìm các phần tử trong mảng a có giá trị bằng (giống) với k. Nếu có in ra vị trí (chỉ số) các phần tử này. Ngược lại thông báo không tìm thấy Cách làm Duyệt toàn bộ các phần tử trong mảng Nếu a[i] bằng (giống) k thì lưu lại chỉ số i Sử dụng một biến để xác định tìm thấy hay không tìm thấy 21 1.4. Tìm kiếm trên mảng Phân tích Duyệt toàn bộ các phần tử Vòng lặp for (while, do while) Lưu lại i nếu a[i] bằng (giống) k Sử dụng mảng lưu chỉ số Biến xác định tìm thấy hay không tìm thấy Biến nhận giá trị 0 hoặc 1 Biến nhận giá trị 0 hoặc >=1 (tìm thấy thì tăng giá trị) 22 11

1.4. Tìm kiếm trên mảng #include <stdio.h> #include <conio.h> int main(){ int a[100], chi_so[100]; int n;//n la số phần tử trong mảng int i, k, kiem_tra; printf( Nhap vao so phan tu cua mang: ); scanf( %d,&n); printf( Nhap vao giá trị tim kiem: ); scanf( %d,&k); 23 1.4. Tìm kiếm trên mảng kiem_tra = 0; // Duyệt qua tất cả các phần tử for(i = 0;i<n;i++) if(a[i] == k) { chi_so[kiem_tra] = i; kiem_tra ++; } 24 12

1.4. Tìm kiếm trên mảng if(kiem_tra > 0){ printf( Trong mang co %d phan tu co gia tri bang %d,kiem_tra,k); printf( \nchi so cua cac phan tula: ); for(i = 0;i < kiem_tra;i++) printf( %3d,chi_so[i]); } else printf( \n Trong mang khong co phan tu nao co gia tri bang %d,k); getch(); return 0; } 25 1.5. Sắp xếp mảng Bài toán Cho mảng a gồm n phần tử. Sắp xếp các phần tử của mảng a theo thứ tự tăng dần/giảm dần 26 13

1.5. Sắp xếp mảng Giải thuật sắp xếp Sắp xếp thêm dần (insertion sort) Sắp xếp lựa chọn (selection sort) Sắp xếp nổi bọt (bubble sort) Sắp xếp vun đống (heap sort) Sắp xếp nhanh (quick sort) Sắp xếp trộn (merge sort). 27 Giải thuật sắp xếp lựa chọn Ý tưởng Lần sắp xếp thứ 1: Đoạn đã được sắp xếp: chưa có phần tử nào Đoạn chưa được sắp xếp: có n phần tử tử a 0, a 1,, a n-1 So sánh a 0 với a j (1 j n-1). Nếu a 0 > a j thì đổi chỗ Sau lượt sắp xếp này a 0 đã đúng thứ tự Lần sắp xếp thứ 2: Đoạn đã được sắp xếp: a 0 Đoạn chưa được sắp xếp: a 1, a 2,, a n-1 So sánh a 1 với a j (2 j n-1). Nếu a 1 > a j thì đổi chỗ Sau lượt sắp xếp này a 1 đã đúng thứ tự 28 14

Giải thuật sắp xếp lựa chọn Lần sắp xếp thứ i: Đoạn đã được sắp xếp: a 0, a 1,,a i-2 Đoạn chưa được sắp xếp: a i-1, a i,, a n-1 So sánh a i-1 với a j (i j n-1). Nếu a i > a j thì đổi chỗ Sau lượt sắp xếp này a i-1 đã đúng thứ tự Thuật toán dừng khi dãy chưa được sắp xếp chỉ có 1 phần tử 29 1.5. Sắp xếp mảng A = { 12, 5, 3, 4 }; Lượt 1 Lượt 2 Lượt 3 12 3 3 3 5 12 4 4 3 5 12 5 4 4 5 12 30 15

Lưu đồ thuật toán sắp xếp lựa chọn 31 1.5. Sắp xếp mảng //Khai bao cac bien int a[100]; int i, j, tmp; //Sap xep for (i = 0; i < n-1; i++) for (j = i+1; j <n ; j++) if ( a[i] > a[j]){ tmp = a[i]; a[i]= a[j]; a[j]= tmp; } 32 16

Nội dung 1. Mảng 2. Xâu kí tự 2.1. Khái niệm xâu kí tự 2.2. Khai báo và sử dụng xâu 2.3. Các hàm xử lý kí tự 2.4. Các hàm xử lý xâu 33 2.1. Khái niệm xâu kí tự Xâu kí tự (string) là một dãy các kí tự viết liên tiếp nhau Ký tự kết thúc xâu: 0 (mã ASCII là 0) Độ dài xâu là số kí tự có trong xâu không gồm ký tự kết thúc xâu Ví dụ: Tin hoc, String Lưu trữ: kết thúc xâu bằng kí tự \0 hay NUL (mã ASCII là 0) T i n h o c \0 34 17

2.1. Khái niệm xâu kí tự So sánh Xâu kí tự và mảng kí tự? Tập hợp các kí tự viết liên tiếp nhau Sự khác biệt: xâu kí tự có kí tự kết thúc xâu, mảng kí tự không có kí tự kết thúc xâu Xâu kí tự A và kí tự A? A là 1 kí tự A là 1 xâu kí tự, ngoài kí tự A còn có kí tự \0 => gồm 2 kí tự 35 2.2. Khai báo và sử dụng xâu a. Khai báo xâu Cú pháp char tenxau [kích_thước]; Lưu ý: Để lưu trữ một xâu có n kí tự chúng ta cần một mảng có kích thước n+1 Ví dụ Để lưu trữ xâu Tin hoc chúng ta phải khai báo xâu có số phần tử tối đa ít nhất là 8 char str [8]; 36 18

2.2. Khai báo và sử dụng xâu a. Khai báo xâu Cú pháp Lưu ý: char tenxau [kích_thước] = Giá_trị; kích_thước độ dài (Giá_trị) + 1 Có thể không cần khai báo kích_thước: khi đó kích thước biến tenxau là độ dài (Giá_trị) + 1 Ví dụ char str1[10] = BKHN ; char str2[5] = SoICT ; //Lỗi char str3[ ] = SoICT ; //Đúng 37 2.2. Khai báo và sử dụng xâu b. Truy cập vào một phần tử của xâu Cú pháp: Ví dụ tenxau [chỉ_số_của_kí_tự] char quequan[10]; Giả sử xâu này có nội dung là Ha noi quequan[0] lưu trữ H quequan[1] quequan[6] quequan[7] \0 38 a i 19

Khai báo hằng số có kiểu xâu ký tự Sử dụng #define #define TEN_XAU Giá_trị Ví dụ: #define DAI_HOC BKHN Sử dụng từ khóa const const char TEN_XAU[Kích_thước] = Giá_trị; Ví dụ: const char DAI_HOC[5] = BKHN ; Khi khai báo với từ khóa const, kích thước phải đủ để chứa ký tự \0 Tốt hơn: không khai báo kích thước hằng xâu ký tự 39 2.3. Các hàm xử lý kí tự Tệp tiêu đề sử dụng: ctype.h char toupper(char ch): chuyển kí tự thường thành kí tự hoa char ch = a ; ch = toupper(ch);// ch = A ; ch = toupper( B );//ch = B ; char tolower(char ch): chuyển kí tự hoa thành kí tự thường char ch = A ; ch = tolower(ch);// ch = a ; ch = tolower( b );//ch = b ; 40 20

2.3. Các hàm xử lý kí tự int isalpha(char ch): kiểm tra xem kí tự có phải chữ cái hay không ( a z, A,.. Z ) int isdigit(char ch): kiểm tra chữ số ( 0, 1,.. 9 ) int islower(char ch): kiểm tra chữ thường int isupper(char ch): kiểm tra chữ hoa int iscntrl(char ch): kiểm tra kí tự điều khiển (0-31) int isspace(char ch): kiểm tra kí tự dấu cách (mã 32), xuống dòng ( \n 10), đầu dòng ( \r 13), tab ngang ( \t 9), tab dọc ( \v 11) trả về khác 0 nếu đúng, ngược lại trả về 0 41 2.3. Các hàm xử lý kí tự #include<stdio.h> #include<conio.h> #include<ctype.h> int main(){ char ch; printf( Nhap vao mot ki tu: ); fflush(stdin); scanf( %c, &ch); 42 21

2.3. Các hàm xử lý kí tự } if(isupper(ch)){ printf( Ki tu nay la chu hoa\n ); printf( Ki tu chu thuong tuong ung %c\n,tolower(ch)); }else if(islower(ch)){ printf( Ki tu nay la chu thuong\n ); printf( Ki tu chu hoa tuong ung %c\n,toupper(ch)); } getch(); return 0; 43 2.3. Các hàm xử lý kí tự Vào ra xâu kí tự Tệp tiêu đề: stdio.h Nhập xâu kí tự gets(tenxâu); scanf( %s,&tenxau); Hiển thị xâu kí tự puts(tenxau); printf( %s, tenxau); Sự khác nhau giữa gets và scanf? 44 22

2.4. Các hàm xử lý xâu kí tự Tệp tiêu đề: string.h int strlen(char[] ten_xau): trả về độ dài xâu tính đến trước ký tự \0 đầu tiên trong xâu char s[] = Tin hoc dai cuong ; int n; n = strlen(s);// n =? s[7] = 0; n = strlen(s);// n =? printf( Xau: %s,s)//hiển thị? 45 2.4. Các hàm xử lý xâu kí tự strcpy(char[] xaudich, char[] xaunguon): sao chép nội dung xaunguon và xaudich Lưu ý: không dùng phép gán giá trị cho các biến xâu char s1[] = Tin hoc, s2[10]; strcpy(s2, s1);// s2 = Tin hoc strcpy(s1, Tin hoc dai cuong ); 46 23

2.4. Các hàm xử lý xâu kí tự int strcmp(char[] xâu_thứ_nhất, char[] xâu_thứ_hai): so sánh hai xâu giá trị 0 : hai xâu giống nhau giá trị<0: xâu thứ nhất nhỏ hơn xâu thứ hai giá trị >0: xâu thứ nhất lớn hơn xâu thứ hai Quy tắc: so sánh lần lượt các ký tự từ đầu mỗi xâu. Xâu nào xuất hiện ký tự có mã ASCII lớn hơn trước thì lớn hơn Tất cả các ký tự giống nhau thì hai xâu bằng nhau Ví dụ: Tin hoc > TIN hoc dai cuong Tin hoc = Tin hoc 47 Hàm int strcmp( ) Ví dụ char s1[30], s2[20]; printf( Nhap xau thu nhat: ); fflush(stdin); gets(s1); printf( Nhap xau thu hai: ); fflush(stdin); gets(s2); if (strcmp(s1,s2)>0) printf ( Xau thu nhat lon hon ); else if(strcmp(s1,s2)<0) printf ( Xau thu hai lon hon ); else printf ( Hai xau giong nhau ); Không so sánh trực tiếp 2 xâu 48 24

2.4. Các hàm xử lý xâu kí tự char[] strcat(char[ ] xaudich, char[ ] xaunguon): ghép nội dung xâu nguồn vào sau nội dung xâu đích char s1[] = Hello,, s2[20]; printf( Nhap ten: ); fflush(stdin); gets(s2); strcat(s1, s2);//s1 =? strcat(s1,.start game! ); //s1 =? 49 Thảo luận 50 25