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

Bài tập hướng dẫn thực hành

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 (79.98 KB, 11 trang )

BÀI TẬP HƯỚNG DẪN THỰC HÀNH
Bài 1: Làm quen với ngơn ngữ lập trình C
a.
b.
c.
d.

Viết chương trình tính chu vi / diện tích hình vng cạnh a, với a nhập từ bàn phím.
Viết chương trình tính chu vi / diện tích hình chữ nhật có 2 cạnh a, b nhập từ bàn phím.
Viết chương trình tính tổng điểm, ĐTB của 3 mơn thi tốn, lý, hóa.
Viết chương trình biện luận và tìm nghiệm x của phương trình bậc 1 ax+b=0, với a,b nhập từ
bàn phím.
e. Viết chương trình biện luận và tìm nghiệm x của phương trình bậc 2 ax 2+bx+c=0, với a,b,c
nhập từ bàn phím.
f. Nhập vào một số từ 1 đến 10, in ra chữ tương ứng (1:”Một”, 2:”Hai”,…,10:”Mười”)
Gợi ý giải bài:
a.
b.
c.
d.

Chu vi= 4*a , diện tích=a*a
Chu vi= 2*(a+b), diện tích=a*b
Tổng điểm=tốn+lý+hóa, dtb=(tốn+lý+hóa)/3
- Nếu a=0,
 b=0 =>Phương trình có vơ số nghiệm
 b!=0 =>Phương trình vơ nghiệm
- Nếu a!=0 thì nghiệm x=-b/a;
e. Nếu a!=0, delta=b*b-4*a*c
- Nếu delta>0, phương trình có 2 nghiệm x1=(-b+sqrt(delta))/(2*a); x2=(-b-sqrt(delta))/(2*a)
- Nếu delta=0, phương trình có nghiệm kép x=-b/(2*a)


- Nếu delta<0, phương trình vơ nghiệm
Nếu a=0,=>giải phương trình bậc nhất
f. Dùng hàm switch (expression) {
case constant-expression : statement(s);
break; /* optional */
case constant-expression : statement(s);
break; /* optional */
default : /* Optional */ statement(s);
}

g. Ví dụ bài giải câu b)
#include "stdio.h"
#include "conio.h"
void main ()
{
float Dai,Rong,Chuvi,Dientich;
printf("Chieu dai =");
scanf("%f",&Dai);
printf("Chieu rong =");
scanf("%f",&Rong);
Chuvi=(Dai+Rong)*2;
Dientich=Dai*Rong;


printf("Chu vi HCN = %0.2f",Chuvi);
printf("Dien tich HCN = %0.2f",Dientich);
getch();
//Return 0;
}
h. Ví dụ bài giải câu d)


i.

