C开发笔试题0813.docx
- 文档编号:5070329
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:19
- 大小:69.16KB
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< p=p->pstNext1; } cout< p=NODE_S.pstNext2; while(p) { cout< 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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 开发 笔试 0813