C开发笔试题0813.docx

上传人:b****4 文档编号:5070329 上传时间:2022-12-13 格式:DOCX 页数:19 大小:69.16KB
下载 相关 举报
C开发笔试题0813.docx_第1页
第1页 / 共19页
C开发笔试题0813.docx_第2页
第2页 / 共19页
C开发笔试题0813.docx_第3页
第3页 / 共19页
C开发笔试题0813.docx_第4页
第4页 / 共19页
C开发笔试题0813.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

C开发笔试题0813.docx

《C开发笔试题0813.docx》由会员分享,可在线阅读,更多相关《C开发笔试题0813.docx(19页珍藏版)》请在冰豆网上搜索。

C开发笔试题0813.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1