经典C语言面试题+参考
更新时间:2023-06-28前言
经典C语言面试题是衡量程序员编码能力和解决问题能力的重要指标。在本文中,我将介绍一些经典C语言面试题,并给出参考答案。每个问题都附带有详细解释和代码示例,以便更好地理解和掌握。
问题一:如何交换两个变量的值?
在C语言中,交换两个变量的值可以通过引入第三个变量来实现,也可以通过使用位运算来实现。
- 使用第三个变量:
- 使用位运算:
int a = 10;
int b = 20;
int temp;
temp = a;
a = b;
b = temp;
int a = 10;
int b = 20;
a = a ^ b;
b = a ^ b;
a = a ^ b;
问题二:如何判断一个数是否为质数?
质数是指除了1和自身外没有其他因数的整数。在C语言中,我们可以使用循环来判断一个给定的数是否为质数。
- 使用循环判断:
int num = 17; // 要判断的数
int i;
int isPrime = 1; // 假设为质数
for (i = 2; i <= num / 2; ++i) {
if (num % i == 0) {
isPrime = 0;
break;
}
}
if (isPrime) {
printf("%d 是质数", num);
} else {
printf("%d 不是质数", num);
}
问题三:如何实现字符串反转?
字符串反转是将字符串中的字符顺序颠倒的操作。在C语言中,我们可以使用指针和循环来实现字符串反转。
- 使用指针:
void reverseString(char* str) {
int i = 0;
int j = strlen(str) - 1;
while (i < j) {
char temp = str[i];
str[i] = str[j];
str[j] = temp;
++i;
--j;
}
}
char str[] = "Hello, World!";
reverseString(str);
printf("反转后的字符串:%s", str);
问题四:如何逆序输出一个链表?
逆序输出链表可以使用递归或者辅助栈的方式来实现。在C语言中,我们可以使用递归方法来逆序输出一个链表。
- 使用递归:
struct Node {
int data;
struct Node* next;
};
void reversePrint(struct Node* node) {
if (node == NULL) {
return;
}
reversePrint(node->next);
printf("%d ", node->data);
}
// 示例代码的链表:1 -> 2 -> 3 -> 4 -> 5
// 构造链表
struct Node* head = NULL;
struct Node* second = NULL;
struct Node* third = NULL;
struct Node* fourth = NULL;
struct Node* fifth = NULL;
head = (struct Node*)malloc(sizeof(struct Node));
second = (struct Node*)malloc(sizeof(struct Node));
third = (struct Node*)malloc(sizeof(struct Node));
fourth = (struct Node*)malloc(sizeof(struct Node));
fifth = (struct Node*)malloc(sizeof(struct Node));
head->data = 1;
head->next = second;
second->data = 2;
second->next = third;
third->data = 3;
third->next = fourth;
fourth->data = 4;
fourth->next = fifth;
fifth->data = 5;
fifth->next = NULL;
reversePrint(head);
本文中介绍的经典C语言面试题涵盖了变量交换、质数判断、字符串反转和链表逆序输出。熟练掌握这些问题的解决方法,可以帮助程序员在编码过程中更加灵活和高效。