#include "stdio.h"
#include "conio.h"
void main ()
{
float a,b,x;
printf("Chuong trinh bien luan phuong trinh bac nhat ax+b=0\n");
printf("Nhap HS a =");
scanf("%f",&a);
printf("Nhap HS b =");
scanf("%f",&b);
if (a==0)
{
if (b==0) printf("Phuong trinh co vo so nghiem\n”);
else printf("Phuong trinh vo nghiem\n”);
}
else
{
x=-b/a;
printf("Phuong trinh co nghiem duy nhat x = %0.2f",x);
}
getch();
}
Ví dụ bài giải câu e)
#include "stdio.h"
#include "conio.h"
#include "math.h"
void main ()

{
float a,b,c,x,x1,x2,delta;
printf("Chuong trinh bien luan phuong trinh bac hai ax2+bx+c=0\n");
printf("Nhap HS a =");
scanf("%f",&a);
printf("Nhap HS b =");
scanf("%f",&b);
printf("Nhap HS c =");
scanf("%f",&c);


if (a==0)
{
printf("Phuong trinh tro thanh phuong trinh bac nhat\n”);
}
else
{
delta=b*b-4*a*c;
if(delta<0) printf("Phuong trinh vo nghiem“);
else if (delta=0)
{
printf("Phuong trinh co nghiem duy nhat \n“);
x=-b/(2*a);
printf("x = %0.2f",x);
}
else
{
printf("Phuong trinh co 2 nghiem phan biet:\n “);
x1=(-b+sqrt(delta))/(2*a);
x2=(-b-sqrt(delta))/(2*a);

printf("x1 = %0.2f\n",x1);
printf("x2 = %0.2f\n",x2);
}
}
getch();
j.

}
Ví dụ bài giải câu f)
#include "stdio.h"
#include "conio.h"
void main ()
{
int n=0;
do
{
printf("Nhap vao so:");
scanf("%d",&n);
switch(n){
case 0 : printf("Khong\n");
break;
case 1 : printf("Mot\n");
break;
case 2 : printf("Hai\n");
break;
case 3 : printf("Ba\n");


break;
case 4 : printf("Bon\n");

break;
case 5 : printf("Nam\n");
break;
case 6 : printf("Sau\n");
break;
case 7 : printf("Bay\n");
break;
case 8 : printf("Tam\n");
break;
case 9 : printf("Chin\n");
break;
default: printf("So khong hop le\n");
}
}while (n>=0 & n<10);
//getch();
}
Viết chương trình tính tổng
S=1+2+…+n
#include "stdio.h"
#include "conio.h"
void main()
{
int n,i;
long s=0;
printf("Nhap n=");
scanf("%d",&n);
for (i=1;i<=n;i++)
s=s+i;
printf("Tong=%d",s);
getch();

}
Bài 2: Một số bài tập về đệ qui
a. Viết chương trình n!
Hướng dẫn giải:
Viết chương trình khơng dùng đệ qui
#include<stdio.h>

#include "stdio.h"
#include "conio.h"
void main()
{
int n,i;
long s=0;
printf("Nhap N=");
scanf("%d",&n);
i=1;
while(i<=n)
Dùng đệ qui
{
#include<stdio.h>
#include<conio.h>s=s+i;
i++;
long giaithua(int x);
main() }
printf("Tong=%d",s);
{
getch();
int
n;
}

long kq;
printf("\Nhap so can tinh giai thua: ");
scanf("%d", &n);
kq=giaithua(n);
printf("\n %d! = %ld", n, kq);
getch();
}
long giaithua(int x) //Hàm sử dụng đệ qui
{
if(x==0) return 1;
else return x*giaithua(x-1);
}


#include<conio.h>
long giaithua(int x);
main()
{
int n;
long kq;
printf("\Nhap so can tinh giai thua: ");
scanf("%d", &n);
kq=giaithua(n);
printf("\n %d! = %ld", n, kq);
getch();
}
long giaithua(int x) //Hàm không sử dụng đệ qui
{
int i;
long g=1;

for(i=1;i<=x;i++)
g=g*i;
return g;
}
b. Viết chương trình tính S=1+2+…+n
#include<stdio.h>
#include<conio.h>
long Tong(int x);
main()
{
int n;
long kq;
printf("\Nhap so can tinh tong: ");
scanf("%d", &n);
kq=Tong(n);
printf("\n %d! = %ld", n, kq);
getch();
}
long Tong(int x) //Hàm sử dụng đệ qui
{
if(x==0) return 0;
else return x+Tong(x-1);
}
c. Viết chương trình di chuyển tháp Hà Nội
#include<stdio.h>
#include<conio.h>
void HaNoi(int n, char A, char B, char C);


void main()

{
int n;
long kq;
printf("\Nhap so dia can chuyen: ");
scanf("%d", &n);
HaNoi(n,'A','B','C');
getch();
}
void HaNoi(int n, char A, char B, char C){
if (n==1)
printf("Chuyen dia tu cot %c sang cot %c\n",A,C);
else{
HaNoi(n -1, A, C, B);
HaNoi(1, A, B, C);
HaNoi(n -1, B, A, C);
}
}
Bài 3.1: Viết chương trình chính xuất menu cho phép chọn các chức năng:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.

Nhập vào một mảng từ bàn phím

In danh sách ra màn hình
Kiểm tra xem mảng có được sắp xếp theo thứ tự tăng dần hay không.
Chèn một phần tử vào cuối mảng.
Chèn một phần tử và đầu mảng
Sắp xếp mảng theo thứ tự tăng dần
Xóa phần tử cuối của mảng
Đếm số phần tử của mảng.
Chèn một phần tử vào vị trí thứ n (n nhập từ bàn phím) của mảng
Xóa phần tử ở vị trí thứ n (n nhập từ bàn phím) của mảng.
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
void main ()
{
int chon;
printf("1. Nhap mang\n");
printf("2. In mang\n");
printf("3. Kiem tra mang tang dan\n");
printf("4. Chen cuoi mang\n");
printf("5. Chen phan tu vao dau mang\n");
printf("6. Sap xep mang tang dan\n");
printf("7. Xoa phan tu vao cuoi mang\n");


printf("8. Dem so phan tu trong mang\n");
printf("9. Chen phan tu vao mot vi tri trong mang\n");
printf("10. Xoa phan tu tai mot vi tri trong mang\n");
printf("0. Thoat\n");
do
{

scanf("%d",&chon);
switch(chon){
case 0 : exit(0);
case 1 : printf("Ban chon nhap mang\n");
break;
case 2 : printf("Ban chon In mang\n");
break;
case 3 : printf("Ban chon Kiem tra mang\n");
break;
case 4 : printf("Ban chon Chen cuoi mang\n");
break;
case 5 : printf("Ban chon Chen dau mang\n");
break;
case 6 : printf("Ban chon Sap xep mang tang\n");
break;
case 7 : printf("Ban chon Xoa phan tu cuoi\n");
break;
case 8 : printf("Ban chon Dem so phan tu trong mang\n");
break;
case 9 : printf("Ban chon Chen phan tu vao mot vi tri\n");
break;
case 10 : printf("Ban chon Xoa phan tu tai mot vi tri\n");
break;
default: printf("Chon khong hop le\n");
}
}while (chon!=0 );
}
Bài 3.2: Viết các chương trình con để thực hiện các chức năng trên
1.
2.

3.
4.
5.
6.

Nhập vào một mảng từ bàn phím
In danh sách ra màn hình
Kiểm tra xem mảng có được sắp xếp theo thứ tự tăng dần hay không.
Chèn một phần tử vào cuối mảng.
Chèn một phần tử và đầu mảng
Sắp xếp mảng theo thứ tự tăng dần


7.
8.
9.
10.

Xóa phần tử cuối của mảng
Đếm số phần tử của mảng.
Chèn một phần tử vào vị trí thứ n (n nhập từ bàn phím) của mảng
Xóa phần tử ở vị trí thứ n (n nhập từ bàn phím) của mảng.

Viết các chương trình con để thực hiện các chức năng trên
1. Hàm nhập mảng a, n phần tử
void nhapmang(int a[], int n)
{
int i;
for( i=0;i{

printf("a[%d]=",i);
scanf("%d",&a[i]);
}
}
2. Hàm In mảng a, n phần tử
void inmang(int a[], int n)
{
int i;
for( i=0;iprintf("[%d] ",a[i]);
}
3. Hàm kiểm tra mảng a có đước sắp xếp khơng, n phần tử
int kiemtramang(int a[], int n)
{
int i;
for( i=0;i{
if(a[i]>a[i+1]) return -1;
}
return 1;
}
4. Chèn phần tử vào cuối mảng
void chencuoimang(int a[], int &n, int x)
{
a[n]=x;
n++;
}
5. Chèn phần tử vào đầu mảng
void chendaumang(int a[], int &n, int x)



{
int i;
for(i = n;i>0;i--)
a[i]=a[i-1];
a[0]=x;
n++;
}
6. Sắp xếp mảng tăng dần
void sapxepmang(int a[], int n)
{
int I,j,tam;
for(i = 0;ifor(j = i+1;jif(a[i]>a[j])
Hoanvi(a[i],a[j])
}
void Hoanvi(int &a, int &b)
{
int t=a; a=b; b=t;
}
7. Xóa phần tử cuối mảng
void xoacuoimang(int a[],int &n);
{
a[n-1]=NULL;
n--;
}
8. Đếm số phần tử trong mảng
int demphantu(int a[])
{ int i=0;

while (a[i]!=NULL)
return i;

i++;

}
9. Chèn phần tử vào vị trí k
void chen1vitri(int a[], int &n, int x, int k)
{
int i;
if(k<0 ||k>=n) printf(“Vi tri chen khong hop le”);
else
{


for(i = n;i>k;i--)
a[i]=a[i-1];
a[k]=x;
n++;
}
}
10. Xoa phan tu tai vi tri k
void xoa1vtri(int a[], int &n, int k)
{
int i;
if(k<0 ||k>=n) printf(“Vi tri chen khong hop le”);
else
{
for(i = k;ia[i]=a[i+1];

a[i]=NULL;
n--;
}
}

Bài tập phần danh sách
Bài 4: Cho một danh sách chứa các số nguyên. Viết các chương trình con để:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.

Nhập các phần tử của danh sách từ bàn phím.
In danh sách ra màn hình.
Kiểm tra xem danh sách có được sắp xếp theo thứ tự tăng dần hay không.
Chèn một phần tử vào cuối danh sách.
Chèn một phần tử và đầu danh sách
Sắp xếp danh sách theo thứ tự tăng dần
Xóa phần tử cuối của danh sách
Đếm số phần tử của danh sách.
Chèn một phần tử vào vị trí thứ n (n nhập từ bàn phím) của danh sách
Xóa phần tử ở vị trí thứ n (n nhập từ bàn phím) của danh sách.

Bài tập phần sắp xếp

Bài 5: Viết chương trình chính với menu cho phép chọn các chức năng tương ứng:
1. Nhập vào mảng n phần tử


2. Sắp xếp mảng theo giải thuật
a. Phương pháp chọn (Selection sort)
b. Phương pháp chèn (Insertion sort)
c. Phương pháp đổi chỗ (Interchange sort)
d. Phương pháp nổi bọt (Bubble sort)
e. Phương pháp sắp xếp nhanh (Quicksort )



×