C语言笔试题汇总.docx
- 文档编号:8008873
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:44
- 大小:38.32KB
C语言笔试题汇总.docx
《C语言笔试题汇总.docx》由会员分享,可在线阅读,更多相关《C语言笔试题汇总.docx(44页珍藏版)》请在冰豆网上搜索。
C语言笔试题汇总
C语言笔试题10道1
Sizeof与Strlen的区别与联系18
C字节对齐和位域21
C语言笔试题10道
1.下面这段代码的输出是多少(在32位机上).
char*p;//4
char*q[20];//80
char*m[20][20];//1600
int(*n)[10];//4
structMyStruct
{
chardda;
doubledda1;
inttype;
};
MyStructk;//24
printf("%d%d%d%d",sizeof(p),sizeof(q),sizeof(m),sizeof(n),sizeof(k));
2.
(1)
chara[2][2][3]={{{1,6,3},{5,4,15}},{{3,5,33},{23,12,7}}};
for(inti=0;i<12;i++)
printf("%d",___*(**a+i)____);
在空格处填上合适的语句,顺序打印出a中的数字
(2)
char**p,a[16][8];
问:
p=a是否会导致程序在以后出现问题?
为什么?
编译就通不过,p是一个指针的指针,而a是一个2维数组的首地址。
但是*p=a也是错误的。
3.用递归方式,非递归方式写函数将一个字符串反转.
函数原型如下:
char*reverse(char*str);
#include
/*=======================================================
函数名:
reverse()
参数:
str
功能描述:
将一个字符串翻转
返回值:
constchar*
抛出异常:
无
作者:
刘基伟 2007/4/21
=======================================================*/
constchar*reverse(char*str);
intmain()
{
constchar*pch;//用于取得函数的返回值,来输出翻转后的结果
charchArray[]="HelloWorld!
";//存储一个将要翻转的字符串
pch=reverse(chArray);//将字符串chArray翻转
printf("%s\n",pch);//打印字符串chArray
return0;
}
constchar*reverse(char*str)
{
if(str==NULL)
returnNULL;
intnCount=0;//用来统计字符串的大小
intnCount_div;//将字符串的大小折半
constchar*pRemark_begin;//标记字符串的首地址
charchTemp;//用于交换字符串的临时变量
char*pString_begin;//存储交换的头指针
char*pString_end;//存储交换的尾指针
pString_begin=str;
pRemark_begin=str;
while(*str!
='\0')//寻找字符串的结尾
{
str++;
nCount++;
}
pString_end=--str;//退回一个才是字符串的末尾
nCount_div=nCount/2;
while(nCount_div>0)//将字符串翻转
{
chTemp=*pString_begin;
*pString_begin=*pString_end;
*pString_end=chTemp;
pString_begin++;
pString_end--;
nCount_div--;
}
returnpRemark_begin;
}
4.strcpy函数和memcpy函数有什么区别?
它们各自使用时应该注意什么问题?
5.写一个函数将一个链表逆序.
一个单链表,不知道长度,写一个函数快速找到中间节点的位置.
写一个函数找出一个单向链表的倒数第n个节点的指针.(把能想到的最好算法写出).
6.用递归算法判断数组a[N]是否为一个递增数组。
7.
有一个文件(名为a.txt)如下,每行有4项,第一项是他们的名次,
写一个c程序,将五个人的名字打印出来.并按名次排序后将5行数据仍然保存到a.txt中.使文件按名次排列每行.
2,07010188,0711,李镇豪,
1,07010154,0421,陈亦良,
3,07010194,0312,凌瑞松,
4,07010209,0351,罗安祥,
5,07010237,0961,黄世传,
8.写一个函数,判断一个unsignedchar字符有几位是1.
写一个函数判断计算机的字节存储顺序是升序(little-endian)还是降序(big-endian).
9.微软的笔试题.
ImplementastringclassinC++withbasicfunctionalitylikecomparison,concatenation,
inputandoutput.Pleasealsoprovidesometestcasesandusingscenarios(samplecodeofusingthisclass).
PleasedonotuseMFC,STLandotherlibrariesinyourimplementation.
10.有个数组a[100]存放了100个数,这100个数取自1-99,且只有两个相同的数,剩下的98个数不同,
写一个搜索算法找出相同的那个数的值.(注意空间效率时间效率尽可能要低).
这十道题还是能够看出自己的水平如何的.如果你能不假思索地做出这10道题,估计去国外大公司是没有问题了,呵呵.
答案我在整理中,以后陆续发布.................
下面有些题也不错,可以参考.
1.下面的代码输出是什么,为什么?
voidfoo(void)
{
unsignedinta=6;
intb=-20;
(a+b>6)?
puts(">6"):
puts("<=6");//puts为打印函数
}
输出>6.
a+b这里做了隐式的转换,把int转化为unsignedint
编译器就会把b当作一个很大正数
2.b)运行下面的函数会有什么结果?
为什么?
voidfoo(void)
{
charstring[10],str1[10];
inti;
for(i=0;i<10;i++)
{
str1[i]='a';
}
strcpy(string,str1);
printf("%s",string);
}
str1没有结束标志,因此陷入死循环
char*strcpy(char*strDest,constchar*strSrc)
{
if((strDest == NULL) || (strSrc == NULL))
throw"Invalidargument(s)";
char*strDestCopy = strDest;
while((*strDest++ = *strSrc++) !
= '\0');
returnstrDestCopy;
}
由于str1末尾没有'\0’结束标志,所以strcpy不知道拷贝到何时结束.
printf函数,对于输出char*类型,
顺序打印字符串中的字符直到遇到空字符('\0')或已打印了由精度指定的字符数为止.
下面是微软的两道笔试题....
3.ImplementastringclassinC++withbasicfunctionalitylikecomparison,
concatenation,inputandoutput.Pleasealsoprovidesometestcasesandusingscenarios(samplecodeofusingthisclass).
PleasedonotuseMFC,STLandotherlibrariesinyourimplementation.
我的实现方案如下,这道题真地对c++的主要特性都进行了较好地考察.
String.h:
#ifndefSTRING_H
#defineSTRING_H
#include
usingnamespacestd;
classString{
public:
String();
String(intn,charc);
String(constchar*source);
String(constString&s);
//String&operator=(char*s);
String&operator=(constString&s);
~String();
char&operator[](inti){returna[i];}
constchar&operator[](inti)const{returna[i];}//对常量的索引.
String&operator+=(constString&s);
intlength();
friendistream&operator>>(istream&is,String&s);//搞清为什么将>>设置为友元函数的原因.
//friendbooloperator<(constString&left,constString&right);
friendbooloperator>(constString&left,constString&right);//下面三个运算符都没必要设成友元函数,这里是为了简单.
friendbooloperator==(constString&left,constString&right);
friendbooloperator!
=(constString&left,constString&right);
private:
char*a;
intsize;
};
#endif
String.cpp:
#include"String.h"
#include
#include
String:
:
String(){
a=newchar[1];
a[0]='\0';
size=0;
}
String:
:
String(intn,charc){
a=newchar[n+1];
memset(a,c,n);
a[n]='\0';
size=n;
}
String:
:
String(constchar*source){
if(source==NULL){
a=newchar[1];
a[0]='\0';
size=0;
}
else
{size=strlen(source);
a=newchar[size+1];
strcpy(a,source);
}
}
String:
:
String(constString&s){
size=strlen(s.a);//可以访问私有变量.
a=newchar[size+1];
//if(a==NULL)
strcpy(a,s.a);
}
String&String:
:
operator=(constString&s){
if(this==&s)
return*this;
else
{
delete[]a;
size=strlen(s.a);
a=newchar[size+1];
strcpy(a,s.a);
return*this;
}
}
String:
:
~String(){
delete[]a;//
}
String&String:
:
operator+=(constString&s){
intj=strlen(a);
intsize=j+strlen(s.a);
char*tmp=newchar[size+1];
strcpy(tmp,a);
strcpy(tmp+j,s.a);
delete[]a;
a=tmp;
return*this;
}
intString:
:
length(){
returnstrlen(a);
}
main.cpp:
#include
#include"String.h"
usingnamespacestd;
booloperator==(constString&left,constString&right)
{
inta=strcmp(left.a,right.a);
if(a==0)
returntrue;
else
returnfalse;
}
booloperator!
=(constString&left,constString&right)
{
return!
(left==right);
}
ostream&operator<<(ostream&os,String&s){
intlength=s.length();
for(inti=0;i //os< os< returnos; } Stringoperator+(constString&a,constString&b){ Stringtemp; temp=a; temp+=b; returntemp; } booloperator<(constString&left,constString&right){ intj=0; while((left[j]! ='\0')&&(right[j]! ='\0')){ if(left[j] returntrue; else { if(left[j]==right[j]){ j++; continue; } else returnfalse; } } if((left[j]=='\0')&&(right[j]! ='\0')) returntrue; else returnfalse; } booloperator>(constString&left,constString&right) {inta=strcmp(left.a,right.a); if(a>0) returntrue; else returnfalse; } istream&operator>>(istream&is,String&s){ delete[]s.a; s.a=newchar[20]; intm=20; charc; inti=0; while(is.get(c)&&isspace(c)); if(is){ do{s.a[i]=c; i++; /*if(i>=20){ cout<<"Inputtoomuchcharacters! "< exit(-1); }*/ if(i==m-1){ s.a[i]='\0'; char*b=newchar[m]; strcpy(b,s.a); m=m*2; s.a=newchar[m]; strcpy(s.a,b); delete[]b; } } while(is.get(c)&&! isspace(c)); //如果读到空白,将其放回. if(is) is.unget(); } s.size=i; s.a[i]='\0'; returnis; } intmain(){ Stringa="abcd"; Stringb="www"; //Stringc(6,b);这么写不对. Stringc(6,'l'); Stringd; Stringe=a;//abcd Stringf; cin>>f;//需要输入... Stringg; g=a+b;//abcdwww if(a cout<<"a else
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 笔试 汇总