(c语言面试题)(华为第2套)
自从我上传第一份华为的c语言面试题,有多人下载,我非常感激,为表达谢意,我叫我同学(我同学在华为工作两年,他本身也是用c,c++编程)从华为公司的人事部获取另一份c语言面试题。希望对学c的人有用!由于题目的难度,如果做的焦头烂额的话,是正常的,假如应付有度,说明你的实力达到华为的标准。 【C语言面试题详解】 1. 代码错误分析: - `test1` 函数的问题在于,`strcpy` 会复制整个字符串,包括末尾的空字符('\0')。因此,`string` 应该有足够的空间来容纳源字符串加上空字符,即 `char string[11]`。 - `test2` 函数中,`strcpy` 在没有遇到'\0'的情况下继续复制,可能导致越界访问。正确的做法是在`str1`末尾添加空字符,如 `str1[9]='\0'`。 - `test3` 函数中,`strlen(str1)` 不包含空字符,所以条件应改为 `strlen(str1)<10`,以确保有足够的空间存储结尾符。 2. `get_SRM_no` 函数的错误: - `SRM_no` 没有初始值,应给予初始化。 - 使用 `static` 关键字使得函数不可重入,即每次调用的结果依赖于上一次调用的状态。应移除 `static`,或者根据实际情况考虑是否需要全局存储。 3. `sum` 函数及输出: - 当 `sum` 被调用时,`b` 作为静态变量保留了上次调用的值。所以每次调用 `sum(a)`,`b` 的值都会增加2,输出结果为 `8,10,12,14,16`。 4. `func` 函数的计算: - 由于没有 `break` 语句,`switch` 会一直执行到 `default`,所以 `func(1)` 的结果是 `0`。 5. `a[q-p]` 的值: - `q-p` 计算的是指针间的距离,这里是 `2-0=2`,因此 `a[q-p]=a[2]`,即 `2`。 6. 变量 `**a[3][4]` 占用的空间: - 在32位系统中,每个指针占用4字节,因此总空间为 `3×4×4=48` 字节。 7. 输出下一秒的函数设计: - 提供的函数 `NextMinute` 应该接受年、月、日、小时、分钟和秒作为参数,增加秒数,并根据需要递增其他时间单位。例如,当秒满60时,增加分钟并重置秒;当分钟满60时,增加小时并重置分钟,以此类推。对于月份中的天数,还需要处理闰年的情况。具体实现如下: ```c #include <stdbool.h> bool is_leap_year(int year) { return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); } void NextMinute(int *nYear, int *nMonth, int *nDate, int *nHour, int *nMinute, int *nSecond) { (*nSecond)++; if (*nSecond >= 60) { *nSecond = 0; (*nMinute)++; if (*nMinute >= 60) { *nMinute = 0; (*nHour)++; if (*nHour >= 24) { *nHour = 0; (*nDate)++; int nDaysInMonth; switch (*nMonth) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: nDaysInMonth = 31; break; case 2: nDaysInMonth = is_leap_year(*nYear) ? 29 : 28; break; default: nDaysInMonth = 30; break; } if (*nDate > nDaysInMonth) { *nDate = 1; (*nMonth)++; if (*nMonth > 12) { *nMonth = 1; (*nYear)++; } } } } } } ``` 以上是对给定的C语言面试题的详细解答,涵盖了字符串操作、指针运算、数组和循环控制、时间处理等多个C语言核心知识点。这些题目旨在考察程序员对C语言基本概念的理解和实际应用能力,对于准备C语言面试的应聘者来说具有很高的参考价值。
剩余19页未读,继续阅读
- 法号我去2014-04-15不错,为面试准备挺好!
- 粉丝: 1
- 资源: 9
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助