Tải bản đầy đủ (.doc) (98 trang)

Lab report C & Data Structures

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.26 MB, 98 trang )

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TP.HỒ CHÍ MINH
Khoa Khoa Học & Kỹ Thuật Máy Tính
LAB REPORT
C & Data Structures
Nhóm: 5
Lớp: CDTH11K
GVHD:Châu Thị Bảo Hà
TP.Biên Hòa 11/2010
C & Data Structures
Mục Lục
• Module 1:
1. Viết hàm tính tổng S=1+1/2+1/3…+ 1/N. Sử dụng hàm để tính S khi người
dùng nhập N.
Nhập : N
Xuất: S(Tổng)
Ý tưởng: Dùng vòng lặp for để chạy i từ 1 đến N, trong for dùng biến sum để tính tổng của
thương 1/i, mỗi lần tăng biến sum sẽ cộng dồn giá trị 1/i, rồi trả về giá trị sum.
float tinhtong(float n)
{
float sum=0;
for(int i=1;i<=n;i++)
{
sum+=(1.0/i);
}
return sum;
}
Chương trình:
#include <iostream.h>
#include <conio.h>
float tinhtong(float n);
void main()


{
float sum;
float n;
cout<<"Nhap N: ";
cin>>n;
cout<<"Tong 1 + 1/2 + + 1/n = "; cout<<tinhtong(n)<<endl;
}
float tinhtong(float n)
{
float sum=0;
for(int i=1;i<=n;i++)
{
sum+=(1.0/i);
}
return sum;
}
Kết quả:
2
C & Data Structures
2. Nhập 2 số a và n. Tính S =a^1 + a^2 + a^3 + …+
a^n
.
Nhập: a, n;
Xuất: S(Tổng);
Ý tưởng: Dùng vòng lặp for để chạy i từ 1 đến N, trong for dùng biến sum để tính tổng
của a mũ i, mỗi lần vòng lặp lặp lại thì biến sum sẽ cộng dồn giá trị a mũ i, dùng hàm
pow(a,i) để tính a mũ i.
float tinhtong(int a,float n)
{
float sum=0;

for(int i=1;i<=n;i++)
{
sum+=(pow(a,i));
}
return sum;
}
Chương trình:
#include <iostream.h>
#include <conio.h>
#include <math.h>
float tinhtong(int a,float n);
void main()
{
float sum,n;
int a;
cout<<"Nhap N: ";
cin>>n;
cout<<endl;
cout<<"Nhap a: ";
cin>>a;
cout<<"Tong a^1 + a^2 + + a^n = ";
cout<<tinhtong(a,n)<<endl;
}
float tinhtong(int a,float n)
{
float sum=0;
for(int i=1;i<=n;i++)
{
sum+=(pow(a,i));
}

return sum;
}
3
C & Data Structures
Kết quả:
3. Viết chương trình tính tổng sau: S= 1 + 1/1! +1/2! + 1/3! + … + 1/n!.
Nhập: N;
Xuất: S(Tổng)
Ý tưởng:
Dùng 2 hàm: tinhtong và hàm giaithua. Hàm tinhtong là để tính tổng các phần tử 1 +
1/1! + 1/2! +….Hàm giaithua để tính giai thừa của 1!, 2!, 3!,… Trong hàm
giaithua() thì thì ta dùng vỏng lặp i chạy từ 1 -> n để nhân dồn giá trị vào 1 biến t.
Rồi trong hàm tinhtong() ta gọi hàm giaithua() để tính đươc già trị 1/i!.
float tinhtong(int n)
{
float sum=1;
for(int i=1;i<=n;i++)
{
sum+=(1.0/gt(i));
}
return sum;
}
int giaithua(int n)
{
int t=1;
for(int i=1;i<=n;i++)
t*=i;
return t;
}
Chương trình:

