好的阿杰,我给你整理一个 《C语言谜题挑战:14道趣味题》,适合用来练逻辑、指针、数组和条件判断等知识。


🖥 C语言谜题挑战:14道趣味题

题目 1:指针与数组

#include <stdio.h>
int main() {
    int a[3] = {1,2,3};
    int *p = a;
    printf("%d", *(p++));
    return 0;
}

问题:输出结果是多少?
思考点:指针自增、解引用顺序


题目 2:字符与整数

#include <stdio.h>
int main() {
    char c = 'A';
    printf("%d", c);
    return 0;
}

问题:输出结果是多少?
思考点:字符 ASCII 值


题目 3:数组越界

#include <stdio.h>
int main() {
    int a[3] = {1,2,3};
    printf("%d", a[3]);
    return 0;
}

问题:程序会输出什么?
思考点:越界访问未定义行为


题目 4:条件运算符

#include <stdio.h>
int main() {
    int x = 5, y = 10;
    int z = x > y ? x : y;
    printf("%d", z);
    return 0;
}

问题:输出多少?


题目 5:逗号运算符

#include <stdio.h>
int main() {
    int a = (1, 2, 3);
    printf("%d", a);
    return 0;
}

问题:输出结果是多少?


题目 6:浮点比较

#include <stdio.h>
int main() {
    float a = 0.1;
    if(a == 0.1) printf("Yes");
    else printf("No");
    return 0;
}

问题:输出 Yes 还是 No?
思考点:浮点数精度


题目 7:自增与赋值

#include <stdio.h>
int main() {
    int a = 1;
    a = a++;
    printf("%d", a);
    return 0;
}

问题:输出多少?
思考点:后置自增与赋值顺序


题目 8:指针交换

#include <stdio.h>
void swap(int *x, int *y){
    int temp = *x;
    *x = *y;
    *y = temp;
}
int main() {
    int a=1,b=2;
    swap(&a,&b);
    printf("%d %d", a,b);
    return 0;
}

问题:输出多少?


题目 9:结构体对齐

#include <stdio.h>
struct S { char c; int x; };
int main() {
    struct S s;
    printf("%d", sizeof(s));
    return 0;
}

问题:输出多少?
思考点:内存对齐


题目 10:宏定义陷阱

#include <stdio.h>
#define SQUARE(x) x*x
int main() {
    printf("%d", SQUARE(1+2));
    return 0;
}

问题:输出结果是多少?
思考点:宏展开


题目 11:递归计算

#include <stdio.h>
int f(int n) {
    if(n<=1) return 1;
    return n*f(n-1);
}
int main() {
    printf("%d", f(5));
    return 0;
}

问题:输出多少?
思考点:阶乘递归


题目 12:静态变量

#include <stdio.h>
void func() {
    static int count = 0;
    count++;
    printf("%d ", count);
}
int main() {
    func();
    func();
    func();
    return 0;
}

问题:输出结果是什么?


题目 13:指针与字符串

#include <stdio.h>
int main() {
    char *str = "Hello";
    printf("%c", *(str+1));
    return 0;
}

问题:输出哪个字符?


题目 14:三目运算与逻辑

#include <stdio.h>
int main() {
    int a = 5, b = 0;
    printf("%d", a && b ? a : b);
    return 0;

问题:输出多少?