C语言基础一、选择题(每题3分)
1.指针运算:int *p1, *p2; int value;
p1 = (int *)0x500; p2 = (int *) 0x518; value = p2-p1;问:value的值?
A 8
B 4
C 2
D 6
答案:D
2、void main(void)
{ char x = 127;
char    a = x + 1;
long    b = x + 1;
printf("%d, %d, %d", a, b);
}请问输出多少_____
A: 128, 128 B: -128, -128 C: 128, -128 D: -128, 128
答案:D
3.下面堆(Heap)与栈(stack)的差别叙述不正确的是
A) Stack的空间由操作系统自动分配/释放,Heap上的空间手动分配/释放。
B) C中的malloc函数分配的内存空间即在堆上
C)局部非静态变量和函数的入参都在栈中分配。
D) 程序中定义变量尽可能从堆中分配,因为堆的效率比栈高
答案:D
4. 定义如下变题和数组:
int i;
int x[3][3]={1,2,3,4,5,6,7,8,9};
则下面语句的输出结果是
for(i=0;i<3;i++)printf(“%d”,x[i][0]);
A)1 5 9 B)1 4 7 C)3 5 7 D)3 6 9
答案:B
5.关于sizeof下列哪些说法是正确的(A)
A)sizeof运算符在编译阶段执行。
B)sizeof的参数不可以是常量。
C)sizeof运算符在程序运行阶段执行。
D)sizeof运算符与系统字节对齐没有关系。
6.关于strlen和sizeof,下列哪些说法是正确的(B)
A)sizeof函数是在程序运行阶段执行。
B)strlen函数是在程序运行阶段执行。
C)sizeof函数的结果跟字节序有关系。
D)strlen函数的结果跟字节对齐有关系。
7.关于编译的说法哪些是正确的(AB)
A)#if #endif等标志符在预编译阶段处理。
B)宏定义在预编译阶段就已进行分析并替换到程序中。
C)全局变量定义在堆中。
D)全局变量定义在栈中。
8.请问编译器将1##2理解为_C__
A、"12"
B、'1'和'2'
C、12
D、1>>2
9.二维整形数组a[][]中,a[i]代表一维数组名,本身不占实际的内存单元,也不存放a数组中各个元素的值。(B)
A 正确
B 错误
10.struct s
{
int x, *y;
} *p;
int data[5]={0, 1, 2, 3, 4};
struct s array[5]=
{
0, &data[0], 1, &data[1], 2, &data[2],
3, &data[3], 4, &data[4]
};
void main ( )
{
p=&array[0];
printf("%d ", (*((p+1)->y)));
}
程序输出结果为:( B)
A. 0
B. 1
C. 2
D. 3
E. 4
11.如下题,请问tmp是什么类型变量?    C
typedef int (*test) ( float * , float*)
test tmp;
(a) 一个函数的指针(此函数有两个float指针形参)
(b) int
(c) 一个函数的指针(此函数有两个float指针形参,且返回值为int)
(d) 语法错
12.若已建立如下图所示的单向链表结构,
在该链表结构中,指针p 、s 分别指向图中所示结点,则不能将s 所指的结点插入到链表末尾仍构成单向链表的语句组是A
A) p =p->next; s->next=p; p->next=s;
B) p =p->next; s->next=p->next; p->next=s;
C) s->next=NULL; p=p->next; p->next=s;
D) p=(*p).next; (*s).next=(*p).next; (*p).next=s;
13.执行以下程序段后,m的值为  A
int a[2][3]={ {1,2,3},{4,5,6} };
int m,*p;
p=&a[0][0];
m=(*p)*(*(p+2))*(*(p+4));
A) 15 B) 14 C) 13 D) 12
14.下列说法正确的是:( D )
A、全局变量定义在可被多个.C文件包含的头文件中.
B、char* (*p)(int); 声明了一个参数为int的函数指针,它的返回值是char类型。
C、char a[5]; char *p;
则我们可以这样赋值a = p;
D、我们可以这样声明一个int型数组的指针int (*pa)[5].
15.下面程序打印出的结果是:result is _ . B
#define MUL(x) x*2
#define ADD(x) x++
int main(int argc, char* argv[])
{
int a = 5;
int b = 2;
int c = 0;
c = MUL(ADD(a+b));
printf("result is %d.",c);
return;
}
A, 11 B, 9 C, 14 D, 16
16.以下程序运行后,输出结果是:_____B________
main()
{
static char a[]="ABCDEFGH", b[]="abCDefGh";
char *p1,*p2;
int k;
p1=a; p2=b;
for(k=0;k<=7;k++)
{
if (*(p1+k)==*(p2+k))
{
printf("%c",*(p1+k));
}
}
printf("\n");
}
A) ABCDEFG B) CDG C) abcdefgh D) abCDefGh
17.给出以下定义:
char acX[ ]= "abcdefg";
char acY[ ]= {'a','b','c','d','e','f','g'};
则正确的叙述为( C )
A) 数组acX和数组acY等价B) 数组acX和数组acY的长度相同
C) 数组acX的长度大于数组acY的长度D) 数组acX的长度小于数组acY的长度
18..在函数内部定义的变量(静态变量、寄存器变量等特殊变量除外)的内存是在栈内存中,所以在定义函数内部的变量的时候,一定要保证栈不能够溢出。如果临时变量
占用空间较大,应该使用内存申请的方式,这样该变量指向的内存就是在堆内存中了。A
sizeof 指针A. 正确
B. 错误
19.设有以下宏定义:
#define N    3
#define Y(n) ((N+1)*n) /*这种定义在编程规范中是严格禁止的*/
则执行语句:z = 2 * (N + Y(5 + 1));后,z的值为( C )
A) 出错B) 42 C) 48 D)54
20. 0x12345678 在采用BigEndian中内存的排列顺序是__A____,在采用LittleEndian内存中的排列顺序是___C____.
(答案从左到右内存地址依次增加)
A.12 34 56 78
B.34 12 78 56
C.78 56 34 12
D.56 78 12 34
二、填空题(每题4分)
1.typedef union {
long a;
char b[6];
}un; sizeof(un) = __8___
2.在一个双向链表中,若指针p所指结点不是首结点,也不是尾结点,则把p从链表中删除,应执行语句___p->prev->next = p->next__________;
___p->next->prev = p->prev_________ ;
___free(p);_______________ __。
链表的数据结构如下:
struct LINK{
char data;
struct LINK *prev;
struct LINK *next;
}
3.不同对齐方式下的结构大小,下面程序的输出结果是什么?
Typedef struct student1{
Char name[10];
Long sno;
Char sex;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。