#include <iostream.h>
#include <math.h>
int giaithua(int n);
float tinhtong(int n);
void main()
{
float sum;
int n;
cout<<"Nhap N: ";
cin>>n;
cout<<"Tong S = 1 + 1/1! +1/2! + 1/3!+ … +1/n!=";
cout<<tinhtong(n)<<endl;
}
float tinhtong(int n)
{
float sum=1;
for(int i=1;i<=n;i++)
4
C & Data Structures
{
sum+=(1.0/giaithua(i));
}
return sum;
}
int giaithua(int n)
{
int t=1;
for(int i=1;i<=n;i++)
t*=i;
return t;

}
Kết quả:
6. Viết chương trình tính tổng sau: S= 1 - x + x^2 - x^3 + …
(-1)x^n
Nhập: x, n;
Xuất: S(Tổng)
Ý tưởng:
Dùng vòng lặp for để chạy được x^0, x^1,x^2,…,x^n trong for dùng thêm biến k=1,
mỗi lần lặp lại thì k=k*(-1) là k đổi dấu, thì khi nhân với x^1,x^3,x^5… thì là -1,
Nhân với x^0,x^2,x^4… là 1.
float ham1(int x,int n)
{
float sum1=0;
int k=1;
for(int i=0;i<=n;i++)
{
sum1+=k*(pow(x,i));
k=k*(-1);
}
return sum1;
}
Chương trình:
#include<iostream.h>
#include<math.h>
float ham1(int x,int n);
void main()
{
int x,n;
cout<<"Nhap x:";
cin>>x;

cout<<"Nhap n:";
cin>>n;
5
C & Data Structures
cout<<"S= 1 - x +x^2- x^3+ … (-1)x^n = ";
cout<<ham1(x,n)<<endl;
}
float ham1(int x,int n)
{
float sum1=0;
int k=1;
for(int i=0;i<=n;i++)
{
sum1+=k*(pow(x,i));
k=k*(-1);
}
return sum1;
}
Kết quả:
7. Viết một hàm tính tổng các chữ số của một số nguyên. Viết chương trình
nhập vào một số nguyên, dùng hàm trên kiểm tra xem số đó có chia hết cho
3 không. (Một số chia hết cho 3 khi tổng các chữ số của nó chia hết cho 3).
Nhập: 1 số nguyên n;
Xuất: Số nguyên nhập vào có chia hết cho 3 hay không?
Kiểm tra tính chia hết cho 3.
Ý tưởng:
Dùng hàm while để tính tổng các chữ số của 1 số nguyên, rồi dùng hàm kiểm tra
xem tính chia hết cho 3 của 1 số nguyên. Hàm kiểm tra thì ta lấy giá trị trả về của
hàm tinhtongcacchuso() chia lấy số dư cho 3, nếu không dư thì là số chia hết cho 3
và ngược lại

int tongcacchuso(int n)
{
int t, sum=0;
while(n!=0)
{
t=n%10;
n=n/10;
sum+=t;
}
return sum;
}
Chương trình:
#include<iostream.h>
#include<conio.h>
int tongcacchuso(int n);
int kiemtrachiahetcho3(int n);
void main()
6
C & Data Structures
{
int n;
cout<<"CHUONG TRINH KIEM TRA TINH CHIA HET CHO 3\n";
cout<<"Nhap N: ";
cin>>n;
if(kiemtrachiahetcho3(n)==1)
cout<<n<<" chia het cho 3"<<endl;
else
cout<<n<<" khong chia het cho 3"<<endl;
}
int tongcacchuso(int n)

{
int t, sum=0;
while(n!=0)
{
t=n%10;
n=n/10;
sum+=t;
}
return sum;
}
int kiemtrachiahetcho3(int n)
{
if(tongcacchuso(n)%3==0)
return 1;
else
return 0;
}
Kết quả:
8. Bài toán tính tiền lãi gửi ngân hàng: Nhập tiền vốn ban đầu, số tháng
gửi N và lãi suất hàng tháng.
T
í
nh
số tiền nhận được sau mỗi tháng gửi
biết rằng tiền lãi hàng tháng được gộp vào tiền vốn. Số tiền
nhận
được
sau mỗi tháng sẽ hiển thị trên màn hình
dạng
:

Tháng 1:
100
Tháng 2:
102

Ví dụ: tiền vốn là 100, lãi suất thán là 2%. Sau 1 tháng gửi sẽ có số tiền

:
Số tiền =100 + 100*0.02 =
102
Sau 2 tháng gửi sẽ có số tiền là: Số tiền=102 + 102*0.02 =
104
.
04
Công thức tính tiền thu được sau mỗi tháng gửi là:
Số tiền := Tiền vốn + Tiền vốn * Lãi
suấ
t
Số tiền này trở thành tiền vốn của tháng sau, tức là Tiền vốn = Số tiền
Qúa trình cứ lặp đi lặp lại từ tháng 1 đến tháng
N
.
7
C & Data Structures
Nhập: Tiền vốn, lãi suất, số tháng gửi.
Xuất: tổng số tiền.
Ý tưởng:
Dùng vòng lặp for để tính tổng tiền với công thức trong for là
Số tiền = Tiền vốn + Tiền vốn * Lãi
suấ

