mtk

1、

联发科9月在成都校招,笔试题比较简单,看看面试宝典一般没问题,感觉台湾人挺好,待遇也不错。

面试过程相对轻松,问的问题都比较基础,很可惜我答错了一个问题,关于c语言的结构内存对齐的理解一直有问题一直没发现。

同学被问了一个很有意思的问题:有五个函数声明和定义如下:

int f1(void);    f2, f3, f4的声明类似;

void s(int n)

{    if (n == 1)

        return f1();

     else if (n == 2)

        return f2();

     else if (n == 3)

        return f3();

     else if (n == 4)

        return f4();

}

函数s根据不同的参数值调用不同的函数,现在要求不用条件判断重新实现,不能用if,switch。

回来思考了一下,有两种方法,宏和函数指针。宏利用##连接符,函数指针只需定义一个函数指针数组指向4个函数即可。


2、

MTK深圳公司嵌入式软件工程师笔试题

http://mianshi.fenzhi.com/post/1726.html

http://www.fenzhi.com/gsm34118.html

2011 - 08 - 09 更新

//1*****************************************
#define pi 3.14
#define Area(R) pi*R*R
main()
{
int r1=5,r2=2;
double s=0;
s=Area(r1-r2);
printf(“The area is %f”,s);
}
//求结果
//2*********************************************
//函数 int compare(int a,int b),定义为该函数的函数指针P:为_______________
//3*********************************************
#include
void sub(char*s,int num)
{
int i ,j=num;
char t;
while(j–>1)
{
for(i=0;i
{
if(s[i]
{
t=s[i];
s[i]=s[i+1];
s[i+1]=t;
}
}
}
}
main()
{
char*s="CEAeded";
sub(s,6);
printf("%s\n",s)
}
//求结果
//4**********************************************
//交换两个变量的值,不使用第三个变量,即a=3,b=5交换
//后b=3,a=5
unsigned char a=3,b=5;

//5**************************************************
#define N 100
void GetMemory1(char*p)
{
p=(char*)malloc(sizeof(char)*N);
strcpy(p,"Have a good day!");
}
char*GetMemory2(void)
{
char p[]="Have a good day!";
return p;
}
void main(void)
{
char*str1=NULL,*str2=NULL;
GetMemory1(str1);
GetMemory2(str2);
printf("\nstr1:%s",str1);
printf("\nstr2:%s",str2);

//6******************************************************
//构造N个结点的单链表返回链表头指针,要求链表中各结点顺序
//与结点数据输入顺序相反,例如输入1,2,3,4,5,形成的链表为
//head->5 4 3 2 1 ,补充程序
#define N 10
typedef struct Node
{
int data;
struct Node*next;
}NODE;
int Get_Data(int i);//定义省略
Node*Create_u()
{
int i;
NODE*p,*Head=NULL;
for(i=0;i
{
VP=New NODE;
P->Data=Get_Data(i);
________________;
________________;
}
return Head;
}
//7**********************************************
//N个结点链表,每个结点中存放一个字符,判断链表存放的字符是否
//中心对称,即a b c c b a或a b c b a,补充程序
typedef struct Node
{
int data;
struct Node*next;
}NODE;
bool Is_symmeic(NODE*head,*int n)
{
char D[N];
int i,d;
__________;
for(i=0;i
{
D[i]=head->data;
head=head->next;
}
if(__________)
{
head=head->next;
}
while(head)
{
_______________;
if(D[i]!=head->data)
{
return false;
}
head=head->next;
}
return true;
}
//8*************************************
//str中只含有大写和小写字母函数change_move(char*str)将字符串中大写改成*并
//移到前面小写后返回*的个数
//如AabBdcYY改为*****abd,返回5
int chang_move(char*str)
{
int len,i,curstr=-1;
len=strlen(str);
for(i=len-1;i>=0;i–)
{
if(str[i]>=’A'&&str[i]<='Z')
{
str[i]='*';
if(cursor==-1)
{
cursor=i;
}
else if(cursor>i)
{
_____________;
str[i]=’*';
_____________;

}
}
return____________;
}
//9***********************************************
//求两个字符串的第一个公共子串,并返回该子串
//如:”a b c d e f g e h i” “a a c d e f * * g e h i”
//第一个为”c d e f”;不许用strcmp()
char*Maxf(char*str1,char*str2)
{
}


3、

联发科的C语言笔试题,请教高手
int sum=0;
int a[][4]={1,2,3,5,8,13,21,34,56};
int (*ptr)[4]=a;
sum=(*ptr)[1]+a[0][3]+a[1][2];
ptr++;
sum+=(*ptr)[2];
问sum最后为多少?


cnt=0;
const char *pc = "olympics 2008!";
while(*(++pc))
{ cnt++;}
问cnt 最后为多少?


4、

好久没来,给大家也做做贡献

给定一个整数N,求N!中有几个0,编程实现

不是太难吧!哈哈

转自:http://topic.csdn.net/u/20110915/11/dbc28cd0-abf5-463b-8e34-b8ef59e9aaf6.html

求0的个数方法之一-------------------

我看很多人都是用字符串来做!感觉不好!(初学C,个人认为)我也用个笨方法求出有几个零!手机打的,电脑没网!将思想代码写出(重在参与吧!方法决对正确,就是不知道效率怎么样!我感觉很快,哈哈)
LEN=10万;//假想N!的结果有10万位够大吧!
m为N!的值z为零的个数
用个FOR循环就可解决了
for(int i = 1;i<LEN;++i)
{
  if(m == 0)
  z++;
 m=(int)m/10;//将高位降一位,比如十位降为个位  
  if(m<1)//判断现在的m值是否小于1
  break;
}
z就是N!中零的个数

5、百度文库

mtk




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值