1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Nhập môn lập trình: Bài 2 - TS. Ngô Hữu Dũng

53 7 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 53
Dung lượng 514,27 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài giảng Nhập môn lập trình: Bài 2 do TS. Ngô Hữu Dũng biên soạn cung cấp cho người học các kiến thức: Giới thiệu ngôn ngữ lập trình C, trình biên dịch/thông dịch, cấu trúc chương trình, định dạng trong C, biến, kiểu dữ liệu, hằng số, từ khóa, toán tử, thư viện stdio.h, stdlib.h, math.h, string.h, ctype.h, time.h, nhập xuất căn bản,...

Trang 2

 Nhập: scanf, cin, gets

 Xuất: printf, cout, puts

Trang 3

Ngôn ngữ lập trình C

 Được phát triển bởi Dennis

Ritchie tại phòng thí nghiệm

AT&T Bell vào đầu thập niên

1970

 C được dùng trong hệ điều

hành UNIX và phát triển cùng

với hệ điều hành này

 C đã lan rộng ra nhiều hệ điều

hành khác và trở thành ngôn

ngữ phổ dụng nhất

Trang 4

Trình biên dịch/Trình thông dịch

Trình biên dịch

Executable Program

Trình biên dịch: Phân tích chương

trình và biên dịch thành mã máy.

Trình thông dịch

Interpreter

Source Code

Trình thông dịch: Phân tích và

thực thi chương trình cùng lúc.

Trang 5

Biên dịch và chạy chương trình

Trang 6

Sửa lỗi - debug

Semantic Errors

Trang 7

 Mục đích của việc “biên dịch” là chuyển đổi

 A Ngôn ngữ bậc thấp sang bậc cao

 B Chương trình thành mã nguồn

 C Mã nguồn sang mã máy

 D Mã máy sang mã nguồn

 Trường hợp nào sau đây là “lỗi ngữ nghĩa”?

 A Lỗi khi biên dịch chương trình

 B Chương trình tính sai kết quả

 C Lỗi do gõ sai một câu lệnh

 D Lời chú thích không có nghĩa

Trang 8

Định dạng trong C

Có phân biệt giữa chữ in HOA và chữ in thường!

 Các dòng trống, khoảng trắng, lời chú thích đều

được trình biên dịch bỏ qua

Các dấu thụt dòng giúp chương trình dễ đọc, rõ

ràng.

 Có thể dùng tab hoặc dấu cách

Câu lệnh được kết thúc bằng dấu chấm phẩy ;

"Chuỗi"

Một ký tự được đặt giữa hai dấu một nháy 's'

Trang 10

 Tên biến: Do người lập trình tự đặt

Biến phải được khai báo trước khi sử dụng

Cú pháp: <Data type> <Variable name>;

int year;

float score;

char kyTu;

char name[50];

Trang 12

Kiểu dữ liệu

int: Kiểu số nguyên

 2 hoặc 4 bytes (16 hoặc 32 bits)

 -32,768 → 32,767 hoặc -2,147,483,648 → 2,147,483,647

float: Kiểu số thực

 4 bytes (32 bits): 1.2E-38 → 3.4E+38, độ chính xác 24 bits

double: Kiểu số thực có độ chính xác cao hơn float

 8 bytes (64 bits): 2.3E-308 → 1.7E+308, độ chính xác 53 bits

char: Kiểu ký tự

 1 byte, ví dụ: char exit = 'e' ;

char []: Kiểu chuỗi

 ví dụ: char name[10] = "Quang" ;

bool: Kiểu luận lý, có giá trị true hoặc false

 1 byte, ví dụ: bool kt = true ; //C++

Độ chính xác?

Trang 13

significand x base exponent

Kiểu dữ liệu Dấu Mũ Trị số Tổng số bit Độ chính xác

Double 1 bit 11 bits 52 bits 64 bits (8 bytes) 53 bits (Dấu + trị số)

Trang 14

Tên biến

 Phải bắt đầu bằng một chữ hoặc dấu gạch dưới (_), tiếp sau đó

có thể kết hợp giữa chữ, số và dấu gạch dưới.

