选择题

1:float a=2, b=4, c=3;,以下C语言表达式与代数式 (a+b)+c计算结果不一致的是
A.(a+b)*c/2
B.(1/2)*(a+b)*c
C.(a+b)*c*1/2
D.c/2*(a+b)
参考答案:B,因为a,b,c三个变量都是浮点数,所以在B答案中其结果是0,因为在计算1/2是就是0,如果改成1/2.0就正确了。

2:为了向二进制文件尾部增加数据,打开文件的方式应采用
A.″ab″
B.″rb+″
C.″wb″
D.″wb+″
参考答案:D

3:下述程序执行后的输出结果是
include
main()
{
int x='f';
printf("%c\n",'a'+(x-'a'+1));
}
A.g
B.h
C.i
D.j
参考答案:A

4:C语言中,下列运算符优先级最高的是
A.
B.
C.>>
D.
参考答案:A

5:数组定义为“ int a [ 4 ] ; ”,表达式 ( ) 是错误的。
A.*a
B.a [ 0 ]
C.a
D.a++
参考答案:D

6:执行语句“ k=7>>1; ”后,变量 k 的当前值是
A.15
B.31
C.3
D.1
参考答案:C

7:定义函数时,缺省函数的类型声明,则函数类型取缺省类型
A.void
B.char
C.float
D.int
参考答案:D

8:main()函数带参数,参数个数最多是
A.0
B.1
C.2
D.3
参考答案:C 只知道有定义形式main(int argc,char* argv[])

9:若有宏定义:#define MOD(xy) xy
则执行以下语句后的输出结果是
int a=13b=94
printf(″d\n″MOD(ba+4))
A.5
B.7
C.9
D.11
参考答案:B

10:下列各个错误中,哪一个不属于编译错误
A.改变 x 原值 3 5 ,写作“ x==5 ;”
B.花括号不配对
C.复合语句中的最后一条语句后未加分号
D.变量有引用、无定义
参考答案:A

11:下列程序段运行后, x 的值是( )

a=1;b=2;x=0;
if(!( -- a))x -- ;
if(!b)x=7;else ++x;
A.0
B.3
C.6
D.7
参考答案:A

12:
#define N 3
#define Y(n) ((N+1)*n)
则表达式2*(N+Y(5+1))的值是
A.42
B.48
C.54
D.出错
参考答案:B Y(5+1) 传递过去的应该是6,而不是简单的把5+1给替换掉

13:若定义了char ch[]={″abc\0def″},*p=ch;则执行printf(″%c″,*p+4);语句的输出结果是
A.def
B.d
C.e
D.0
参考答案:C

14:下列转义字符中错误的是
A.′\000′
B.′\14′
C.′\x111′
D.′\2′
参考答案:C error C2022: '273' : too big for character

15:算术运算符,赋值运算符和关系运算符的运算优先级按从高到低依次为
A.算术运算、赋值运算、关系运算
B.算术运算、关系运算、赋值运算
C.关系运算、赋值运算、算术运算
D.关系运算、算术运算、赋值运算
参考答案:B

16:#define N 3
#define Y(n) ((N+1)*n)
则表达式2*(N+Y(5+1))的值是
A.42
B.48
C.54
D.出错
参考答案:B

17:表达式 strcmp( “ 3.14 ”“ 3.278 ” ) 的值是一个
A.非零整数
B.浮点数
C.0
D.字符
参考答案: A

18:struct
{ short a;
char b;
float c;
}cs;
sizeof(cs)的值是
A.4
B.5
C.6
D.7
参考答案: D 字节对齐的话应该是8

19:若变量已正确定义,表达式( j=3 j++ )的值是
A.3
B.4
C.5
D.0
参考答案:A

20:C 语言中运算对象必须是整型的运算符是
A.%
B./
C.!
D.**
参考答案:A
简答题

21:打印一个N*N的方阵,N为每边字符的个数( 3N20 ),要求最外层为“X”,第二层为“Y”,从第三层起每层依次打印数字0123...
例子:当N =5,打印出下面的图形:
X X X X X
X Y Y Y X
X Y 0 Y X
X Y Y Y X
X X X X X

