1. Trang chủ
  2. » Giáo án - Bài giảng

Ôn thi cao học phần kỹ thuật lập trình có đáp án

177 530 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 177
Dung lượng 186,21 KB

Nội dung

Hãy viết chương trình liệt kê tất cả các phần tử của tập D được xác định như dưới đây: Dữ liệu vào cho bởi file data.in theo khuôn dạng như sau:  Dòng đầu tiên ghi lại hai số tự nhiên n

Trang 1

1 TÌM KẾT QUẢ THỰC HIỆN CHƯƠNG TRÌNH

2 CHUYỂN ĐỔI CHƯƠNG TRÌNH

1 Hãy cho biết kết quả thực hiện đoạn chương trình dưới đây

printf("\n Buoc %d:",++dem);

for(int i=0; i<n; i++)

Trang 2

break;

} j++;

Trang 3

printf("\n Buoc %d:",++dem); for(int i=0; i<n; i++) if(X[i])

Trang 4

printf("\n Buoc %d:",++dem); int i=0;

while(i<n){

while(X[i]){

printf("%4c",S[i]); break;

Funtion(i+1);

break;

} j++;

Trang 5

void Funtion(int i){

for (int j=X[i-1]+1;j<=n-k+i;j++){

Trang 6

break;

} j++;

Trang 7

void Funtion(int i){

for (int j=X[i-1]+1;j<=n-k+i;j++){

Trang 8

int i=1;

while(i<=k){

printf("%3d",S[X[i]-1]); i++;

Funtion(i+1);

break;

} j++;

Trang 9

#include <stdio.h>

#include <conio.h>

int A[] = {4, 3, 7, 8, 6, 2, 5,}, n=7, OK=1,dem=0;

void Result(void){

printf("\n Ket qua buoc %d:",++dem);

for(int i=0; i<n; i++) printf("%4d",A[i]);

} else {

if(A[i]>A[i+1]){

int t=A[i];A[i]=A[i+1];A[i+1]=t; }

Ket qua buoc 1: 4 3 7 8 6 2 5

Ket qua buoc 2: 4 3 7 8 6 2 5

Ket qua buoc 3: 4 3 8 7 6 2 5

Ket qua buoc 4: 4 3 8 6 7 2 5

Ket qua buoc 5: 4 3 8 6 7 2 5

Ket qua buoc 6: 4 3 8 6 7 2 5

Trang 10

} while(OK1){

while(A[i]>A[i+1]){

int t=A[i];A[i]=A[i+1];A[i+1]=t; break;

} break;

Trang 11

#include <stdio.h>

#include <conio.h>

int A[] = {4, 3, 7, 8, 6, 2, 5,}, n=7, OK=1,dem=0;

void Result(void){

printf("\n Ket qua buoc %d:",++dem);

for(int i=0; i<n; i++) printf("%4d",A[i]);

} else {

if(A[i]<A[i+1]){

int t=A[i];A[i]=A[i+1];A[i+1]=t; }

Ket qua buoc 1: 3 4 7 8 6 2 5

Ket qua buoc 2: 3 7 4 8 6 2 5

Ket qua buoc 3: 3 7 4 8 6 2 5

Ket qua buoc 4: 3 7 4 8 6 2 5

Ket qua buoc 5: 3 7 4 8 2 6 5

Ket qua buoc 6: 3 7 4 8 2 6 5

Trang 12

} while(OK1){

while(A[i]<A[i+1]){

int t=A[i];A[i]=A[i+1];A[i+1]=t; break;

} break;

Trang 13

TEST 2

2.1.Cho dãy gồm n số tự nhiên phân biệt a 1 , a 2 , , a n và số tự nhiên K và một ngưỡng giá trị θ

Hãy viết chương trình liệt kê tất cả các phần tử của tập D được xác định như dưới đây:

Dữ liệu vào cho bởi file data.in theo khuôn dạng như sau:

Dòng đầu tiên ghi lại hai số tự nhiên n , K và θ Hai số được viết cách nhau bởi một vài

khoảng trống

 N dòng kế tiếp mỗi dòng ghi lại bộ đôi ( a i c i ) Hai số khác nhau được viết cách nhau

bởi một vài kí tự trống

Kết quả ra ghi lại trong file ketqua.out theo khuôn dạng sau:

Dòng đầu tiên ghi lại số tự nhiên k là số phần tử của tập D.

k dòng tiếp theo mỗi dòng ghi lại một vector nhị phân X = (x 1 , x 2 , , x n ) là phần tử của D Hai thành phần khác nhau của vector x được viết cách nhau bởi một vài khoảng trống.

Ví dụ với n =6, K = 20, θ=24 { a 1 , a 2 , a 3 , a 4 , a 5 , a 6 ,} = {2, 4, 6, 8, 10, 12 }, { c 1 , c 2 , c 3 , c 4 , c 5 ,

nhị phân độ dài n trong file ketqua.out dưới đây:

Trang 14

fprintf(fp,"%d\n",count);

fclose(fp);

return 0;

}

Trang 15

2.2 Cho ai, ci , K, N (i =1, 2, ,N; N100) là những số nguyên dương và tập hợp

Dữ liệu vào cho bởi file data.in theo khuôn dạng sau:

Dòng đầu tiên ghi lại số tự nhiên N và K Hai số được viết cách nhau một vài khoảng

trống;

 N dòng kế tiếp mỗi dòng ghi lại bộ đôi ( a i c i ) Hai số khác nhau được viết cách

nhau bởi một vài kí tự trống

Giá trị tối ưu FOPT và phương án XOPT tìm được ghi lại trong file ketqua.out theo khuôn

dạng:

Dòng đầu tiên ghi lại giá trị tối ưu FX(X);

Dòng kế tiếp ghi lại phương án tối ưu XOPT Hai phần tử khác nhau của phương án

tối ưu được viết cách nhau bởi một vài khoảng trống

Ví dụ với sau sẽ minh họa khuôn dạng cho file data.in và ketqua.out của bài toán

Trang 16

void Result(void){

fprintf(fp,"%3d\n",FOPT);for(int i=1;i<=n;i++)

fprintf(fp,"%3d",XOPT[i]);}

fclose(fp);

return 0;

}

Trang 17

2.3 Cho ai, ci , K, N (i =1, 2, ,N; N100) là những số nguyên dương và tập hợp

Dữ liệu vào cho bởi file data.in theo khuôn dạng sau:

Dòng đầu tiên ghi lại số tự nhiên N và K Hai số được viết cách nhau một vài khoảng

trống;

 N dòng kế tiếp mỗi dòng ghi lại bộ đôi ( a i c i ) Hai số khác nhau được viết cách

nhau bởi một vài kí tự trống

Giá trị tối ưu FOPT và phương án XOPT tìm được ghi lại trong file ketqua.out theo khuôn

dạng:

Dòng đầu tiên ghi lại giá trị tối ưu FX(X);

Dòng kế tiếp ghi lại phương án tối ưu XOPT Hai phần tử khác nhau của phương án

tối ưu được viết cách nhau bởi một vài khoảng trống

Ví dụ với sau sẽ minh họa khuôn dạng cho file data.in và ketqua.out của bài toán

Trang 18

void Result(void){

fprintf(fp,"%3d\n",FOPT);for(int i=1;i<=n;i++)

fprintf(fp,"%3d",XOPT[i]);}

void Update(void){

int S=0,F=0;

for(int i=1;i<=n;i++){

S=S+A[i]*X[i];F=F+C[i]*X[i];}

if(S==k&&F<FOPT){

FOPT=F;

for(int j=1;j<=n;j++)XOPT[j]=X[j];

Result();

fclose(fp);

return 0;

}

Trang 19

2.4 Một công ty lữ hành cần xây dựng các tour du lịch đi qua N điểm Xuất phát tạithành phố số 1 công ty lữ hành muốn xây dựng các tour có chi phí đúng bằng K,đi quatất cả các điểm còn lại, mỗi điểm đúng một lần rồi trở lại điểm ban đầu Biết chi phí đi lại

từ điểm thứ i đến điểm thứ j là cij

Dữ liệu vào cho bởi file chiphi.in theo khuôn dạng sau:

 Dòng đầu tiên ghi lại số tự nhiên N , K là số điểm các tour du lịch và chi phí củatour

N dòng kế tiếp ghi lại ma trận chi phí C = (cij) Hai phần tử khác nhau của matrận C = (cij) được ghi cách nhau bởi một vài khoảng trống

Hãy viết chương trình liệt kê tất cả các tour du lịch có chi phí đúng bằng K cho công

ty du lịch Ghi lại các Tour trên mỗi dòng Hai điểm khác nhau của Tour được viếtcách nhau một khoảng trống Nếu không thể xây dựng được bất ký Tour nào hãy đưa

ra thông báo “Tour không tồn tại”

Ví dụ về dưới đây sẽ minh họa cho file data.in và ketqua.out của bài toán

Trang 20

}}

Trang 21

là θ được ghi lại giá tri 0.

Hãy sử dụng thuật toán DFS// BFS viết chương trình tìm đường đi từ đỉnh u đến đỉnh

v của đồ thị Nếu không tồn tại đường đi thì đưa ra thông báo “Không tồn tại đường đi”.Nếu tồn tại đường đi từ u đến v hãy ghi lại đường đi theo thứ tự ngược từ v đến

u vào file ketqua.out ( như hình dưới đây)

//printf("\n So dinh do thi:%d",n);

for(i=1; i<=n; i++){

printf("\n");

Dothi.in

5 1 52

1 3 4

2 4

1 3 54

Ketqua.Out

5<= 4<= 3<= 2<= 1

Trang 22

int dau, cuoi; char str[132], tu[12];

//Doc va chuyen doi thanh ma tran ke

// printf("\n So dinh do thi:%d",n);

// printf("\n So dinh do thi:%d",s);

// printf("\n So dinh do thi:%d",t);

tu[p]=str[j]; p++;

}else if( p>0 && (str[j]==' '||str[j]=='\t'||str[j]=='\0'||str[j]=='\n')){

Trang 23

} void BFS(int i){//Thu?t toán BFS

int queue[MAX], low=1, high=1, u, v;

} }

void Duongdi (void){

Trang 24

int j = t;fprintf(fp,"%3d<=",j);

while(truoc[j]!=s){

fprintf(fp,"%3d<=",truoc[j]);j=truoc[j]; }

fprintf(fp,"%3d",s);

//getch();

fclose(fp);

}

//Khoi dau lai mang chuaxet[]

//Khoi dau lai mang chuaxet[]

Duongdi ();

fclose(fp);

}

Trang 25

2 Duyệt các thành phần liên thông

int dau, cuoi; char str[132], tu[12];

//Doc va chuyen doi thanh ma tran ke

Trang 26

printf("\n So dinh do thi:%d",n);Init();

for( dau=1; dau<=n; dau++){

fgets(str,132,fp);

for(int j=0, p=0; j<=strlen(str); j++){

//tach tuif(str[j]!=' '&&str[j]!='\t'&&str[j]!='\0'&& str[j]!='\n'){

tu[p]=str[j]; p++;

}else if( p>0 && (str[j]==' '||str[j]=='\t'||str[j]=='\0'||str[j]=='\n')){

printf("\n So dinh do thi:%d",n);

for(i=1; i<=n; i++){

//printf("\n");

for(j=1; j<=n; j++){

fscanf(fp,"%d",&A[i][j]);

} }

Trang 27

}fprintf(fp,"\n");

Trang 28

cuoi = cuoi+1;

queue[cuoi]=t;

chuaxet[t]=FALSE;

} }

} }