Không được trùng với từ khóa có sẵn của C

 Hai biến không được trùng tên nhau

 Có phân biệt giữa chữ hoa và chữ thường

 Độ dài tùy thích, tuy nhiên không nên đặt tên quá dài

 Nên đặt tên có nghĩa, dễ hiểu

 Keywords

auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while

Trang 15

Quiz – Tên biến

 Những tên biến nào sau đây đúng hay sai?

Trang 16

Quiz - khai báo biến

 Hãy khai báo các biến phù hợp cho các nội dung sau

Trang 17

Quiz - khai báo biến (tham khảo)

1 #include <stdio.h> // Khai báo thư viện

3 {

5 char ID_s[20]; // Hoặc ID kiểu chuỗi

7 char hoVaTen[100]; // Tên kiểu chuỗi

10 char gioiTinh; // Kiểu ký tự: ‘F’, ‘M’

11 int tuoiTac; // Tuổi kiểu số nguyên

12 bool giaDinh; // Có: True, Chưa: False

13 char email[100]; // Email kiểu chuỗi

14 char ngheNghiep[50]; // Ví dụ: “Ky su CNTT”

15 //…

16 return 0;

Trang 18

Chuyển đổi kiểu

Đặt (Kiểu dữ liệu) phía trước biểu thức để chuyển đổi kiểu dữ

liệu cho kết quả của biểu thức

f = (float) i1 / i2; i = (int)f;

 Chia một số nguyên cho một số nguyên: Kết quả là số nguyên

 Chia một số thực cho một số nguyên hoặc chia một số nguyên cho một số thực: Kết quả là số thực

Trang 19

Chuyển đổi kiểu (2)

 Gán một số nguyên vào một biến kiểu thực

f = i; // Cảnh báo việc chuyển đổi

f1 = 10; // OK! f1 = 10.000000

f2 = (float)i; // OK!

 Gán một số thực vào một biến kiểu nguyên:

Mất phần thập phân (sau dấu chấm)

i1 = 9.5; i2 = f; //Cảnh báo, i1 = 9

i1 = (int)9.5; i2 = (int)f; // OK!

Trang 20

Quiz – Chuyển đổi kiểu dữ liệu

 Chuyển đổi kiểu dữ liệu phù hợp (nếu cần)

Trang 21

Quiz – Chuyển đổi kiểu dữ liệu (1)

 Chuyển đổi kiểu dữ liệu phù hợp (nếu cần)

Trang 22

#define b 125u // unsigned int

#define c 87l // long int

#define d 23ul // unsigned long int

#define e 057 // Cơ số 8

#define f 0xfee // Cơ số 16

#define g 3.14159 // float

#define h 314159E-5 // float

#define i 'a' // char

#define j "morning" // string

const int k = 2016;

const float l = 2.016;

const char m = '4' ;

const char n[] = "afternoon" ;

#define o 048 /* ERROR! Hệ cơ số 8

không có số 8 */

#define p 59E // ERROR!

#define q E59 // ERROR!

Trang 23

Toán tử

Gán

assignment

Tăng / Giảm increment decrement

Toán học arithmetic

Luận lý logical

So sánh comparison

member access

Trang 24

Toán tử gán - assignment

 Cho a = 7, b = 2 Số trên bit: a = 00000111, b = 00000010

a = b Gán giá trị của b cho biến a a = 2

a / = b Phép chia lấy nguyên: a = a / b a = 7 / 2 = 3

a % = b Phép chia lấy dư: a = a % b a = 7 % 2 = 1

a & = b Phép AND trên bit: a = a & b a = 0111&0010 = 2

a | = b Phép OR trên bit: a = a | b a = 0111|0010 = 7

a ^ = b Phép XOR trên bit: a = a ^ b a = 0111^0010 = 5

a <<= b Phép dịch trái trên bit: a = a << b a = a<<2 =11100=28

a >>= b Phép dịch phải trên bit: a = a >> b a = a>>2 =0001 = 1

Trang 25

Toán tử toán học - arithmetic

 Cho a = 7, b = 2 Số trên bit: a = 00000111, b = 00000010

c = a * b Phép nhân c = 7 * 2 = 14

c = a / b Phép chia lấy nguyên c = 7 / 2 = 3

c = a % b Phép chia lấy dư c = 7 % 2 = 1

c = ~a Phép NOT trên bit c = 11111000 = –8

c = a & b Phép AND trên bit c = 0111&0010 = 2

c = a | b Phép OR trên bit c = 0111|0010 = 7

c = a ^ b Phép XOR trên bit c = 0111^0010 = 5

c = a << b Phép SHIFT LEFT trên bit c = a<<2 =11100=28

c = a >> b Phép SHIFT RIGHT trên bit c = a>>2 =0001 = 1

Trang 26

Toán tử trên bit – bitwise operations

 Các phép toán trên bit

Trang 27

Toán tử tăng / giảm - increment / decrement

 Cho a = 7, b = 2

b = ++a Cộng a lên một đơn vị trước khi tính

Trang 31

Toán tử luận lý – logical

A && B: False

||

Toán tử OR, nếu và chỉ nếu cả hai toán hạng đều sai thì kết quả phép toán là sai

Trang 32

int A=10, B=20;

if (A==B) printf( "A = B" );

if (A!=B) printf( "A ≠ B" );

if (A>B) printf( "A > B" );

if (A<B) printf( "A < B" );

if (A>=B) printf( "A ≥ B" );

if (A<=B) printf( "A ≤ B" );

return 0;

}