t
(Tiền vốn = Số tiền)
void tongsotien(float tv, float ls,int thang)
{
for(int i=1;i<=thang;i++)
{
tv+=(tv*(ls/100.0));
cout<<"Thang "<<i<<": "<<tv<<endl;
}
}
Chương trình:
#include <iostream.h>
#include <conio.h>
#include <math.h>
void tongsotien(float tv, float ls,int thang);
void main()
{
double s;
float tv,sum,ls;
int thang;
cout<<"Nhap Tien Von: ";
cin>>tv;
cout<<"Nhap Lai Suat: ";
cin>>ls;
cout<<"Nhap So Thang Gui: ";
cin>>thang;
cout<<endl;
tongsotien(tv,ls,thang);
}
void tongsotien(float tv, float ls,int thang)

{
for(int i=1;i<=thang;i++)
{
tv+=(tv*(ls/100.0));
cout<<"Thang "<<i<<": "<<tv<<endl;
}
}
Kết quả:
8
C & Data Structures
9. Trở lại bài toán tính tiền gửi ngân hàng có tiền lãi hàng tháng gộp vào
vốn (bài tập trên). Câu hỏi bây
giờ
là: cần gửi tối thiểu là bao nhiêu
tháng để có được số tiền > S cho
t
rước
.
Nhập: Tiền vốn, lãi suất, tổng số tiền S.
Xuất: Tổng số tháng gửi cần thiết để tiền vốn> S
Kiểm tra khi tổng số tiền > số tiền nhập vào thì xuất i(tháng) ra.
Ý tưởng:
Làm như bài 8, trong for thì không có điều kiện dừng vòng lặp, vòng lặp chỉ dừng
khi sum>S, thêm vào if, nếu tổng số tiền sum tăng lên lớn hơn S cho trước thì xuất
tháng i ra.
double cau9(float tv, float ls,double s)
{
double sum=0;
for(int i=1;;i++)
{

sum=tv+(tv*(ls/100.0));
tv=sum;
if(sum>s)
{
return i;
}
}
}
Chương trình:
#include <iostream.h>
#include <conio.h>
#include <math.h>
double cau9(float tv, float ls,double s);
void main()
{
double s;
float tv,ls;
cout<<"Nhap Tien Von: ";
cin>>tv;
cout<<"Nhap Lai Suat: ";
cin>>ls;
cout<<"MODULE 1-9"<<endl;
cout<<"Nhap tong so tien S: ";
cin>>s;
cout<<"Sau "<<cau9(tv,ls,s)<<" thang thi tien von > S";
}
double cau9(float tv, float ls,double s)
{
double sum=0;
for(int i=1;;i++)

{
9
C & Data Structures
sum=tv+(tv*(ls/100.0));
tv=sum;
if(sum>s)
{
return i;
}
}
}
Kết quả:
• Module 2:
1. Nhập 2 số n và k nguyên. Tính tổ hợp chập k của n theo công thức như
sau

C(k
,
n)=n
!/
(k
!
*(n-k)
!
)
Nhập: 2 số nguyên n, k;
Xuất tổ hợp chập k của n;
Ý tưởng:
Sử dụng đệ quy để tính tổ hợp.
int tohop(int n, int k)

{
if (k == 0 || k == n)
return 1;
else
return (tohop(n-1, k) + tohop(n-1, k-1));
}
Chương trình:
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
int tohop(int n,int k);
void main()
{
int n,k;
cout<<"Nhap n: ";
cin>>n;
cout<<"Nhap k: ";
cin>>k;
cout<<"To hop C(n,k): "<<tohop(n,k)<<endl;
}
int tohop(int n, int k)
{
if (k == 0 || k == n)
return 1;
else
return (tohop(n-1, k) + tohop(n-1, k-1));
10
C & Data Structures
}
Kết quả:

2. Tìm các số Fibonaci. Dãy số Fibonaci { 1, 1, 2, 3, 5, 8, 13, 21,… } được
là dãy được nhắc nhiều
t
rong
khối kỹ thuật, nó được xây dựng như
sau
:
U0=1, U1=1 , Uk=Uk-1 + Uk-2 với mọi k= 2, 3, 4,

