搜索
您的当前位置:首页正文

联发科技笔试题

来源:榕意旅游网
1.已知a为[0,f]之间的16进制整数,n为a的个数,编写程序求出表达式:

a+aa+aaa+……+a^^^a;其中最后一项有n个a;

int Sum(int a,int n);/*函数声明*/这一题我用的是递归方法,因为Sum(a,n)=Sum(a,n-1)+a^^^a;(n个a);令T=0;则,for(i=0;iint Sum (int a,int n) {

if(n==1) {

return a; } else {

return ((Sum (a,n-1)+1)*a); } }

2求链表的节点个数;结构如下:typedef struct Link { int data; struct Link *next;

}Link;其中链表可能有环,既尾指针不一定为NULL;

答:

int Count(Link *Head); /*函数声明*/ {

int count=0; Link *p = Head->next; if(p == NULL) {

return count; } else {

while(p!=NULL&&P!= Head) {

count++; p=p->next; } }

return count; }

5)不利用库函数,编写一个函数将一个正整数转化为字符串!(应该是将10进制整数转化为字符串) 答:

void trans(const int a,char * &str) 0’面上有23个硬币,其中10个正面朝上,此刻要将你眼睛蒙住,将这些硬币分为两组,(假设硬币的正反面手指是摸不出来的),要求每组中正面朝上的硬币数量相同。请你用最好的方式进行分组。

答案:分2堆,一堆10个,一堆13个,然后把10个的那堆翻过来 和B两个人在一月份第一次去健身房时熟悉,A在一月份第一个礼拜的礼拜一去了健身房,然后每隔四天去一次(即第五天去),而B每隔三天去一次(即第四天去)。一月份A和B只相遇了一次,即第一次熟悉的那天。请问,A和B是在一月份31天中的哪天熟悉的? 答案2:健身俱乐部依照(1a)和(2a),利兹第一次去健身俱乐部的日子必然是以下二者之一:

(A)肯第一次去健身俱乐部那天的第二天。 (B)肯第一次去健身俱乐部那天前六天。

若是(A)是实际情形,那么依照(1b)和(2b),肯和利兹第二次去健身俱乐部即是在同一天,而且在20 天后又是同一天去健身俱乐部。依照(3),他们再次都去健身俱乐部的那天必需是在二月份。可是,肯和利兹第一次去健身俱乐部的日子最晚也只能别离是一月份的第六天和第七天;在这种情形下,他们在一月份必然有两次是同一天去健身俱乐部:1 月11 日和1 月31 日。因此(A)不是实际情形,而(B)是实际情形。

在情形(B)下,一月份的第一个礼拜二不能迟于1 月1 日,不然随后的那个礼拜一将是一月份的第二个礼拜一。因此,利兹是1 月1 日

开始去健身俱乐部的,而肯是1 月7 日开始去的。于是依照(1b)和(2b),他二人在一月份去健身俱乐部的日期别离为:利兹:1 日,5 日,9 日,13 日,17 日,21 日,25 日,29 日;肯:7 日,12 日,17 日,22 日,27 日。因此,依照(3),肯和利兹相遇于1 月17 日 4(1986年加拿大数学竞赛题)有一种体育竞赛共含M个项目,有运动员A、B、C参加,在每一个项目中,第一、二、三名别离得p1、p2、p3分,其中p1、p2、p3为正整数且p1>p2>p3,最后A得22分,B与C均得9分,B在百米赛中取得第一,求M的值,并问在跳高中谁取得第二名?

分析考虑三个得的总分,有方程: M(p1+p2+p3)=22+9+9=40, ① 又 p1+p2+p3≥1+2+3=6, ② ∴6M≤M(p1+p2+p3)=40,从而M≤6.

由题设知至少有百米和跳高两个项目,从而M≥2, 又M|40,因此M可取2、4、5.

考虑M=2,那么只有跳高和百米,而B百米第一,但总分仅9分,故必有:9≥p1+p3,∴≤8,如此A不可能得22分.

若M=4,由B可知:9≥p1+3p3,又p3≥1,因此p1≤6,若p1≤5,那么四项最多得20分,A就不可能得22分,故p1=6. ∵4(p1+p2+p3)=40,∴p2+p3=4.

故有:p2=3,p3=1,A最多得三个第一,一个第二,一共得分3×6+3=21<22,矛盾.

若M=5,这时由5(p1+p2+p3)=40,得: p1+p2+p3=8.若p3≥2,那么: p1+p2+p3≥4+3+2=9,矛盾,故p3=1.

又p1必需大于或等于5,不然,A五次最高只能得20分,与题设矛盾,因此p1≥5.

若p1≥6,那么p2+p3≤2,这也与题设矛盾,∴p1=5,p2+p3=3,即p2=2,p3=1. A=22=4×5+2.

故A得了四个第一,一个第二; B=9=5+4×1,

故B得了一个第一,四个第三; C=9=4×2+1,

故C得了四个第二,一个第三.

4.对一个英文句子加密。要求句子中的字母用该字母在26位字母表后的第三个字母来代替,例如def,在加密后显示为ghi。如为其他字符那么不变。请写出具体分析进程及程序实现代码。(写出流程图也有部份加分)

答:(1)判定输入字符ch是不是是字母,大写仍是小写?(A-Z)或(a-z);

(2)若是是其他字母,维持不变; (3)若是是字母,那么将ch += 3,输出ch。 void Encrypt(char a[],int n,char b[])