Trang 33

Các thư viện

 Các thư viện định nghĩa sẵn các hàm hay kiểu dữ liệu

 Cú pháp khai báo: #include <tên thư viện>

<stdio.h> các hàm nhập xuất chuẩn, các thao tác với tập

tin…

getchar, putchar, printf, scanf, gets, fopen, fclose, remove, …

<stdlib.h> các hàm chuyển đổi kiểu dữ liệu, cấp phát bộ

Trang 34

 gets, puts, cin, cout…

<time.h> các hàm xử lý về thời gian

 time, clock, localtime, difftime, time_t, struct tm…

Trang 35

Hàm thường dùng ở thư viện stdio.h

Khai báo: #include <stdio.h>

Trang 36

Hàm thường dùng ở thư viện stdlib.h

Khai báo: #include <stdlib.h>

Hàm rand: Tạo số nguyên ngẫu nhiên

Nguyên mẫu hàm: int rand (void);

 a = rand(); // a có giá trị từ 0 đến 32767

 b = rand()%90; // b có giá trị từ 0 đến 89

 c = rand()%90 + 10; // c có giá trị từ 10 đến 99

Hàm srand: Khởi tạo số ngẫu nhiên

Nguyên mẫu hàm: void srand (unsigned int seed);

 Ví dụ:

 srand(time(NULL));

 d = rand() % 101 – 50;

Trang 37

Hàm thường dùng ở thư viện math.h

Khai báo: #include <math.h>

Hàm sqrt: Tính căn bậc hai

Nguyên mẫu hàm: double sqrt (double x);

 x = sqrt(9); // Căn bậc hai của 9

 y = sqrt(x + 1); // Căn bậc hai của x + 1

Hàm pow: Tính lũy thừa

Nguyên mẫu hàm: double pow (double base, double exponent);

 x = pow(3, 2); // ba mũ hai

 y = pow(x, 4); // x mũ bốn

Hàm floor, ceil: Làm tròn

 z = floor(4.3); // z = 4.0

Trang 38

Hàm thường dùng ở thư viện string.h

Khai báo: #include <string.h>

Hàm strlen: Tính chiều dài của chuỗi

Nguyên mẫu hàm: size_t strlen(const char * str)

 a = strlen(“hello”); // a = 5

Hàm strcpy: Sao chép chuỗi

Nguyên mẫu hàm: char * strcpy(char * dest, const char * src)

 char hello[50]; // Khai báo chuỗi

strcpy(hello, “Hello ”); // hello = “Hello ”

Hàm strcat: Nối chuỗi

