C语言编程挑战,5道经典面试试题与解答
C语言,作为一门高级编程语言,自诞生以来就以其高效、灵活的特点,在操作系统、嵌入式系统、游戏开发等多个领域占据了重要地位,对于程序员来说,掌握好C语言不仅是提升个人技能的关键,也是进入名企的敲门砖之一,我们就来挑战5道经典的C语言面试题,看看你能答对几道?每道题都附有详细的解析和代码示例,希望能帮助大家更好地理解C语言的核心概念。
题目一:字符串反转
题目描述:编写一个函数reverse_string(char *str),功能是将传入的字符串str进行原地反转,当str为“hello”时,反转后应变为“olleh”。
解题思路:可以采用双指针法,一个指向字符串的头部,另一个指向尾部,然后交换两者所指向的字符,接着向中心移动,直至两指针相遇或交叉。
代码实现:
#include <stdio.h>
#include <string.h>
void reverse_string(char *str) {
int len = strlen(str);
char temp;
for (int left = 0, right = len - 1; left < right; left++, right--) {
// 交换两个位置的字符
temp = str[left];
str[left] = str[right];
str[right] = temp;
}
}
int main() {
char str[] = "hello";
printf("Original: %s\n", str);
reverse_string(str);
printf("Reversed: %s\n", str);
return 0;
}题目二:斐波那契数列
题目描述:编写一个函数fibonacci(int n),计算并返回斐波那契数列第n项的值,斐波那契数列定义如下:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n>=2)。

解题思路:可以使用递归实现,但对于较大的n效率极低,更好的方法是使用迭代,仅需常数空间复杂度即可完成。
代码实现:
#include <stdio.h>
int fibonacci(int n) {
if (n <= 1) return n;
int prev = 0, curr = 1;
for (int i = 2; i <= n; i++) {
int next = prev + curr;
prev = curr;
curr = next;
}
return curr;
}
int main() {
int n = 10;
printf("Fibonacci(%d) = %d\n", n, fibonacci(n));
return 0;
}题目三:判断字符串是否为回文串
题目描述:编写一个函数is_palindrome(const char *str),判断给定字符串str是否为回文串,所谓回文串是指正读反读都一样的字符串。
解题思路:同样可采用双指针的方法,一个从头开始遍历,另一个从尾开始,比较对应位置上的字符是否相同。
代码实现:
#include <stdbool.h>
#include <stdio.h>
#include <string.h>
bool is_palindrome(const char *str) {
int len = strlen(str);
for (int left = 0, right = len - 1; left < right; left++, right--) {
if (str[left] != str[right]) return false;
}
return true;
}
int main() {
const char *str1 = "madam";
const char *str2 = "test";
printf("%s is palindrome? %s\n", str1, is_palindrome(str1) ? "Yes" : "No");
printf("%s is palindrome? %s\n", str2, is_palindrome(str2) ? "Yes" : "No");
return 0;
}题目四:求最大公约数
题目描述:编写一个函数gcd(int a, int b),求两个正整数a和b的最大公约数。
解题思路:利用辗转相除法(欧几里得算法),即用较大数除以较小数,再用上一步中的除数去除余数,重复此步骤直到余数为零,最后的除数即为最大公约数。
代码实现:
#include <stdio.h>
int gcd(int a, int b) {
while (a % b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return b;
}
int main() {
int x = 60, y = 48;
printf("GCD of %d and %d is %d\n", x, y, gcd(x, y));
return 0;
}题目五:查找子串
题目描述:编写一个函数strstr(const char *haystack, const char *needle),在字符串haystack中查找子串needle第一次出现的位置,如果找到则返回该位置的指针,否则返回NULL。
解题思路:使用滑动窗口法,逐字符比较haystack与needle,直至匹配成功或haystack结束。
代码实现:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
const char* strstr(const char *haystack, const char *needle) {
int m = strlen(haystack), n = strlen(needle);
if (n == 0) return (char *)haystack;
for (int i = 0; i <= m - n; i++) {
int j;
for (j = 0; j < n; j++)
if (haystack[i + j] != needle[j]) break;
if (j == n) return (char *)(haystack + i);
}
return NULL;
}
int main() {
const char *haystack = "hello world";
const char *needle = "world";
const char *result = strstr(haystack, needle);
if (result) printf("Substring found at position: %p\n", result);
else printf("Substring not found.\n");
return 0;
}就是我们精心挑选的五道C语言面试题及解答方案,通过这些练习,不仅能巩固基础知识,还能提高解决实际问题的能力,希望各位读者朋友能够有所收获!
相关文章
-
景顺成长,探索中国城市化进程中的绿色发展之路详细阅读
在21世纪的今天,城市化已成为全球范围内不可逆转的趋势,中国,作为世界上人口最多的国家,其城市化进程尤为引人注目,随着经济的快速发展,城市化带来的问题...
2025-10-01 86
-
深度解析,股票000777中核科技的投资价值与未来展望详细阅读
在当今的投资市场中,股票投资无疑是一个热门话题,而在众多股票中,股票代码为000777的中核科技因其独特的行业地位和发展潜力,吸引了众多投资者的目光,...
2025-09-30 105
-
深圳证券交易所交易规则,投资市场的指南针详细阅读
亲爱的读者,想象一下,你正站在一个繁忙的十字路口,四周是熙熙攘攘的人群和川流不息的车辆,每个人都在按照交通规则行事,红灯停,绿灯行,黄灯亮起时,大家会...
2025-09-30 89
-
基金202005,揭秘投资背后的逻辑与策略详细阅读
在投资的世界里,基金是一种备受瞩目的投资工具,它以其多样化的投资组合、专业的管理团队和相对稳定的收益吸引了众多投资者的目光,我们将深入探讨基金2020...
2025-09-30 89
-
探索中国平安行销,策略、实践与未来趋势详细阅读
在当今竞争激烈的市场环境中,行销策略对于企业的成功至关重要,中国平安,作为中国领先的金融服务集团,其行销策略不仅在国内市场上取得了显著成效,也为全球行...
2025-09-29 95
-
深入解析数码视讯股票,投资价值与市场前景详细阅读
在当今数字化时代,数码视讯行业作为信息技术领域的重要组成部分,正逐渐成为投资者关注的焦点,本文将深入探讨数码视讯股票的投资价值与市场前景,帮助投资者更...
2025-09-29 92
-
悦康药业,创新与责任并重,引领健康未来详细阅读
在当今这个快节奏、高压力的社会中,健康成为了人们越来越关注的话题,而在医药行业中,有这样一家企业,它以创新为驱动,以责任为担当,致力于提供高质量的药品...
2025-09-29 90
-
深度解析,定向增发股票背后的资本游戏与投资策略详细阅读
在资本市场的棋盘上,股票的每一次变动都牵动着投资者的神经,定向增发作为一种特殊的融资方式,因其能够为上市公司带来资金的同时,也为投资者提供了新的投资机...
2025-09-29 95