a. Viết chương trình xuất ra màn hình số Fibonaci ở vị trí thứ n (sử
dụng đệ
quy)
b. Viết chương trình xuất ra màn hình số Fibonaci ở vị trí thứ n
(KHÔNG sử dụng đệ
quy)
c. Viết chương trình nhập số nguyên n và xuất ra n số Fibonaci đầu
t
iên
Nhập: N;
Xuất ra dãy số Fibonaci;
Ý tưởng:
Sử dụng đệ quy để tính fibonanci
Chương trình:
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
int fibonanci(int n);
void fibonacikodequy(int n);
void dayfibonaci(int n);
void main() //ham chinh

{
int n;
cout<<"Nhap n: ";
cin>>n;
cout<<"a/ So fibonanci thu "<<n<<" dung de quy: ";
cout<<fibonanci(n)<<endl;
cout<<"b/ So fibonanci thu "<<n<<" ko dung de quy: ";
fibonacikodequy(n);
cout<<endl;
cout<<"c/ Day fibonanci tu 1 >"<<n<<": ";
dayfibonaci(n);
cout<<endl;}
int fibonanci(int n) //a
{
if(n<=2)
return 1;
else
return fibonanci(n-1)+fibonanci(n-2);
}
void fibonacikodequy(int n) //b
11
C & Data Structures
{
int a=1,b=0,c;
for(int i=1;i<=n;i++)
{
c=a+b;
a=b;
b=c;
}

cout<<c;
}
void dayfibonaci(int n) //c
{
int a=1,b=0,c;
for(int i=1;i<=n;i++)
{
c=a+b;
a=b;
b=c;
cout<<c<<" ";
}
}
Kết quả:
3. a. Nhập 2 số nguyên dương m và n. Tính Ước số chung nhỏ nhất và
bội số chung lớn nhất của
m
và n (sử dụng đệ
quy)
b. Nhập 2 số nguyên dương m và n. Tính Ước số chung nhỏ nhất và
bội số chung lớn nhất của
m
và n (không sử dụng đệ
quy)
4. Viết hàm nhập số giây và đổi thành giờ : phút :
giây
.
Ví dụ: nhập 3665 giây -> 1 giờ 1 phút 5
giây
Nhập: n (giây).

Xuất dạng giờ: phút: giây.
Ý tưởng :
Dùng hàm gọi đệ quy và cấu trúc if /else để đổi giây thành giờ, phút và giây.
Nếu số giây (n)<60 thì gán giây = n, ngược lại nếu số giây n/3600 mà lớn hơn 0 thì
gán kết quả n/3600 vào giờ, sau đó gọi đệ quy hàm doigio() với tham số n%3600 là
số giây dư của phép chia.
gio=(n/3600)%24
phut=(n%3600)/60
giay=(n%3600)%60
Chương trình :
12
C & Data Structures
#include<iostream.h>
#include<conio.h>
void doigio(int n, int &g,int &p, int &gi);
void main()
{
int n,g,p,gi;
g=p=gi=0;
cout<<"Nhap n: ";
cin>>n;
doigio(n,g,p,gi);
}
void doigio(int n, int &g,int &p,int &gi)
{
if(n<60)
gi=n;
else if(n/3600>0)
{
g=n/3600;

return doigio(n%3600,g,p,gi);
}
else
{
p=n/60;
return doigio(n%60,g,p,gi);
}
cout<<g<<" gio "<<p<<" phut "<<gi<<" giay ";
}
Kết quả:
5. a. Viết hàm kiểm tra 1 số có phải là số nguyên tố hay không (số chỉ chia
hết cho 1 và chính
nó)
b. Viết hàm hiển thị tất cả các số nguyên tố bé hơn số n nhập từ bàn
ph
í
m
c. Viết hàm hiển thị tất cả các số nguyên tố bé hơn số n nhập từ bàn
phím, in lên màn hình
mỗi
dòng 19
số
d. Viết hàm hiển thị tất n số số nguyên tố đầu tiên tính từ 2 (n nhập từ
bàn phím). Ví dụ n=8 thì
kế
t
quả là:
2
,
3