//Khoi dau lai mang chuaxet[]

Trang 29

int dau, cuoi; char str[132], tu[12];

//Doc va chuyen doi thanh ma tran ke

printf("\n So dinh do thi:%d",n);Init();

for( dau=1; dau<=n; dau++){

fgets(str,132,fp);

Trang 30

if(cuoi!=0) { m++; A[dau][cuoi]=1; } //thiet lap gia tri cho ma tran ke

} }

printf("\n So dinh do thi:%d",n);

for(i=1; i<=n; i++){

//printf("\n");

for(j=1; j<=n; j++){

fscanf(fp,"%d",&A[i][j]);

} }

Trang 31

}

main(void) {

//cho danh sach canh > MTK

Thuật toán sinh:

1 Sinh xâu nhị phân:

} else ok=0;

Trang 32

if(r <=k){

int t=X[r]; X[r]=X[k]; X[k] = t; r++; k ;

} }

else ok=0;

}

Thuật toán quay lui:

1 Quay lui ( liệt kê xâu nhị phân)

Void Try(int i){

2 Quay lui (liệt kê hoán vị):

Void Try(int i){

else Try(i+1); chuaxet[j]=1;

} }

Trang 33

for(int i=1; i<=m; i++){

int dau, cuoi;

fscanf(fp,”%d%d”, &dau, &cuoi); A[dau][cuoi]=1;

A[dau][cuoi]=1;

} else {s[k]=str[i]; k++;} }

} }fclose(fp);

