C语言试题
一:单项选择题
1.
  void Example(char acHello[])
  {
      printf("%d", sizeof(acHello));
      return;
  }
  void main()
  {
      char acHello[] = "hello";
      Example(acHello);
      return;
  }
的输出是(  )
A 4    B 5        C 6      D不确定
2.网络上传输的字节序默认是大字节的,如果主机是小字节序,在网络通信时则须进行字节序转换;如果主机是大字节序,为了程序的一致性及可移植性,最好也在程序中加上字节序转换的操作(空操作)。(  )
    A. 正确  B.错误
3. int *(*ptr)();
    则以下叙述中正确的是(  )
    A) ptr是指向一维组数的指针变量
    B) ptr是指向int型数据的指针变量
    C) ptr是指向函数的指针,该函数返回一个int型数据
    D) ptr是指向函数的指针,该函数的返回值是指向int型数据的指针
4.此函数实现把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地址次序颠倒;
5.
#define OK              0
#define ERR            1
#define ERROR          (-1)
#define BUFFER_SIZE    256
char *GetMemory(unsigned long ulSize)
{
    char *pcBuf = NULL;
    pcBuf = (char *)malloc(ulSize);
    if(NULL == pcBuf)
    {
        return ERROR;
    }
    return pcBuf;
}
void Test(void)
{
    char *pszBuf = NULL;
    pszBuf = GetMemory(BUFFER_SIZE);
    if(NULL != pszBuf)
    {
        strcpy(pszBuf, "Hello World!\r\n");
        printf(pszBuf);
        free(pszBuf);
    }
    return;
}
如下描述正确的是:
A、pszBuf指向的内存不能超过255
B、GetMemory函数的异常分支返回了-1,是一个非法地址
C、GetMemory中异常分支没有释放空间;
D、pcBuf为局部指针,指向的内存将在GetMemory被调用后释放
6、#include "stdio.h"
unsigned short *Sum(unsigned char a, unsigned char b)
{
  unsigned short s = 0;
  s = a + b;
  return &s;
}
int main()
{
unsigned short *p = NULL;
unsigned char a = 1, b = 2;
p = Sum(a, b);
printf("%u+%u", a, b);
printf("=%u\n", *p);
return 0;
}
程序执行结果是()
A.1+2=0  B.1+2=3  C.1+2=NULL  D.不可预测
7、设有如下定义:
BOOL gStatusA = FALSE;
BOOL gStatusB = TRUE;
int gVarA = 100;
int gVarB = 100;
    则执行main函数后gVarA和gVarB的值分别为(  )
BOOL CheckA()
{
  if(gStatusA)
  {
    gVarA++;
  }
  else
  {
    gVarA--;
  }
  return gStatusA;
}
BOOL CheckB()
{
  if(gStatusB)
  {
    gVarB++;
  }
  else
  {
    gVarB--;
  }
  return gStatusB;
}
int main(int argc, char* argv[])
{
  if(CheckA() && CheckB() )
  {
    printf(“Status OK”);
  }
  return 0;
}
A, 99和100  B, 99和101 C 99和99 D 101和99
8.下面的代码中,函数Test执行完毕后,希望输出无符号长整型的1。
void VarInit(unsigned char *pucArg)
{
    *pucArg = 1;
    return;
}
void Test()
{
    unsigned long ulGlobal;
    VarInit(&ulGlobal);
    printf("%lu", ulGlobal);
    return;
}
下面描述正确的是:(  )
A.给VarInit( )函数传递的参数类型错误
B.printf()输出格式错误
C.传给VarInit( )中参数pucArg的值为空指针
9、
void AddFunc (unsigned int a, unsigned int b, unsigned int * c)
{
*c = a + b;
}
void main(void)
{
unsigned char e = 200;
c语言下载什么
unsigned char f = 100;
unsigned char g = 0;
AddFunc((unsigned int)e,(unsigned int)f,(unsigned int *)&g);
printf("%d ",g);
}
下面说法正确的是():
A  对g进行类型转换导致函数调用时写内存越界;
B  对e、f进行类型转换导致函数调用时写内存越界;
C  函数调用时不能改变g的值。
10、void main(void)
{
  unsigned char a =200;
  unsigned char b =100;
  unsigned char c = 0;
  c=a+b;
  printf("%d %d",a+b,c);
}
下列程序的执行结果为()
A 300 300
B 44 44
C 300 44
D 44 300
11、在X86,VC++6.0环境下,有下列程序
#include <stdio.h>
int main()
{
char  cA;
unsigned char ucB;
unsigned short usC;
cA  = 128;
ucB = 128;
usC = cA + ucB;
printf("0x%x ",usC);
usC = cA + (short)ucB;
printf("0x%x ",usC);
usC = (unsigned char)cA + ucB;

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