Nguyên mẫu hàm: char * strcat( char * dest, const char * src)

 char name[50] = “Tuan”;

strcat(hello, name); // hello = “Hello Tuan!”

Hàm strcmp: So sánh chuỗi

Nguyên mẫu hàm: int strcmp( const char * str1, const char * str2 )

 a = strcmp(name, “Tuan”); // a = 0

Trang 39

Hàm thường dùng ở thư viện ctype.h

Khai báo: #include <ctype.h>

Hàm tolower: Chuyển ký tự sang chữ thường

 Nguyên mẫu int tolower ( int c );

 char c = ‘N’; tolower(c); // c = ‘n’

Hàm toupper: Chuyển ký tự sang chữ in

 Nguyên mẫu int toupper ( int c );

 char c = ‘n’; toupper(c); // c = ‘N’

 Các hàm kiểm tra ký tự

 isalnum(c): Trả về true (khác 0) nếu c là số hoặc chữ

 isalpha(c): Trả về true nếu c là chữ

 islower(c): Trả về true nếu c là chữ thường

isupper(c): Trả về true nếu c là chữ in

Trang 41

Quiz – Tính toán (tham khảo)

Cho một biến số nguyên x, viết biểu thức tính:

Trang 42

gets (s);

.

return 0;

}

Trang 44

Định dạng biểu diễn dữ liệu

Trang 45

Định dạng biểu diễn dữ liệu

 %[flags][width][.precision][length]specifier

width Số ký tự tối thiểu được in ra

.precision Số ký tự sau dấu chấm động

Trang 46

Minh hoạ biểu diễn dữ liệu

1 #include <stdio.h>

2 int main()

4 printf( "Char: %c %c \n" , 'a' , 65);//Char: a A

5 printf( "Integer: %d \n" , 1999); //Integer: 1999

6 printf( "Space: %7d \n" , 1999); //Space: 1999

7 printf( "Zero: %07d \n" , 1999); //Zero: 0001999

8 printf( "Float: %.2f\n" , 3.1416); //Float: 3.14

9 printf( "Float: %6.2f\n" , 3.1416); //Float: 3.14

10 printf( "String: %s\n" , "Chuoi" ); //String: Chuoi

11 printf( "Hexa: %x\n" , 100); //Hexa: 64

12 printf( "Octo: %o\n" , 100); //Octo: 144

13 printf( "Hexa: %#x\n" , 100); //Hexa: 0x64

14 printf( "Octo: %#o\n" , 100); //Octo: 0144

15 return 0;

Trang 47

 Mã escape dùng để đại diện

cho những ký tự đặc biệt hoặc

Trang 48

 Nhập: scanf, cin, gets

 Xuất: printf, cout, puts

Trang 49

Bài tập 2.1: Biến và kiểu biến

 Viết chương trình nhập vào từ bàn phím và xuất ra màn hình các thông tin sau

Trang 50

Bài tập 2.2: Nhập, tính toán, xuất

 Viết chương trình nhập vào một số nguyên x, tính toán và xuất ra màn hình giá trị các biểu thức sau:

Trang 51

Bài tập 2.3: Chữ số

 Viết chương trình tạo ra một số nguyên ngẫu nhiên gồm 3 chữ số, hãy xác định các chữ số hàng đơn vị, hàng chục và hàng trăm của số nguyên ấy

Trang 52

Bài tập 2.4: Thời gian

 Viết chương trình nhập vào tổng số giây, quy đổi và xuất

ra màn hình ngày, giờ, phút, giây tương ứng

Trang 53

Bài tập 2.5 – Số ngẫu nhiên

 Viết chương trình xuất ra màn hình các số ngẫu nhiên sau

 a có giá trị trong khoảng từ 0 đến 89

 b có giá trị trong khoảng từ 10 đến 99

 c có giá trị trong khoảng từ -30 đến 30

 d có giá trị giữa a và b bất kỳ nhập từ bàn phím

Gợi ý:

 rand()%10 tạo ra số có giá trị từ 0 đến 9

Ngày đăng: 08/05/2021, 14:11

🧩 Sản phẩm bạn có thể quan tâm