C程序是面试中经常被问到的问题。这些程序可以问从基础,数组,字符串,指针,链表,文件处理等。让我们看看c程序的列表。

1) 费波纳契数列

不使用递归:

#include <stdio.h>

void printFibonacci(int n) {
    int a = 0, b = 1, nextTerm;

    for (int i = 1; i <= n; i++) {
        printf("%d ", a);
        nextTerm = a + b;
        a = b;
        b = nextTerm;
    }
}

int main() {
    int n;
    printf("请输入项数: ");
    scanf("%d", &n);
    printFibonacci(n);

    return 0;
}

使用递归:

#include <stdio.h>

int fibonacci(int n) {
    if (n <= 1)
        return n;
    return fibonacci(n - 1) + fibonacci(n - 2);
}

void printFibonacci(int n) {
    for (int i = 0; i < n; i++) {
        printf("%d ", fibonacci(i));
    }
}

int main() {
    int n;
    printf("请输入项数: ");
    scanf("%d", &n);
    printFibonacci(n);

    return 0;
}

2) 质数

#include <stdio.h>

int isPrime(int num) {
    if (num <= 1)
        return 0;

    for (int i = 2; i * i <= num; i++) {
        if (num % i == 0)
            return 0;
    }
    return 1;
}

int main() {
    int num;
    printf("请输入一个整数: ");
    scanf("%d", &num);

    if (isPrime(num))
        printf("%d 是质数\n", num);
    else
        printf("%d 不是质数\n", num);

    return 0;
}

3) 回文数

#include <stdio.h>

int isPalindrome(int num) {
    int reverse = 0, temp = num;

    while (temp != 0) {
        reverse = reverse * 10 + temp % 10;
        temp /= 10;
    }

    return reverse == num;
}

int main() {
    int num;
    printf("请输入一个整数: ");
    scanf("%d", &num);

    if (isPalindrome(num))
        printf("%d 是回文数\n", num);
    else
        printf("%d 不是回文数\n", num);

    return 0;
}

4) 阶乘

#include <stdio.h>

int factorial(int n) {
    if (n == 0)
        return 1;
    else
        return n * factorial(n - 1);
}

int main() {
    int num;
    printf("请输入一个整数: ");
    scanf("%d", &num);

    printf("阶乘结果为: %d\n", factorial(num));

    return 0;
}

5) 阿姆斯特朗数

#include <stdio.h>
#include <math.h>

int isArmstrong(int num) {
    int sum = 0, temp = num, digits = 0;

    while (temp != 0) {
        temp /= 10;
        digits++;
    }

    temp = num;
    while (temp != 0) {
        int digit = temp % 10;
        sum += pow(digit, digits);
        temp /= 10;
    }

    return sum == num;
}

int main() {
    int num;
    printf("请输入一个整数: ");
    scanf("%d", &num);

    if (isArmstrong(num))
        printf("%d 是阿姆斯特朗数\n", num);
    else
        printf("%d 不是阿姆斯特朗数\n", num);

    return 0;
}

6) 数字之和

#include <stdio.h>

int sumOfDigits(int num) {
    int sum = 0;

    while (num != 0) {
        sum += num % 10;
        num /= 10;
    }

    return sum;
}

int main() {
    int num;
    printf("请输入一个整数: ");
    scanf("%d", &num);

    printf("数字之和为: %d\n", sumOfDigits(num));

    return 0;
}

7) 数字反转

#include <stdio.h>

int reverseNumber(int num) {
    int reversed = 0;

    while (num != 0) {
        reversed = reversed * 10 + num % 10;
        num /= 10;
    }

    return reversed;
}

int main() {
    int num;
    printf("请输入一个整数: ");
    scanf("%d", &num);

    printf("反转后的数字为: %d\n", reverseNumber(num));

    return 0;
}

8) 不使用第三个变量交换两个数

#include <stdio.h>

int main() {
    int a, b;
    printf("请输入两个整数: ");
    scanf("%d %d", &a, &b);

    printf("交换前: a = %d, b = %d\n", a, b);

    a = a + b;
    b = a - b;
    a = a - b;

    printf("交换后: a = %d, b = %d\n", a, b);

    return 0;
}

