4
I- CHO CHƯƠNG TRÌNH ĐOÁN KT QU1. a) Chng mi nh rng, mt chư ơng trì nh bt kđược th hin bn g tt cc ác cu tr úc lnh: f or, whi le, do..while, if..else, switch đều có thchuyn đổi thành mt chương trình mi tương đương vi vic sdng ti thiu cu trúc lnh lp while và mt sbiến ph.  b) Áp dng khng định trên chuyn đổi hàm Functi on1() dưới đây thành mt hàm mi tương đương nhưng chđược phép sdng ti thiu cu trúc lnh lp while và được phép thêm vào mt sbiến  ph. 2. a) Chng mi nh rng, mt chư ơng trì nh bt kđược th hin bn g tt cc ác cu tr úc lnh: f or, whi le, do..while, if..else, switch đều có thchuyn đổi thành mt chương trình mi tương đương vi vic sdng ti thiu cu trúc lnh lp while và mt sbiến ph.  b) Áp dng khng đị nh trên chuyn hàm Function1() dưới đây thành mt hàm mi t ương đương nhưng chđược phép sdng cu trúc lnh lp while và mt sbiến ph. int Function1(int A[], int n, int x){ for( int L=0, H=n-1,M=(L+H)/2; L<=H; M=(L+H)/2){ if (x>A[M]) L = M+1; else { if(x<A[M]) H = M-1; else return(M); } } return(-1); } int Function1(int A[][MAX], int n) { int H=0; for(int i=1; i<=n; i++){ int S =0; for(int j=1; j<=n; j++){ if(A[i][j]!=A[j][i]) return(2); S = S + A[i][j]; } if (S%2==0) H++; } if(H == n) return(1); else if( H == (n-2)) return(-1); return(0); }

[Ôn thi cao học PTIT - KTLT] Test 1

Embed Size (px)

Citation preview

Page 1: [Ôn thi cao học PTIT - KTLT] Test 1

8/8/2019 [Ôn thi cao học PTIT - KTLT] Test 1

http://slidepdf.com/reader/full/on-thi-cao-hoc-ptit-ktlt-test-1 1/4

I- CHO CHƯƠNG TRÌNH ĐOÁN KẾT QUẢ

1.

a) Chứng minh rằng, một chương trình bất kỳ được thể hiện bằng tất cả các cấu trúc lệnh: for, while,do..while, if..else, switch đều có thể chuyển đổi thành một chương trình mới tương đương với việcsử dụng tối thiểu cấu trúc lệnh lặp while và một số biến phụ.

 b) Áp dụng khẳng định trên chuyển đổi hàm Function1() dưới đây thành một hàm mới tương đương

nhưng chỉ được phép sử dụng tối thiểu cấu trúc lệnh lặp while và được phép thêm vào một số biến phụ.

2.

a) Chứng minh rằng, một chương trình bất kỳ được thể hiện bằng tất cả các cấu trúc lệnh: for, while,do..while, if..else, switch đều có thể chuyển đổi thành một chương trình mới tương đương với việcsử dụng tối thiểu cấu trúc lệnh lặp while và một số biến phụ.

 b) Áp dụng khẳng định trên chuyển hàm Function1() dưới đây thành một hàm mới tương đươngnhưng chỉ được phép sử dụng cấu trúc lệnh lặp while và một số biến phụ.

int Function1(int A[], int n, int x){for( int L=0, H=n-1,M=(L+H)/2; L<=H; M=(L+H)/2){

if (x>A[M]) L = M+1;else {

if(x<A[M]) H = M-1;else return(M);

}}return(-1);

}

int Function1(int A[][MAX], int n) {

int H=0;for(int i=1; i<=n; i++){ int S =0;for(int j=1; j<=n; j++){

if(A[i][j]!=A[j][i]) return(2);S = S + A[i][j];

}if (S%2==0) H++;

}if(H == n) return(1);else if( H == (n-2)) return(-1);return(0);

}

Page 2: [Ôn thi cao học PTIT - KTLT] Test 1

8/8/2019 [Ôn thi cao học PTIT - KTLT] Test 1

http://slidepdf.com/reader/full/on-thi-cao-hoc-ptit-ktlt-test-1 2/4

3.

a. Hãy cho biết kết quả thực hiện chương trình dưới đây? b. Chuyển đổi chương trình đã cho thành một chương trình mới tương đương nhưng chỉ được

 phép sử dụng tối thiểu cấu trúc lệnh lặp while và được phép thêm vào một số biến phụ (khôngđược phép dùng các cấu trúc lệnh for, do..while, if..else, và switch)?

4.

a) Hãy cho biết kết quả thực hiện chương trình dưới đây? b) Hãy chuyển đổi chương trình dưới đây thành một chương trình mới tương đương nhưng chỉ được

 phép sử dụng cấu trúc lệnh lặp while và được phép thêm vào một số biến phụ? Không được phépsử dụng các cấu trúc lệnh khác như if..else, switch, do..while, for.

#include <stdio.h>#include <conio.h>int X[10], n =4, chuaxet[]={1,1,1,1,1},count=0;

void Result(void){printf("\n Ket qua buoc %d:",++count);for(int i=1; i<=n; i++) printf("%3d",X[i]);

}void Function(int i){

for(int j=1; j<=n; j++){if(chuaxet[j]){X[i]=j; chuaxet[j]=0;

if(i==n) Result();else Function(i+1);chuaxet[j]=1;

}}

}void main(void){ Function(1); }

#include <stdio.h>#include <conio.h>#define MAX 100

int X[MAX], n=5,k=3,count =0;void Result(void){

printf("\n Ket qua buoc %d:",++count);for(int i=1; i<=k; i++) printf("%5d",X[i]);

}void Function1(int i){

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

}}void main(void){ X[0]=0; Function1(1); }

Page 3: [Ôn thi cao học PTIT - KTLT] Test 1

8/8/2019 [Ôn thi cao học PTIT - KTLT] Test 1

http://slidepdf.com/reader/full/on-thi-cao-hoc-ptit-ktlt-test-1 3/4

Page 4: [Ôn thi cao học PTIT - KTLT] Test 1

8/8/2019 [Ôn thi cao học PTIT - KTLT] Test 1

http://slidepdf.com/reader/full/on-thi-cao-hoc-ptit-ktlt-test-1 4/4

7.

a) Hãy cho biết kết quả thực hiện chương trình dưới đây? b) Chỉ được phép sử dụng cấu trúc lệnh lặp while và được phép thêm vào một số biến phụ, hãy chuyển

đổi chương trình đã cho thành một chương trình mới tương đương (không được phép sử dụng các cấu trúclệnh (for, do..while, if..else, switch )?

#include <stdio.h>#include <conio.h>char line[]="000 001 010 011 100 101 110 111 101 110";

void main(void){ clrscr();int n, m=0, k=0;n = strlen(line);char s[32];for(int i=0; i<=n; i++){

switch(line[i]){case ' ' :case '\t':case '\n':case '\r':case '\0':

if (k>0) { s[k]='\0';m++;k=0;printf("\n Kết quả bước %d:%s",m,s);

}break;

default: s[k++]=line[i]; break;}

}}