05瓯信算面向对象实验
先打开实验报告模板,查看需要完成哪些题目,然后打开判题系统地址,在判题系统上做对相应题目,最后将正确的程序复制到实验报告中,发到邮箱。
判题系统地址:http://wzuacm.3322.org/
完成如下实验报告:
面向对象实验1.doc 判题系统1、3题
面向对象实验2.doc 判题系统5、7题
面向对象实验3.doc 判题系统11题
面向对象实验4.doc 判题系统11题,用C++的输入输出完成
面向对象实验5.doc 判题系统16题
面向对象实验6.doc 判题系统18题
面向对象实验7.doc 判题系统20题
面向对象实验8.doc 判题系统22题
在实验报告文件名后添加你的学号姓名,比如“面向对象实验1-0530215288-张三.doc”,然后email到: [email protected]
1. 实验3
拷贝5.4节中的程序:
或者可以将后面出现的alloc函数调用改成malloc函数调用1 #define ALLOCSIZE 10000 /* size of available space */ 2 3 static char allocbuf[ALLOCSIZE]; /* storage for alloc */ 4 static char *allocp = allocbuf; /* next free position */ 5 6 char *alloc(int n) /* return pointer to n characters */ 7 { 8 if (allocbuf + ALLOCSIZE - allocp >= n) { /* it fits */ 9 allocp += n; 10 return allocp - n; /* old p */ 11 } else /* not enough room */ 12 return 0; 13 } 14 15 void afree(char *p) /* free storage pointed to by p */ 16 { 17 if (p >= allocbuf && p < allocbuf + ALLOCSIZE) 18 allocp = p; 19 }
1.9节getline
5.6节
1 #include <stdio.h> 2 #include <string.h> 3 4 #define MAXLINES 5000 /* max #lines to be sorted */ 5 6 char *lineptr[MAXLINES]; /* pointers to text lines */ 7 8 int readlines(char *lineptr[], int nlines); 9 void writelines(char *lineptr[], int nlines); 10 11 void qsort(char *lineptr[], int left, int right); 12 13 /* sort input lines */ 14 main() 15 { 16 int nlines; /* number of input lines read */ 17 18 if ((nlines = readlines(lineptr, MAXLINES)) >= 0) { 19 qsort(lineptr, 0, nlines-1); 20 writelines(lineptr, nlines); 21 return 0; 22 } else { 23 printf("error: input too big to sort\n"); 24 return 1; 25 } 26 } 27 28 #define MAXLEN 1000 /* max length of any input line */ 29 int getline(char *, int); 30 char *alloc(int); 31 32 /* readlines: read input lines */ 33 int readlines(char *lineptr[], int maxlines) 34 { 35 int len, nlines; 36 char *p, line[MAXLEN]; 37 38 nlines = 0; 39 while ((len = getline(line, MAXLEN)) > 0) 40 if (nlines >= maxlines || (p = alloc(len)) == NULL) 41 return -1; 42 else { 43 line[len-1] = '\0'; /* delete newline */ 44 strcpy(p, line); 45 lineptr[nlines++] = p; 46 } 47 return nlines; 48 } 49 50 /* writelines: write output lines */ 51 void writelines(char *lineptr[], int nlines) 52 { 53 int i; 54 55 for (i = 0; i < nlines; i++) 56 printf("%s\n", lineptr[i]); 57 }
及qsort和swap
1 void qsort(char *v[], int left, int right) 2 { 3 int i, last; 4 void swap(char *v[], int i, int j); 5 6 if (left >= right) /* do nothing if array contains */ 7 return; /* fewer than two elements */ 8 swap(v, left, (left + right)/2); 9 last = left; 10 for (i = left+1; i <= right; i++) 11 if (strcmp(v[i], v[left]) < 0) 12 swap(v, ++last, i); 13 swap(v, left, last); 14 qsort(v, left, last-1); 15 qsort(v, last+1, right); 16 } 17 /* swap: interchange v[i] and v[j] */ 18 void swap(char *v[], int i, int j) 19 { 20 char *temp; 21 22 temp = v[i]; 23 v[i] = v[j]; 24 v[j] = temp; 25 }
- 所有的qsort换一个名字,比如qsort2
修改readlines函数
while(scanf("%s", line)!=EOF) { len = strlen(line)+1;
2. 实验6
基础知识参看:C++类与对象
3. 实验7
相关基础知识:C++继承与多态