Để thêm file soạn thảo của chương trình, trong cửa sổ Solution Explorer, click phải vào dòng Source Files chọn Add -> New Item.. Khi Debug, nếu chương trình co lỗi về mặt cú pháp, VS sẽ
Trang 1ĐẠI HỌC SỰ PHẠM KỸ THUẬT HỒ CHÍ MINH
KHOA CƠ KHÍ CHẾ TẠO MÁY
BỘ MÔN CƠ ĐIỆN TỬ
TÀI LIỆU THỰC TẬP LẬP TRÌNH ỨNG DỤNG TRONG KỸ THUẬT
Tp HCM, 2016 (Lưu hành nội bộ)
Trang 2Bài 1:
LẬP TRÌNH C/C++ CĂN BẢN: Biến, Toán tử,
Cấu trúc điều kiện, Cấu trúc lặp
I MỤC ĐÍCH YÊU CẦU:
- Phân tích yêu cầu, xây dựng giải thuật và viết code theo yêu cầu
- Xây dựng những chương trình cơ bản bằng ngôn ngữ C/C++
- Hình thành kỹ năng phát hiện và sửa lỗi khi lập trình
II HƯỚNG DẪN LÝ THUYẾT:
1 Giới thiệu phần mềm Visual Studio:
Tạo dự án (project):
Mở chương trình VS 2008 Trong màn hình khởi động, chọn File - > New -> Project
Trong cửa sổ New Project : Chọn kiểu ngôn ngữ là Visual C++, trong cửa sổ Templates chọn Empty Project
Nhập tên của project vào ô Name và chọn thư mục chứa project trong ô Location
Nhấp OK
Trang 3Để thêm file soạn thảo của chương trình, trong cửa sổ Solution Explorer, click phải vào dòng Source Files chọn Add -> New Item
Chọn C++ file (.cpp) và nhập tên vào ô Name
Trang 4Xuất hiện giao diện để lập trình, giao diện này bao gồm 3 cửa sổ:
Solution Explorer: cửa số quản lý của project
Source file (.cpp): phần soạn thảo câu lệnh của chương trình
Output: cửa sổ thông báo khi biên dịch chương trình
Sau khi hoàn tất chương trình, nhấn vào biểu tượng Debug để chạy chương trình (hoặc nhấn F5) Khi Debug, nếu chương trình co lỗi về mặt cú pháp, VS sẽ thông báo các lỗi này trong cửa sổ Error, nhấp kép chuột vào dòng thông báo lỗi để biết vị trí lỗi
Trang 5Nếu không thấy cửa sổ Error, trên thanh công cụ chọn View -> Other Windows -> Error List
float : số thực 32 bit (7 chữ số có nghĩa) (VD: float x = -0.1245;)
double : số thực 64 bit (15 chữ số có nghĩa) (VD: double x = 10.56;)
Trang 6! : Phép NOT && : Phép AND || : Phép OR
2.3 Cấu trúc điều kiện, cấu trúc lặp:
a) Cấu trúc điều kiện if else if else:
Thực hiện đoạn lệnh Statementn khi điều kiện thứ n là đúng
b) Cấu trúc điều kiện switch case :
Trang 7Cấu trúc “switch” là cấu trúc điều kiện nhiều lựa chọn
Cú pháp :
switch (expression) // expression là một biểu thức
{
case constant1: // Nếu kết quả biểu thức = constant1 thì thực hiện
Statement1; đoạn mã lệnh Statement1
break; // Sau khi kết thúc Statement1 thì thoát khỏi
case constant2: // Nếu kết quả biểu thức = constant2 thì thực hiện
Statement2; đoạn mã lệnh Statement2
break; // Sau khi kết thúc Statement2 thì thoát khỏi
initialization: tạo giá trị ban đầu cho biến trung gian
condition: điều kiện
increment: thay đổi giá trị biến trung gian sau mỗi vòng lặp
d) Cấu trúc lặp while, do-while:
Trang 8printf ("chuỗi định dạng", đối mục 1, đối mục 2,…);
- printf: tên hàm, phải viết bằng chữ thường
- đối mục 1,…: là các mục dữ kiện cần in ra màn hình Các đối mục này có thể là biến, hằng hoặc biểu thức phải được định trị trước khi in ra
- chuỗi định dạng: được đặt trong cặp nháy kép (" "), gồm 3 loại:
+ Đối với chuỗi kí tự ghi như thế nào in ra giống như vậy
+ Đối với những kí tự chuyển đổi dạng thức cho phép kết xuất giá trị của các đối mục
ra màn hình tạm gọi là mã định dạng Sau đây là các dấu mô tả định dạng:
%x : Số nguyên thập phân không dấu
%u : Số nguyên hex không dấu
%o : Số nguyên bát phân không dấu
l : Tiền tố dùng kèm với %d, %u, %x, %o để chỉ số nguyên dài (ví dụ %ld) + Các ký tự điều khiển và ký tự đặc biệt:
\n: Nhảy xuống dòng kế tiếp canh về cột đầu tiên
\t : Canh cột tab ngang
\r : Nhảy về đầu hàng, không xuống hàng
\\ : In ra dấu \
\' : In ra dấu '
%%: In ra dấu %
VD : int a = 5, b = 3;
Trang 9printf ("%d x %d = %d", a,b,a*b);
Muốn nhập dữ liệu từ bàn phím, ta dùng hàm scanf():
scanf ("chuỗi định dạng", &đối mục 1, &đối mục 2,…]);
- scanf: tên hàm, phải viết bằng chữ thường
- khung định dạng: được đặt trong cặp nháy kép (" ") là hình ảnh dạng dữ liệu nhập vào
- đối mục 1,…: là danh sách các biến cách nhau bởi dấu phẩy, mỗi biến sẽ tiếp nhận một giá trị nhập vào
- & : toán tử địa chỉ
Trang 10}
Bài 2 :
Viết chương trình với các yêu cầu sau
- Cho phép người sử dụng nhập vào một số nguyên Nếu số nhập vào >999 hoặc <-999 thì yêu cầu
người sử dụng nhập lại số
- In ra màn hình chữ số hằng trăm, hàng chục và hàng đơn vị tương ứng của số vừa nhập
Hướng dẫn:
- Nhập giá trị từ bàn phím: scanf("%d",&x);
- Kiểm tra giá trị của x: if (x>999 || x<-999)
- Nhảy lại đoạn code nhập giá trị khi giá trị x không thỏa mãn: goto X;
- Tính giá trị trăm, chục , đơn vị
Trang 11printf("\nSo lon nhat la %f",max);
printf("\nSo nho nhat la %f",min);
Trang 13printf ("\n Chuong trinh phan loai hoc sinh theo diem ");
tt: printf ("\n VAO SO LIEU ");
printf("\n diem = "); scanf("%d",&diem);
if(( diem >= 0) && (diem <= 3))
printf(" Kem \n");
else if( diem == 4)
printf(" Yeu \n");
else if(( diem >= 5) && (diem <= 6))
printf(" Trung binh \n");
else if( diem >= 7 && diem <= 8)
printf(" Kha \n");
else if (( diem >= 9) && (diem <= 10))
printf(" Gioi \n");
else
printf(" Vao sai \n");
printf("\n tiep tuc 1 / stop 0 : ");
Trang 14{
int n, i, j;
printf("\nNhap gia tri N : ");
scanf("%d", &n);
printf("\nCac so nguyen to nho hon %d la : \n",n);
for (i=2; i<n; i++)
Bài 1: Viết chương trình nhập vào dòng điện I, điện áp V Tính và in ra giá trị điện trở R
Bài 2: Viết chương trình nhập vào giá trị điện dung C, điện cảm L và tần số f Tính và in ra tổng trở Z
của mạch Cho biết:
𝑍 = 𝑋𝐿− 𝑋𝐶 Ω = 2 𝜋 𝑓 𝐿 −2 𝜋 𝑓 𝐶1 Ω
RV
I
Trang 15Bài 3: Viết chương trình nhập vào giá trị điện dung C, điện cảm L Tính và in ra tần số cộng hưởng Fch của mạch L C nối tiếp và trở kháng cuộn dây tại Fch Cho biết:
Dựa trên các thông số trên, viết chương trình có các chức năng sau :
Cho phép người sử dụng nhập vào các số km đi được
Xuất ra màn hình tiền cước
Bài 5 : Có 3 loại giấy bạc 1000đ, 2000đ, 5000đ Viết chương trình in các phương án kết hợp các loại giấy bạc trên cho ra 10000đ VD: 10.000đ = 5000đ + 2x2000đ + 1000đ
Bài 6 : Viết chương trình tính và in ra màn hình tổng nghịch đảo của n số tự nhiên đầu tiên (kết quả làm
tròn đến 10 chữ số lẻ)
Bài 7 : Viết chương trình tìm và in ra các số tự nhiên(<=1000) thỏa tính chất sau: giá trị của số đó bằng
tổng các ước số của nó Ví dụ: 6 = 1 + 2 + 3
Trang 16Bài 2:
LẬP TRÌNH C CĂN BẢN - Mảng
I MỤC ĐÍCH YÊU CẦU:
- Phân tích yêu cầu, xây dựng giải thuật và viết code theo yêu cầu
- Xây dựng những chương trình cơ bản bằng ngôn ngữ C/C++
- Hình thành kỹ năng phát hiện và sửa lỗi khi lập trình
II HƯỚNG DẪN LÝ THUYẾT:
Mảng nhiều chiều : type name[i1][i2] [in]; //n là số chiều của mảng
VD : int a[4]; //mảng 1 chiều 4 phần tử, phần tử có kiểu interger
int b[3][3]; //mảng 2 chiều 3x3
b) Gán giá trị và truy xuất phần tử:
Muốn gán giá trị cho mảng, ta phải gán giá trị cho từng phần tử một Để truy xuất đến từng phần
tử của mảng, ta dùng cú pháp :
name[i1][i2]…[in] = Value; //name là tên mảng, i1,i2,…,in là vị trí của phần tử trong mảng
VD : b[0][0] = 5;
Gán trực tiếp: khi đã biết các giá trị phần tử của mảng, ta có thể gán giá trị trực tiếp cho mảng
mà không cần gán giá trị cho từng phần tử riêng lẻ bằng cách liệt kê tất cả các giá trị phần tử trong dấu { },các giá trị cách nhau bởi dấu ","
name = {a1,a2,a3 }; //a1,a2,a3, an lần lượt là giá trị của phần tử trong mảng
hoặc
name = {{a1, ,an},{b1, bn},{ }}; // a1 an lần lượt là giá trị của phần tử thuộc hàng
thứ 1 trong mảng nhiều chiều
VD : int a[5] = {1,2,3,4,5};
Trang 18b) Hoán đổi hai phần tử của mang:
Để hoán đổi hai phần tử của mảng, cần sử dụng thêm 1 biến tạm
Trang 19M[i][j] = rand()%10;
} }
printf("Mang 3x3 :\n");
for (int i = 0;i<3;i++)
{
Trang 20for(int j=0; j<3; j++) {
printf("%d\t",M[i][j]);
} printf("\n");
}
getch();
}
Bài 2 :
Viết chương trình với các yêu cầu sau
- Cho phép người sử dụng nhập các giá trị cho một mảng số nguyên 3x3
printf( "Nhap mang:\n" );
for ( int i = 0;i<3;i++)
{
for ( int j=0; j<3; j++) {
printf( "M[%d][%d] = " ,i,j);
scanf( "%d" ,&M[i][j]);
}
Trang 21printf( "%d\t" ,M[i][j]);
} printf( "\n" );
- Tạo sẵn 1 ma trận số nguyên (3x3) Xuất ma trận ra màn hình
- Tìm giá trị phần tử lớn nhất và nhỏ nhất Xuất các giá trị này ra màn hình
Trang 22for(int j=0; j<3; j++) {
printf("M[%d][%d] = ",i,j);
scanf("%d",&M[i][j]);
} }
printf("%d\t",M[i][j]);
} printf("\n");
}
getch();
}
Bài 4 :
Viết chương trình giao diện console theo yêu cầu sau :
- In ra màn hình hình tam giác vuông cân (cạnh góc vuông = 10) được tạo thành từ các kí tự dấu sao (*)
Trang 23if(i>=j) M[i][j] = '*';
else M[i][j] = ' ';
} }
printf("Tam giac vuong can :\n");
for (int i = 0;i<10;i++)
{
for(int j=0; j<10; j++) {
printf("%c",M[i][j]);
} printf("\n");
Trang 24Bài 2: Viết chương trình tạo mảng 2 chiều 3 hàng 3 cột (giá trị nhập từ bàn phím) Hiển thị mảng vừa
nhập ra màn hình
- Cho phép người sử dụng chọn lựa: F1 để tính tổng , F2 để tính tích
- F1: Tính tổng giá trị các phần tử của mảng
- F2: Tính tích giá trị các phần tử của mảng
- Xuất giá trị tính toán ra màn hình
Bài 3: Viết chương trình tạo mảng 1 chiều gồm 10 phần tử (giá trị nhập từ bàn phím) Hiển thị mảng
vừa nhập ra màn hình
a/ Hiển thị mảng theo thứ tự ngược lại
b/ Tìm giá trị min, max và giá trị trung bình của các phần tử trong mảng Hiển thị các giá trị vừa tìm được
Bài 4 : Tạo sẵn 1 mảng số nguyên (3x3) Xuất mảng ra màn hình
- Tìm giá trị phần tử xuất hiện nhiều nhất trong mảng Xuất giá trị này ra màn hình
Bài 5 : Tạo sẵn một dữ liệu (mảng 1 chiều 20 phần tử) có các giá trị ngẫu nhiên
- Hãy tự tạo 1 mảng để lưu giữ các dữ liệu này Hiển thị mảng ban đầu ra màn hình
- Thực hiện lọc trung bình x3 theo công thức sau:
- M[i] = (M[i-1] + M[i] + M[i+1])/3
- M[0] = (M[0] + M[1])/2
- M[20] = (M[20]+ M[19])/2
- Xuất giá trị của dữ liệu sau khi lọc ra màn hình
Bài 6 : Viết chương trình tạo mảng 1 chiều a gồm 20 phần tử Mỗi phần tử mang giá trị ngẫu nhiên
thuộc (-10, 10) Sắp xếp mảng theo thứ tự tăng dần của các phần tử Hiển thị mảng sau khi sắp xếp ra màn hình
Bài 7:
Viết chương trình cho phép người dùng nhập giá trị cho 2 mảng số nguyên A,B (3x3)
- Tính AxB, BxA và hiển thị kết quả ra màn hình
Trang 26Bài 3:
LẬP TRÌNH C CĂN BẢN - Chuỗi kí tự
I MỤC ĐÍCH YÊU CẦU:
- Phân tích yêu cầu, xây dựng giải thuật và viết code theo yêu cầu
- Xây dựng những chương trình cơ bản bằng ngôn ngữ C/C++
- Hình thành kỹ năng phát hiện và sửa lỗi khi lập trình
II HƯỚNG DẪN LÝ THUYẾT:
2.1 Chuỗi kí tự (String):
a) Khai báo chuỗi:
Chuỗi được xem như là một mảng 1 chiều gồm các phần tử có kiểu char như mẫu tự, con số và bất cứ ký tự đặc biệt như +, -, *, /, $, #…
Theo quy ước, một chuỗi sẽ được kết thúc bởi ký tự null ('\0' : kí tự rỗng) Ví dụ: chuỗi
"Infoworld" được lưu trữ như sau:
Cú pháp khai báo :
char name[n]; //name là tên chuỗi, n là số phần tử của chuỗi
VD : char a[4]; //chuỗi a gồm 4 phần tử
b) Gán giá trị và truy xuất phần tử:
Muốn gán giá trị cho chuỗi, ta có thể gán giá trị cho toàn bộ chuỗi hoặc cho từng phần tử của chuỗi Khi gán giá trị cho chuỗi, ta phải đặt giá trị này trong dấu " ", khi gán giá trị cho từng phần tử của chuỗi, ta phải đặt giá trị này trong dấu ' '
name = "Value"; //name là tên chuỗi, Value là giá trị gán
name[i] = 'Value'; //name là tên chuỗi,i là vị trí phần tử của chuỗi, Value là giá trị gán
VD : char a[6] = "hello"; //gán giá trị cho chuỗi
a[0] = 'H'; //gán giá trị cho phần tử đầu tiên chuỗi
b) Nhập/Xuất chuỗi ra màn hình:
Nhập chuỗi từ bàn phím: gets()
Trang 27Xuất chuỗi ra màn hình: puts()
Sử dụng hàm gets, puts phải khai báo #include <stdio.h>
double atof(const char *s); //Phải khai báo math.h hoặc stdlib.h
Chuyển đổi 1 chuỗi sang giá trị double
int atoi(const char *s); // Phải khai báo stdlib.h
Chuyển đổi 1 chuỗi sang giá trị int
char *itoa(int value, char *string, int radix); //Phải khai báo stdlib.h
Chuyển đổi số nguyên value sang chuỗi string theo cơ số radix
Trang 28int tolower(int ch); //Phải khai báo ctype.h
Đổi 1 kí tự từ chữ hoa sang chữ thường
VD :
int len, i;
char *string = "THIS IS A STRING"; len = strlen(string);
for (i = 0; i < len; i++) string[i] = tolower(string[i]); //đổi từ kí tự trong string thành chữ thường
Hàm toupper
int toupper(int ch); // Phải khai báo ctype.h
Đổi 1 kí tự từ chữ thường sang chữ hoa
VD :
int len, i;
char *string = "this is a string"; len = strlen(string);
for (i = 0; i < len; i++) string[i] = toupper(string[i]); //đổi từ kí tự trong string thành chữ thường
Hàm strcat()
char *strcat(char *dest, const char *src); //Phải khai báo string.h
Trang 29Thêm chuỗi src vào sau chuỗi dest
Hàm strcpy()
char *strcpy(char *dest, const char *src); //Phải khai báo string.h
Chép chuỗi src vào dest
VD :
char destination[25];
char *blank = " ", *c = "C++", *borland = "Borland";
strcpy(destination, borland); //chép chuỗi borland vào destination strcat(destination, blank); //thêm chuỗi blank vào sau chuỗi destination strcat(destination, c); //thêm chuỗi c vào sau chuỗi destination
Hàm strcmp()
int *strcmp(const char *s1, const char *s2); //Phải khai báo string.h
So sánh chuỗi s1 với chuỗi s2 Kết quả trả về:
< 0 nếu s1 < s2
= 0 nếu s1 = s2
> 0 nếu s1 > s2
VD :
char *buf1 = "aaa", *buf2 = "bbb", *buf3 = "aaa";
strcmp(buf1, buf2); //kết quả trả về - 1 strcmp(buf1, buf3); //kết quả trả về 0 strcmp(buf2, buf3); //kết quả trả về 1
Hàm strcmpi()
int *strcmp(const char *s1, const char *s2); //Phải khai báo string.h
So sánh chuỗi s1 với chuỗi s2 không phân biệt chữ hoa, chữ thường Kết quả trả về:
Trang 30 < 0 nếu s1 < s2
= 0 nếu s1 = s2
> 0 nếu s1 > s2
VD :
char *buf1 = "aaa", *buf2 = "AAA";
strcmp(buf1, buf2); //kết quả trả về 0
Hàm strlwr():
char *strlwr(char *s); //Phải khai báo string.h
Chuyển chuỗi s sang chữ thường
VD :
char *s = "Borland C";
s = strlwr(s); //kết quả s = "borland c"
Hàm strupr():
char *strupr(char *s); //Phải khai báo string.h
Chuyển chuỗi s sang chữ hoa
char *s = "Borland C"; int len_s;
len_s = strlen(s); //kết quả len_s = 9
2.3 Các bài toán trên chuỗi:
- Bài toán tìm kiếm: Cho trước chuỗi kí tự bất kì, tìm vị trí của 1 phần tử hoặc 1 vài phần tử trong chuỗi thỏa yêu cầu cho trước
VD :
Trang 31 Tìm kiếm vị trí của phần tử là khoảng trắng trong chuỗi:
char A[20] = "Vi du so 1";
for (int i = 0; i<20; i++)
Hoán đổi vị trí hai phần tử:
char A[20] = "Vi du so 1";
for (int i = 0; i<20; i++)
Xóa những phần tử là khoảng trắng trong chuỗi:
char A[20] = "Vi du so 1";
for(int i = 0;i<strlen(A); i++)
{
if(A[i]== ' ') {
for(int j=i;j<strlen(A)-1;j++) {
A[j] = A[j+1];
} A[strlen(A)-1] = '\0';
Trang 33printf("Chuoi vua nhap: %s",S);
printf("Nhap gia tri n: n =");
Trang 34printf("Chuoi vua nhap: %s",S);
printf("Chieu dai cua chuoi: %d\n , strlen(S));
for (int i = 0;i<strlen(S); i++)
Trang 35Bài 3 :
Viết chương trình cho phép người dùng nhập họ và tên
- In ra màn hình họ tên sau khi chuẩn hóa (Tất cả chữ cái đầu đều viết hoa)
Bài 4 :
Viết chương trình cho phép người dùng nhập 1 chuỗi (tối đa 50 kí tự)
- Xóa hết tất cả kí tự ' ' và xuất chuỗi mới ra màn hình
- Nếu trong chuỗi có kí tự 'a' thì chuyển thành 'abc' và xuất chuỗi mới ra màn hình
Bài 5 :
Tạo 1 dữ liệu 10 hàng 2 cột: cột 1 là Họ tên, cột 2 là điểm số Hiển thị dữ liệu này ra màn hình
- Cho phép người dùng nhập vào họ tên Tìm điểm số tương ứng với họ tên vừa nhập, nếu tìm thấy thì in giá trị điểm số ra màn hình, nếu không tìm thấy thì yêu cầu người sử dụng nhập lại họ tên
- Phân tích yêu cầu, xây dựng giải thuật và viết code theo yêu cầu
- Xây dựng những chương trình cơ bản bằng ngôn ngữ C/C++
- Hình thành kỹ năng phát hiện và sửa lỗi khi lập trình
II HƯỚNG DẪN LÝ THUYẾT:
2.1 Hàm (Function):
2.1 Hàm:
a) Hàm không trả về giá trị:
Trang 36Solve(a,b); // Gọi hàm Solve
int x = Solve1(a,b); // Gọi hàm Solve1, ta có thể gán kết quả trả về của hàm cho biến
2.2 Thƣ viện (Library):
Trang 37Trong C/C++, chúng ta thường gặp các thư viện có dạng là cái tập tin có đuôi h, tập tin đuôi lib hay dll Trước khi tìm hiểu về sự khác nhau giữa các thư viện h, lib và dll, chúng ta hãy tìm hiểu về quá trình dịch (compile) và thực thi (execute) một chương trình
Cách tạo thư viện header (.h):
Header file cũng tương tự như các file lập trình mà chúng ta đã làm quen trong các chương trước Điểm khác biệt là header file thường được lưu với đuôi h thay vì cpp Chúng ta có thể dùng notepad để xây dựng header file giống như cách chúng ta xây dựng các file cpp trước đây (nhưng lưu file với đuôi h), hoặc xây dựng trực tiếp trong 1 project
Để tạo một header file trong 1 project, trong cửa sổ Solution Explorer của project, click chuột phải vào dòng Header Files và chọn Add ->New Item (trong trường hợp muốn sử dụng một header file
đã có sẵn thì chọn Existing Item)
Trang 38Trong cửa sổ Add New Item, chọn kiểu file là header và nhập tên của file vào ô Name
Thông thường, một thư viện sẽ bao gồm một header file và source file Trong đó, header file chỉ chứa các khai báo về biến, hàm hay class còn source file chứa mã lệnh đầy đủ của các biến, hàm và class
đã được khai báo trong header file
Header file + Source file = Complete source
Trang 39VD : Xây dựng thư viện Header.h, trong thư viện này khai báo hàm tính giai thừa
Trong file lập trình, để sử dụng thư viện, ta thêm vào câu lệnh #include “Header.h”