,
5
,
7
,
11
,
13
,
17
,
19.
Nhập N;
Xuất các số nguyên tố.
Kiểm tra xem 1 số có phải số nguyên tố hay không?
Ý tưởng:
13
C & Data Structures
Để kiểm tra số nguyên tố, ta dùng vòng lặp while() chạy biến i từ 0 đến a, nếu a
chia hết cho i thì biến flag tăng 1, kết thúc vòng lặp nếu biến flag=2 thì a là số
nguyên tố thì trả về giá trị 0, ngược lại thì trả về 1.
Chương trình:
#include<iostream.h>
#include<conio.h>
bool kt(int a);
void xuatsntb(int n);
void xuatsntc(int n);
void xuatsntd(int n);
void main()
{

int n,i;
cout<<"Nhap n: ";
cin>>n;
i=kt(n);
if(i==0)
{
cout<<"SO NGUYEN TO"<<endl;
}
else
{
cout<<"KHONG PHAI SO NGUYEN TO"<<endl;
}
cout<<"Day so nguyen to la: ";xuatsntb(n);
cout<<endl;
cout<<"Xuat day snt 1 dong 19 so: "<<endl;xuatsntc(n);
cout<<endl;
cout<<"Xuat n snt: "<<endl;xuatsntd(n);
}
bool kt(int a) //a
{
int i=0, sum=0;
if(a==0 || a==1)
return 1;
else
while(i<a)
{
i++;
if(a%i==0)
sum+=1;
}

if(sum==2)
return 0;
else
return 1;
}
void xuatsntb(int n) //b
{
14
C & Data Structures
for(int i=0;i<=n;i++)
if(kt(i)==0)
cout<<i<<" ";
}
void xuatsntc(int n) //c
{
int dem=0;
for(int i=0;i<=n;i++)
{
if(kt(i)==0)
{
cout<<i<<" ";
dem++;
}
if(dem==19)
{
cout<<endl;
dem=0;
}
}
}

void xuatsntd(int n)
{
int dem=0;
for(int i=0;;i++)
{
if(kt(i)==0)
{
cout<<i<<" ";
dem++;
}
if(dem==n)
{
break;
}
}
}
Kết quả:
15
C & Data Structures
6. Tìm số n bé nhất thoã s =1 + 2 + 3 +… + n >10000 vã hãy cho biết khi đó
s có giá trị là bao nhiêu
?
Kiểm tra n bé nhất thỏa s =1 + 2 + 3 +… + n >10000 và tính s=?
Xuất n là số bé nhất thỏa điều kiện trên, và xuất s tổng.
Ý tưởng:
Dùng vòng lặp for() chạy không có điều kiện dừng, mỗi lần lặp thì sum+=i, cho đến
khi sum>10000 thì xuất ra n và s.
Chương trình:
#include <iostream.h>
void tong();

void main()
{
tong();
cout<<endl;
}
void tong()
{
int sum=0,i;
for (i=0;;i++)
{
sum+=i;
if (sum>10000)
{
cout<<"n = "<<i<<endl;
cout<<"S = "<<sum;
break;
}
}
}
Kết quả:
7. Viết hàm dùng để phân tích một số nguyên dương ra thừa số nguyên
t

.
Ví dụ: khi nhập n =100 thì hiển thị :
100=5*5*2*2
• Module 3:
1. VCT nhập vào 2 phân số a/b và
c
/

d
.
Hãy tính tổng của phân số này, yêu
cầu là phân số kết quả phải ở dạng tối
giản
.
ví dụ
:
1
/
6+1
/
3=1
/
2.
2. Viết một hàm đảo ngược thứ tự các phần tử của một mảng số
nguyên.
Ví dụ: mảng nhập vào 1 2 3 4 5 7 9 10.
Sau khi đảo mảng thành 10 9 7 5 4 3 2
1
Nhập vào 1 mảng số nguyên a[];
Xuất mảng đả đảo ngược;
16
C & Data Structures
Ý tưởng:
Khi đảo mảng ta dùng 2 vòng lặp for(), vòng for thứ nhất thì chạy từ vị trí i=0 đến n,
để đảo vị trí 2 số cho nhau ta sử dụng giải thuật:
a[i]=a[i]+a[j];
a[j]=a[i]-a[j];
a[i]=a[i]-a[j];

