Khoa Khoa học và Kỹ thuật Máy tính
Bộ mơn Khoa học Máy tính
KỸ THUẬT LẬP TRÌNH
Bài giải bài tập 3
Các cấu trúc lặp
Bài tập bắt buộc
Bài 1. Viết chương trình cho phép người dùng nhập vào hai số nguyên dương a và n. Sử
dụng cấu trúc lặp đã học để tính a luỹ thừa n (an).
#include<iostream.h>
using namespace std;
int main(){
cout<<"Nhap a, n (a, n >0):";
long int a,n,lt;
cin>>a>>n;
lt=1;
for(long int i=1;i<=n;i++){
lt=lt*a;
}
cout<<"a^n="<return 0
}
Bài 2. Viết chương trình cho phép người dùng nhập vào số nguyên. Kiểm tra n có phải là
số nguyên tố hay không ?
#include <iostream.h>
int main()
{
int num;
do{
cout<<"Hay nhap vao mot nguyen duong de kiem tra:";
cin>>num;
}while(num<=0);
for(int i=2; i
{
if(num%i==0)
{
cout<
return 0;
}
}
cout<
Khoa Khoa học và Kỹ thuật Máy tính
Bộ mơn Khoa học Máy tính
}else{
cout<<"Khong la so nguyen so";
}
return 0;
}
Bài 3. Viết chương trình tính tổng S như sau:
Với N là số nguyên dương. S 1
1
1
1
(1) N
...
1 2 2 3 3 4
N ( N 1)
#include<iostream.h>
#include<math.h>
using namespace std;
int main(){
cout<<"Nhap n (>0):";
long int n;
float s;
cin>>n;
s=1;
for(long int i=1;i<=n;i++){
s=s+pow(-1,i)/(i*(i+1));
}
cout<<"Tong s="<
return 0
}
Bài 4. Sử dụng cấu trúc lựa chọn và cấu trúc lặp đã học thực hiện các yêu cầu sau:
a) Cho phép người dùng nhập vào lần lượt từng số thực. Việc nhập dữ liệu
của người dùng sẽ kết thúc khi người dùng nhập vào số 0.
b) Hãy cho biết người dùng đã nhập vào bao nhiêu số thực (kể cả số 0) và
số thực nhỏ nhất trong những số thực do người dùng nhập vào (kể cả số 0).
#include<iostream.h>
using namespace std;
int main(){
float n,minval=0;
int count=0;
do{
cout<<"Nhap so thuc:";
cin>>n;
count++;
minval=minval>n?n:minval;
}while (n!=0);
Khoa Khoa học và Kỹ thuật Máy tính
Bộ mơn Khoa học Máy tính
cout<<"So thuc da nhap:"<
cout<<"So thuc nho nhat:"<
return 0
}
Bài 5.
Viết chương trình nhập vào hai số nguyên dương m và n. Kiểm tra xem m và n
có phải là hai số nguyên tố cùng nhau hay không?
Gợi ý: m và n là nguyên tố cùng nhau khi ước số chung lớn nhất của chúng là 1.
#include<iostream.h>
using namespace std;
int main(){
cout<<"Nhap hai so nguyen duong m,n (>1):";
int m,n,r;
cin>>m>>n;
do{
r=m%n;
m=n;
n=r;
}while(n!=0);
if (m==1){
cout<<"Cung nguyen to";
}else{
cout<<"Khong cung nguyen to";
}
return 0
}
Bài 6. Viết chương trình nhập vào số nguyên dương N. Tính tổng các ước số của N
(không kể 1 và N)
#include <iostream.h>
int main()
{
int n,sum=0;
do{
cout<<"Ban hay nhap vao so nguyen duong N:";
cin>>n;
}while(n<=0);
for(int i=2; i
{
if(n%i==0)
{
Khoa Khoa học và Kỹ thuật Máy tính
Bộ mơn Khoa học Máy tính
sum+=i;
}
}
cout<<"Tong cac uoc so cua "<
}
Bài 7. Viết chương trình xuất ra ma trận bên dưới.Chỉ cần xuất ra số và khoảng cách giữa
các số, không cần xuất ra đường kẻ ma trận.
1
2
3
4
5
6
7
8
9
10
10
9
8
7
6
5
4
3
2
1
1
2
3
4
5
6
7
8
9
10
10
9
8
7
6
5
4
3
2
1
1
2
3
4
5
6
7
8
9
10
10
9
8
7
6
5
4
3
2
1
1
2
3
4
5
6
7
8
9
10
10
9
8
7
6
5
4
3
2
1
1
2
3
4
5
6
7
8
9
10
10
9
8
7
6
5
4
3
2
1
#include<iostream.h>
#include<math.h>
using namespace std;
int main(){
for(int i =1; i<=10;i++){
if(i%2==1){
for(int j=1; j<=10;j++){
cout << j;
cout << “ “;
}
}
else{
for(int j=10; j>=1;j--){
Khoa Khoa học và Kỹ thuật Máy tính
Bộ mơn Khoa học Máy tính
cout << j;
cout << “ “;
}
}
}
}
Bài tập nâng cao
Bài 8.
Viết chương trình nhập vào số nguyên dương N, sau đó tính tổng các nghịch đão của bình
phương tất cả các số tự nhiên từ 1 đến N.
N
S
i 1
1
i2
#include <iostream.h>
int main()
{
float sum=0;
int num;
do{
cout<<"Hay nhap vao mot nguyen duong N:";
cin>>num;
}while(num<=0);
for(int i=1; i<=num; i++)
{
sum+=(float)1/(i*i);
}
cout<<"Tong nghich dao binh phuong cac so tu 1 den
"<
}
Bài 9. Viết chương trình cho phép người dùng nhập vào số nguyên dương, xuất ra số nguyên
tố thứ n.
#include<iostream.h>
#include<math.h>
using namespace std;
int main(){
Khoa Khoa học và Kỹ thuật Máy tính
Bộ mơn Khoa học Máy tính
cout<<"Nhap so nguyen duong:";
long int n,m,ntN;
cin>>n;
m=2;
cout<<"So nguyen to thu "<
while (n>0){
long int i=int(sqrt(m));
bool nt=true;
while (nt&&i>1){
if (m%i==0){
nt=false;
}
i--;
}
if (nt){
n--;
ntN=m;
}
m++;
}
cout<
return 0
}
Bài 10. Phân tích một số nguyên dương thành tích các thừa số nguyên tố.
#include<iostream.h>
using namespace std;
int main(){
cout<<"Nhap so nguyen duong: ";
long int n;
cin>>n;
cout<
long int i=2;
while (n!=1){
int ipow=0;
while (n%i==0){
ipow++;
n/=i;
}
if (ipow){
cout<<"("<
}
i++;
}
return 0
Khoa Khoa học và Kỹ thuật Máy tính
Bộ mơn Khoa học Máy tính
}
Bài 11. Nhập một số nguyên dương n. Tìm số hàng chục và hàng trăm của n!
#include<iostream>
using namespace std;
int main(){
cout<<"Nhap so nguyen duong n:";
long int n;
cin>>n;
long int gt=1;
for(long int i=2;i<=n;i++){
gt=gt*i;
}
cout<
cout<<"So hang tram la "<<(gt%1000)/100<
cout<<"So hang chuc la "<<(gt%100)/10<
return 0;
}
Bài 12 .
Giới thiệu
Giả sử chúng ta đã có một số hàm thư viện xây dựng sẵn với prototype như sau:
int read (int x, int y)
int replace (int x, int y, int old_color, int new_color)
Các hàm này dùng để và xử lý một file hình ảnh. Một file hình ảnh sẽ được biểu diễn
thành một ma trận hai chiều như sau:
int pic[n][m]
trong đó mỗi phần tử pic[x,y] của ma trận sẽ là giá trị màu của điểm ảnh trên hình ở toạ
độ x, y. Mỗi màu sẽ được biểu diễn bằng một giá trị số được định nghĩa như sau:
WHITE 1
BLACK 2
RED 3
GREEN 4
BLUE 5
YELLOW 6
Khoa Khoa học và Kỹ thuật Máy tính
Bộ mơn Khoa học Máy tính
Ví dụ bên dưới cho thấy một hình ảnh thật như sau:
Hình ảnh này phóng lớn bao gồm 9 điểm ảnh, tạo thành ma trận 3 x 3 như sau
Như vậy ma trận pic trong trường hợp này sẽ là một ma trận 33 như sau
3 1 3
1 3 1
3 3 3
Yêu cầu
Với đoạn mã như sau:
int pic[n][m];
//INIT...
//TODO: write your code here
//RE-WRITE:
Đoạn mã chú thích INIT đã được viết sẵn để đọc dữ liệu từ một file hình ảnh thật và chép
dữ liệu và ma trận pic. Đoạn mã chú thích RE-WRITE sẽ chép dữ liệu từ ma trận pic vào
hình ảnh thật.
Hãy viết đoạn mã cho phần chú thích TODO để làm các cơng việc sau:
a. Kiểm tra xem trong hình gốc có điểm ảnh nào màu đỏ hay không
b. Thay tất cả điểm ảnh màu đỏ và màu xanh trong hình gốc thành màu trắng
//TODO code
Khoa Khoa học và Kỹ thuật Máy tính
Bộ mơn Khoa học Máy tính
bool existred=false;
int m=3,n=3;
for(int i=0;i
for(int j=0;j
switch (pic[i][j]){
case 3:
existred=true;
case 4:
case 5:
pic[i][j]=1;
default:
break;
}
}
}
if (existred){
cout<<"Co mau do trong hinh\n";
}else{
cout<<"Khong co mau do trong hinh\n";
}
//End TODO code
HẾT