C语言经典笔试题(一)

一、请写出 float x 与“零值”比较的 if 语句:
【标准答案】

 const float EPSINON = 0.00001;                         
   if ((x >= - EPSINON) && (x <= EPSINON)    

错误写法:

if(x==0.0)
if(x!=0.0)

注意:不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。

*二、请写出 char p 与“零值”比较的 if 语句
【标准答案】

if (p == NULL)    if (p != NULL) 

错误写法:

if(p == 0)
if(p != 0)
if(p)
if(!)

三、long a = 0x801010 a+5=?
【标准答案】

0x801010用二进制表示为:“1000 0000 0001 0000 0001 0000”,十进制的值为8392720,再加上5就是8392725。

四、用变量a给出下面的定义
1、一个有10个指针的数组,该指针是指向一个整型数的;

int *p[10];

2、一个指向有10个整型数数组的指针 ;

int (*p)[10];

3、 一个指向函数的指针,该函数有一个整型参数并返 回一个整型数;

int (*p)(int);

4、一个有10个指针的数组,该指针指向一个函数,该 函数有一个整型参数并返回一个整型数;

int (*p[10])(int);

五、设有以下说明和定义

typedef union {long i; int k[5]; char c;} DATE;
struct data { int cat; DATE cow; double dog;} too;
DATE max;

则语句 printf("%d",sizeof(struct data)+sizeof(max));的执行结果是:52
【标准答案】
DATE是一个union, 变量公用空间. 里面最大的变量类型是int[5], 占用20个字节. 所以它的大小是20data是一个struct, 每个变量分开占用空间. 依次为int4 + DATE20 + double8 = 32.所以结果是 20 + 32 = 52.
注意:在某些16位编辑器下,int的字节数为2个字节
那么结果是 int2 + DATE10 + double8 = 20。所以一般要标注一下在32位系统下。
六、请问以下代码有什么问题

int main()
{
   char a;
   char *str=&a;
   strcpy(str,"hello");
   printf(str);
   return 0;
}

【标准答案】
没有为str分配内存空间,将会发生异常问题出在将一个字符串复制进一个字符变量指针所指地址。虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃。
七、请问以下代码有什么问题

char* s="AAA";
printf("%s",s);
s[0]='B'; //*(s+0) = ‘B’
printf("%s",s);

有什么错
【标准答案】
由于指针s是指向"AAA"常量的首元素地址,又因为常量区的数据是不能修改的所以对其赋值是不合法的。
八、表示什么

int (*s[10])(int)

【标准答案】
int (*s[10])(int)表示有10个元素 函数指针数组,每个指针指向一个)的有整形的函数,并且这个函数返回一个整形数。

十、请问以下代码有什么问题

void getmemory(char *p)
{
    p=(char *) malloc(100);
    strcpy(p,“hello world”);
}
int mian()
{ 
   char *str=NULL;
   getmemory(str);
   printf("%s",str);
   free(str);
   return 0;
}

【标准答案】
getmemory函数传入str的值,然而str是指向一个空所以分析拆分就是char *p = NULL;所以str指向地址是没有改变的,后面再访问str输入非法访问造成,最后使用free来释放str内存就危险。
十一、请问以下代码有什么问题

char szstr[10];
strcpy(szstr,"0123456789");

【标准答案】长度不一样,出现段错误。
十二、请问以下代码有什么问题

 void main()
 { 
	 char aa[10];
	 printf(“%d”,strlen(aa));
 } 

【标准答案】
sizeof()和初不初始化,没有关系,
strlen()和初始化有关,打印结果值未知。
十三、计算下面结构体的内存大小

struct  A
{
	 char t;
	 char k; 
	 unsigned short i;
	 unsigned long m;
 };

【标准答案】8

 struct name1
 {
	 char str;
	 short x;
	 int num;
 };

【标准答案】8

struct name2
{ 
   char str; 
   int num;
   short x;
};

【标准答案】12
十四、程序哪里有错误

 wap( int* p1,int* p2 )
  {
          int *p;
         *p = *p1;
         *p1 = *p2;
         *p2 = *p;
  }

【标准答案】p为野指针应该修改成int *p = NULL;

十五、 (void )ptr 和 ((void))ptr的结果是否相同?其中ptr为同一个指针。**
【标准答案】(void *)ptr(*(void**))ptr值是相同的
注意:二级指针解引用后就变成了一级指针

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值