Void BFS(int u){

int Queue[max], dau=0, cuoi=0;

Trang 34

for(int u=1; u<=n; u++){

Read_MTK();//Read_DSC() || Read_DSK() fp=fopen(“ketqua”,”w”);

<gọi các hàm liên quan>;

Trang 35

else if(Test_Euler()==-1) Euler(u);

else fprintf(fp,”do thi khong phai Euler”);

fclose(fp);

}

3 TÌM KẾT QUẢ THỰC HIỆN CHƯƠNG TRÌNH

4 CHUYỂN ĐỔI CHƯƠNG TRÌNH

2 Hãy cho biết kết quả thực hiện đoạn chương trình dưới đây

#include <stdio.h>

#include <conio.h>

int A[] = {19, 12, 18, 13, 10, 14, 16, 11, 15, 17}, n=10, count=0; void Result(int *A, int n){

count++; printf("\n Buoc %d:",count);

for(int i=0; i<n; i++) printf("%4d",A[i]);

Trang 36

#include <stdio.h>

#include <conio.h>

int A[] = {19, 12, 18, 13, 10, 14, 16, 11, 15, 17}, n=10, count=0;

void Result(int *A, int n){

count++; printf("\n Buoc %d:",count);

}Result(A,n);

count++; printf("\n Buoc %d:",count);

for(int i=0; i<n; i++) printf("%4d",A[i]);

Trang 37

for(j=i-1; j>=0 && temp < A[j]; j ){

A[j+1]=A[j];

} A[j+1] = temp;Result(A,n);

i++;

Trang 38

count++; printf("\n Ket qua buoc %d:",count);

for(int i=0; i<n; i++) printf("%4d",A[i]);

} getch();

}

