四.C语言程序设计和数据结构(40分)
1. 举例说明左加(++i)及右加(i++)的区别。(4分)
2. 举例说明Struct和Union的区别(4分)
3. 说明unsigned char和char 的区别,在什么情况下用unsigned char,什么情况下用char?(4分)
4. 写一个函数,输入参数是一个排序二叉树的头指针和关键值,在排序二叉树中检索和输入关键值相同的iKey,如果检索到,返回相应的pData,否则返回NULL.(8分)
5. 在有序表(升序排列)ST中折半查找关键字等于Key的数据元素,若找到则函数值为该元素在ST表中的位置,否则返回0.假定ST表的定义如下:
typedef struct tagKeyType{
KeyType key;
} KeyType;
typedef struct tagSStable{
ElemType * elem;
int length;
}Sstable;
试写出下列函数。(10分)
int Search(SStable ST,KeyType key)
{
}
6. 阅读以下程序说明和C程序,将答案写在后面的空白处。
本程序所列函数replace(char *s1,char *s2,char *str1,char *str2)实现当已知字符串s1中有与字符串str1相同的字符列时,就把该字符拷贝到字符数组s2;当从某字符开始能够成一个与字符串str2相同的字符列时,就将字符串str2的个字符拷贝到字符数组s2,并继续访问字符串s1中那个字符列之后的字符,直至字符串s1被访问完,字符复制即告结束。
如程序中所列数据abcdefg ababcd abab,
程序运行输出为:ABCXYZdefg abABCXYZDd abab
程序:
replace(char *s1,char *s2,char str1,char *str2)
{
char *t0,*t1,*t2;
while ((1))
{
for (t0=s1,t1=str1;*t1!=’