一.3、分析题。 
本题(各5分)。假设下面代码中的变量都是合法变量,调用外部的函数都是正确的。回答 
几个问题: 
这些代码意图要干什么? 
是否有问题? 
如果有问题,该如何修改,或者如何避免类似错误发生? 
如果没有问题,如果代码有输出,输出是什么? 
1、----------------------------------------------------------- 
int isvowel (char c) 
{ 
return c=='a'||c=='e'||c=='i'||c=='o'||c=='u'; 
} 
2、-----------------------------------------------------------
while (c=='\t'||c=' '||c=='\n') 
c=getc(f); 
3、-----------------------------------------------------------
/* 当x=2, y=3, z=? */ 
if (x==0) 
if (y==0) 
z=-1; 
else 
z=x+y; 
4、-----------------------------------------------------------
/* 处理网络事件 */ 
void process_network_code(int x, int y) 
{ 
/* 选择modes_pointer资源 */ 
switch (line) { 
case THING1: 
/* 处理异常1#, 使用老的modes_pointer资源 */ 
doit1(); 
break; 
case THING2: 
/* 处理异常2#, 需要重新启动服务 */ 
if (x == STUFF) { 
/* 重新申请modes_pointer资源,没有初始化 */ 
do_first_stuff(); 
/* 在这种条件下,有些资源不用重新申请 */ 
if (y == OTHER_STUFF) 
break; 
/* 申请剩下的资源,并初始化 */ 
do_later_stuff(); 
} 
/* 初始化modes_pointer资源 */ 
initialize_modes_pointer(); 
break; 
default: 
/* 处理普通事件, 使用老的modes_pointer资源 */ 
processing(); 
} 
/* 使用modes_pointer资源,处理事件 */ 
use_modes_pointer(); 
} 
5、-----------------------------------------------------------
int is_gb2312_char(char c1, char c2) 
{ 
if (c1 >= 0xa1 && c2 >= 0xa1) 
return 1; 
else 
return 0; 
} 
6、-----------------------------------------------------------
下面x, y的值是多少,有什么问题? 
int x = 10, y = 3; 
x ^= y; 
y ^= x; 
x ^= y; 
/* x=?, y = ? */ 
7、-----------------------------------------------------------
int days[]={31,28,31,30,31,30,31,31,30,31,30,31,}; 
int calendar[12][31]; 
int (*monthp)[31]; 
int *dayp; 
int i; 
memset(calendar, 0, sizeof(calendar)); 
i = 0; 
for (monthp = calendar; monthp < &calendar[12]; monthp++) { 
for (dayp = *monthp; dayp < &(*monthp)[31]; dayp++) { 
if (dayp - *monthp < days[calendar - monthp]) { 
*dayp = i++ % 7 + 1; 
} 
} 
} 
8、-----------------------------------------------------------
void printnum(long n) 
{ 
if (n < 0) { 
putchar('-'); 
n = -n; 
} 
if (n >= 10) { 
printnum(n/10); 
} 
putchar ("0123456789"[n%10]); 
} 
9、-----------------------------------------------------------
void * memchr(void *pv, unsigned char ch, size_t size) 
{ 
unsigned char *pch = (unsigned char *) pv; 
unsigned char *pchEnd = pch + size; 
while (pch < pchEnd) { 
if (*pch == ch) 
return (pch); 
pch++; 
} 
return NULL; 
} 
10、-----------------------------------------------------------
void * memchr(void *pv, unsigned char ch, size_t size) 
{ 
unsigned char *pch = (unsigned char *) pv; 
unsigned char *pchPlant = pch + size; 
unsigned char chSave = *pchPlant; 
*pchPlant = ch; 
while (pch != ch) { 
pch++; 
} 
*pchPlant = chSave; 
return ((pch == pchPlant) ? NULL : pch); 
} 
11、-----------------------------------------------------------
void UnsToStr(unsigned short int u, char *str) 
{ 
char *pch; 
assert(u <= 65535); 
pch = &str[5]; 
*pch = '\0'; 
do { 
*--pch = u % 10 + '0'; 
} while ((u / 10) > 0); 
strcpy(str, pch); 
} 
12、-----------------------------------------------------------
void *memmove(void *pvTo, void pvFrom, size_t size) 
{ 
char *pbTo = (char *)pvTo; 
char *pbFrom = (char *)pvFrom; 
((pbTo < pbFrom) ? tailmove : headmove) (pbTo, pbFrom, size); 
return (pvTo); 
} 
13、-----------------------------------------------------------
void *memcpy(void *pvTo, void pvFrom, size_t size) 
{ 
char *pbTo = (char *)pvTo; 
char *pbFrom = (char *)pvFrom; 
while (size-- > 0); 
*pbTo++ = *pbFrom++; 
return (pvTo); 
} 
14、-----------------------------------------------------------
#include <stdio.h>
int main(int argc, char *argv[]) 
{ 
char s[]="0123456789"; 
int i = 0; 
do { 
printf ("%c", i++[s]); 
} while(s?1:printf("\n")-1); 
return 0; 
} 
15、-----------------------------------------------------------
int fibonacci(int x) 
{ 
if (x == 1 || x == 2) 
return 1; 
return fibonacci(x - 2) + fibonacci(x - 1); 
} 
16、-----------------------------------------------------------
这里有一个程序cdecl.c。写出它的工作流程。写出它的使用方法。 
给出一个典型输入用例,记录下它的输出。 
