1. Trang chủ
  2. » Giáo án - Bài giảng

Slide bài giảng lập trình C

177 793 2

Đ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 177
Dung lượng 3,59 MB

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

Nội dung

Mục tiêu môn học: Cung cấp cho sinh viên các kỹ năng cơ bản để lập trình giải quyết các vấn đề, bài toán. Các chương trình được thể hiện bằng NNLT C. Riêng về ngôn ngữ lập trình C, các sinh viên được cung cấp các kỹ năng:Đọc và viết được chương trình đơn giảnHiểu cấu trúc ngôn ngữSử dụng thành thạo các thư viện chuẩnNhận biết và sửa chữa các lỗi thường gặp khi lập trìnhCác môn học tiên quyết: Nhập môn tin học.include intmain(void){inta, b;printf(“Nhap 2 so ngguyen: );scanf(%i %i, a, b);printf(%i %i = %i, a, b, a b);return 0;

Trang 1

NHẬP MÔN LẬP TRÌNH

Dành cho các l p ớ

Dành cho các l p ớ

Cao Đ ng Công Ngh Thông Tin ẳ ệ

Cao Đ ng Công Ngh Thông Tin ẳ ệ

Trang 2

Đề cương bài giảng

Thời lượng: 45 tiết

Mục tiêu môn học: Cung cấp cho sinh viên các kỹ năng cơ

bản để lập trình giải quyết các vấn đề, bài toán Các chương trình được thể hiện bằng NNLT C Riêng về ngôn ngữ lập trình C, các sinh viên được cung cấp các kỹ năng:

Đọc và viết được chương trình đơn giản

Hiểu cấu trúc ngôn ngữ

Sử dụng thành thạo các thư viện chuẩn

Nhận biết và sửa chữa các lỗi thường gặp khi lập trình

Các môn học tiên quyết: Nhập môn tin học

Nội dung bài giảng:

Trang 3

Nội dung môn học

Trang 4

Tổng quan

 Khái niệm chương trình – lập trình

 Cấu trúc một chương trình đơn giản

 Khái niệm Thuật toán – biểu diễn thuật toán

 Khái niệm NNLT, sơ lược lịch sử phát triển NNLT

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

Trang 5

Các thành phần của

chương trình C

Trang 6

Ví dụ chương trình C

/*VIDU.CPP*/

#include <stdio.h>

int main() {

printf(“Nhap mon lap trinh\n"); printf(“Vi du don gian\n");

printf(“Nhap mon lap trinh\n"); printf(“Vi du don gian\n");

Trang 7

Một số lưu ý từ ví dụ

 Phần ghi chú được trình biên dịch bỏ qua

 Phân biệt chữ in hoa và chữ in thường

 Câu lệnh luôn được kết thúc bằng dấu ;

 Chuỗi ký tự phải ghi giữa cặp nháy kép “

 In xuống dòng dùng ký tự \n

 Chương trình nên thông báo kết quả thực hiện với hệ

thống: Tốt – 0, có lỗi – 1, 2, 3 …

 Chương trình có một hàm main

Trang 8

Ví dụ 2

#include <stdio.h>

int main(void) {

Trang 9

Biến – Variable

int a , b ;

 Chứa dữ liệu có thể thay đổi được trong chương trình

 Muốn sử dụng phải khai báo

 Tên: gồm chữ cái, ký số, dấu nối (_), không được bắt

đầu bằng ký số

 Biến khai báo trong khối được gọi là biến cục bộ,

không thuộc khối nào được gọi là biến toàn cục

 Có tác dụng trong toàn khối kể từ lúc được khai báo

Trang 10

Lệnh xuất - printf

Xuất dữ liệu ra màn hình:

printf ( " %d - %d = %d \n" , a , b , a - b );

 Các ký tự hằng được in nguyên văn

 Các ký tự định dạng được thay bằng giá trị của biểu

thức tương ứng:

 %d: ký tự định dạng số nguyên kiểu int

 Các ký tự điều khiển: \n – xuống dòng; \t – dấu tab;

\\ – dấu \; \“– dấu “ …

Thư viện: stdio.hThư viện:

Trang 11

 Dữ liệu phải được nhập vào các biến.

 Trước tên biến phải ghi dấu &Trước tên biến phải ghi dấu & - toán tử địa chỉ Nếu

không có toán tử địa chỉ, giá trị của biến sẽ không được cập nhật

Thư viện: stdio.hThư viện:

Trang 12

Kiểu dữ liệu cơ sở

trong C

Trang 13

Các kiểu dữ liệucủa C

 C hỗ trợ khá nhiều kiểu

Trang 14

Hằng – Constant

const int days_in_week int days_in_week = 7;

Chứa dữ liệu không thể thay đổi được trong chương trình

 Muốn sử dụng phải khai báo.

 Phải có kiểu (tương tự như biến)

 Hằng số có chứa “.” hoặc “e” có kiểu double (3.5, 1e-7, -1.29e15)

 Hằng số kiểu float kết thúc bởi “F” (3.5F, 1e-7F)

 Hằng số kiểu long double kết thúc bởi “L” (-1.29e15L, 1e-7L)

 Hằng số không có “.”, “e” hoặc “F” có kiểu int. Ví dụ: 10000, -35

(Một vài trình biên dịch tự động chuyển thành long int nếu giá trị hằng tràn kiểu int)

 Khai báo hằng long int phải thêm vào cuối “L” (9000000L)

Trang 15

Ví dụ về hằng

Các hằng pi, days_in_week, sunday được tạo với từ khóa const

#include <stdio.h>

int main(void) {

Trang 16

int day = SUNDAY;

long flag = USE_API;

#include <stdio.h>

#define DAYS_IN_WEEK 7

int day = SUNDAY;

long flag = USE_API;

Tìm từ “PI”, thay bằng 3.1415

Không thay thế “PI”

Lưu ý: không

có “=” và “;”

Trang 17

Toán tử trong C

Trang 18

Toán tử sizeofToán tử sizeof

 Biểu thức điều kiện

Trang 19

“/” cho kết quả phụ thuộc vào kiểu của các toán hạng

“%” không thực hiện được với các số thực

Trang 20

Ví dụ về toán tử chia “/”

 Trình biên dịch dựa vào kiểu của các toán hạng để quyết định phép chia tương ứng

int main(void) {

int i = 5, j = 4, k; double f = 5.0, g = 4.0, h;

int i = 5, j = 4, k; double f = 5.0, g = 4.0, h;

“i”, “j” kiểu int, “/” là

phép chia lấy nguyên

Trang 21

Ép kiểu

Ép kiểu làm thay đổi tạm thời Ép kiểu làm thay đổi tạm thời kiểu của một biến trong một

biểu thức

int main(void) {

Trang 23

Trước hay sau ?

Thứ tự thực hiện các toán tử ++ và phụ thuộc vào vị trí của chúng (trước hay sau) so với biến:

i=6, j=6 i=5, j=6

Trang 24

Kiểu luận lý trong C

 Trong C không có kiểu dữ liệu luận lý (thể hiện các

giá trị ĐÚNG – SAI), thay vào đó các biểu thức so sánh sẽ cho kết quả là SỐ

 Giá trị 0 (0.0) ứng với kết quả SAI (FALSE)

 Các giá trị khác như 1, -3.5, -7, 10.4, … (khác không)Các giá trị khác như 1, -3.5, -7, 10.4, … (khác không)

đều được xem là ĐÚNG (TRUE)

Trang 27

Toán tử luận lý

 Lưu ý khi sử dụng các toán tử luận lý:

Nếu không có các dấu (), các phép toán được thực hiện từ trái sang phải

if(i < 10 && a[i] > 0)

Trang 28

Toán tử trên bit

 Các toán tử trên bit chỉ có tác dụng trên các kiểu số nguyên:

Trang 29

Phép gán

 Có thể sử dụng liên tiếp nhiều phép gán

 Giá trị được gán sẽ sẵn sàng cho lệnh kế tiếp

n đều nhận giá trị 22.

“j” được gán 93, giá trị 93 sẽ được in ra màn hình

Trang 30

Lưu ý:

 Vế trái phép gán luôn phải là biếnVế trái phép gán luôn phải là biến

 Không được nhầm lẫn giữa so sánh bằng “==” và gán “=”

#include <stdio.h>

int main(void) {

Trang 32

printf("\"big\" is %u bytes\n", sizeof(big));

printf("a short is %u bytes\n", sizeof(short));

printf("a double is %u bytes\n", sizeof (double));

printf("\"big\" is %u bytes\n", sizeof(big));

printf("a short is %u bytes\n", sizeof(short));

printf("a double is %u bytes\n", sizeof (double));

Trang 33

Biểu thức chọn theo điều kiện

(

(điều kiện điều kiện ) ? BT1 ) ? BT1 : BT2 : BT2

 Biểu thức nhận giá trị BT1Biểu thức nhận giá trị BT1 nếu điều kiện khác 0 (ĐÚNG),

Trang 36

Cấu trúc điều khiển

Trang 37

Cấu trúc điều khiển

 Lệnh rẽ nhánh: if – else

 Lệnh rẽ nhiều nhánh: switch

 Vòng lặp: while, do while, for

 Các từ khóa: break và continue

Trang 38

Lệnh rẽ nhánh if

Cú pháp:

if (điều kiện ( điều kiện )

S ;

 Điều kiện: biểu thức cho kết quả SỐ: biểu thức cho kết quả SỐ; phải

được đặt giữa cặp ngoặc đơn ()

 S phải là 1 câu lệnh, nếu nhiều hơn 1 lệnh, các

lệnh phải được đặt giữa cặp ngoặc nhọn {} –

printf(“So lon la: %ds\n“, max);

scanf("%d %d", &a, &b);

0

≠0

Trang 39

Lưu ý

 Nếu đặt dấu chấm phẩy (;) ở ngay sau biểu thức điều kiện thì lệnh S của if xem như “

thì lệnh S của if xem như “KHÔNG LÀM GÌKHÔNG LÀM GÌ”

printf(“Nhap mot so nguyen: ");

Trang 40

 Phần lệnh else có thể thêm vào trong câu lệnh

if để chỉ thị các lệnh thực hiện khi điều kiện

printf(“So lon la: %d\n“, max);

scanf("%d %d", &a, &b);

0

≠0 S e

Trang 41

printf("i chap nhan duoc\n");

i chap nhan duoc

printf("i la so am\n");

i la so am

Trang 42

Cấu trúc nhiều chọn lựa – switch

Cú pháp:

switch (biểu thức ( biểu thức )

{

case gt 1 : S : S 1 ; [break ; [ break ;]

case gt 2 : S : S 2 ; [break ; [ break ;]

Trang 43

Ví dụ lệnh switch

switch(c) {

case 'a': case 'A':

printf(“Dien tich = %.2f\n", r * r * pi); break;

case 'a': case 'A':

printf(“Dien tich = %.2f\n", r * r * pi);

break ; case 'c': case 'C':

printf(“Chu vi = %.2f\n", 2 * r * pi);

break ; case 'q':

printf(“Thoat\n");

break ; default :

printf(“Chon khong hop le\n");

}

Trang 44

Một số lưu ý – switch

 Nếu không có giá trị nào khớp, các lệnh trong phần

default sẽ được thực thi; và nếu không có defaultcũng không xảy ra lỗi

 Lệnh breakLệnh break rất quan trọng

i = 3;

switch(i) { case 3: printf("i = 3\n"); case 2: printf("i = 2\n"); case 1: printf("i = 1\n"); }

i = 3;

switch(i) { case 3: printf("i = 3\n"); case 2: printf("i = 2\n"); case 1: printf("i = 1\n"); }

Trang 45

biểu thức

S 1 ; break;

gt1

S 2 ; break;

Trang 46

Ví dụ khác – switch

//Doan chuong trinh doc so 0 9 switch(so) {

case 0: printf(“khong\n"); case 1: printf(“mot\n"); case 2: printf(“hai\n"); case 3: printf(“ba");

Trang 47

Lệnh lặp while

Cú pháp: while (điều kiện ( điều kiện )

S ;

 Điều kiện: biểu thức cho kết quả SỐ: biểu thức cho kết quả SỐ;

phải được đặt giữa cặp ngoặc đơn ()

 S phải là 1 câu lệnh, nếu nhiều hơn 1

lệnh, các lệnh phải được đặt giữa cặp

S

S

Đ

Trang 48

Lưu ý dấu chấm phẩy

Lưu ý dấu chấm phẩy ; ;

 Dấu ‘;’ đặt ngay sau biểu thức điều kiện đồng nghĩa với lệnh

Đôi khi người lập trình cố ý sử dụng lệnh rỗngĐôi khi người lập trình cố ý sử dụng lệnh rỗng

Trang 49

Lệnh lặp do while

Cú pháp:

do

S ;

while (điều kiện ( điều kiện );

 Điều kiện: biểu thức cho kết quả SỐ: biểu thức cho kết quả SỐ; phải

được đặt giữa cặp ngoặc đơn ()

 S phải là 1 câu lệnh, nếu nhiều hơn 1 lệnh,

các lệnh phải được đặt giữa cặp ngoặc

nhọn {} –

nhọn {} – khối lệnhkhối lệnh.

điều kiện

S

S

Đ

Trang 51

j = -10 stop

Trang 53

Bài tập 2

 Viết chương trình yêu cầu người dùng nhập vào một ký tự bất kỳ Sau khi nhập, chương trình sẽ hỏi người dùng có muốn nhập tiếp ký tự khác hay không ( Y/N)?

 Nếu trả lời ‘n’ hoặc ‘N’, chương trình kết thúc

 Nếu trả lời ‘y’ hoặc ‘Y’ , sẽ cho phép người dùng nhập liên tục các ký tự cho đến khi người dùng nhập vào

ký tự ‘e’ hoặc ‘E’ Lúc này, chương trình sẽ hỏi lại người dùng có muốn nhập ký tự tiếp không? Và lặp lại các bước thực hiện như trên

Trang 55

for(j = 5; j > 0; j ) {

printf("j = %d ", j);

printf("%s\n", ((j%2)==0)?“chan":“le"); }

Trang 56

Bước lặp trong for

 C không giới hạn độ lớn của bước lặp trong for

Trang 57

Nói thêm về for

 Phần lệnh khởi động và lệnh điều khiển có thể gồm nhiều lệnh đơn giản, các lệnh này cách nhau bởi dấu phẩy (,)

Dùng while sẽ hợp

lý hơn Vòng lặp không kết thúc

Trang 58

printf(“j = %d\n", j); nhap mot so nguyen : int

khong hop le, nhap lai nhap mot so nguyen: 16

j = 16

nhap mot so nguyen : int

khong hop le, nhap lai nhap mot so nguyen: 16

j = 16

Nếu scanf trả về 1, chương trình thoát khỏi vòng lặp for

Trang 59

thì bỏ qua lệnh in j

Trang 61

Cấu trúc điều khiển

Trang 62

Cấu trúc điều khiển

 Lệnh rẽ nhánh: if – else

 Lệnh rẽ nhiều nhánh: switch

 Vòng lặp: while, do while, for

 Các từ khóa: break và continue

Trang 63

Lệnh rẽ nhánh if

Cú pháp:

if (điều kiện ( điều kiện )

S ;

 Điều kiện: biểu thức cho kết quả SỐ: biểu thức cho kết quả SỐ; phải

được đặt giữa cặp ngoặc đơn ()

 S phải là 1 câu lệnh, nếu nhiều hơn 1 lệnh, các

lệnh phải được đặt giữa cặp ngoặc nhọn {} –

printf(“So lon la: %ds\n“, max);

scanf("%d %d", &a, &b);

0

≠0

Trang 64

Lưu ý

 Nếu đặt dấu chấm phẩy (;) ở ngay sau biểu thức điều kiện thì lệnh S của if xem như “

thì lệnh S của if xem như “KHÔNG LÀM GÌKHÔNG LÀM GÌ”

printf(“Nhap mot so nguyen: ");

Trang 65

 Phần lệnh else có thể thêm vào trong câu lệnh

if để chỉ thị các lệnh thực hiện khi điều kiện

printf(“So lon la: %d\n“, max);

scanf("%d %d", &a, &b);

0

≠0 S e

Trang 66

printf("i chap nhan duoc\n");

i chap nhan duoc

printf("i la so am\n");

i la so am

Trang 67

Cấu trúc nhiều chọn lựa – switch

Cú pháp:

switch (biểu thức ( biểu thức )

{

case gt 1 : S : S 1 ; [break ; [ break ;]

case gt 2 : S : S 2 ; [break ; [ break ;]

Trang 68

Ví dụ lệnh switch

switch(c) {

case 'a': case 'A':

printf(“Dien tich = %.2f\n", r * r * pi); break;

case 'a': case 'A':

printf(“Dien tich = %.2f\n", r * r * pi);

break ; case 'c': case 'C':

printf(“Chu vi = %.2f\n", 2 * r * pi);

break ; case 'q':

printf(“Thoat\n");

break ; default :

printf(“Chon khong hop le\n");

}

Trang 69

Một số lưu ý – switch

 Nếu không có giá trị nào khớp, các lệnh trong phần

default sẽ được thực thi; và nếu không có defaultcũng không xảy ra lỗi

 Lệnh breakLệnh break rất quan trọng

i = 3;

switch(i) { case 3: printf("i = 3\n"); case 2: printf("i = 2\n"); case 1: printf("i = 1\n"); }

i = 3;

switch(i) { case 3: printf("i = 3\n"); case 2: printf("i = 2\n"); case 1: printf("i = 1\n"); }

Trang 70

biểu thức

S 1 ; break;

gt1

S 2 ; break;

Trang 71

Ví dụ khác – switch

//Doan chuong trinh doc so 0 9 switch(so) {

case 0: printf(“khong\n"); case 1: printf(“mot\n"); case 2: printf(“hai\n"); case 3: printf(“ba");

Trang 72

Lệnh lặp while

Cú pháp: while (điều kiện ( điều kiện )

S ;

 Điều kiện: biểu thức cho kết quả SỐ: biểu thức cho kết quả SỐ;

phải được đặt giữa cặp ngoặc đơn ()

 S phải là 1 câu lệnh, nếu nhiều hơn 1

lệnh, các lệnh phải được đặt giữa cặp

S

S

Đ

Trang 73

Lưu ý dấu chấm phẩy

Lưu ý dấu chấm phẩy ; ;

 Dấu ‘;’ đặt ngay sau biểu thức điều kiện đồng nghĩa với lệnh

Đôi khi người lập trình cố ý sử dụng lệnh rỗngĐôi khi người lập trình cố ý sử dụng lệnh rỗng

Trang 74

Lệnh lặp do while

Cú pháp:

do

S ;

while (điều kiện ( điều kiện );

 Điều kiện: biểu thức cho kết quả SỐ: biểu thức cho kết quả SỐ; phải

được đặt giữa cặp ngoặc đơn ()

 S phải là 1 câu lệnh, nếu nhiều hơn 1 lệnh,

các lệnh phải được đặt giữa cặp ngoặc

nhọn {} –

nhọn {} – khối lệnhkhối lệnh.

điều kiện

S

S

Đ

Trang 76

j = -10 stop

Trang 78

Bài tập 2

 Viết chương trình yêu cầu người dùng nhập vào một ký tự bất kỳ Sau khi nhập, chương trình sẽ hỏi người dùng có muốn nhập tiếp ký tự khác hay không ( Y/N)?

 Nếu trả lời ‘n’ hoặc ‘N’, chương trình kết thúc

 Nếu trả lời ‘y’ hoặc ‘Y’ , sẽ cho phép người dùng nhập liên tục các ký tự cho đến khi người dùng nhập vào

ký tự ‘e’ hoặc ‘E’ Lúc này, chương trình sẽ hỏi lại người dùng có muốn nhập ký tự tiếp không? Và lặp lại các bước thực hiện như trên

Trang 80

for(j = 5; j > 0; j ) {

printf("j = %d ", j);

printf("%s\n", ((j%2)==0)?“chan":“le"); }

Trang 81

Bước lặp trong for

 C không giới hạn độ lớn của bước lặp trong for

Trang 82

Nói thêm về for

 Phần lệnh khởi động và lệnh điều khiển có thể gồm nhiều lệnh đơn giản, các lệnh này cách nhau bởi dấu phẩy (,)

Dùng while sẽ hợp

lý hơn Vòng lặp không kết thúc

Trang 83

printf(“j = %d\n", j); nhap mot so nguyen : int

khong hop le, nhap lai nhap mot so nguyen: 16

j = 16

nhap mot so nguyen : int

khong hop le, nhap lai nhap mot so nguyen: 16

j = 16

Nếu scanf trả về 1, chương trình thoát khỏi vòng lặp for

Trang 84

thì bỏ qua lệnh in j

Trang 86

Hàm - Function

Trang 87

Hàm - Function

 Một số nguyên tắc

 Cách khai báo và gọi thực hiện

 Prototype của hàm

 Truyền tham số cho hàm

 Biến toàn cục, biến cục bộ, biến static, biến thanh ghi,

 Cách thức C thực hiện các lời gọi hàm – stack

Trang 88

Một số nguyên tắc

 Các hàm trong NNLT C đều ngang cấp với nhau:

 Hàm không được khai báo lồng nhau

 Thứ tự khai báo không quan trọng

 Hàm có thể nhận và xử lý nhiều tham số hoặc không có tham số nào

 Hàm có thể trả về một giá trị hoặc không

 Biến khai báo trong hàm F chỉ có giá trị trong F, không sử dụng được biến này trong các hàm khác được

Trang 89

nhận vào 2 tham số khi được gọi

kiểu của giá trị trả

về

giá trị được trả về qua lệnh return

Trang 90

Ví dụ: gọi thực hiện hàm Power

Trang 92

 Dòng khai báo

double Power(double, int);

được hiểu là khai báo prototype của hàm Power

 Được dùng khi chương trình sử dụng một hàm trước khi khai báo

 Khai báo prototype thông báo cho trình biên dịch biết kiểu của giá trị trả về và mô tả chi tiết về các tham số của hàm

 Các hàm thư viện chuẩn được khai báo prototype trong các tập tin header (stdio.h, conio.h, …)

 Các hàm do lập trình viên tự xây dựng phải tự khai báo prototype

Trang 94

float g=6.5;

void main() {

int i = 5, j, k = 2;

float f = 2.8F ;

d = 3.7;

} void F(int v) {

int i = 5, j, k = 2;

float f = 2.8F ;

d = 3.7;

} void F(int v) {

 Biến Biến toàn toàn cục: cục:

Không thuộc khối

“f” của hàm F, không

phải của main

Ngày đăng: 11/05/2015, 23:13

TỪ KHÓA LIÊN QUAN

w