面试题(一)

文章详细分析了C语言中的程序执行、变量赋值、宏定义、指针操作以及中断服务子程序的相关知识,包括位运算、条件判断和数组长度的计算。同时,列举了编译错误的类型和中断处理的一般原则,并提供了示例代码进行解释。
摘要由CSDN通过智能技术生成

选择题

1:下述程序执行后的输出结果是(A
#include <stdio.h>
int main()
{
int x=‘f’;
printf(“%c\n”,‘a’+(x-‘a’+1));
}
A.g B.h C.i D.j

解析:这题没难度。

2:执行语句“ k=7>>1; ”后,变量 k 的当前值是(C)
A.15 B.31 C.3 D.1

7>>1 等于 3。
解析:先左移,后赋值。

3:若有宏定义:#define MOD(x,y) x%y
则执行以下语句后的输出结果是int a=13,b=94; printf(″%d\n″,MOD(b,a+4)); (B)
A.5 B.7 C.9 D.11

解析:MOD(b,a+4),先取余后加法 。即b%a+4 值为94%13+4 = 3+4 =7

4:下列各个错误中,哪一个不属于编译错误( )
A.改变 x 原值 3 为 5 ,写作“ x==5 ;”
B.花括号不配对
C.复合语句中的最后一条语句后未加分号
D.变量有引用、无定义

解析:

A, B, C为语法错误
D为是一个链接错误,不属于编译错误。
语法错误:缺少分号,括号不匹配,注释不完整等。
类型错误:赋值类型不匹配、函数参数类型不匹配等。
语义错误:逻辑错误、变量未定义等。
运行时错误:访问非法内存、除零错误等。
链接错误:找不到函数实现、重复定义等。
编译器错误:编译器本身存在问题导致无法编译。

5:下列程序段运行后, x 的值是( ) a=1;b=2;x=0;
if(!( – a))x – ;
if(!b)x=7;else ++x;
A.0 B.3 C.6 D.7

解析:
	if(!( -- a))x -- ;		//执行结果如下
	!(--a) = 1	,执行x--,x=-1。
	if(!b)x=7;else ++x;	//执行结果如下
	!(b) = 0, 执行else ++x = 0;

6.设
#define N 3
#define Y(n) ((N+1)n)
则表达式 2
(N+Y(5+1))的值是(B)
A.42 B.48 C.54 D.出错

解析:2*(N+Y(5+1)) = 2*(N+Y((3+1)5+1))
值为:2
(3+21) = 48

7:若定义了 char ch[]={″abc\0def″},*p=ch;则执行 printf(″%c″,*p+4);语句的输出结果是(C)
A.def B.d C.e D.0

解析:\0为一个字符,p+4指向第五个元素

8: 设 float a=2, b=4, c=3;,以下 C 语言表达式与代数式 (a+b)+c 计算结果不一致的是(B
A.(a+b)c/2
B.(1/2)
(a+b)c
C.(a+b)c1/2
D.c/2
(a+b)

解析:1/2整数类型相除向下取整

9:表达式 strcmp( “ 3.14 ”,“ 3.278 ” ) 的值是一个(A)
A.非零整数 B.浮点数 C.0 D.字符

解析:strcmp比较的是每个字符的大小返回值为0(字符串相等) 1(前一个大于后一个) -1(后一个大于前一个)

10:设
struct
{
short a; char b; float c;
}cs;
则 sizeof(cs)的值是(D)
A.4 B.5 C.7 D.8

解析:4+4=8

简答题

  1. 已定义的数组名为array,如何求出该数组的元素个数。

答:sieof(arr)/sizeof(数据类型)

  1. 用预处理指令#define 声明一个常数,用以表明1年(365天)中有多少秒

答:#define N (365 * 24 * 60 * 60)

  1. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。

答:#define MIN(a,b) b>a?a:b

  1. 说明以下定义的指针所指向的类型
    int *ptr; //指针所指向的类型是:

答:int

char *ptr; //指针所指向的的类型是:

答:char

int **ptr; //指针所指向的的类型是:

答:int类型的二位数组

int (*ptr)[3]; //指针所指向的的类型是:

答:数组指针,存储地址的数组

int (*ptr)() //指针所指向的的类型是:

答:函数指针,int ptr ()

  1. 下面的函数有什么错误:
int square(volatile int *ptr) 
{ 
return ptr *ptr; 
} 

返回值为int类型,参数是一个地址,ptr是一个地址,不能进行*运算,可以进行++,- -操作

  1. 给定一个整型变量a,编写代码实现如下功能,第一个设置a的bit 3,第二个清除a 的bit 3。

答:设置a的第三位意思是将第三位置为1:a|=a<<2 a&=~(1<<2)

  1. 某项目中,要求设置一绝对地址为0x67a9的整型变量的值为0xaa66,请写代码去完成这一任务。

答:*(0x67a9) = (int)(0xaa66)

  1. 中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展—让标准C支持中断。具代表事实是,产生了一个新的关键字__interrupt。下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR),请评论一下这段代码。
    __interrupt double compute_area (double radius)
    {
    double area = PI * radius * radius;
    printf(” Area = %f”, area);
    return area;
    }

答:说实话没看懂。
这段代码存在一些问题。首先,中断服务子程序(ISR)通常不应该返回值,因为中断处理完毕后,控制权应该立即返回到中断发生之前的位置,不应该将控制权交给ISR返回的地方。其次,ISR一般应该尽量简洁,不应该包含过多的代码,否则会影响系统的实时性。最后,如果这个ISR用于响应硬件中断,那么它必须在处理完成后清除中断标志位,否则系统将不会知晓这个中断已经被处理过了。

  1. 下面的代码输出是什么,为什么?
    Void foo(void)
    {
    unsigned int a = 6;
    int b = -20;
    (a+b > 6) ? puts(“> 6”) : puts(“<= 6”);
    }

答:输出是"> 6"。

因为表达式(a+b > 6)的值为真,即:6 + (-20) > 6,即 -14 > 0,这是一个真值,所以会输出"> 6"。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,我无法提供具体的2024年前端面试题一百道,因为面试题的内容和形式可能会因公司、职位和行业而异。不过,我可以提供一些通用的前端面试题,以帮助您准备面试。 1. 请简述前端开发的主要技术栈包括哪些? 2. 请描述一下什么是HTML、CSS和JavaScript? 3. 请解释一下什么是响应式设计?如何在前端开发实现响应式设计? 4. 请简述一下什么是前端框架,并列举几个常用的前端框架。 5. 请解释一下什么是Vue.js,并简述其核心概念和用法。 6. 请解释一下什么是React.js,并简述其核心概念和用法。 7. 请简述一下什么是Webpack,并解释其作用和用法。 8. 请解释一下什么是ES6,并列举一些ES6的新特性。 9. 请简述一下什么是前端性能优化,并列举一些优化技巧。 10. 请解释一下什么是HTTP/2,并简述其优点和缺点。 除了以上问题,您还可以准备一些更具体的问题,例如: 1. 请解释一下如何使用CSS选择器选择元素? 2. 请解释一下如何使用JavaScript操作DOM? 3. 请描述一下如何使用Vue.js实现一个简单的计数器组件。 4. 请解释一下如何使用React.js实现一个简单的表单组件。 5. 请描述一下如何使用Webpack进行代码拆分和优化。 6. 请解释一下什么是跨域问题,并简述如何解决跨域问题。 7. 请描述一下如何使用JavaScript进行异步编程,例如使用Promise和async/await。 8. 请解释一下什么是前端安全,并列举一些常见的安全问题及其解决方法。 希望以上信息对您有所帮助,祝面试成功!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值