1、用预处理指令#define声明一个常数SECONDS_PER_DAY,用以表明一天中有多少秒。
答:#define SECONDS_PER_DAY (24*60*60)UL
2、用变量a给出下面的定义
a)一个整型数
答:int a;
b)一个指向整型数的指针
答:int *a;
c)一个指向指针的指针,它指向的指针是指向一个整型数
答:int **a;
d)一个有10个整型数的数组
答:int a[10];
e)
答:int *a[10];
f)
答:int (*a)[10];
g)
答:int (*a)(int);
h)
答:int (*a[10])(int);
3、关键字static的作用是什么
答:1)在函数体内,一个被声明为静态的局部变量,函数被调用过程中其值维持不变
2)在模块内函数外,一个被声明为静态的全局变量,能被模块内所有函数访问,但不能被模块外函数访问
3)static用来修饰函数,此函数只能被模块内的其它函数调用
4、用C语言编写代码访问固定的位置0x1000,赋值为0x2000
答:int *ptr;
ptr = (int*)0x1000;
*ptr = 0x2000;
5、给定一个整型变量a,写两段代码,第一个设置a的bit:3,第二个清除a的bit:3,在以上两个操作中,要保持其他位不变。
答:a = a | 0x00000004;
a = a & 0xFFFFFFFB;
6、写一个函数,来实现两个字符串的拷贝。
答:
#include<assert.h>
char *strcopy(char *dest, const char *src)
{
assert((NULL != dest) && (NULL != src));
char *temp = dest;
while((*dest++ = *src++) != '\0');
return temp;
}
7、下面的代码就使用了_interrupt关键字去定义了一个中断服务子程序(ISR),请确认这段代码是否正确,并说明理由。
_interrupt double compute_area (double radius)
{
double area = PI* radius *radius;
printf("\nArea = %f",area);
return area;
}
答:中断服务程序不能有返回值中断返回值不能有参数
中断程序应该是短而高效的,不应进行浮点运算
printf()经常有重入和性能上的问题
8、下面的代码输出是什么,为什么?
void foo(void)
{
unsigned int a = 6;
int b = -20;
(a+b>6)?puts(">6"):puts("<=6");
}
答:输出 >6
因为有无符号数参与的运算中都按无符号处理
9、完成下列代码,实现数组内数据的数字平均滤波。
/***********************************************************************
*函数名:Average
*参 数:buffer = 缓冲区
* len = 缓冲区长度
*返回值:平均滤波结果
*功能描述:将长len的buffer缓冲区进行平均滤波计算
**********************************************************************/
int average(int *buffer, unsigned char len)
{
unsigned char temp = len;
long int total = 0;
while(temp--)
{
total = *buffer++;
}
return total/len;
}