c语言编程笔录

首页 >   > 笔记大全

笔记大全

经典C语言面试题+参考

更新时间:2023-06-28

前言

经典C语言面试题是衡量程序员编码能力和解决问题能力的重要指标。在本文中,我将介绍一些经典C语言面试题,并给出参考答案。每个问题都附带有详细解释和代码示例,以便更好地理解和掌握。

问题一:如何交换两个变量的值?

在C语言中,交换两个变量的值可以通过引入第三个变量来实现,也可以通过使用位运算来实现。

  1. 使用第三个变量:
  2.     
    int a = 10;
    int b = 20;
    int temp;
    
    temp = a;
    a = b;
    b = temp;
        
      
  3. 使用位运算:
  4.     
    int a = 10;
    int b = 20;
    
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
        
      

问题二:如何判断一个数是否为质数?

质数是指除了1和自身外没有其他因数的整数。在C语言中,我们可以使用循环来判断一个给定的数是否为质数。

  1. 使用循环判断:
  2.     
    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语言中,我们可以使用指针和循环来实现字符串反转。

  1. 使用指针:
  2.     
    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语言中,我们可以使用递归方法来逆序输出一个链表。

  1. 使用递归:
  2.     
    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语言面试题涵盖了变量交换、质数判断、字符串反转和链表逆序输出。熟练掌握这些问题的解决方法,可以帮助程序员在编码过程中更加灵活和高效。