还是记录下找工的这些笔试题吧~
从CVT开始
我报的是嵌入式软件技术支持工程师,一共8大题,最后两个非技术类(一个如何组织部门看电影,一个是随便写写)。
1.找程序错误,打印0~1000素数的一个程序。
2.写程序结果,大概程序是这样的:
int sum( int a )
{
auto int c = 0;
static int b = 2;
c += 1;
b += 3;
return ( a + b + c );
}
int main( int argc, char ** argv )
{
int a = 2;
for( int i=0; i < 5; i++ )
cout << sum(a) << ",";
return 0;
}
解:这题我做错了,因为不懂auto和static是什么意思,囧~上网查了下资料~
auto的含义是有程序自动控制变量的生存周期,通常指的就是变量进入其作用域的时候被分配,离开其作用域时候被释放;static变量在程序初始化时被分配,知道程序退出前才被释放。自己做题时也想了不可能是88888,但是一看每次对bc都进行了定义,我就以为是程序的陷阱。后来调试时发现,在后来几次调用sum时,根本都不会执行static int b = 2,只在第一次执行。失败,觉得最简单的一道题~
3.英文题目,貌似考一点英文语法,这就不记得了,只知道跟斐波那契数列有关。
4.long型数,用二进制、八进制、十六进制分别打印出来,用putchar函数。
解:这题大概思路:对于C语言来说,一个整数在计算机内就是以二进制的形式存储的,所以没有必要再将一个整数经过一系列的运算转换为二进制形式,只要将整数在内存中的二进制表示输出即可。可惜我没做出来。程序:
#include <cstdlib>
#include <iostream>
using namespace std;
#define BITS 32
void main()
{
long x ;
char a[ BITS ];
char b;
cout << " Please input the decimal long : " << endl;
cin >> x;
cout << " binary is : " << endl;
for ( int i = BITS; i >0 ; i -- )
{
a[BITS - i] = '0' + (((x & 1<<(i-1)) ) >> (i-1)) ;
//putchar( '0' + (((x & 1<<(i-1)) ) >> (i-1)) );
}
int flag = 0; // do not output num until first 1;
for( int j = 0; j < BITS; j ++ )
{
if ( a[j] != '0')
{
flag = 1;
}
if ( flag )
{
cout << a[j];
}
}
cout << endl;
}
5.回文数,2个2位整数相乘能求得的最大的是91*99=9009,求2个3位整数相乘能求得最大的回文数。
解:自己用的暴力法,一个个算,还不知道对不对。
6.求6*6田字格从左上角到右下角的路径总数,只能向下向右。
解: