c语言答案

更新时间:2023-11-09 18:18:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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(\}请问输出多少 _____

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、\、'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(\}

程序输出结果为:( 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(\ return; }

A, 11 B, 9 C, 14 D, 16 16.以下程序运行后,输出结果是:_____ B________ main() {

static char a[]=\ char *p1,*p2; int k; p1=a; p2=b;

for(k=0;k<=7;k++) {

if (*(p1+k)==*(p2+k)) {

printf(\c\

} }

printf(\}

A) ABCDEFG B) CDG C) abcdefgh D) abCDefGh

17.给出以下定义: char acX[ ]= \

char acY[ ]= {'a','b','c','d','e','f','g'}; 则正确的叙述为( C )

A) 数组acX和数组acY等价 B) 数组acX和数组acY的长度相同 C) 数组acX的长度大于数组acY的长度 D) 数组acX的长度小于数组acY的长度 18..在函数内部定义的变量(静态变量、寄存器变量等特殊变量除外)的内存是在栈内存中,所以在定义函数内部的变量的时候,一定要保证栈不能够溢出。如果临时变量

占用空间较大,应该使用内存申请的方式,这样该变量指向的内存就是在堆内存中了。A 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;

Float score [4];

} STU1;

Typedef struct student2{

Char name[10]; Char sex; Long sno; Float score [4];

} STU2; STU1 a[5]; STU2 b[5];

强制四字节对齐情况下,请指出sizeof(a) = ___180_____; sizeof(b) = __160____; 强制一字节对齐情况下,请指出sizeof(a) = ___155_____; sizeof(b) = __155______;

4.下面函数的输出是___token3 = 4___

#define paster( n ) printf( \void fun() { int token3 = 4; int tokenn = 3; paster( 3 );}

5.一个整形二维数组int a[2][4]={{10,20,30,40},{100,200,300,400}};已知二维数组的首地址

是1000 (10进制地址),a[1]+1 =(1020), 三、单项改错题(每题5分)

1.此函数为一个2字节的字节序转换函数

01 unsigned short VOS_NTOHS(unsigned short x) 02 {

03 unsigned short y;

04 y = ((x & 0xFF) << 8) || ((x & 0xFF00) >> 8); 05 return y; 06 }

y = ((x & 0xFF) << 8) | ((x & 0xFF00) >> 8);

2. 请指出下面程序中的错误: void main()

{

char* s=\ printf(\

s[0]='B'; //s指向常量字符 不应该被赋值修改 printf(\ return; }

3.请指出下面程序错误的地方:

#define BUFFER_SIZE 256 void Test(void) { char *str = NULL;

str = (char *)malloc(BUFFER_SIZE); if(NULL == str){ return; } strcpy(str, \

free(str); //free之后 str并不为NULL且指向未知区域,下面的if中语句会继续执行

if(NULL != str){

strcpy(str, \

printf(str); } return; }

4.请指出下题的1处错误 01 void main() //没错误? 02 {

03 char *pctest1, *pctest2; 04 pctest1 = (char*)malloc(10); 05 pctest2 = (char*)malloc(20);

06 if((NULL == pctest1)&&(NULL == pctest2))

07 {

08 return; 09 }

10 memset(pctest1, 0x0, 10);

11 strcpy(pctest2, \12 free(pctest1); 13 free(pctest2);

14 }

本文来源:https://www.bwwdw.com/article/yucv.html

Top