与C相关的笔试题目.docx
《与C相关的笔试题目.docx》由会员分享,可在线阅读,更多相关《与C相关的笔试题目.docx(18页珍藏版)》请在冰豆网上搜索。
与C相关的笔试题目
与C相关的笔试题目
C的知识大家知道多少呢?
下面是小编整理的与C相关的题目,欢迎参考。
C目及答案
1.已知strcpy的函数原型:
char*strcpy(char*strDest,constchar*strSrc)其中strDest是目的字符串,strSrc是源字符串。
不调用C++/C的字符串库函数,请编写函数strcpy。
答案:
/*
编写strcpy函数(10分)
已知strcpy函数的原型是
char*strcpy(char*strDest,constchar*strSrc);
其中strDest是目的字符串,strSrc是源字符串。
(1)不调用C++/C的字符串库函数,请编写函数strcpy
(2)strcpy能把strSrc的内容复制到strDest,为什么还要char*类型的返回值?
答:
为了实现链式表达式。
//2分
例如intlength=strlen(strcpy(strDest,helloworld));
*/
#include
#include
char*strcpy(char*strDest,constchar*strSrc)
{
assert((strDest!
=NULL)(strSrc!
=NULL));//2分
char*address=strDest;//2分
while((*strDest++=*strSrc++)!
=\0)//2分
NULL;
returnaddress;//2分
}
另外strlen函数如下:
#include
#include
intstrlen(constchar*str)//输入参数const
{
assert(str!
=NULL);//断言字符串地址非0
intlen=0;
while((*str++)!
=\0)
{
len++;
}
returnlen;
}
2.已知String类定义如下:
classString
{
public:
String(constchar*str=NULL);//通用构造函数
String(constStringanother);//拷贝构造函数
~String();//析构函数
Stringoperater=(constStringrhs);//赋值函数
private:
char*m_data;//用于保存字符串
};
尝试写出类的成员函数实现。
答案:
String:
:
String(constchar*str)
{
if(str==NULL)//strlen在参数为NULL时会抛异常才会有这步判断
{
m_data=newchar[1];
m_data[0]=\0
}
else
{
m_data=newchar[strlen(str)+1];
strcpy(m_data,str);
}
}
String:
:
String(constStringanother)
{
m_data=newchar[strlen(another.m_data)+1];
strcpy(m_data,other.m_data);
}
StringString:
:
operator=(constStringrhs)
{
if(this==rhs)
return*this;
delete[]m_data;//删除原来的数据,新开一块内存
m_data=newchar[strlen(rhs.m_data)+1];
strcpy(m_data,rhs.m_data);
return*this;
}
String:
:
~String()
{
delete[]m_data;
}
3..h头文件中的ifndef/define/endif的作用?
答:
防止该头文件被重复引用。
4.#include与#includefile.h的区别?
答:
前者是从StandardLibrary的路径寻找和引用file.h,而后者是从当前工作路径搜寻并引用file.h。
5.在C++程序中调用被C编译器编译后的函数,为什么要加externC?
首先,作为extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。
通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。
例如,如果模块B欲引用该模块A中定义的全局变量和函数时只需包含模块A的头文件即可。
这样,模块B中调用模块A中的函数时,在编译阶段,模块B虽然找不到该函数,但是并不会报错;它会在连接阶段中从模块A编译生成的目标代码中找到此函数
externC是连接申明(linkagedeclaration),被externC修饰的变量和函数是按照C语言方式编译和连接的。
C++笔试题目及答案
1.WhatsoverloadfunctioninC++?
重载是指编写一个与已有函数同名但参数表不同的函数。
构成重载的条件是:
在相同的范围内(比如说在同一个类中),函数名字相同,但函数参数不同(要么参数类型不同,要么参数个数不同,要么两者都不同)
2.A.WhatsinlinefunctioninC++?
内联函数是指嵌入代码,就是在调用函数的地方不是跳转,而是直接把代码写到那里去。
它与普通函数相比能提高效率,因为它不需要中断调用,在编译的时候内联函数可以直接把代码镶嵌到目标代码中去,省去了函数调用的开销,但是它是以代码膨胀为代码的(以增加空间消耗为代价)
B.Whenwouldyouuseinlinefunction?
(1)一个函数不断的被重复调用
(2)函数只有简单的几行,且函数内部包含:
for,while,switch语句。
C.Pleasewritesamplecode.
voidFoo(intx,inty);
inlinevoidFoo(intx,inty){...}
需要注意的是:
关键字inline必须与函数定义体放在一起才能使函数构成内联,仅将inline放在函数声明前不起任何作用。
3.Whichofthefollowingarelegal?
Forthoseusagesthatareillegal,explainwhy.
constintbuf;
不合法。
因为定义const变量(常量)时必须进行初始化,而buf没有初始化。
intcnt=0;
constintsz=cnt;
合法。
cnt++;sz++;
不合法。
因为修改了const变量sz的值。
4.PleasepointouttheerrorsinthefollowingC++code.Andwhy?
switch(ival)
{
case1,3,5,7,9:
oddcnt++;
break;
case2,4,6,8,10:
evencnt++;
break;
}
貌似case不能把所有的情况并列列出来,没见过case1,3,5,7,9:
这种写法,改为case1:
oddcnt++;case3:
oddcnt++;
C#笔试题目及答案
1.c#中错误处理机制有哪些
CLR提供的结构化错误处理机制,用try..catch..finally捕获
2.public/protect/private/internal修饰符的区别
public:
任何类和成员都可以访问
protect:
该类和派生类能访问
private:
只能该类访问
internal:
只能在包含它的程序集中访问
3.大量数据(如3000万条数据)并发处理时,有哪几种机制
存储过程或事务.取得最大标识的时候同时更新,注意主键不是自增量方式.这种方法并发的时候是不会重复主键的,
取得最大标识要有一个存储过程来获取.
4.String/StringBuilder的异同
string是一个不可变的数据类型,一旦对字符串对象进行了初始化,该字符串对象就不能改变了。
修改字符串内容的方法
和运算符实际上是创建一个新的字符串.
stringbuilder分配好内存,对字符串的修改就在赋予stringbuilder实例的存储单元中进行.
举例:
string的确是不能修改的:
stringstr=a
str=b//str是被赋值了b没错,但是str里面原来的string值a并没有被修改。
stringstr=a
stringstr1=str;
str+=b//此时str=ab,str1=a
StringBuilderstr=newStringBuilder(a);
StringBuilderstr1=str;
str.Append(b);
str.ToString()和str1.ToString()都是ab。
5.解释stringstr=null/stringstr=
str=null,声明而不分内存空间,str=声明而分内存空间
6.什么是单例模式,写个运用单例模式的类
Singleton模式包含的角色只有一个,就是Singleton。
Singleton拥有一个私有构造函数,确保用户无法通过new直接
实例它
//Singletonpattern--Structuralexample
usingSystem;
//Singleton
classSingleton
{
//Fields
privatestaticSingletoninstance;
//Constructor
protectedSingleton(){}
//Methods
publicstaticSingletonInstance()
{
//UsesLazyinitialization
if(instance==null)
instance=newSingleton();
returninstance;
}
}
/**////
///Clienttest
///
publicclassClient
{
publicstaticvoidMain()
{
//Constructorisprotected--cannotusenew
Singletons1=Singleton.Instance();
Singletons2=Singleton.Instance();
if(s1==s2)
Console.WriteLine(Thesameinstance);
}
}
7.ASP.NET页面间传递有哪几种方式
QueryString,response.Redirect(),session,server.Transfer
8.解释重载/覆盖
9.WebServices的含义/UDDI的含义
Web服务是利用SOAP在HTTP上执行远程方法调用的一种新方法。
UDDI的含义:
统一描述发现和集成(UDDI)提供一种发布和查找服务描述的方法。
10.虚函数/抽象函数各自的定义
虛函數:
由virtual聲明,它允許在派生類中被重寫,要重寫方法,必須先聲名為virtual
publicclassmyclass
{
publicvirtualintmyint()
{
函數体;
}
}
classmyclass1:
myclass
{
publicoverrideintmyint()
{
函數体1;
}
}
抽象類、抽象函數:
由abstract聲明,在抽象類中可以定義抽象方法,抽象方法基本沒有執行代碼,派生類必須重寫它,提供其執行代碼
publicabstractclassmyclass
{
publicabstractintmyint();
}
publicclassmyclass1:
myclass
{
publicoverrideintmyint()
{
函數体;
}
}