22:谈谈COM的线程模型。然后讨论进程内/外组件的差别。

23:多态类中的虚函数表是Compile-Time,还是Run-Time时建立的?
参考答案:
虚拟函数表是在编译期就建立了,各个虚拟函数这时被组织成了一个虚拟函数的入口地址的数组.
而对象的隐藏成员--虚拟函数表指针是在运行期--也就是构造函数被调用时进行初始化的,这是实现多态的关键.

24:#include

  void main()

  { int c;

  while ((c=getchar())!= ′\ n ′ )

  switch(c - ′ 2 ′ )

  { case 0:

  case 1:putchar(c+4);break;

  case 2:putchar(c+4);break;

  case 3:putchar(c+3);break;

  default:putchar(c+2);break;

  }

  printf( ″\ n ″ );

  }

  运行时输入: 2473 ,输出结果:
参考答案:6897 VC++6.0测试过
25:用两个栈实现一个队列的功能?
参考答案:
2个栈为A,B, 开始均为空.入队:
将新元素push入栈A;出队:
(1)判断栈Bsizeof是什么是否为空;
(2)如果不为空,则将栈A中所有元素依次pop出并push到栈B
(3)将栈B的栈顶元素pop出;这样实现的队列入队和出队的平摊复杂度都还是O(1),
26:写一语句实现x是否为2的若干次幂的判断。
参考答案:!(X)&(X-1)

27:解二次方程:a*x*x+b*x+c
int Quadratic( double a,double b,double c,double& x1,double& x2);
返回值:解的个数

28:如何判别一个数是unsigned
参考答案;
#define issignal(x) ((x>=0 && ~x>=0) ? 1:0) //1是无符号 0有符号
29:执行下述程序的输出结果是  ABCDEFCDEFEF 
#include
char b[]="ABCDEF";
main()
{
char *bp;
for (bp=b;*bp;bp+=2)
printf("%s",bp);
printf("\n");
}

30:已知一个数组table,用一个宏定义,求出数据的元素个数。
参考答案:#define NTBL
#define NTBL (sizeof(table)/sizeof(table[0]))
1.
#define pi 3.14
#define Area(R) pi*R*R
main()
{
 int r1=5,r2=2;
 double s=0;
 s=Area(r1-r2);
 printf("The area is %f",s);
}
求结果: The area is 3.700000

2.函数 int compare(int a,int b),定义为该函数的函数指针P:    int(*p)(int,int);p= compare;
3.求输出结果
#include<stdio.h>
void sub(char*s,int num)
{
 int i ,j=num;
 char t;
 while(j-->1)
 {
   for(i=0;i<j;i++)
   {
     if(s[i]<s[i+1])
     {
       t=s[i];
       s[i]=s[i+1];
       s[i+1]=t;
     }
   }
 }
}
main()
{
 char *s="CEAeded";
 sub(s,6);
 printf("%s\n",s)
}
输出结果:运行时程序崩溃,
//4**********************************************
//交换两个变量的值,不使用第三个变量,a=3,b=5交换
//b=3,a=5
     unsigned char a=3,b=5;
     
     
//5**************************************************
#define N 100
void GetMemory1(char*p)
{
p=(char*)malloc(sizeof(char)*N);
strcpy(p,"Have a good day!");
}
char*GetMemory2(void)
{
char p[]="Have a good day!";
return p;
}
void main(void)
{
char*str1=NULL,*str2=NULL;
GetMemory1(str1);
GetMemory2(str2);
printf("\nstr1:%s",str1);
printf("\nstr2:%s",str2);

//6******************************************************
//构造N个结点的单链表返回链表头指针,要求链表中各结点顺序
//与结点数据输入顺序相反,例如输入1,2,3,4,5,形成的链表为
//head->5 4 3 2 1 ,补充程序
#define N 10
typedef struct Node
{
int data;
struct Node*next;
}NODE;
int Get_Data(int i);//定义省略
Node*Create_u()
{
int i;
NODE*p,*Head=NULL;
for(i=0;i<N;i++)
{
   VP=New NODE;
   P->Data=Get_Data(i);
   ________________;
   ________________;
}
return Head;
}