C语言编程基础考试试题文档名称文档密级C语言编程基础考试[考前说明]本题目中不考虑头文件引用问题(假定已经包含正确的头文件),C 语言的标准函数都可用;如果不特别说明,假定程序运行环境为:操作系统Windows 2000, VC6.0编译环境,缺省为四字节对齐,X86(80586)CPU处理器(32位小字节序处理器).一、单选题1、给出以下定义:char acX[ ]= "abcdefg";char acY[ ]= {'a','b','c','d','e','f','g'};则正确的叙述为( )A) 数组acX和数组acY等价 B) 数组acX和数组acY的长度相同C) 数组acX的长度大于数组acY的长度 D) 数组acX的长度小于数组Y的长度2、 void example(char acHello[]){printf("%d", sizeof(acHello));return;}void main(){char acHello[] = "hello";example(acHello);return;}的输出是( )A 4B 5C 6 D不确定3、以下叙述中不正确的是( )A) 在不同的函数中可以使用相同名字的变量B) 函数中的形式参数是在栈中保存C) 在一个函数内定义的变量只在本函数范围内有效D) 在一个函数内的复合语句中定义的变量在本函数范围内有效(复合语句指函数中的成对括号构成的代码)4、设有如下定义:unsigned long pulArray[] = {6, 7, 8, 9, 10};unsigned long *pulPtr;则下列程序段的输出结果为( )1文档名称文档密级pulPtr = pulArray;*(pulPtr + 2) += 2;printf ("%d,%d\n", *pulPtr, *(pulPtr + 2));A)8,10 B)6,8 C)7,9 D)6,105、有以下程序段char acArr[]= "ABCDE";char *pcPtr;for(pcPtr = acArr; pcPtr < acArr + 5; pcPtr++) {printf("%s\n", pcPtr);}return;输出结果是( )A) ABCD B) A C) E D) ABCDEB D BCDEC C CDED B DEE A E6、 void example( ){int i;char acNew[20];for(i = 0; i < 10; i++){acNew[i] = '0';}printf("%d\n", strlen(acNew));return;}的输出为( D )A 0B 10C 11 D不确定7、 switch(c)中的c的数据类型可以是char、long、float、unsigned、bool. ( )A. 正确B. 错误8、全局变量可以定义在被多个.C文件包含着的头文件中。
( )A. 正确B. 错误9、 struct stu{int num;2文档名称文档密级char name[10];int age;};void fun(struct stu *p){printf("%s\n", (*p).name);return;}void main(){struct stu students[3]={ {9801,"Zhang",20},{9802,"Wang",19},{9803,"Zhao",18} };fun(students + 2);return;}输出结果是( )A) Zhang B)Zhao C) Wang D) 1810、以下程序运行后,输出结果是( ) void main( ){char *szStr = "abcde";szStr += 2;printf("%lu \n",szStr);return;}A cdeB 字符c的ASCLL码值C "abcde"这个常串中字符c所在的地址D 出错11、在X86下,有下列程序#include <stdio.h>void main(){union{int k;char i[2];}*s,a;s = &a;s->i[0] = 0x39;s->i[1] = 0x38;printf("%x\n", a.k);3文档名称文档密级}输出结果是( )A) 3839 B) 3938 C) 380039 D) 不可预知12、网络上传输的字节序默认是大字节的,如果主机是小字节序,在网络通信时则须进行字节序转换;如果主机是大字节序,为了程序的一致性及可移植性,最好也在程序中加上字节序转换的操作(空操作)。
( )A. 正确B.错误void example() 13、{int i;char acNew[20] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0};for(i = 0; i < 10; i++){acNew[i] = '0';}printf("%d\n", strlen(acNew));return;}的输出为:( )A 0B 10C 11 D不确定14、在函数内部定义的变量(静态变量、寄存器变量等特殊变量除外)的内存是在栈内存中,所以在定义函数内部的变量的时候,一定要保证栈不能够溢出。
如果临时变量占用空间较大,应该使用内存申请的方式,这样该变量指向的内存就是在堆内存中了。
( )A. 正确B. 错误15、局部变量可以和全局变量重名,编译的时候不会出现错误,但一旦不小心,就可能导致使用错误变量,所以在定时局部变量的时候,不要和全局变量重名。
( )A. 正确B. 错误16、设有以下宏定义:#define N 3#define Y(n) ((N+1)*n) /*这种定义在编程规范中是严格禁止的*/则执行语句:z = 2 * (N + Y(5 + 1));后,z的值为( )A) 出错 B) 42 C) 48 D)5417、 int *(*ptr)();则以下叙述中正确的是( )4文档名称文档密级A) ptr是指向一维组数的指针变量B) ptr是指向int型数据的指针变量C) ptr是指向函数的指针,该函数返回一个int型数据D) ptr是指向函数的指针,该函数的返回值是指向int型数据的指针18、 0x12345678 在采用BigEndian中内存的排列顺序是______,在采用LittleEndian内存中的排列顺序是______.(答案从左到右内存地址依次增加)A.12 34 56 78B.34 12 78 56C.78 56 34 12D.56 78 12 3419、请指出下面程序问题#define MAX_LEN 254unsigned char Array[MAX_LEN]; int main(int argc, char *argv[]) { int i;for ( i = 0; i <= MAX_LEN; i++ ){Array[i] = i;}return;}程序的错误为():A、i = MAX_LEN时,数组越界B、argv参数形式错误C、i = MAX_LEN时,赋值溢出D、return无返回值20、 #define BUFFER_SIZE 256 void GetMemory(char **ppszBuf) { if (NULL == ppszBuf){ASSERT(0);return ;}*ppszBuf = (char *)malloc(BUFFER_SIZE);return;}void Test(void){char *pszBuf=NULL;5文档名称文档密级GetMemory(&pszBuf);strcpy(pszBuf, "hello world\r\n");printf("%s", pszBuf);free(pszBuf);return;}下面说法正确的是():A、pszBuf的值永远为NULL;B、malloc内存后没有判断是否成功;C、strcpy拷贝越界;D、GetMemory无法将申请的内存地址传递给pszBuf;21、如下程序用于把"blue"字符串打印出来: void PrintBLUE() {char pcBlue[] = {'b','l','u','e'};printf("%s",pcBlue);return;}下面描述正确的是():A、pcBlue数组初始化时没有字符串结束符;B、数组pcBlue定义时必须指明长度;22、请指出下面这段代码中的错误:unsigned long FUNC_B ( unsigned long ulCount ){unsigned long ulSum = 0 ;while( 0 <= ulCount ){ulSum += ulCount ;ulCount--;}return ulSum ;}void test(void){unsigned long ulTotal = 0;ulTotal=FUNC_B(10);printf("%lu", ulTotal); }6文档名称文档密级下面描述正确的是():A、while循环判断始终为真;B、test打印输出55;C、循环体内在执行2的32次方后,ulSum开始溢出翻转;23、此函数实现把32位IP地址(网络序)以字符串的方式打印出来: char *IpAddr2Str(unsigned long ulIpAddr){char szIpAddr[32];unsigned long ulLocIpAddr = ntohl(ulIpAddr);//把网络序转话为主机序(void)VOS_sprintf(szIpAddr, "%d.%d.%d.%d", ulLocIpAddr >> 24, (ulLocIpAddr >> 16) & 0xff, (ulLocIpAddr >> 8) & 0xff,ulLocIpAddr & 0xff);return szIpAddr;}下面描述正确的是():A、数组szIpAddr空间不够;B、函数返回局部数组szIpAddr变量地址;C、输出的IP地址次序颠倒;24、如下程序用于把"blue"字符串返回:char *GetBLUE(void){char* pcColor ;char* pcNewColor;pcColor = "blue";pcNewColor = (char*)malloc(strlen(pColor));if(NULL == pcNewColor){return NULL;}strcpy(pcNewColor, pcColor);return pcNewColor;}下面描述正确的是:A、字符串“blue”存放在栈内;B、函数GetBLUE返回局部变量地址;C、内存空间分配长度不够,strcpy函数拷贝越界;25、如下代码实现中,FUNC_A为每毫秒定时执行的函数,在该函数中,需要实现每TIME_INTERVAL毫秒执行一次DO_Something()的操作。