1、当n=6时,下列函数的返回值为多少?
int foo(int n)
{
if(n <= 2)
return n;
return foo(n-1) + foo(n-2);
}
答
13
2、下面程序的值为多少
union data{
struct{
int x;
int y;
}s;
int x;
int y;
}d; int main(int argc, const char *argv[])
{
d.x = 1;
d.y = 2;
d.s.x = d.x * d.x;
d.s.y = d.y + d.y;
printf("%d %d \n", d.s.x, d.s.y);
}
答
4 8
3、下面程序的输出结果
typedef struct Data{
unsigned int a : 2;
unsigned int b : 4;
unsigned int : 0;
unsigned int c : 3;
}DATA;
DATA t = {.a = 3, .b = 6, .c = 7}; int main(int argc, const char *argv[])
{
struct data *p = &t;
p->a = (p->a) & 3;
p->b = (p->b) | 4;
p->c = (p->c) ^ 5;
printf("%d %d %d\n", t.a, t.b, t.c);
return 0 ;
}
3 6 2
4、下面的输出结果是多少?
struct data{
long num;
char *ptr;
short int data;
char ha;
short ba[5];
}*p; int main(int argc, const char *argv[])
{
p = 0x10000000;
printf("%d\n", sizeof(struct data));
printf("%#x\n", p + 0x200);
printf("%#x\n", (char *)p + 0x200);
}
答
32 0x10004000 0x10000200
5、宏定义作用:标识别名(定义常量)、宏函数、转字符串、拼接
1)写一个宏定义,用它求一个字符数组长度(宏函数);
2)写一个用到##的宏定义,并说明它的作用;
3)下面两种写法有什么区别,试说明这是宏的何种用法
答
1.#define ARRAY_LENGTH(arr) (sizeof(arr) / sizeof((arr)[0]))
2.
#include <stdio.h>
#define PRINT_VAR(var, format) printf(#var " = " format "\n", var)
int main() {
int num = 42;
float pi = 3.14159;
char letter = 'A';
PRINT_VAR(num, "%d");
PRINT_VAR(pi, "%.2f");
PRINT_VAR(letter, "%c");
return 0;
}
在上述示例中,我们定义了一个宏 PRINT_VAR,它接受两个参数 var 和 format。在使用宏时,我们传入一个变量以及一个格式化字符串。宏展开时,#var 将会将 var 转化为字符串,然后 #var " = " format “\n” 使用 ## 运算符将这些字符串拼接在一起。最终,宏展开后的代码将会打印出变量名和对应值。
运行上述示例代码,输出将是:
num = 42
pi = 3.14
letter = A
3.