1、将一个字符串”1234…abcdef…”逆序排列。
char *str=”1234…abcdef…”;
int n,i,j;
char tem;
while(*str)n++;
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
{
if(str[j]<str[j+1])
{
Tem = str[j];
str[j] = str[j+1];
str[j+1] = tem;
}
}
2、计算一个字节(BYTE)里面有多少位(bit)为1。
char get_bit1(char BYTE)
{
char bit,i;
for(i=0;i<8;i++)
if((BYTE>>i)&1)bit++;
return bit;
}
3、单片机上点后没有运转,请简述调试步骤。
①检查供电
②检查晶振
③检查RESET引脚的逻辑电平
④如果设计时,程序是从扩展的外部ROM运行的,还需检查EA脚
⑤检查MCU是否损坏或FLASH无法下载,换新芯片试试
4、static全局变量与普通全局变量有什么区别?
static全局变量,只能供本文件内的函数调用,不能被其它文件的函数调用
普通全局变量,可被其它文件的函数调用
5、static局部变量与普通局部变量有什么区别?
局部变量:每次进入进入子函数中重新赋值 static:静态变量,开始定义时赋值,以后进入子函数时之前在此函数中计算的值重新赋值该变量
6.寻找两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同
int different_bits(int num_1, int num_2)
{
int count = 0;
for (int i = 0; i < 32; i++)
{
if (((num_1 >> i) & 1) ^ ((num_2 >> i) & 1))
count++;
}
return (count);
}
7.将一个无符号数的二进制数逆置
unsigned int reverse_bit(unsigned int num)
{
int i = 0;
unsigned int ret = 0;
for (i = 0; i < 32; i++)
{
ret<<=1;
ret |= ((num >> i) & 1);
}
return (ret);
}
8.将16进制字符串”A05B12C7”转换成int(32位)数0xa05b12c7,注:’0’=0x30,’A’=0x41
char *str=” A05B12C7”;int tem,i;
while(str[i])
{
tem<<4;
if(str[i] >=0x30 && str[i] <=0x39)
tem|= str[i]-0x30;
elseif(str[i] >=0x41 && str[i] <=0x46)
tem|= str[i]-0x41+10;
i++;
}
9.求平均值:数组char str[n],去除一个最大值和最小值,求平均值, (假设数组元素和为int数)。
char tem;
int sun;
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
{
if(str[j]<str[j+1])
{
tem = str[j];
str[j] = str[j+1];
str[j+1] = tem;
}
}
for(i=1;i<n-1;i++)
sum += str[i];
sum =sum/(n-2);
10. 编写一个程序,将字符串char *str2连接到字符串char *str1。
void main(char *str1,char *str2;)
{
int i=0,j=0;
while (str1[i]!='\0')
{
i++;
}
while (str2[j]!='\0')
{
str1[i++]=str2[j++];
}
str1[i]='\0';
}
11. 用变量a给出下面的定义
a) 一个整型数(An integer)
b)一个指向整型数的指针( A pointer to an integer)
c)一个指向指针的的指针,它指向的指针是指向一个整型数( A pointer to a pointer to an integer)
d)一个有10个整型数的数组( An array of 10 integers)
e) 一个有10个指针的数组,该指针是指向一个整型数的。(An array of 10 pointers to integers)
f) 一个指向有10个整型数数组的指针( A pointer to an array of 10 integers)
g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as anargument and returns an integer)
答案:
a) int a; // An integer
b) int *a; // A pointer to an integer
c) int **a; // A pointer to a pointer to an integer
d) int a[10]; // An array of 10 integers
e) int *a[10]; // An array of 10 pointers to integers
f) int (*a)[10]; // A pointer to an array of 10 integers
g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer
12、.h头文件中的ifndef/define/endif 的作用?
答:防止该头文件被重复引用。
13.a=2;b=5;c=a+++b>>1;求c的值,写出运算过程
答案: c=((a++) +b)>>1 c=6
14. 写一个“标准”宏Max,这个宏输入两个参数并返回较大的一个。
#define Max(A,B) ((A) >= (B) ?(A) :(B))
15.中断的概念,简述中断过程
中断的概念:当外部请求服务时,暂时中断当前主程序,转而执行中断处理程序,完成后再自动返回被中断的主程序继续运行
中断过程:中断源发出中断请求 -> 对中断请求进行响应 -> 执行中断处理程序 –>返回主程序
16. 步进电机的工作原理?
通常电机的转子为永磁体,当电流流过定子绕组时,定子绕组产生一矢量磁场。该磁场会带动转子旋转一角度,使得转子的一对磁场方向与定子的磁场方向一致。当定子的矢量磁场旋转一个角度。转子也随着该磁场转一个角度。每输入一个电脉冲,电动机转动一个角度前进一步。它输出的角位移与输入的脉冲数成正比、转速与脉冲频率成正比。改变绕组通电的顺序,电机就会反转。所以可用控制脉冲数量、频率及电动机各相绕组的通电顺序来控制步进电机的转动
......