Kết quả

Ket qua buoc 1: 10 19 12 18 13 11 14 16 15 17

Ket qua buoc 2: 10 11 19 12 18 13 14 15 16 17

Ket qua buoc 3: 10 11 12 19 13 18 14 15 16 17

Ket qua buoc 4: 10 11 12 13 19 14 18 15 16 17

Ket qua buoc 5: 10 11 12 13 14 19 15 18 16 17

Ket qua buoc 6: 10 11 12 13 14 15 19 16 18 17

Ket qua buoc 7: 10 11 12 13 14 15 16 19 17 18

Ket qua buoc 8: 10 11 12 13 14 15 16 17 19 18

Ket qua buoc 9: 10 11 12 13 14 15 16 17 18 19

Trang 39

} Result(A,n);

printf("\n Ket qua buoc %3d:",++count);

for (int i=0; i<n; i++) printf("%3d",B[i]);

Ket qua buoc 1: 0 0 0 0 0

Ket qua buoc 2: 0 0 0 0 1

Ket qua buoc 3: 0 0 0 1 0

Ket qua buoc 4: 0 0 0 1 1

Ket qua buoc 5: 0 0 1 0 0

Ket qua buoc 6: 0 0 1 0 1

Ket qua buoc 7: 0 0 1 1 0

Ket qua buoc 8: 0 0 1 1 1