Chương trình:
#include <iostream.h>
#include <math.h>
void nhapmang(int a[],int m);
void xuatmang(int a[],int m);
void daonguocmang(int a[],int m);
void main()
{
int a[100],n;
cout<<"Nhap n = ";
cin>>n;
nhapmang(a,n);
cout<<"Mang vua nhap la: ";
xuatmang(a,n);
daonguocmang(a,n);
cout<<"Mang sau khi dao nguoc la: ";
xuatmang(a,n);
}
void nhapmang(int a[],int m)
{
for (int i=0;i<m;i++)
{
cout<<"a["<<i+1<<"]= ";
cin>>a[i];
}
}
void xuatmang(int a[],int m)
{
for (int i=0;i<m;i++)
{

cout<<a[i]<<" ";
}
cout<<endl;
}
void daonguocmang(int a[],int m)
{
for (int i=0;i<m-1;i++)
{
for (int j=i+1;j<m;j++)
{
a[i]=a[i]+a[j];
a[j]=a[i]-a[j];
a[i]=a[i]-a[j];
}
}
}
17
C & Data Structures
Kết quả:
3. Viết chương trình nhập vào một mảng số tự nhiên. Hãy xuất ra màn
h
ì
nh
:
- Dòng 1 : gồm các số lẻ, tổng cộng có bao nhiêu số
lẻ
.
- Dòng 2 : gồm các số chẵn, tổng cộng có bao nhiêu số
chẵn
.

- Dòng 3 : gồm các số nguyên
t

.
- Dòng 4 : gồm các số không phải là số nguyên
t

Nhập 1 mảng a[] với tổng số phần tử n;
Xuất: số lẻ, số chẵn, số nguyên tố…
Kiểm tra xem 1 số có là số nguyên tố hay không?
Ý tưởng:
Dùng for để duyệt mảng, dùng if để kiểm tra tính chẵn lẻ. Nếu là số chẵn thì %2 sẽ
bằng 0, ngược lại là số lẻ sẽ khác 0. Và cũng sử dụng giải thuật kiểm tra số nguyên
tố như bài 5 module 2.
Chương trình:
#include <iostream.h>
#include <math.h>
void nhapmang(int a[],int m);
void sole(int a[],int m);
void sochan(int a[],int m);
void songuyento(int a[],int m);
void ktsonguyento(int a[],int m);
void main()
{
int a[100],n;
cout<<"Nhap n = ";
cin>>n;
nhapmang(a,n);
sole(a,n);
sochan(a,n);

songuyento(a,n);
ktsonguyento(a,n);
cout<<endl;
}
void nhapmang(int a[],int m)
{
for (int i=0;i<m;i++)
{
cout<<"a["<<i+1<<"]= ";
cin>>a[i];
}
}
18
C & Data Structures
void sole(int a[],int m)
{
int dem=0;
cout<<"Cac so le la: ";
for (int i=0;i<m;i++)
if (a[i]%2!=0)
{
dem++;
cout<<a[i]<<" ";
}
cout<<" So luong so le la: "<<dem<<endl;
}
void sochan(int a[],int m)
{
int dem=0;
cout<<"Cac so chan la: ";

for (int i=0;i<m;i++)
if (a[i]%2==0)
{
dem++;
cout<<a[i]<<" ";
}
cout<<" So luong so chan la: "<<dem<<endl;
}
void songuyento(int a[],int m)
{
cout<<"Cac so nguyen to : ";
for (int i=0;i<m;i++)
{
int dem=0;
for (int j=1;j<=a[i];j++)
{
if (a[i]%j==0)
dem++;
}
if (dem==2)
cout<<a[i]<<" ";
}
}
void ktsonguyento(int a[],int m)
{
cout<<"\nCac so khong phai so nguyen to la: ";
for (int i=0;i<m;i++)
{
int dem=0;
for (int j=1;j<=a[i];j++)

{
if (a[i]%j==0)
dem++;
}
if (dem!=2)
cout<<a[i]<<" ";
}
}
19
C & Data Structures
Kết quả:
4. Viết chương trình nhập vào một mảng, hãy xuất ra màn
h
ì
nh
:
- Phần tử lớn nhất của
mảng
.
- Phần tử nhỏ nhất của
mảng
.
- Tính tổng của các phần tử trong mảng
.
- Tính trung bình
cộng
- Tính tổng của các phần tử là số nguyên tố trong mảng
.
- Tính số lượng phần tử là số nguyên tố trong mảng
.

