看到网上的中兴这两道面试题,感觉出的还不错的,尝试的解答下:
1)写一个模板函数,交换两个实参的值,并写出对这两个实参有什么要求;
template<class T>
T swap(T ¶m1 ,T ¶m2)
{
T tmp=param1;
Param2=param1;
Param1=tmp;
}
调用的时候,注意交换的实参的类型必须一致,也不知道我对这道题理解有没有问题,呵呵,大家发表下看法吧!
2)第二题是个用SQL语言,写一段程序。要求求出student表,分数在80-90之间有多少人,一共有两问。都是求数据库里满足一定条件的人数。
解法:
假设student表包含3个属性,一个是学号(no),一个姓名(name),一个乘积(score)
如果只要写SQL语句,求分数在80-90之间有多少人,就简单了。如下:
Select *from student where score>80 and score <90
如果要封装成函数,可以使用TSQL语言,也可以直接写一个C语言的函数;下面的函数同时考虑了实现,采用ADO连接数据库,方法如下:
void AdoConn::OnInitADOConn()
{
::CoInitialize(NULL);
try
{
m_pConnection.CreateInstance("ADODB.Connection");
_bstr_t strConnect = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Password=XXX;Initial Catalog=Monitor;Data Source=ip address";
m_pConnection->Open(strConnect,"","",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox(e.Description());
}
}
//获取记录集
_RecordsetPtr& AdoConn GetRecordSet(_bstr_t bstrSQL)
{
try
{
if(m_pConnection==NULL)
OnInitADOConn();
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}
catch(_com_error e)
{
e.Description();
}
return m_pRecordset;
}
其中AdoConn是封装的Ado连接数据库的类;
定义一个类的对象,假设为AdoConn m_AdoConn;
#define MINBUFF 128
Unsigned int getStudentNum(void)
{
_RecordsetPtr m_pRs; //ADO记录集对象
_bstr_t vSQL;
char strSQL[MINBUFF] = {0};
char update_string[MINBUFF]={0};
sprintf_s(strSQL,MINBUFF,"Select No from student Where score >80 and score<90 ");
vSQL=(_bstr_t)strSQL;
m_pRs=m_AdoConn.GetRecordSet(vSQL);
_variant_t var =m_pRs->GetCollect(_variant_t("No"));
unsigned int count =0;
if (var.vt!=NULL)
{
std::string str_value = _bstr_t(var);
count =atoi(str_value.c_str());
}
return count;
}
以上2题都是我的个人解法!