C开发笔试题0813.docx
《C开发笔试题0813.docx》由会员分享,可在线阅读,更多相关《C开发笔试题0813.docx(19页珍藏版)》请在冰豆网上搜索。
C开发笔试题0813
C开发笔试题--20130813
、不定项选择题
1、以下变量的定义,正确的是(CD)
A.int3man;C.inti,*pi;
B.int3man’shoes;D.shortintsi;
注:
标示符规则:
C语言规定必须以字母或下划线_(Underscore)开头,后面可以跟若干个字母、数字、下划线,但不能有其它字符。
避免使用下划线开头
2、对于如下的定义,说法正确的有(A)
int*pb,pc;
A、pb是一个指向整数的指针,pc是一个整数C、这个定义是错的
B、pb和pc都是指向整数的指针D、这个定义是对的,但在编译时会出现告警
3、以下代码的运行结果是(BC)
代码Ⅰ:
unsignedintuiA;
uiA=(0×AB&θ×CD)^(0×EF|θ×AB);
代码Ⅱ:
unsignedintuiB
uiB=θ×AA|(θ×BB<<8)|(θ×CC<<16)|(θ×DD<<24);
A、代码Ⅰ,uiA=θ×77C、代码Ⅱ,uiB=θ×DDCCBBAA
B、代码Ⅰ,uiA=θ×66D、代码Ⅱ,uiB=θ×AABBCCDD
4、以下语句中,能够判断uiNum(unsignedint)可以被8整除的有()
A、If(((uiNum/8)*8)==uiNum)
B、if((uiNum%8)==1)
C、if((uiNum&θ×θ7)==θ)
D、if(((uiNum>>3)<<3)==uiNum)
5.关于以下代码,描述正确的有()
代码Ⅰ:
constchar*pcStr=”abcdefg”;
char*pcStr=”abcdefg”
代码Ⅱ:
voidstring_sizeof(charszStr1[10])
{
charszStr2[10]=”12345”;
{
staticintiCount=1;
iCount=iCount+iInputNum;
Print(“\niCount=%d”,icount+iInputNum);
}
for(i=1;i<3;i++)
{
Fun(i);
}
A.iCount=3B.iCount=4C.iCount=6D.iCount=5
12.关于以下代码,输出结果是()
VoidFun()
{
Inti;
Intx[3][3]={1,2,3,
4,5,6,
7,8,9};
Int*p;
P=&x[1][1];
For(i=0;i<4;i+=2)
Printf(“%d”,p[i]);
}
A.57
B.59
C.13
D.15
13.有如下链表和节点D,将D替换B,并删除B,以下代码正确的有()
单链表:
A
AApstNextpstNext
PstApstB
D
partD
双链表:
pstNextpstNext
C
pstPrepstPre
PstApstB
D
pstD
structSLL
{
structSLL*pstNext;/*下一结点*/
};
structDLL
{
structDLL*pstNext;/*下一结点*/
structDLL*pstPrev;/*前一结点*/
};
A.
pstB=pstB->patNext;
pstD->pstNext=pstB;
pstA->pstNext=pstD;
free(pstB);
B.
pstA->pstNext=pstD;
pstD->pstNext=pstA->pstNext-pstNext;
free(pstB);
C.
pstA->pstNext-pstNext-pstpre=pstD;
pstD->pstNext=pstA->pstNext->pstNext;
pstD->pstpre=pstB->pstpre;
pstA->pstNext=pstB->pstNext-pstpre;
free(pstB);
D.
pstD->pstNext=pstB->pstNext;
pstD->pstNext->pstpre=pstD;
pstD->pstpre=pstA;
pstA->pstNext=pstD;
free(pstB);
1、数据的节点定义如下面的tagData所列,该数据节点有两个索引值,分别是index1和index2,请编写程序,有如下要求:
1)据上下文,由于需要分别以index1和index2索引查找,请建立两个单向链表,分别以index1和index2,索引值唯一,且均为从小到大
2)提供增加节点的函数和删除节点的操作,请注意增加和删除节点的操作均会影响这两个链表。
3)删除操作数据是依据index2删除的
/*节点数据*/
typedefstructtagData
{
intindex1;
intindex2;
intiData;
structtagData*pstNext1;
structtagData*pstNext2;
}NODE_S;
/*Description:
链表初始化*/
voidinit();
/*Description:
加入节点*/
voidadd(intindex1,intindex2,intiData);
/*Description:
删除节点*/
Voiddelete(intindex2);
Code:
#include
usingnamespacestd;
structTagData
{
intnIndex1;
intnIndex2;
intiData;
structTagData*pstNext1;
structTagData*pstNext2;
}NODE_S;
//Init
voidInitTagData()
{
NODE_S.iData=0;
NODE_S.nIndex1=0;
NODE_S.nIndex2=0;
NODE_S.pstNext1=NODE_S.pstNext2=NULL;
}
voidAddTagData(intnIndex1,intnIndex2,intiData)
{
structTagData*psttemp=newstructTagData;
psttemp->iData=iData;
psttemp->nIndex1=nIndex1;
psttemp->nIndex2=nIndex2;
psttemp->pstNext1=NULL;
psttemp->pstNext2=NULL;
structTagData*p=&NODE_S;
while((p->pstNext1)&&((p->pstNext1->nIndex1)p=p->pstNext1;
psttemp->pstNext1=p->pstNext1;
p->pstNext1=psttemp;
p=&NODE_S;
while((p->pstNext2)&&((p->pstNext2->nIndex2)p=p->pstNext2;
psttemp->pstNext2=p->pstNext2;
p->pstNext2=psttemp;
}
voidDeleteTagData(intnIndex2)
{
structTagData*p=&NODE_S;
while(p->pstNext2&&((p->pstNext2->nIndex2)!
=nIndex2))
p=p->pstNext2;
if(!
p->pstNext2)
{
cout<<"无此节点\n";
return;
}
structTagData*temp=p->pstNext2;
p->pstNext2=p->pstNext2->pstNext2;
p=&NODE_S;
while(p->pstNext1&&((p->pstNext1->nIndex2)!
=nIndex2))
p=p->pstNext1;
p->pstNext1=p->pstNext1->pstNext1;
delete(temp);
}
voidshow()
{
structTagData*p=NODE_S.pstNext1;
while(p)
{
cout<iData<<'';
p=p->pstNext1;
}
cout<p=NODE_S.pstNext2;
while(p)
{
cout<iData<<'';
p=p->pstNext2;
}
cout<}
intmain()
{
AddTagData(2,5,7);
AddTagData(3,2,16);
AddTagData(4,3,15);
DeleteTagData
(2);
show();
return0;
}
2、请写冒泡排序算法,a指向数组第一个元素,n为数组长度
voidbubble_sort(int*a,intn)
{
intI,j,key;
for(i=0;i{
for(j=n–1;j>i;j--)
{
if(a[j]>a[j+1])
{
key=a[j];
a[j]=a[j+1];
a[j+1]=key;
}
}
}
}
intmain(void)
{
inti=0;
inta[]={8,4,9,2,7,12};
bubble_sort(a,6);
for(i=0;I<6;++i)
{
printf(“%d”,a[i]);
}
return0;
}
3、五个学生,三门成绩,输入学号,姓名,三门课的成绩。
算出三门课的平均值,连同原始数据一起保存到“stduo”的文件中。
#include
#include
#defineNi5
structStudent
{
charm_id[9];
charm_name[10];
intm_math,m_english,
m_chinese,m_average;
}student[N];
intmain()
{
inti=0;
FILE*fp;
for(i=0;i{
printf("输入学生ID:
");
scanf("%s",student[i].m_id);
printf("输入学生姓名:
");
scanf("%s",student[i].m_name);
printf("输入数学成绩:
");
scanf("%d",&student[i].m_math);
printf("输入学生英语成绩:
");
scanf("%d",&student[i].m_english);
printf("输入学生语文成绩:
");
scanf("%d",&student[i].m_chinese);
student[i].m_average=(student[i].m_math
+student[i].m_english
+student[i].m_chinese)/3;
}
if((fp=fopen("stduo","w"))==NULL)
{
perror("文件打开失败!
");
exit(0);
}
fwrite(student,sizeof(structStudent),N,fp);
fclose(fp);
return0;
}
4、同一花色的扑克牌13张。
将第一张放入最后,抽取最上面的一张,在将最上面的一张放入最后,以此类推。
最后结果是A 2 3 4 5 6 7 8 9 10 j Q k 求原始的牌的顺序。
#include
#include
#definenum13//总的数据个数
#definenext2//每隔几个出圈
intjoseph(intm,intk,inti)
{
if(i==1)
{
return(m+k-1)%m;
}
else{
return(joseph(m-1,k,i-1)+k)%m;
}
}
intmain()
{
inti;
inta[num];
intb[num];
printf("序列出圈数据为:
");
for(i=1;i<=num;i++)
{
a[i-1]=joseph(num,next,i)+1;
printf("%d",a[i-1]);
}
printf("\n牌的原始序列为:
");
for(i=0;i{
b[a[i]-1]=i+1;
}
for(i=0;i{
printf("%d",b[i]);
}
printf("\n");
}
1.双向链表,例如a->b->c->d->e是一个双向链表,链表结构体如下
typedefstructNodeTest{
intdata;
structNodeTest*next;
structNodeTest*pre;
}NodeTest_t;
实现接口:
NodeTest_t*reset(NodeTest_t*node);
功能:
例如:
传入参数为此链表的c成员,则通过该接口把链表重置为c->d->e->a->b,返回新的链表头
2.算税后余额:
0~1500%5
1500~4500%10
4500~800015%
8000~1000020%
10000以上30%
假设一个人工资为9000,
则他应缴纳税那部分金额为9000-3500=5500
则他应缴纳的税收为1500*5%+3000*10%+(5500-4500)*15%=525
则缴纳税后他应发工资8000-525=7475
写接口计算税后余额
doubleCalTax(doublemoney);传入的参数为你扣完社保后的工资
#include"stdio.h"
intmain(){
doubleWage,Tax=0,AfterTaxWages;
printf("Pleaseputinthewage:
\n");
while
(1){
scanf("%lf",&Wage);
if(Wage<0){
printf("Error!
\n");
return0;
}elseif(Wage>0&&Wage<=1500){
Tax=0;
AfterTaxWages=Wage;
}elseif(Wage>1500&&Wage<=2500){
Tax=(Wage-1500)*0.10;
AfterTaxWages=Wage-Tax;
}elseif(Wage>2500&&Wage<=3500){
Tax=(Wage-2500)*0.15;
AfterTaxWages=Wage-Tax;
}elseif(Wage>3500&&Wage<=5000){
Tax=(Wage-3500)*0.20;
AfterTaxWages=Wage-Tax;
}elseif(Wage>5000&&Wage<=10000){
Tax=(Wage-5000)*0.30;
AfterTaxWages=Wage-Tax;
}else{
Tax=(Wage-10000)*0.40;
AfterTaxWages=Wage-Tax;
}
printf("TheTax=%lf\n",Tax);
printf("Theafter-taxwage=%lf\n",AfterTaxWages);
printf("\n\n*******************************************\n\n");
printf("Putinanotherwage:
\n");
}
return0;
}
程序题
1.输入一字符串,统计字母,数字与其他符号的数量
#include
intmain(void)
{
//输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
charch;
intchar_num=0,kongge_num=0,int_num=0,other_num=0;
while((ch=getchar())!
='\n')//回车键结束输入,并且回车符不计入{
if(ch>='a'&&ch<='z'||ch<='z'&&ch>='a')
{
char_num++;
}
elseif(ch=='')
{
kongge_num++;
}
elseif(ch>='0'&&ch<='9')
{
int_num++;
}
else
{
other_num++;
}
}
printf("字母=%d,空格=%d,数字=%d,其它=%d\n",char_num,kongge_num,int_num,other_num);
return0;
}
3.数字转换成字符如数字465转换成字符“465”(题的意思是这样,原题描述没记下来)
解析:
整数转换成字符串,可以采用加‘0’,在逆序的方法,整数加‘0’就会隐性转换成char类型的数
#include
Intmain()
{
Intnum=12345,j=0,i=0;
Chartemp[7],str[7];
While(num)
{
Temp[i]=num%10+’0’;
I++;
Num/=10;
}
Temp[i]=0;
Printf(“temp=%s\n”,temp);
I=i-1;
Printf(“temp=%d\n”,i);
//逆序
While(i>=0)
{
Str[j]=temp[i];
J++;
I--;
}
Str[j]=0;
Printf(“string=%s\n”,str);
Return0;
}
1、给一个结构体(15分)
StructNODE_S{
intdata;
NODE_S*next;
NODE_S*preptr;
}
给一个头指针指向该结构体的节点的链表,写一函数判断该链表是否是双向循环链表。
TypdefstructNODE_SNODE;
intIsDuLinkList(NODE*L)
{
If(L&&L->next==L->preptr==L)
{
printf(“链表是双向循环链表\n”);
Return1;
}
Else
{
Printf(“不是双向循环链表\n”);
Return0;
}
}
2、给一个字符串,写一个函数返回该字符串的最长回文子串的长度,无回文子串则返回0。
(20分)
s[i]='#';
p[i]=0;
}
for(i=0;str[i]!
=0;++i)s[(i+1)<<1]=str[i];
s[(i+1)<<1]=0;
mx=0;
ans=0;
for(i=1;s[i]!
=0;++i)//求解p数组
{
if(mx>i)p[i]=min(mx-i,p[(id<<1)-i]);
elsep[i]=1;
while(s[i-p[i]]==s[i+p[i]])++p[i];
if(i+p[i]>mx)
{
mx=i+p[i];
id=i;
}
if(p[i]-1>ans)ans=p[i]-1;//更新最长回文子串的长度
}
}
intmain()
{
intCase=0;
while(scanf("%s",str)!
=EOF)
{
if(strcmp(str,"END")==0)break;
Manacher();
printf("Case%d:
%d\n",++Case,ans);
}
return0;
}
6、有关霍夫曼树和平衡树的选择题(定义什么的去看看,有个选项说霍夫曼树可应用于编码)
7、有一题关于获取mac地址的函数(题目给出一个函数的实现代码),考的是字符串的东西,还有sprintf函数
(下面是函数中运用sprintf函数的代码:
sprintf(mac,"%02X-%02X-%02X-%02X-%02X-%02X",
Adapter.adapt.adapter_address[0],
Adapter.adapt.adapter_address[1],
Adapter.adapt.adapter_address[2],
Adapter.adapt.adapter_address[3],
Adapter.adapt.adapter_address[4],
Adapter.adapt.adapter_address[5]);)
QStringGetLocalMac()
{
intsock_mac;
structifreqifr_mac;
charmac_addr[30];
sock_mac=socket(AF_INET,SOCK_STREAM,0);
if(sock_mac==-1