Ket qua buoc 9: 0 1 0 0 0

Ket qua buoc 10: 0 1 0 0 1

Ket qua buoc 11: 0 1 0 1 0

Ket qua buoc 12: 0 1 0 1 1

Ket qua buoc 13: 0 1 1 0 0

Ket qua buoc 14: 0 1 1 0 1 Ket qua buoc 15: 0 1 1 1 0 Ket qua buoc 16: 0 1 1 1 1 Ket qua buoc 17: 1 0 0 0 0 Ket qua buoc 18: 1 0 0 0 1 Ket qua buoc 19: 1 0 0 1 0 Ket qua buoc 20: 1 0 0 1 1 Ket qua buoc 21: 1 0 1 0 0 Ket qua buoc 22: 1 0 1 0 1 Ket qua buoc 23: 1 0 1 1 0 Ket qua buoc 24: 1 0 1 1 1 Ket qua buoc 25: 1 1 0 0 0 Ket qua buoc 26: 1 1 0 0 1

Trang 40

Ket qua buoc 27: 1 1 0 1 0

Ket qua buoc 28: 1 1 0 1 1

Ket qua buoc 29: 1 1 1 0 0

Ket qua buoc 30: 1 1 1 0 1 Ket qua buoc 31: 1 1 1 1 0 Ket qua buoc 32: 1 1 1 1 1Chuyển:

Trang 41

6 Hãy cho biết kết quả thực hiện đoạn chương trình dưới đây.

#include <stdio.h>

#include <conio.h>

int B[]={0,0,0,0,0}, n=5,k=3, OK=1, count=0;

void Inketqua(void){

printf("\n Ket qua %3d:",++count);

for(int i=0; i<n; i++) printf("%3d",B[i]);

#include <stdio.h>

#include <conio.h>

Trang 42

int B[]={0,0,0,0,0}, n=5,k=3, OK=1, count=0;void Inketqua(void){

printf("\n Ket qua %3d:",++count);

Trang 43

printf("\n Ket qua %3d:",++count);

for(int i=0; i<n; i++)

#include <stdio.h>

#include <conio.h>

int B[]={0,0,0,0,0,0,0}, n=7,k=80, OK=1, count=0;

int A[]={5,10,15,20,25,30,35};

Trang 44

}i++;

Trang 45

printf("\n Ket qua %3d:",++count);

for(int i=0; i<n; i++) printf("%3d",B[i]);

#include <stdio.h>

#include <conio.h>

int B[]={0,0,0,0,0,0,0}, n=7,k=80, OK=1, count=0;

int A[]={5,10,15,20,25,30,35};

Trang 47

printf("\n Ket qua %3d:",++count);

for(int i=0; i<n; i++) printf("%3d",B[i]);

Trang 48

Ket qua 23: 1 1 0 1 0 0 0 Ket qua 24: 1 1 1 0 0 0 0Chuyển:

Trang 49

Kết quả:

Ket qua buoc 1:000

Ket qua buoc 2:001

Ket qua buoc 3:010

Ket qua buoc 4:011

Ket qua buoc 5:100

Ket qua buoc 6:101 Ket qua buoc 7:110 Ket qua buoc 8:111 Ket qua buoc 9:101 Ket qua buoc10:110Chuyển:

Trang 50

}/*moi case co cau lenh dang sau ta chuyen thanh 1 whileNeu cau lenh case thu i ko co lenh dang sau, ket hop duoc dkcua while dong duoi no (dong i+ 1) */

while(str[i]!=' ' ||str[i]!='\t' ||str[i]!='\n' ||str[i]!='\r' ||str[i]!='\0'){

s[k++]=str[i];

break;

}i++;

int nguyen_to(unsigned long int n){

unisened long int i, k=sqrt(n);

for(i=2; i<=k; i++) if(n%i==0) return(0);

Trang 51

} while(OK); }

Kết quả