- Phần tử âm lớn nhất của
mảng
.
- Phần tử dương nhỏ nhất của
mảng
.
- Tổng các phần tử có căn bậc hai nguyên
.
- Gồm các số lẻ, tổng cộng có bao nhiêu số
lẻ
.
- Gồm các số chẵn, tổng cộng có bao nhiêu số
chẵn
.
- Kiểm tra tính đối xứng cũa
mảng
- Tìm phân tử là số nguyên tố đầu tiên trong
mảng
- Tìm 2 phân tử là 2 số nguyên tố đầu tiên trong
mảng
Nhập 1 mảng a[];
Xuất theo các yêu cầu trong đề;
Ý tưởng :
Tính Max và Min gán giá trị lonnhat va nhonhat=a[0],dùng2 vòng lặp for chạy từ i
đến n nếu giá trị lớn nhất <a[i] thì lonnhat=a[i],giá trị nhỏ nhất>a[i] thì nhonhat=a[i].
Tính tổng các phần tử trong mảng ta dùng vòng lặp for chạy từ i đến n rồi cộng dồn
a[i].
Tính trung bình cộng lấy tổng các phần tử chia cho số lượng phần tử nhập vào.
Tổng và số lượng cac phần tử là số nguyên tố trong mảng dùng hai vòng lặp for để
tính nếu a[i]%2=0 thì tăng đếm lên nếu đếm =2 th2 cộng dồn a[i].

Xuất số lẻ dùng vòng lặp for nếu a[i]%2!=0 thì cộng dồn [i] tăng biến đếm lên.
Xuất số chẵn dùng vòng lặp for nếu a[i]%2==0 thì cộng dồn [i] tăng biến đếm lên.
Xuất số nguyên tố đầu tiên và hai số nguyên tố đầu tiên.
Hàm trên có thể được viết như sau:
Chương trình:
void nhapmang(int a[],int m);
void maxmin(int a[],int m);
void tongcacphantu(int a[],int m);
20
C & Data Structures
void trungbinhcong(int a[],int m);
void tongcacsonguyento(int a[],int m);
void soamlonnhat(int a[],int m);
void soduongnhonhat(int a[],int m);
void tongsocannguyen(int a[],int m);
void sole(int a[],int m);
void sochan(int a[],int m);
void ktdoixung(int a[],int m);
void songuyentodautien(int a[],int m);
void haisntdautien(int a[],int m);
void maxmin(int a[],int m)
{
int max=a[0],min=a[0];
for (int i=1;i<m;i++)
{
if (max<a[i])
max=a[i];
if (min>a[i])
min=a[i];
}

cout<<"Phan tu lon nhat cua mang = "<<max<<endl;
cout<<"Phan tu nho nhat cua mang = "<<min<<endl;
}
void tongcacphantu(int a[],int m)
{
int sum=0;
for (int i=0;i<m;i++)
sum+=a[i];
cout<<"Tong cac phan tu trong mang = "<<sum<<endl;
}
void trungbinhcong(int a[],int m)
{
float sum=0;
for (int i=0;i<m;i++)
sum+=a[i];
cout<<"\nTrung binh cong = "<<sum/m<<endl;
}
void tongcacsonguyento(int a[],int m)
{
int sum=0,t=0;
for (int i=0;i<m;i++)
{
int dem=0;
for (int j=1;j<=a[i];j++)
{
if (a[i]%j==0)
dem++;
}
if (dem==2)
{

sum+=a[i];
t++;
}
}
cout<<"\nTong cac phan tu la so nguyen to = "<<sum;
21
C & Data Structures
cout<<"\nSo luong phan tu la so nguyen to = "<<t<<endl;
}
void soamlonnhat(int a[],int m)
{
int min, flag=0, maxam;
for (int i=0;i<m;i++)
{
if (a[i]<0)
{
maxam=a[i];
for (int j=0;j<m;j++)
if (min<a[j]&&a[j]<0)
maxam=a[j];
flag=1;
i=m;
}
else
flag=2;
}
if (flag==2)
cout<<"\nKhong co phan tu am lon nhat"<<endl;
else
cout<<"\nPhan tu am lon nhat la "<<maxam<<endl;

}
void soduongnhonhat(int a[],int m)
{
int flag=0, minduong;
for (int i=0;i<m;i++)
{
if (a[i]>0)
{
minduong=a[i];
for (int j=0;j<m;j++)
if (minduong>a[j]&&a[j]>0)
minduong=a[j];
flag=1;
i=m;
}
else
flag=2;
}
if (flag==2)
cout<<"\nKhong co phan tu duong nho nhat"<<endl;
else
cout<<"\nPhan tu duong nho nhat la "<<minduong<<endl;
}
void tongsocannguyen(int a[],int m)
{
float can;
int tong=0;
for (int i=0;i<m;i++)
{
can=sqrt(a[i]);

if (can==(int) sqrt(a[i]))
tong+=a[i];
22
C & Data Structures
}
cout<<"Tong phan tu co can ban hai nguyen la "<<tong<<endl;
}
void sole(int a[],int m)
{
int dem=0;
cout<<"Cac so le : ";
for (int i=0;i<m;i++)
if (a[i]%2!=0)
{
dem++;
cout<<a[i]<<" ";
}
cout<<"\nSo luong so le la "<<dem<<endl;
}
void sochan(int a[],int m)
{
int dem=0;
cout<<"Cac so chan : ";
for (int i=0;i<m;i++)
if (a[i]%2==0)
{
dem++;
cout<<a[i]<<" ";
}
cout<<" So luong so chan : "<<dem<<endl;

}
void ktdoixung(int a[],int m)
{
int flag,j=m-1;
for (int i=0;i<m;i++)
{
if (a[i]==a[j])
flag=1;
else
{
flag=0;
i=m;
}
j ;
}
if (flag)
cout<<"Mang doi xung \n";
else
cout<<"Mang khong doi xung \n";
}
void songuyentodautien(int a[],int m)
{
int kt=0;
cout<<"Phan tu la so nguyen to dau tien : ";
for (int i=0;i<m;i++)
{
int dem=0;
for (int j=1;j<=a[i];j++)
23
C & Data Structures

{
if (a[i]%j==0)
dem++;
}
if (dem==2)
{
kt++;
cout<<a[i]<<" ";
i=m;
}
}
if (kt==0)
cout<<"Mang khong co so nguyen to"<<endl;
cout<<endl;
}
void haisntdautien(int a[],int m)
{
int kt=0,i;
cout<<"\nHai phan tu la so nguyen to dau tien: ";
for (int i=0;i<m;i++)
{
int dem=0;
for (int j=1;j<=a[i];j++)
{
if (a[i]%j==0)
dem++;
}
if (dem==2)
{
kt+=1;

cout<<a[i]<<" ";
}
if (kt==2)
i=m;
}
if (kt==0)
cout<<"Mang khong co so nguyen to"<<endl;
cout<<endl;
}
Kết quả :
24
C & Data Structures
• Module 4:
1. Tổ chức và xây dựng 2 hàm : GiảiPT_bac1 và GiảiPT_bac2 với các tham
số hợp

