好的阿杰,我给你整理一个 《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;
问题:输出多少?
发表回复