Ket qua buoc:1: 2 Ket qua buoc:2: 2 Ket qua buoc:3: 3 Ket qua buoc:4: 3 Ket qua buoc:5: 3 Ket qua buoc:6: 5 Ket qua buoc:7: 5 Ket qua buoc:8: 11 Ket qua buoc:9: 13 Ket qua buoc:10: 17 Ket qua buoc:11: 19 Ket qua buoc:12:23

Trang 52

#include <stdio.h>

#include <conio.h>

#include <math.h>

int nguyen_to(unsigned long int n){

unsigned long int i, k=sqrt(n);

for(i=2; i<=k; i++) if(n%i==0) return(0);

while(nguyen_to(n)==0 && n%i==0){

printf("\n Ket qua buoc:%d: %d",++k,i); n = n/i;break;

Trang 53

void Result (void) {

printf("\n Ket qua buoc d: %d ",++count);

for (int i=0; i<N; i++) printf("%3d",X[i]); }

Trang 54

Ket qua buoc d: 2 0 1 0 1 1

Ket qua buoc d: 3 0 1 1 0 1

Ket qua buoc d: 4 0 1 1 1 0

Ket qua buoc d: 5 1 0 0 1 1

Ket qua buoc d: 6 1 0 1 0 1

Ket qua buoc d: 7 1 0 1 1 0

Ket qua buoc d: 8 1 1 0 0 1

Ket qua buoc d: 9 1 1 0 1 0

Ket qua buoc d: 10 1 1 1 0 0

break;

}return(0);

}

void Result (void) {

printf("\n Ket qua buoc d: %d ",++count);

int i=0;

Trang 55

while(j<=1) {

{

X[i]=j;

/*if (i==N-1){

if (Test()) Result();}

else Try(i+1);*/ int OK=1;

while(i==N-1) {

/*if (Test()) */

while(Test()){

Result();

Trang 56

break ; } OK=0;

break;

}

while(OK){

Trang 57

if (S== K) return(1);

return(0);

}

void Result (void) {

printf("\n Ket qua buoc d: %d ",++count);

for (int i=0; i<N; i++) printf("%3d",X[i]); }

Ket qua buoc d: 1 0 0 1 1 1

Ket qua buoc d: 2 0 1 0 1 1

Ket qua buoc d: 3 0 1 1 0 1

Ket qua buoc d: 4 0 1 1 1 0

Ket qua buoc d: 5 1 0 0 1 1

Ket qua buoc d: 6 1 0 1 0 1

Ket qua buoc d: 7 1 0 1 1 0

Trang 58

Ket qua buoc d: 8 1 1 0 0 1

Ket qua buoc d: 9 1 1 0 1 0

Ket qua buoc d: 10 1 1 1 0 0

while(S==K) {return(1);

break ;

}return(0);

}

void Result (void) {

printf("\n Ket qua buoc d: %d ",++count);

Trang 60

a) Chứng minh rằng một chương trình được thể hiện bằng tất cả các cấu trúc lệnh

(while, do while, for, if else, switch) đều có thể chuyển đổi thành một chươngtrình mới cho lại kết quả giống như chương trình cũ nhưng chỉ cần dùng tối thiểucấu trúc lệnh lặp while và một số biến phụ

b) Áp dụng kết quả trên chuyển đổi các chương trình từ bài 1 đến bài 10 sử dụng tối

thiểu cấu trúc lệnh lặp while và một số biến phụ

TEST2 XỬ LÝ SỐ:

1 Hãy viết chương trình liệt kê tất cả các số tự nhiên K thỏa mãn đồng thời những điều

kiện dưới đây:

(i) K là số có 5 chữ số;

(ii) K là số nguyên tố;

(iii) K là số thuận nghịch (k là số thuận nghịch nếu đọc xuôi hay đọc ngược các chữ

số của k ta đều nhận được một số như nhau Ví dụ số: 30303);

(iv) Biểu diễn của K ở hệ cơ số B ( B bất kỳ được nhập từ bàn phím cũng là một số

thuận nghịch Ví dụ số k=30303 có biểu diễn ở hệ cơ số 8 là 73137 cũng làmột số thuận nghịch;

Ngày đăng: 27/04/2016, 10:47

TỪ KHÓA LIÊN QUAN

w