.
Sử dụng 2 hàm này để giải pt bậc
2
.
Nhập: a, b, c.
Xuất ra nghiệm của phương trình bậc 2.
Tính delta.
Ý tưởng :
PT bậc 1: nếu a=0 thì pt vô nghiệm, nếu a,b=0 thì pt vô số nghiệm.
Nếu a=0 thì giải phương trình bậc 2 như giải pt bậc 1. Ngược lại thì tính delta.
Delta=b
2
– 4ac. Nếu delta=0 thì pt có 1 nghiệm kép x1, delta<0 thì pt vô nghiệm,
ngược lại thì có 2 nghiệm x1,x2.

Chương trình :
#include <iostream.h>
#include <math.h>
void GiaiPT_bac1(float a, float b);
void GiaiPT_bac2(float a1, float b1, float c1);
void main()
{
float a1, b1, c1;
cout<<"Giai phuong trinh bac 2 :\n";
cout<<"Nhap a= ";
cin>>a1;
cout<<"Nhap b = ";
cin>>b1;
cout<<"Nhap c = ";
cin>>c1;
GiaiPT_bac2(a1,b1,c1);
cout<<endl;
}
void GiaiPT_bac1(float a,float b)
{
float x;
if (a==0)
{
if (b==0)
cout<<"Phuong trinh vo so nghiem";
else
cout<<"Phuong trinh vo nghiem";
}
else
{

x=-b/a;
cout<<"Nghiem cua pt la :x= "<<x;
}
}
25

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×