Nguyễn Tường Thành Bộ mơn: Điện tử - Viễn thơng Trang 2 LỜI MỞ ĐẦU Tài liệu thực hành ngôn ngữ lập trình C++ được biên soạn theo chương trình thực hành dành cho sinh viên các ngành Điệ
Trang 1TRƯỜNG ĐẠI HỌC QUY NHƠN
KHOA KỸ THUẬT VÀ CƠNG NGHỆ
- -
TÀI LIỆU THỰC HÀNH NGƠN NGỮ LẬP TRÌNH C++
Biên soạn: TS Nguyễn Tường Thành
Bộ mơn: Điện tử - Viễn thơng
Tài liệu lưu hành nội bộ
Trang 2LỜI MỞ ĐẦU
Tài liệu thực hành ngôn ngữ lập trình C++ được biên soạn theo chương trình thực hành dành cho sinh viên các ngành Điện tử Viễn thông, Điện tử Tin học và Điện kỹ thuật Tài liệu bao gồm 10 bài Thí nghiệm từ căn bản đến nâng cao nhằm nắm bắt ngôn ngữ lập
công tác sau này Mỗi bài thực hành bao gồm bài tập ví dụ, câu hỏi và bài tập thực hành Sau mỗi buổi thực hành yêu cầu sinh viên phải nộp lại Báo cáo thực hành để chấm kết quả thực hành nên đòi hỏi mỗi sinh viên trước khi đi thực hành phải chuẩn bị trước Báo cáo thực hành của mình nhằm đảm bảo thời gian thực hành và yêu cầu của bài thực hành đề ra
Quá trình biên soạn đưa tài liệu vào phục vụ thí nghiệm chắc chắn không tránh khỏi thiếu sót Rất mong sự góp ý của các thầy cô và các bạn sinh viên để lần tái bản sau tài liệu ngày càng hoàn chỉnh hơn phục vụ tốt công tác thí nghiệm của nhà trường Mọi ý kiến góp ý xin gửi về Khoa Kỹ thuật & Cơng nghệ – Trường Đại học Quy Nhơn Xin chân thành cảm ơn!
Quy Nhơn, ngày 20 tháng 10 năm 2012
Người soạn
Trang 3BÀI 1: NHẬP VÀO VÀ XUẤT RA, CÁC LỆNH LỰA CHỌN
//Bai tap 1_1
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<math.h>
#define PI 3.14159
int main(void)
{
float L=1e-3,C=1e-6,fchnt,fchss,r=1.0;
clrscr();
cout<<"\nChuong trinh tinh tan so cong huong cua mach LC";
cout<<"\nMach LC co L=1e-3(H),C=1e-6(F),mac song song co r=1.0 (Ohm)";
fchnt=1/(2*PI*sqrt(L*C));
fchss=1/(2*PI)*sqrt(1/(L*C)-(r*r)/(4*L*L));
cout<<"\nTan so cong huong cua mach LC noi tiep la:"<<fchnt<<" Hz";
cout<<"\nTan so cong huong cua mach LC song song la:"<<fchss<<" Hz";
getch();
return(0);
}
//Bai tap 1_2
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<math.h>
#define PI 3.14159
#define MILLI 1e-3
#define MICRO 1e-6
#define KILO 1e3
int main(void)
{ float L,C,tso,r;
clrscr();
cout<<"\nChuong trinh tinh tan so cong huong cua mach LC";
cout<<"\nNhap L (mH) _ C (mF) _ r=0 neu mach cong huong noi tiep";
cout<<"\nNhap L (mH) _ C (mF) _ r (Ohm) neu mach cong huong song song\n";
cin>>L>>C>>r;
C=C*MICRO;
L=L*MILLI;
tso=1.0/(2.0*PI)*sqrt(1/(L*C)-(r*r)/(4*L*L));
cout<<"\nTan so cong huong cua mach LC can tinh la "<<tso<<" Hz";
getch();
return(0);
}
//Bai tap 1_3
#include <iostream.h>
Trang 4/* Chuong trinh nay tinh toan tong so tien phai tra hang tuan cho mot cong
nhan dua tren tong so gio lam viec va so tien phai tra moi gio */
int main (void)
float workHours = 7.5; // so gio lam viec trong ngay
float payRate = 33.50; // so tien phai tra moi gio
weeklyPay = workDays * workHours * payRate;
cout << "Weekly Pay = " << weeklyPay << '\n';
}
// Bai tap 1_4
#include<iostream.h>
#include<stdio.h>
#include<conio.h>
int main(void)
{
float lambda;
cout<<"\nVao buoc song >>";
cin>>lambda;
cout<<"\n Song dien tu trong truong hop nay la :";
if (lambda<1e-11) cout<<" tia Gamma !!!";
else if (lambda<1e-9) cout<<" tia X !!!";
else if (lambda<400e-9) cout<<" tia cuc tim, tu ngoai !!!";
else if (lambda<700e-9) cout<<" anh sang thuong !!!";
else if (lambda<1e-3) cout<<" tia hong ngoai !!!";
else if (lambda<1e-1) cout<<" song vi ba !!!";
else cout<<" song vo tuyen !!!";
getch();
return(0);
}
// Bai tap 1_5
#include<iostream.h>
#include<stdio.h>
#include<conio.h>
int main(void)
{
enum {AND=1,OR,NAND,NOR,NOT} lcong;
cout<<" \nNhap vao cong logic can co :";
cout<<"\n\t1 - 2 loi vao cua cua AND";
cout<<"\n\t2 - 2 loi vao cua cua OR";
cout<<"\n\t3 - 2 loi vao cua cua NAND";
cout<<"\n\t4 - 2 loi vao cua cua NOR";
cout<<"\n\t5 - 2 loi vao cua cua NOT";
cout<<"\n\t6 - Thoat khoi chuong trinh\n";
scanf("%d",&lcong);
cout<<"\nCac cua TTL tuong ung la :";
switch(lcong)
{ case AND: cout<<" 7408 ";break;
Trang 5case OR: cout<<" 7432 ";break;
case NAND: cout<<" 7400,7401,7403,7437,7438 ";break;
case NOR: cout<<" 7402,7428,7433 ";break;
case NOT: cout<<" 7404,7405,7505,7410 ";break;
default:cout<<" Chao tam biet";break;
}
getch();
return(0);
}
Bài tập:
1 Vẽ lưu đồ của các chương trình trên Cho biết kết quả sau khi chạy mỗi chương trình
2 Viết chương trình hiện ra chính giữa tâm màn hình dòng chữ “ Sinh viên Khoa Kỹ thuật& Công nghệ quyết tâm thực hiện một mùa thi nghiêm túc”
3 Viết chương trình hiển thị ngôi sao năm cánh vẽ bằng các chấm * ở giữa màn hình theo tỷ lệ như lá cờ Tổ quốc (lấy màn hình làm nền lá cờ)
4 Lập chương trình dùng câu lệnh điều kiện if…else để khi nhập vào điểm số sẽ cho ra phân loại sinh viên như sau: 0 đến 3 điểm là loại Kém, lớn hơn 3 và nhỏ hơn 5 loại Yếu, từ 5 đến dưới 7 là loại Trung bình, từ 7 đến dưới 8 là loại Khá, từ 8 đến 10 là loại Giỏi Nếu ngoài các điểm từ 0 đến 10 thì sẽ thông báo nhập sai Dùng lệnh nhảy Goto Nhãn; để thực hiện nhập lại
5 Viết lại chương trình trên nhưng dùng câu lệnh Switch …case với các nhánh là kết quả điểm của sinh viên Dùng lệnh nhảy Goto Nhãn; để thực hiện nhập lại
6 Viết chương trình nhập vào một ngày theo định dạng dd/mm/yy và xuất nó ra theo định dạng Thang dd, year Ví dụ 25/12/1978 trở thành Tháng mười hai 25, 1978
- - BÀI 2: LỆNH LẶP, CÁC HÀM
//Bai tap 2_1
#include<iostream.h>
#include<conio.h>
int main(void)
{int va1,bit;
cout<<"\nNhap gia tri>>";
cin>>va1;
cout<<"\nGia tri so nhi phan la: ";
for (bit=0x80;bit>0;bit>>=1)
Trang 6{if (bit&va1) cout<<"1";
else cout<<"0";
}
getch();
return 0;
}
//Bai tap 2_2
#include<iostream.h>
#include<math.h>
#include<conio.h>
#include<stdio.h>
int main(void)
{ float R,C,tend,t,E,Vr,vc;
int tsteps;
cout<<"\nChuong trinh xac dinh dien ap sut tren dien tro trong mach RC";
cout<<"\nNhap R, C >> ";cin>>R>>C;
cout<<"Vao so buoc thoi gian va thoi gian ket thuc >>";
cin>>tsteps>>tend;
cout<<"Vao khoang cach von >>";cin>>E;
cout<<" TIME VON/R VON/C\n";
for (t=0;t<tend;t+=tend/tsteps)
{ Vr=E*exp(-t/(R*C));
vc=E-Vr;
cout<<"\n "<<t<<" "<<Vr<<" "<<vc;
}
getch();
return(0);}
// Bai tap 2_3
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#define FALSE 0
#define TRUE 1
int AND(int x,int y);
int NAND(int x,int y);
int NOR(int x,int y);
int OR(int x,int y);
int NOT(int x);
int main(void)
{ int a,b,c,z,m,n,p;
cout<<"\n -";
cout<<"\n A B C (1) (2) (3) Z";
cout<<"\n -";
for (a=FALSE;a<=TRUE;a++)
for (b=FALSE;b<=TRUE;b++)
for (c=FALSE;c<=TRUE;c++)
{ m=NOT(OR(a,b));
Trang 7n=AND(a,c);
p=OR(NOT(OR(a,b)),AND(a,c));
z=NAND(OR(NOR(a,b),AND(a,c)),c);
cout<<"\n "<<a<<" "<<b<<" "<<c<<" "<<m<<" "<<n<<" "<<p<<" "<<z;
} getch();
return(0);
}
int AND(int x,int y)
{ if(x&&y) return(TRUE); else return(FALSE);}
int NAND(int x,int y)
{ if(x&&y) return(FALSE); else return(TRUE);}
int NOR(int x,int y)
{ if(x||y) return(FALSE); else return(TRUE);}
int OR(int x,int y)
{ if(x||y) return(TRUE); else return(FALSE);}
int NOT(int x)
{ if(x) return(FALSE); else return(TRUE);}
//Bai tap 2-4
#include <iostream.h>
char *str = "global";
void Print (char *str)
{
cout << str << '\n';
{
char *str = "local";
cout << str << '\n';
cout << ::str << '\n';
}
cout << str << '\n';
}
int main (void)
{
Print("Parameter");
return 0;
}
Bài tập:
khi chạy mỗi chương trình
2 Viết chương trình hiển thị tất cả các bảng số xe có 4 chữ số sao cho số tiến lên và “9 điểm”.Hiển thị có bao nhiêu phương án tất cả
3 Tìm tất cả các phương án để có được 1000đ từ các tờ tiền 500đ, 200đ, 100đ dùng 3 chu trình FOR lồng vào nhau để thay đổi số tờ tiền 500đ, 200đ và 100đ với điều kiện tổng của chúng bằng 1000đ
4 Viết chương trình để nhập vào 1 số n Tính tổng n số đầu tiên của cấp số: 1 + ½ + 1/3 + ¼ + … + 1/n
Trang 85 Lập chương trình để viết chương trình tính giai thừa của một số nguyên n cho trước nhập từ bàn phím (n<10)
6 Viết chương trình bằng ngôn ngữ C++ để hiện bảng chân lý của phương trình đại số Boole dưới đây:
Z = ((A C ) + ( B + D)) (A + D)
- -
BÀI 3: CON TRỎ, MẢNG
// Bai tap 3_1
//more pointers
#include <iostream.h>
int main ()
{
int value1 = 5, value2 = 15;
int *p1, *p2;
p1 = &value1; // p1 = địa chỉ của value1
p2 = &value2; // p2 = địa chỉ của value2
*p1 = 10; // giá tr ị trỏ bởi p1 = 10
*p2 = *p1; // giá tr ị trỏ bởi p2 = giá trị trỏ bởi p1
p1 = p2; // p1 = p2 (phép gán con tr ỏ)
*p1 = 20; // giá tr ị trỏ bởi p1 = 20
cout << "value1==" << value1 << "/ value2==" << value2;
return 0;
}
// Bai tap 3_2
// integer increaser
#include <iostream.h>
void increase (void* data, int type)
{
switch (type)
{
case sizeof(char) : (*((char*)data))++; break;
case sizeof(short): (*((short*)data))++; break;
case sizeof(long) : (*((long*)data))++; break;
}
}
int main ()
{
char a = 5;
short b = 9;
long c = 12;
increase (&a,sizeof(a));
increase (&b,sizeof(b));
increase (&c,sizeof(c));
cout << (int) a << ", " << b << ", " << c;
return 0;
}
//Bai tap 3_3
Trang 9#include<iostream.h>
int main()
{
int *p,n;
p=&n;
*p=100;
Cout<<n<<’ ‘;
(*p)++;
Cout<< n<<’ ‘;
(*p)++;
Cout<< n<<’ \n‘;
Return 0;
}
// Bai tap 3_4
//ví dụ về mảng
#include <iostream.h>
int billy [] = {16, 2, 77, 40, 12071};
int n, result=0;
int main ()
{
for ( n=0 ; n<5 ; n++ )
{
result += billy[n];
}
cout << result;
return 0;
}
// Bai tap 3-5
//arrays as parameters
#include <iostream.h>
void printarray (int arg[], int length) {
for (int n=0; n<length; n++)
cout << arg[n] << " ";
cout << "\n";
}
int main ()
{
int firstarray[] = {5, 10, 15};
int secondarray[] = {2, 4, 6, 8, 10};
printarray (firstarray,3);
printarray (secondarray,5);
return 0;
}
Bài tập: 1 Vẽ lưu đồ chương trình và cho biết kết quả khi chạy mỗi chương trình trên
Trang 101 Viết chương trình để nhập vào 2 số a,b kiểu float, hãy hoán vị chúng và hiển thị dùng kiểu con trỏ
2 Viết chương trình dùng các hàm giải phương trình bậc hai có nghiệm thực và phức sử dụng biến con trỏ
3 Viết chương trình có các hàm để nhập ngày công, lương ngày, tạm ứng Nếu ngày công <10 tiền thưởng =0; 10<=nc<20 thì tiền thưởng =0.1*nc*ln; nếu 20<=nc<=30 thì tiền thưởng =0.2*nc*ln Yêu cầu tiền tạm ứng <60% (nc*ln+tiền thưởng) Tính tổng lương được lĩnh trong một tháng
4 Viết chương trình để nhập vào 2 ma trận vuông với số phần tử cho trước và cố định, tính và hiển thị ma trận tích C, ma trận tổng D của 2 ma trận đó
5 Viết lại chương trình trên dùng cho ma trận có số hàng cột bất kỳ của A và B được nhập từ bàn phím (số hàng và cột nên <10)
6 Nhập vào một dãy số gồm n số thực được nhập từ bàn phím Xác định số lớn nhất và số nhỏ nhất của mảng
- -
BÀI 4: XÂU & LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
// Bai tap 4_1
//cin with strings
#include <iostream.h>
int main ()
{
char mybuffer [100];
cout << "What's your name? ";
cin.getline (mybuffer,100);
cout << "Hello " << mybuffer << ".\n";
cout << "Which is your favourite team? ";
cin.getline (mybuffer,100);
cout << "I like " << mybuffer << " too.\n";
return 0;
}
//Bai tap 4_2
// cin and ato* functions
#include <iostream.h>
#include <stdlib.h>
int main ()
{
char mybuffer [100];
float price;
int quantity;
cout << "Enter price: ";
Trang 11cin.getline (mybuffer,100);
price = atof (mybuffer);
cout << "Enter quantity: ";
cin.getline (mybuffer,100);
quantity = atoi (mybuffer);
cout << "Total price: " << price*quantity;
return 0;
}
//Bai 4-3 Cho biet ket qua cua chuong trinh
#include<iostream.h>
#include<conio.h>
class A
{ int i;
public:
int xuat_i();
void nhap_i(int n) {i=n;} //ham inline
};
int A::xuat_i() {return i;}
void main()
{A x;
clrscr();
x.nhap_i(10);
cout<<x.xuat_i();
getch();
Bài tập:
1 Vẽ lưu đồ của các chương trình trên và cho biết kết quả khi chạy mỗi chương trình
2 Viết chương trình để nhập vào một xâu ký tự Hiển thị trên màn hình xâu ký tự đó theo chiều ngược lại
3 Viết chương trình để nhập vào 1 xâu ký tự, sau đó nhập 1 ký tự rồi đếm số lần xuất hiện của ký tự trong xâu ký tự vừa nhập
4 Viết chương trình để nhập vào một đoạn văn bản, sau đó nhập vào một chuỗi ký tự rồi tìm xem chuỗi ký tự đó có nằm trong đoạn văn bản đó không
5 Viết chương trình kiểu cấu trúc trong đó ta nhập vào quãng đường vận chuyển, loại hàng và khối lượng hàng Mỗi loại hàng có trọng lượng, đơn giá và thành tiền riêng Chương trình sẽ tính tiền vận chuyển của các mặt hàng trong đó nếu trọng lượng <5 tấn thì không giảm giá;nếu lớn hơn 5 tấn và nhỏ hơn 10 tấn sẽ giảm giá 10% Trên 10 tấn sẽ giảm giá 15% Cước vận chuyển là 15.000/1km/1 xe và mỗi xe chở tối đa 5200kg