经典c语言笔试题.docx

上传人:b****6 文档编号:12691322 上传时间:2023-06-07 格式:DOCX 页数:35 大小:51.72KB
下载 相关 举报
经典c语言笔试题.docx_第1页
第1页 / 共35页
经典c语言笔试题.docx_第2页
第2页 / 共35页
经典c语言笔试题.docx_第3页
第3页 / 共35页
经典c语言笔试题.docx_第4页
第4页 / 共35页
经典c语言笔试题.docx_第5页
第5页 / 共35页
经典c语言笔试题.docx_第6页
第6页 / 共35页
经典c语言笔试题.docx_第7页
第7页 / 共35页
经典c语言笔试题.docx_第8页
第8页 / 共35页
经典c语言笔试题.docx_第9页
第9页 / 共35页
经典c语言笔试题.docx_第10页
第10页 / 共35页
经典c语言笔试题.docx_第11页
第11页 / 共35页
经典c语言笔试题.docx_第12页
第12页 / 共35页
经典c语言笔试题.docx_第13页
第13页 / 共35页
经典c语言笔试题.docx_第14页
第14页 / 共35页
经典c语言笔试题.docx_第15页
第15页 / 共35页
经典c语言笔试题.docx_第16页
第16页 / 共35页
经典c语言笔试题.docx_第17页
第17页 / 共35页
经典c语言笔试题.docx_第18页
第18页 / 共35页
经典c语言笔试题.docx_第19页
第19页 / 共35页
经典c语言笔试题.docx_第20页
第20页 / 共35页
亲,该文档总共35页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

经典c语言笔试题.docx

《经典c语言笔试题.docx》由会员分享,可在线阅读,更多相关《经典c语言笔试题.docx(35页珍藏版)》请在冰点文库上搜索。

经典c语言笔试题.docx

经典c语言笔试题

100、

有两个磁盘文献A和B,各存储一行字母,规定把这两个文献中信息合并(按字母顺序排列),输出到一种新文献C中.

#include

#include

intmain(intargc,char*argv[])

