Khoa công nghệ thông tin bài giảng LẬp trình cơ BẢn biên soạn



tải về 1.56 Mb.
trang23/29
Chuyển đổi dữ liệu30.08.2016
Kích1.56 Mb.
#28834
1   ...   19   20   21   22   23   24   25   26   ...   29

V. Kiểu liệt kê


Có thể gán các giá trị nguyên liên tiếp (tính từ 0) cho các tên gọi cụ thể bằng kiểu liệt kê theo khai báo sau đây:

enum tên_kiểu { d/s tên các giá trị };

Ví dụ:


enum Bool {false, true};

khai báo kiểu mới đặt tên Bool chỉ nhận 1 trong 2 giá trị đặt tên false và true, trong đó false ứng với giá trị 0 và true ứng với giá trị 1. Cách khai báo kiểu enum trên cũng tương đương với dãy các macro sau:

#define false 0

#define true 1

Với kiểu Bool ta có thể khai báo một số biến như sau:

Bool Ok, found;

hai biến Ok và found sẽ chỉ nhận 1 trong 2 giá trị false (thay cho 0) hoặc true (thay cho 1). Có nghĩa có thể gán:

Ok = true;

hoặc: found = false;

Tuy nhiên không thể gán các giá trị nguyên trực tiếp cho các biến enum mà phải thông qua ép kiểu. Ví dụ:

Ok = 0; // sai

Ok = Bool(0) ; // đúng

hoặc Ok = false ; // đúng

VI. Tóm tắt nội dung bài học


I. Cấu trúc tự định nghĩa

1 Khái niệm

2. Khai báo biến cấu trúc

3. Các thao tác trên biến kiểu cấu trúc

4. Con trỏ cấu trúc

II. Kiểu ngăn xếp

1. Khái niệm

2. Các thao tác cơ bản

3. Cài đặt

4. Ứng dụng

III. Kiểu hàng đợi

1. Khái niệm

2. Các thao tác cơ bản

3. Cài đặt

4. Ứng dụng

VII. Bài tập


Xem Bài 11 - Bài tập thực hành Cấu trúc dữ liệu tự định nghĩa.

Bài 11 - Bài thực hành: CẤU TRÚC DỮ LIỆU DO NGƯỜI DÙNG TỰ ĐỊNH NGHĨA

I. Thực hiện các ví dụ sau

1. Biểu diễn và thực hiện các phép toán phân số


Yêu cầu: Xây dựng cấu trúc biểu diễn phân số; cho phép nhập vào 2 phân số, thực hiện các phép cộng, trừ, nhân, chia 2 phân số đó.

Soạn thảo văn bản chương trình như sau

#include

#include
typedef struct fraction

{

int numerator;



int denominator;

};


///-- khai bao cac ham

fraction add(fraction x, fraction y) ;

fraction sub(fraction x, fraction y) ;

fraction multiply(fraction x, fraction y) ;

fraction divide(fraction x, fraction y) ;

void printFraction(fraction x);


int main()

{

fraction a,b;



printf("Nhap phan so, tu so truoc, mau so sau:");

scanf("%d%d",&a.numerator, &a.denominator);

printf("Nhap phan so, tu so truoc, mau so sau:");

scanf("%d%d",&b.numerator, &b.denominator);

printf("Hieu:\n");

printFraction(sub(a,b));

printf("\nTong:\n");

printFraction(add(a,b));

printf("\nTich:\n");

printFraction(multiply(a,b));

printf("\nThuong:\n");

printFraction(divide(a,b));

getch();

return 0;

}

///--------------- trien khai cac ham



fraction add(fraction x, fraction y)

{

fraction t;



t.numerator=x.numerator * y.denominator + x.denominator * y.numerator;

t.denominator = x.denominator * y.denominator;

return t;

}

///------------------



fraction sub(fraction x, fraction y)

{

fraction t;



t.numerator=x.numerator * y.denominator - y.numerator * x.denominator;

t.denominator = x.denominator * y.denominator;

return t;
}

fraction multiply(fraction x, fraction y)

{

fraction t;



t.numerator=x.numerator * y.numerator;

t.denominator = x.denominator * y.denominator;

return t;

}

fraction divide(fraction x, fraction y)



{

fraction t;

t.numerator=x.numerator * y.denominator;

t.denominator = x.denominator * y.numerator;

return t;

}

void printFraction(fraction x)



{

printf("%d/%d",x.numerator,x.denominator);

}

Thử nghiệm 1:



Thử nghiệm 2:

Thử nghiệm với hai giá trị là 3/4, và 1/2 đưa ra nhận xét, cần cải tiến như thế nào?



Thử nghiệm 3:

Thử nghiệm với hai giá trị là 3/4, và 0/2 đưa ra nhận xét, cần cải tiến như thế nào?



