目录
一、程序阅读与理解(45分)
二、简答题(60分)
三、算法设计(45分)
一、程序阅读与理解(45分)
1、程序执行时输入“1 2 3 4 5 6 7 8 9 0”,请写出执行后输出结果。
#include <stdio.h>
int main()
{
int a[10], i;
for (i = 0; i < 10; i++)
scanf("%d", &a[i]);
for (i = 9; i > 4; i--)
printf("%d", *(a + i));
return 0;
}
2、程序执行时输入“9”,请写出执行后输出结果。
#include <stdio.h>
int main()
{
int x, y;
scanf("%d", &x);
if (x >= 0)
if (x > 0)
y = 1;
else
y = 0;
else
y = -1;
printf("x=%d,y=%d\n", x, y);
return 0;
}
3、
#include <stdio.h>
void fun(int *x, int *y)
{
printf("%d %d", *x, *y);
*x = 3;
*y = 4;
}
int main()
{
int x = 1, y = 2;
fun(&y, &x);
printf("%d %d", x, y);
return 0;
}
4、
#include <stdio.h>
int main()
{
char str[20] = "Welcome to SWUST!", *p = str;
printf("%s\n", p + 10);
return 0;
}
5、程序执行时输入“5 9”,请写出执行后输出结果。
#include <stdio.h>
int main()
{
int *p1, *p2, *p, a, b;
scanf("%d %d", &a, &b);
p1 = &a;
p2 = &b;
if (a < b)
{
p = p1;
p1 = p2;
p2 = p;
}
printf("a=%d,b=%d\n", a, b);
printf("max=%d,min=%d\n", *p1, *p2);
return 0;
}
6、
#include <stdio.h>
int main()
{
FILE *fp;
int i, k = 0;
fp = fopen("d1.data", "w");
for (i = 1; i <= 5; i++)
fprintf(fp, "%d", i + 5);
fclose(fp);
fp = fopen("d1.data", "r");
fscanf(fp, "%d", &k);
printf("%d\n", k);
fclose(fp);
return 0;
}
7、
#include <stdio.h>
int main()
{
int n;
void print_star();
void print_message();
print_star();
print_message();
print_star();
return 0;
}
void print_star()
{
printf("**********\n");
}
void print_message()
{
printf("welcome to swust!\n");
}
8、
#include <stdio.h>
int main()
{
int i = 1, sum = 0;
do
{
sum = sum + i;
i++;
} while (i <= 100);
printf("%d\n", sum);
return 0;
}
9、
#include <stdio.h>
int main()
{
int p[7] = {11, 13, 14, 15, 16, 17, 18}, i = 0, k = 0;
while (i < 7 && p[i] % 2)
{
k = k + p[i];
i++;
}
printf("%d", k);
return 0;
}
二、简答题(60分)
1、线性表的两种存储结构是什么,各有哪些优点与缺点?(8分)
2、有一个线性表L=(x,y,t,m,k,z,x),求ListLength(L)、ListEmpty(L)、GetElem(L,4,a)、LocateElem(L,x),ListInsert(L,4,z)和ListDelete(L,6)等基本运算的执行结果。(12分)
3、某二叉树的结点数据采用顺序存储,表示如下:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
E | A | F | D | H | C | G | I | B |
- 试写出此二叉树的图形表示。(9分)
- 写出结点D的双亲结点及左、右子女。(3分)
4、设有一组初始记录关键字为(45,80,48,40,22,78),请构造一棵AVL树并给出构造过程。(12分)
5、在通信中,为了降低通信量,通常对通信的符号进行变长的编码。假设用于通信的电文仅由{o,p,q,r,s,t,u,v}8个字母组成,每个字母在电文中出现的概率分别为:0.06,0.18,0.03,0.07,0.31,0.05,0.21,0.09。请为这些字母设计哈夫曼编码,请给出构造的哈夫曼树结构。(16分)
三、算法设计(45分)
1、请用c语言写出在顺序串上实现二分查找的算法。(15分)
typedef struct
{
char key[MaxSize];
int length;
} SqList;
2、请设计一个算法,用于判断单链表中元素是否是递增的。(15分)
3、设有如下的队列链式结构定义,请给出进队列enQueue(q,e)和出队列deQueue(q,e)的算法。(15分)
队列的链式定义如下:
typedef struct qnode
{
ElemType data;
Struct qnode *next;
}
队列结点的类型LiQueue定义如下:
typedef struct
{
QNode *front;
QNode *rear;
}LiQueue