1、16位short int 类型所能表示的数值下限与上限,如果使用printf的格式串”%d,%d”打印,其结果是__-32768 ,32767 ____;
2、有定义(tip:潜在的级数升级,此处按int输出)
signed char ch = 127;
printf(“%d”,ch+127);
的输出结果是__254_______;
3、多组数组a[10][10][10]的第一个元素是a[0][0][0],则其第245个元素是_a[2][4][4]_____;(tip:2*10*10+4*10+4+1)
4、若定义int a[010],(注:八进制) 则sizeof(a)的值是___32___;
5、有定义char *str = “hello\n\0\n”,则strlen(str)的值是__6____;(tip:’\0’为字符结束符标志)
6、定义一个函数指针类型func_ptr,所对应的函数的参数是void,返回值为int指针:typedef_int*(*func_ptr)(void)___;
7、完成宏定义,将int型变量a的第0位到第n位取反(右数最低位为第0位),其他位保持不变:
#define bit_reverse(a,n) ( (a)^ 1<<(n) )
8、如下函数
int func(void)
{
static int cnt;
} 第一次运行时,cnt的值是___0___;
9、若i = 0,表达式a[i++] += 4; 运算后,i的值是___1___;
10、语句fprintf(stderr,"%x, %d, %c", '1', '1', '1');的输出是_31,49,1_;
11、枚举类型定义
enum boolean {yes, no};
yes的数值是___0___;
12、有如下程序(tip:宏原样带入展开即可)
#define ADD(x) (x) + (x)
int main(void)
{
int a = 5, b = 6, c = 7, d = ADD(a + b) * c;
printf(“%d\n”, d);
return 0;
} 的输出结果是__88____;
13、程序
int main(void)
{
int i = 16, j, x = 6;
j = i++ + 1; (tip:结合顺序,可参考《C陷阱与缺陷》)
x *= i = j;
printf(“%d, %d\n”, j, x);
return 0;
} 输出的是___17, 102___;
14、有以下语句
struct a {int v1, v2;};
struct b {
struct a v1;
int v2, v3;
};
int main(void)
{
struct b t = {1, 2, 3, 4};
struct a *ap = (struct a*)&t;
printf(“%d”, *((int *)(ap + 1)));
} 输出结果是__3____;(tip:指针类型及偏移)
15、语句
i = 0, j = 0;
for(i++, j++; ++j < 1 && i++ <2; i++, j++)
{(tip:逻辑运算符的特点)
;/*void*/
} 当循环退出时,i的值是___1___;
16、运行C语言编写的程序
copy /B a.txt a.bak 时,int main(int argc, char *argv[])中argv[argc]指向的内容是__NULL____;(tip:可参考《C和指针》P265)
17、有定义(tip:算数右移-与编译器相关,左移)
int i=-1;
printf("%d,%d",i>>1,i<<1); 的结果是___-1,-2_______。
注:负数在计算机中是以补码的形式参与计算的 ,因为-1的原码是(以八位为例)1000 0001,所以补码是1111 1111,右移一位的得到的还是1111 1111 ,因为是负数,所以在左端补1,而不是0。再把1111 1111,转化为原码即减1取反得1000 0001,化为十进制就是-1。
左移同理可得。
总结:只要记住负数是以补码的形式参与计算的。这类题目就不会模糊。
18、程序
char buf[256];
int main(void)
{
sprintf(buf+ sprintf(buf, “%s”, “abc%d”), “%s”, “efg%%d”);
printf(buf,100);
} 的输出是__abc100efg%d____。
注: 两个% 就只输出一个%,还有sprintf的返回值为输出元素的个数,100在碰到的第一个%d处输出。
19、已知一棵二叉树s前序遍历和中序遍历分别为ABDEGCFH和DBGEACHF,则该二叉树的后序遍历为__DGEBHFCA_____。
20、向一个长度为n的向量的第i个元素(1=i=n+1)之前插入一个元素时,需向后移动_n-i+1___个元素。(tip:可以考虑i为0和n的情况,较容易)
21~25、
算法:函数psort()将含n个整数的数组a[]的不同元素按从小到大的顺序存于数组a[]中,返回值是不同元素的个数。它的实现方法是顺序考察a[]中的元素,寻找当前考察元素a[i]在已确定的不同元素中的插入位置。如果a[i]是一个新的不同元素,插入之,否则,忽略该元素。(此题貌似还有点问题)
int psort(int a[],int n)
{
int i,j,k,low,high,mid,t;
for(k=1,i=1;i<n;i++)
{
low=0;
high=( i - 1);
while(low <= high)
{
mid=(low+high)/2;
if(a[mid]>=a[i])
high=mid-1;
else
low=mid+1;
}
if(low <= k || high >= 0(22))
{
t=a[i];
for(j=__i - 1___(23); j>_high___(24); j--)
a[j+1]=a[j];
a[__j + 1_(25)]=t;
k++;
}
}
return k;
}