2. Chuyển biểu thức trung tố về dạng hậu tố


Yêu cầu: Viết chương trình cho phép chuyển một chuỗi biểu diễn biểu thức dạng trung tố thành chuỗi biểu diễn biểu thức dạng hậu tố.

Soạn thảo văn bản chương trình như sau

#include

#include

#include

#include

typedef struct stackNode

{

char item;



stackNode *next;

};

typedef struct stack{



stackNode* top;

};

///



void init(stack *s);

///0: empty

int empty(stack *s);;

///-1: cant push to stack

int push(stack *s,char value);

///-1: pop empty stack

int pop(stack *s,char *out);

char getTop(stack *s);

int isnumber(char ch);

int isoperator(char ch);

int priority(char ch);

int convert(char source[], char chuoihauto[]);


stack s;

int main()

{

int i;


char v;

char c[100];

char o[100];

gets(c);


convert(c,o);

puts(o);


getch();

return 0;

}

///implemention



void init(stack *s)

{

s->top=NULL;



}

///---------

///0: empty

int empty(stack *s)

{

if(s->top==NULL)



{

return 0;

}

else


{

return 1;

}

}

///-----------



///-1: cant push to stack

int push(stack *s,char value)

{

stackNode *a;



a=(stackNode*)malloc(sizeof(stackNode));

if(a==NULL)

{

return -1;



}

a->item=value;

a->next=s->top;

s->top=a;

return 0;

}

///-------------



///-1: pop empty stack

int pop(stack *s,char *out)

{

stackNode *cur;



if(s->top==NULL)

{

return -1;



}

cur=s->top;

*out=s->top->item;

s->top=cur->next;

free(cur);

}

///---------------



char getTop(stack *s)

{

return s->top->item;



}

///----------------

int isnumber(char ch)

{

return ((int(ch)>=48&&int(ch)<=57));



}

///---------

int isoperator(char ch)

{

return (ch=='+'||ch=='-'||ch=='*'||ch=='/');



}

///---------

int priority(char ch)

{

if(ch=='+'||ch=='-')



return 0;

if(ch=='*'||ch=='/')

return 1;

}

///------------------



int convert(char source[], char suffixExp[])

{

stack S;



init(&S);

int count=0;

char temp;

for(int i=0;i

{

if(isoperator(source[i])&&isoperator(source[i+1]))



return i;

if((source[i]>=65&&source[i]<=90)||(source[i]>=97&&source[i]<=121))

return i;

}

for(int i=0;i

{

char ch=source[i];

if(isnumber(ch))

{

suffixExp[count]=ch;



count++;

}

else//operator



{

if(empty(&S)!=0)//not empty

{

if(isoperator(getTop(&S))&&(priority(getTop(&S))>=priority(ch)))



{

pop(&S,&temp);

suffixExp[count++]=temp;

push(&S,ch);

}

else


push(&S,ch);

}

else



push(&S,ch);

}

}//END FOR



while(empty(&S)!=0)//Lay het nhung gi con lai trong stack

{

pop(&S,&temp);



suffixExp[count++]=temp;

}

suffixExp[count++]='\0';//CHEN KI TU NULL VAO CUOI XAU;



}

Thử nghiệm 1:

Nhập chuỗi là: 1-3*4/5+6+7-8





Thử nghiệm 2:

Nhập chuỗi là: 1+3-2*3

Nhận xét và phát triển cho trường hợp có dấu ngoặc (, ), phép toán ^


Каталог: files -> FileMonHoc
FileMonHoc -> NGÂn hàng câu hỏi lập trình cơ BẢn nhóm câu hỏI 2 ĐIỂM
FileMonHoc -> CHƯƠng 2 giới thiệu về LÝ thuyết số
FileMonHoc -> CÁc hệ MẬt khoá CÔng khai kháC
FileMonHoc -> BỘ MÔn duyệt chủ nhiệm Bộ môn
FileMonHoc -> Khoa công nghệ thông tin cộng hòa xã HỘi chủ nghĩa việt nam
FileMonHoc -> Chủ nhiệm Bộ môn Ngô Thành Long ĐỀ CƯƠng chi tiết bài giảNG
FileMonHoc -> Chủ nhiệm Bộ môn Phan Nguyên Hải ĐỀ CƯƠng chi tiết bài giảNG
FileMonHoc -> Khoa: CÔng nghệ thông tin cộng hòa xã HỘi chủ nghĩa việt nam
FileMonHoc -> MẬt mã khóA ĐỐi xứng lý thuyết cơ bản của Shannon
FileMonHoc -> Khoa cntt cộng hòa xã HỘi chủ nghĩa việt nam

tải về 1.56 Mb.

Chia sẻ với bạn bè của bạn:
1   ...   19   20   21   22   23   24   25   26   ...   29




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương