思科笔试-嵌入式底层C
2012-10-22 22:05
274 查看
1. 用宏定义写出swap(x,y)(考宏的使用吧,嵌入式系统中宏的使用还是很多的,特别是对I/O口的命名时,有时还是有点小复杂)
a=2,b=3
a=3,b=2
a=2,b=3
a=3,b=2
2.数组a
,存放了1至N-1个数,其中某个数重复一次。写一个函数,找出被重复的数字.时间复杂度必须为o(N)函数原型:int do_dup(int a[],int N)
Result:
9
ps:个人觉得题意有点坑~~~
3 一语句实现x是否为2的若干次幂的判断
ture
4.unsigned int intvert(unsigned int x,int p,int n);
实现对x的进行转换,p为起始转化位,n为需要转换的长度,假设起始点在右边.如x=0b0001 0001,p=4,n=3转换后x=0b0110 0001.(这个对寄存器的操作~~~)
number: 197 00000000000000000000000011000101
number: 58 00000000000000000000000000111010
#include "stdio.h" #define SWAP1(x,y) {x=x+y;y=x-y;x=x-y;} #define SWAP2(x,y) {x^=y^=x^=y;} #define SWAP3(t,x,y){t temp;temp=x;x=y;y=temp;} int main(int argc, char const *argv[]) { int a=2,b=3; printf("a=%d,b=%d\n",a,b ); SWAP1(a,b); printf("a=%d,b=%d\n",a,b ); SWAP2(a,b); printf("a=%d,b=%d\n",a,b ); SWAP3(int,a,b); printf("a=%d,b=%d\n",a,b ); return 0; }Result:
a=2,b=3
a=3,b=2
a=2,b=3
a=3,b=2
2.数组a
,存放了1至N-1个数,其中某个数重复一次。写一个函数,找出被重复的数字.时间复杂度必须为o(N)函数原型:int do_dup(int a[],int N)
/* 数组a ,存放了1至N-1个数,其中某个数重复一次。写一个函数,找出被重复的数字. 时间复杂度必须为o(N)函数原型:int do_dup(int a[],int n); */ #include "stdio.h" int do_dup(int a[],int N); int main(int argc, char const *argv[]) { const int N=100; int a ; a[N-1]=9; //测试用,分辨函数与你的位置无关 for (int i = 0; i < N-1; i++) { a[i]=i+1; } printf("%d \n",do_dup(a,N) ); return 0; } int do_dup(int a[],int N) { int sum=0; float sum2; for (int i = 0; i < N; i++) { sum+=a[i]; } sum2=(1.0+N-1)*(N-1)/2; return (int)(sum-sum2); }
Result:
9
ps:个人觉得题意有点坑~~~
3 一语句实现x是否为2的若干次幂的判断
#include "stdio.h" int main(void) { int b=16; printf("%s\n",(b&(b-1)?"false":"ture") ); return 0; }Result:
ture
4.unsigned int intvert(unsigned int x,int p,int n);
实现对x的进行转换,p为起始转化位,n为需要转换的长度,假设起始点在右边.如x=0b0001 0001,p=4,n=3转换后x=0b0110 0001.(这个对寄存器的操作~~~)
#include "stdio.h" unsigned int intvert(unsigned int x,int p,int n); void printB(int i); int main(void) { int b=0b11000101; printB(b); printB(intvert(b,0,8));//all invert return 0; } unsigned int intvert(unsigned int x,int p,int n) { return x^=(((1<<n)-1)<<p);//(1<<n)-1 to get n 1 is so smart. } /*打印二进制位的函数*/ void printB(int i) { printf("number:%4d " ,i); int a; for( a = 31; a >=0; a--) { int k = (i >>a) &1; //有些符号位可能会是1 printf("%d" ,k); } printf("\n"); }Result:
number: 197 00000000000000000000000011000101
number: 58 00000000000000000000000000111010
相关文章推荐
- [导入]思科笔试-嵌入式底层C
- C语言笔试题的一些小探讨[2011年,硕士计算机相关职位笔试题 底层开发 嵌入式 FPGA等]
- 嵌入式软件开发笔试
- Sundy嵌入式底层开发课程笔记6 --网络配置管理
- 一份基础的嵌入式Linux工程师笔试题
- Sundy嵌入式底层课程-13年
- 凹凸笔试题目(嵌入式软件开发)
- 嵌入式常见经典笔试题
- 嵌入式C开发人员的最好的0x10道笔试题
- 嵌入式和驱动开发面试笔试题搜集整理
- 经典16道:嵌入式C语言笔试题
- 嵌入式笔试题
- 汇顶 笔试 一面 二面 软件开发工程师-嵌入式软件开发
- 嵌入式软件笔试题
- 嵌入式笔试面试题(6)---排序及查找
- 嵌入式笔试题
- 嵌入式软件笔试题 (c语言版)
- Sundy嵌入式底层开发课程笔记 --APT命令
- [置顶] 华为笔试-嵌入式开发(一)
- Sundy嵌入式底层开发课程笔记 --Vi的设计思想及使用