10月21号moto的笔试是在我们学校举行的,120分钟的笔试时间,试题内容大致涵盖了c/c++,数据库,数字通信,IQ等方面。我自我感觉做的很顺利,至少两道编程题我都搞定了。一个多小时就把试题做完了,于是,我就把一些试题偷偷抄到了草稿纸上,回去和大家一齐分享。下面就是我抄回来的试题:
1。打印如下图案,共19行,只能有一个for循环(程序已经提供)
*
***
*****
*******
*********
***********
*************
***************
*****************
*******************
*****************
***************
*************
***********
*********
*******
*****
***
*
for(i=0;i<19;i++)
{
}
在网上搜寻了些解答,如下:
1.#include<iostream>
#include<iomanip>
#include<string>
using namespace std;
int main()
{
int a[2]={-1,1};
string str="*******************";
int i=0,j=9,t=1;
for(i=0;i<19;++i)
{
j+=a[i<10];
if(i!=0)t=t+a[i<10]*2;
cout<<setw(j)<<right<<str.substr(0,t)<<endl;
}
return 0;
}
2.
#include<stdio.h>
#include<string.h>
int main()
{
char * tempStr = "*******************";
char * blank = " ";
int i = 0;
char * dataStr [20];
char blankstr[10];
for ( i=0; i<19; i++)
{
memset(dataStr, 0, 20);
memset(blankstr,0,10);
if (i<10)
{
memcpy(blankstr,blank,9-i);
memcpy(dataStr, tempStr, (i+1)*2-1);
}
else
{
memcpy(blankstr,blank,i-9);
memcpy(dataStr, tempStr, (19-i)*2-1);
}
printf("%s",blankstr);
printf("%s\n", dataStr);
}
return 0;
}
3。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXSIZE 19
void main()
{
int i,k;
char ch;
char format[30],stars[30],tmp[3];
ch = '*';
strcpy(stars,"");
for(i=0; i<MAXSIZE; i++)
{
if(i <= MAXSIZE/2)
{
k = (MAXSIZE + 1)/2 - i;
strcpy(format,"%");
itoa(k,tmp,10);
strcat(format,tmp);
strcat(format,"c");
if(i>0)
{
strcat(stars,"**");
strcat(format,stars);
}
printf(format,ch);
printf("\n");
}
else
{
k = i + 2 - (MAXSIZE + 1)/2;
strcpy(format,"%");
itoa(k,tmp,10);
strcat(format,tmp);
strcat(format,"c");
stars[MAXSIZE -1 -(2*(i+1) - MAXSIZE -1)] = 0;
strcat(format,stars);
printf(format,ch);
printf("\n");
}
}
//getchar();
//getchar();
}
注:printf格式%mc表示输入字符宽度为m位,左边补空格.
4。
有高人发的回帖:
#include<iostream.h>
int main(int argv,int * argc[])
{
for(int i=0;i<19;i++)
{
static char cc[19] = {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '};
//19个空格
static const int j = 19 / 2; //j值为9
static int count = 0; //count为离中间元素的距离
if( i < ( 19 / 2 + 1))
{
cc[j - count] = '*';
cc[j + count] = '*';
cout << cc << endl;
count++;
}
else
{
count--;
cc[j - count] = ' ';
cc[j + count] = ' ';
cout << cc << endl;
}
}
return 0;
}
一看就知差距,我的晦涩难懂
我想用两个数组,一个存放空格数量,一个存放'*'
但是下面这个程序只用了一个数组,把每一行输出的形状存到数组中,妙!我咋就没想到?!
2.
void fun(int x)
{
if(x/2>0)fun(x/2);
printf("%d",x);
}
求fun(10)的输出结果 //12510,一个递归,很简单的
3。
#define f1(n) (n)*(n)
int i=5;
int k=0;
k=f1(i++);
printf("%d %d",i,k);
输出结果: :// 7 25,++放后面是后算的
4。下面那个for循环是无限循环
for(int i=010;i==10;i+=0) //这个明显不是,010等于8,8 != 10,一判断就出去了
for(int i=10;(i++^--i)==0;i+=0) //无限循环
还有几个忘了
5.Email relay 和Email access分别用了什么协议?(其他还有很多,略)
SMTP,POP3
注: SMTP:Simple MAIL Transfer Protocol,简单邮件传输协议,互联网上的电子邮件发送就是使用这个协议。SMTP open relay host:开放的SMTP中继主机——它很可能被恶意的人利用,来产生大量垃圾邮件.
POP3协议允许客户机通过(临时的或永久的)TCP/IP连接或其他网络协议的连接,从一个服务器(这时就称为POP3服务器)上获取电子邮件(E-MAIL),POP3不负责发送邮件.
6。in a mobile phone,软件运行期,stack data 存在于
a.rom,b.flash c.eeprom d.ram e.none of the above
答:D.ram。这题稍微涉及到一点硬件知识,ROM的全称是Read Only Memory,即只读存储器,flash ,eeprom都是ROM家族的一员,RAM是Random Access Memory的简称,意为随机存取存储器,也就是内存了。不管是堆还是栈都是放在内存里的。
7.
int i;
int x=0x12345678;
unsigned char *p=(unsigned char *)&x;
for(i=0;i<sizeof(x);i++)
printf("%2x",*(p+i));
在80x86pc机器上运行结果
Sun Sparc Unix上运行结果
80x86系列机的堆栈的伸展方向是从高地址向低地址.堆栈操作都是字操作.数据入栈16位,高字节在前,低字节在后(即先压入高字节).出栈时,低字节在前,高字节在后(即低字节先出).低字节占低地址,高字节占高地址.
Intel x86全部为little-endian字节顺序,即低字节的寄存器占用低内存地址线.
Sun Sparc Unix为big-endian字节顺序,即低字节寄存器占用高内存地址线.
x在PC机上的内存存放顺序为78 56 34 12,高字节在前,低字节在后,因此输出78563412
Sun Sparc Unix上输出12345678
8.
char a[2][2][3]={{{1,6,3},{5,4,15}},{{3,5,33},{23,12,7}} };
for(int i=0;i<12;i++)
printf("%d ",_______); //a[i/6][((i>=6 ? (i-6):i)+2)/5][i%3]); 或者:*(*(*(a+i/6)+(i/3%2))+i%3) *((char *)a + i)
//*(**a + i)
空格处填上合适的语句,顺序打印出a中的数字
9。void fun(char *a,char *b)
{
a=b;
(*a)++;
}
void main()
{
char s1='A',s2='b';
char *p1=&s1;
char *p2=&s2;
fun(p1,p2);
printf("%c%c",s1,s2);
输出结果: // Ac吧,这个比较简单
10。写一个strstr()函数
考完出来,我是很有信心能进入面试的,等了几天,陆续有人收到通知,我却没有。我的信心大受打击,怎么可能呢!?后来了解到,moto的笔试25道选择题做对19道才能参加面试,后面的题目基本不看。回想下,我后面填空和大题做的不错可是选择题确实做的不咋的( 郁闷啊,给宿舍的同学鄙视了:你的水平也不行啊~~~)
这个时候我开始感觉有点压力了,有点危机感了