{

for(int i=0;iif(a[i]<='z'&&a[i]>='a') 用程序来实现一个复数类Complex,要包括.h和.cpp文件。Complex类要能实现以下功能: Complex comp1(2,3); Complex comp2(comp1); Complex comp3(3,4); comp1+comp3; comp1=comp3;

printf(“comp1==comp3:%s”,comp1==comp3?true:false); printf(“comp2==comp3:%s”,comp2==comp3?true:false);

答:由功能看是要考查类的构造函数、拷贝构造函数和运算符重载等知识点。要紧代码如下: Complex()

#ifndef COMPLEX_H #define COMPLEX_H class Complex { public: Complex(); // 无参数构造函数 Complex(float r, float i); // 有参数构造函数 Complex(Complex &cpx); Complex operator +(Complex c2); bool operator ==(Complex c2); private: #include \"\" Complex::Complex() // 无参数构造函数 { } Complex::Complex(float r, float i) // 有参数构造函数 { real = r; imag = i; } Complex::Complex(Complex &cpx) // 拷贝构造函数,其实默认拷贝构造函数已经满足要求 { real = ; imag = ; } Complex Complex::operator +(Complex c2) real = ; imag = ; 1-3+5……+101的值,以下为实现代码,请补全: void main() {

int i,s,t=1;

for(i=1;i<=101;i++) { s=s+i*t;

i=i+1; t=-1*t; }

Printf(“s=%d”,s); return; }

1: 编写两个函数,接口如下:第一个负责把一个ASCII字符串转换为一个带符号整数,第二个函数负责把一个带符号的整数转换为一个ASCII字符串。已知条件:传递给IntToStr函数的缓冲区的长度是能够容纳int整数范围内的数; 传递给StrToInt的字符串只包括数字和‘-’(负号),是一个格式正确的整数值。 (1) int StrToInt (const char* pStr); 解答: #include <> #include \"\" #include<>

int StrToInt (const char* str) 0a3 c证参数的正确传递(同C语言)。 ++编译器依照函数名和参数类型生成内部的函数名,声名原型有助于正确的连接。

以下两种情形能够不要函数声明:

<1> 若是被挪用函数的概念出此刻主调函数之前,能够没必要加以声明。因为编译系统已经先明白了已概念的函数类型,会依照函

数首部提供的信息对函数的挪用作正确性检查。

<2> 若是已在所有函数概念之前,在函数的外部已做了函数声明,那么在各个主挪用函数中没必要对所挪用的函数再作声明。

5:下面函数实现有问题吗?若是有问题,实际运行中挪用下面函数结果正确,并无显现问题,什么缘故?

int Exchange Value(int* pa, int* pb) {

int* pt; const int a; (1) 始化)

B. char* pa = “AAA”; (1) const char* pb = “BBB”; (2) pb = pa; (3)

C. char* pa = “AAA”; (1) char* const pb = “BBB”; (2) char* const pc = (char*) malloc(4); (3) *pb = ‘A’; (4) *(pc+1) = ‘A’;(5) (正确) pb = pa; (6) (错误) D. char* pa; (1)

const char* const pb = ”BBB”; (2) char* const pc; (3) (错误,未初始化) pa = “AAA”;(4) 误

(错误:const常量必需初 pc = pa;(5) 误

8:用变量a给出下面的概念: 举例一个整型数 int a;

(1) 一个指向指针的指针,它指向的指针是指向一个整型数 int**a; (2) 一个有10个整型数的数组 int a[10];

(3) 一个有10个指针的数组,该指针是指向一个整型数int*a[10]; (4) 一个指向有10个整型数组的指针int(*a)[10];

(5) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数 int (*a)(int);

(6) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数 int(*a[10])(int);

9:请编写一个函数,将2个16位有符号数别离放入一个32位有符号数的高16位和低16位,请不要利用函数的返回值传递数据。 答:不利用返回值,就只能用指针了。。 void fun(short a, short b, int *c) {

*c = (a << 16) + b; }

10:下面是一个用来删除单向链表头节点的函数,请找出其中程序的漏洞并加以纠正。

void RemoveHead (node* head) {

free(head); /* Line1 */ head = head->next; /Line2 */ } 答:

void RemoveHead (node* head) {

node*p;

p=head->next;

head->next=p->next; free(p); } 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]; 下程序输出结果是: #include <> int main() {

int cnt = 10; char *p = \"welcome\"; while(*p++) {

cnt++; }

printf(\"%d\\n\ } 答案:17

2.给一个数n(6<=n<=12),概念一个宏,返回一年中第n月份的天数。 答案:

答:#define R(x) (((x-6)*(x-7) == 0) ? (30+x%2) :(31-x%2)) 3.以下程序输出结果是: #include <> int main() {

int a = 0x00001111; int b = 0x00000202; int c; c = a &~b; c |= b;

printf(\"%x\\n\ } 答案:1313

4. 给定一个整数n,a.设定n的第二位; b.取消n的第二位;c.将n的第二位置反。

答案: a: n |= (1<<2)

b: n &= ~(1<<2) c: n^=(1<<2)

5. 编写一个函数void func(int n); 其中(0<=n<=6),该函数依照n的值挪用6个不同的函数。

答案:其实确实是一个函数指针数组的问题. #include <> int f1(int x) { } int f2(int x) { } int f3(int x) { }

int func(int n,int x) {

typedef int (* fpType)(int); return 2*x; return x*x*x; return x*x;

}

fpType fun[] = {f1,f2,f3}; return fun[n-1](x);

int main() { }

printf(\"%d\\n\getchar();

因篇幅问题不能全部显示,请点此查看更多更全内容

Top