9) 不使用分号打印 "hello"

#include <stdio.h>

int main() {
    if (printf("hello")) {}

    return 0;
}

10) 使用汇编代码实现两个数相加

#include <stdio.h>

int main() {
    int a, b, sum;

    printf("请输入两个整数: ");
    scanf("%d %d", &a, &b);

    asm volatile("addl %1, %0" : "=r"(sum) : "r"(a), "0"(b));

    printf("两个数相加结果为: %d\n", sum);

    return 0;
}

11) 不使用 main() 函数打印 "Hello"

#define decode(s,t,u,m,p,e,d) m##s##u##t
#define begin decode(a,n,i,m,a,t,e)

#include <stdio.h>

begin() {
    printf("Hello\n");
    return 0;
}

12) 矩阵乘法

#include <stdio.h>

void matrixMultiplication(int A[][3], int B[][3], int C[][3]) {
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            C[i][j] = 0;
            for (int k = 0; k < 3; k++) {
                C[i][j] += A[i][k] * B[k][j];
            }
        }
    }
}

void displayMatrix(int matrix[][3]) {
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
}

int main() {
    int A[3][3] = {{1, 1, 1}, {2, 2, 2}, {3, 3, 3}};
    int B[3][3] = {{1, 1, 1}, {2, 2, 2}, {3, 3, 3}};
    int C[3][3];

    printf("第一个矩阵元素:\n");
    displayMatrix(A);
    printf("第二个矩阵元素:\n");
    displayMatrix(B);

    matrixMultiplication(A, B, C);

    printf("两个矩阵的乘积:\n");
    displayMatrix(C);

    return 0;
}

13) 十进制转二进制

#include <stdio.h>

void decimalToBinary(int num) {
    if (num == 0)
        return;
    decimalToBinary(num / 2);
    printf("%d", num % 2);
}

int main() {
    int num;
    printf("请输入一个十进制数: ");
    scanf("%d", &num);

    printf("二进制表示为: ");
    decimalToBinary(num);
    printf("\n");

    return 0;
}

14) 字母三角形

#include <stdio.h>

int main() {
    int n, k = 0;
    printf("请输入行数: ");
    scanf("%d", &n);

    for (int i = 1; i <= n; i++, k = 0) {
        for (int space = 1; space <= n - i; space++) {
            printf(" ");
        }
        while (k != 2 * i - 1) {
            printf("%c", 64 + i + k);
            k++;
        }
        printf("\n");
    }

    return 0;
}

15) 数字三角形

#include <stdio.h>

int main() {
    int i, j, space, rows;

    printf("请输入范围: ");
    scanf("%d", &rows);

    for (i = 1; i <= rows; i++) {
        for (space = 1; space <= rows - i; space++)
            printf(" ");
        for (j = 1; j <= i; j++)
            printf("%d", j);
        for (j = i - 1; j >= 1; j--)
            printf("%d", j);
        printf("\n");
    }

    return 0;
}

16) 费波纳契三角形

#include <stdio.h>

int fibonacci(int n) {
    if (n <= 1)
        return n;
    return fibonacci(n - 1) + fibonacci(n - 2);
}

int main() {
    int n;
    printf("请输入范围: ");
    scanf("%d", &n);

    for (int i = 0; i < n; i++) {
        for (int j = 0; j <= i; j++) {
            printf("%d ", fibonacci(j));
        }
        printf("\n");
    }

    return 0;
}

17) 数字转为字符

#include <stdio.h>

void printInWords(int num) {
    char* words[] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};

    if (num == 0) {
        printf("%s ", words[0]);
        return;
    }

    int digit = num % 10;
    printInWords(num / 10);
    printf("%s ", words[digit]);
}

int main() {
    int num;
    printf("请输入一个整数: ");
    scanf("%d", &num);

    printf("数字转为字符: ");
    printInWords(num);
    printf("\n");

    return 0;
}

标签: c语言, c语言教程, c语言技术, c语言学习, c语言学习教程, c语言下载, c语言开发, c语言入门教程, c语言进阶教程, c语言高级教程, c语言面试题, c语言笔试题, c语言编程思想