{

 FILE*fp;

 inti,j,k,num,NUM;

 charc[50],t,ch;

 if((fp=fopen("A","r"))==NULL)

   /*canbereplacedbyopen

    *intfd=open("A",O_RDONLY|O_CREAT);*/

     {

       printf("fileAcannotbeopened\n");

       exit(0);

     }

 printf("\nAcontentsare:

\n");

 for(i=0;(ch=fgetc(fp))!

=EOF;i++)/*一种字符一种字符读*/

  {

      c[i]=ch;

      putchar(c[i]);

  }

 num=i+1;

 fclose(fp);

if((fp=fopen("B","r"))==NULL)

  {

     printf("fileBcannotbeopened\n");

     exit(0);

  }

 printf("\nBcontentsare:

\n");

for(i=0;(ch=fgetc(fp))!

=EOF;i++)

 {

    c[num+i]=ch;

    putchar(c[num+i]);

  }

fclose(fp);

NUM=num+i+1;

for(k=0;k

 {

   for(j=0;j

   {

      if(c[j]>c[j+1])

             {

         t=c[j];

         c[j]=c[j+1];

         c[j+1]=t;

               }

   }

 }

printf("\nCfileis:

\n");

fp=fopen("C","w");

for(i=0;i

{

   putc(c[i],fp);/*将字符一种个写入文献中*/

   putchar(c[i]);/*一种个输出字符*/

}

fclose(fp);

return1;

}

86.有一浮点型数组A,用C语言写一函数实现对浮点数组A进行降序排序,并输出成果,规定要以数组A作为函数入口.(建议用冒泡排序法)

#include

#include

voidBubbleSort(intarr[],intn)

{

 inti,j;

 intexchange=1;//互换标志,提高算法效率;

 inttemp;

 for(i=0;i

         {

      exchange=0;//本趟排序开始前,互换标志应为假

      for(j=0;j

                        {

           if(arr[j+1]>arr[j])

                                     {

                temp=arr[j+1];

                arr[j+1]=arr[j];

                arr[j]=temp;

                exchange=1;//发生了互换,故将互换标志置为真

                                        }

                  }

      if(!

exchange)//本趟排序未发生互换,提前终结算法

       return;

         }

}

intmain(intargc,char*argv[])

 {

  intarr[5]={1,4,2,6,5};

  inti;

  BubbleSort(arr,5);

  printf("aftersort,arris:

\n");

  for(i=0;i<5;i++)

           {

      printf("%3d",arr[i]);

             }

  return1;

  }

77.写出二分查找代码:

  Intbinary_search(int*arr,intkey,intsize)

{

    Intmid;

    Intlow=0;

Inthigh=size-1;

While(low<=high)

    {

      Mid=(low+high)/2;

      If(arr[mid]>key)

          High=mid-1;

      ElseIf(arr[mid]

          Low=mid+1;

    Else

      Returnmid;

}

  Return-1;

}

补充1:

用帅选法查找100之内质数

#include

usingnamespacestd;

#defineN 100

intmain()

{

     /*0~100共101个数*/

  intsieve[N+1];

  inti;

   //step1:

初始化(sieve[i]=0表达不在筛中,即不是质数;1表达在筛中)

   sieve[0]=sieve[1]=0;

   for(inti=2;i<=N;i++)

                   {

           sieve[i]=1;

                    }

   //step2:

偶数(2倍数)必定不是质数,因此应当先筛除

   for(i=2;i<=N/2;i++)

                    {

             sieve[i*2]=0;

                     }

   intp=2;//第一种质数是2

   //step3:

从sieve中删去P倍数

   while(p*p<=N)

               {

       p=p+1;   //选下一种p

       while(sieve[p]==0)

                             {

                    p++;

                              }

       intt=p*p;

       ints=2*p;/*质数与质数之和包括合数,但质数于合数之和必为质数,提高算法效率*/

       while(t<=N)

                             {

              sieve[t]=0; //删除

              t=t+s;

                              }

                  }

   //step4:

 输出成果

 for(i=2;i<=N;i++)

     {

     if(sieve[i]!

=0)

                       {

           cout<

                       }

      }

 return1;

}

                                 《《《《链表操作考察》》》》

87、实现双向链表删除一种节点P,在节点P后插入一种节点,写出这两个函数。

//删除操作

StatusListDelete_DuL(DuLinkList& L,int i,ElemType& e)

{

if(!

(p=GetElemP_DuL(L,i)))

return  ERROR;//容错判断;

e=p->data;

p->prior->next=p->next;

p->next->prior=p->pror;

free(p);

p=NULL;//勿忘,否则内存泄露

returnOK;

}

//插入操作

StatusListInsert_DuL(DuLinkList&L,inti,ElemType&e)

{

if(!

(p=GetElemP_DuL(L,i)))

return  ERROR;

if(!

(s=(DuLinkList)malloc(sizeof(DuLNode))))

 return ERROR;

              /*assert((s=(DuLinkList)malloc(sizeof(DuLNode)))!

=NULL)*/

s->data=e;

s->prior=p;

p->next->prior=s;

p->next=s;

s->next=p->next->next;

return OK;}

88、把一种链表反向。

//链表头插法;

intre_Link(LinklistH)

{

      Linklistp=H->next,q;

      H->next=NULL;

      while(p!

=NULL)

      {

             q=p;

             p=p->next;

             q->next=H->next;

             H->next=q;

      }

      return0;

}

                                                     《《《《strcpy和memcpy》》》》

76.已知strcpy函数原型是char*strcpy(char*strDest,constchar*strSrc);其中strDest是目字符串,strSrc是源字符串。

(1)不调用C++/C字符串库函数,请编写函数strcpy。

char*stringcpy(char*Des,constchar*Src)

{

assert((Des!

=NULL)&&(Src!

=NULL));

char*address=Des;

while((*Des++=*Src++)!

='\0');

returnaddress;

}

断言assert是一种宏,该宏在<assert>中,

当使用assert时候,给她个参数,即一种判读为真表达式。

预解决器产生测试该断言代码,如坚决言不为真,则发出一种错误信息告诉断言是什么以及它失败一会,程序会终结。

咱们普通可以用在判断某件操作与否成功上。

详见《高质量c&c++编程,林锐,6.5章》

(2)strcpy能把strSrc内容复制到strDest,为什么还要char*类型返回值?

 为了实现链式表达式:

       intlen=strlen(stringcpy(Des,"hello"));

内存复制:

void*memcpy(void*pvTo,constvoid*pvFrom,size_tsize)

{

assert((pvTo!

=NULL)&&(pvFrom!

=NULL));

byte*pbTo=pvTo;

byte*pbFrom=pbFrom;

while(size-->0)

{

*pbTo++=*pbFrom++;

}

returnpvTo;

}

注意:

内存拷贝时要避免内存空间重叠问题,(即pvfrom与pvto所指向内存不能重叠)

为了防止内存空间重叠,若是目的地址高于源地址,从后往前复制;

若是源地址高于目的地址,从前去后复制;

                                                   《《《《查找字符串中子串》》》》

84、请编写一种C函数,该函数在一种字符串中找到也许最长子字符串,该字符串是由同一字符构成。

#include

#include

#include

int ChildString(char*p)

{

  char*q=p;

  intstringlen=0,i=0,j=1,len=0,maxlen=1;

  //stringlen=strlen(p);

  while(*q!

='\0')//不能用strlen,求得长stringlen

       {

    stringlen++;

    q++;

       }

while(i

 {

  if(*(p+i)==*(p+j)&&j

        {

    len++;//记录子串长度

    i++;

    j++;

        }

 else

     {

    if(len>=maxlen)//记录最大子串长度

                 {

            maxlen=len+1;

            len=0;

               }

     else

        len=0;

   i++;

   j++;

     }

}

returnmaxlen;

}

intmain(intargc,char*argv[])

{

  chararr[11];

  intlen;

  printf("pleaseinputchararr(10):

\n");

  scanf("%s",arr);

  len=ChildString(arr);

  printf("thelenofchildarris:

%d\n",len);

  return1;

}

99.计算字符串中子串浮现次数

办法1;

intmain(intargc,char*argv[])

{

  charstr1[20],str2[20],*p1,*p2;

  intsum=0;

  printf("pleaseinputtwostrings\n");

  scanf("%s%s",str1,str2);

  p1=str1;

  p2=str2;

  while(*p1!

='\0')

      {

   if(*p1==*p2)

            {

          while((*p1++==*p2++)&& *p2!

='\0');  /*不断比较字符串1与2,至字符串2到达‘\0’*/

             }

   else

      p1++;        /*如果,字符串2一次匹配已结束,或者此刻*p1与*p2不等;*/

   if(*p2=='\0')      /*如果是字符串2结束,则成功找到一次,sum++*/

         sum++;

  p2=str2;         /*p2始终指向str2;*/

     }

  printf("%d",sum);

  return1;

}

办法2:

#include

#include

#include

//判断两字符串与否相等,相等返回1,不等返回0

intJudge(char*movePt,char*tempPt)

#if1

{

   intret=0;

   while(!

(*movePt-*tempPt)&&*tempPt)

   {

      movePt++;

      tempPt++;

   }

   if(*tempPt=='\0')

   {

      ret=1;

   }

 returnret;

}

#endif

#if0

{

   inti;

   for(i=0;i

       {

       if(*movePt!

=tempPt[i])

           return0;

   return1;

      }

 }

#endif

//计算子串浮现次数,str为原字符串,sub为子串

intStrCount(char*str,char*sub)

{

   intcount=0;

   char*move=str;

   if(strlen(str)

             {

       return0;

              }

   else

           {

       while(strlen(move)>=strlen(sub))

                        {

                printf("%s\n",move);

           if(Judge(move,sub))

                                   {

               count++;

               printf("count++");

                                    }

           move++;

       }

   }

   returncount;

}

intmain(intargc,char*argv[])

{

   chararr1[20];

   chararr2[20];

   intnum;

   printf("pleaseinputtwoarrs:

");

   scanf("%s%s",arr1,arr2);

   num=StrCount(arr1,arr2);

   printf("thenumis:

%d\n",num);

   return1;

}

90、输入一行字符,记录其中有多少个单词。

intmain(intargc,char*argv[])

{

   charstring[81];

   inti,num=0;//word=0;

    charc;

      gets(string);     /*不能用scanf,视空格为终结*/

 for(i=0;(c=string[i])!

='\0';i++)

       {

       if(c=='')

       num++;

       }

 num++;

printf("Thereare%dwordsintheline\n",num);

return1;

}

83、请编写一种C函数,该函数在给定内存区域搜索给定字符,并返回该字符所在位置索引值。

intsearch(char*cpSource,intn,charch)//起始地址,搜索长度,目的字符

{

  inti;

  for(i=0;i

=ch;++i);

 returni;

}

                                           《《《《数字问题,水仙花数,/和%用法》》》》

98某个公司采用公用电话传递数据,数据是四位整数,在传递过程中是加密,加密规则如下:

每位数字都加上5,然后用和除以10余数代替该数字,再将第一位和第四位互换,第二位和第三位互换。

#include

#include

intmain(intargc,char*argv[])

{

   inta,i,aa[4],t;

 scanf("%d",&a);

 aa[0]=a%10;

 aa[1]=a%100/10;

 aa[2]=a%1000/100;

 aa[3]=a/1000;

for(i=0;i<=3;i++)

  {

  aa[i]+=5;

  aa[i]%=10;

   }

for(i=0;i<=3/2;i++)

  {

   t=aa[i];

   aa[i]=aa[3-i];

   aa[3-i]=t;

  }

for(i=3;i>=0;i--)

printf("%d",aa[i]);

return1;

}

97、809*?

?

=800*?

?

+9*?

?

+1其中?

?

代表两位数,8*?

?

成果为两位数,9*?

?

成果为3位数。

求?

?

代表两位数,及809*?

?

后成果。

output(longb,longi)

{

   printf("\n%ld/%ld=809*%ld+%ld",b,i,i,b%i);

}

intmain()

{

  long int a,b,i;

  a=809;

  for(i=10;i<100;i++)

  {

   b=i*a+1;

  if(b>=1000&&b<=10000&&8*i<100&&9*i>=100)

  output(b,i);

 }

}    

92、有1、2、3、4个数字,能构成多少个互不相似且无重复数字三位数?

都是多少?

 #include"stdio.h"

Intmain()

{

inti,j,k;

printf("\n");

for(i=1;i<5;i++)/*如下为三重循环*/

  for(j=1;j<5;j++)

      for(k=1;k<5;k++) 

       {

       if(i!

=k&&i!

=j&&j!

=k)/*保

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

当前位置:首页 > 农林牧渔 > 农学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2