经典c语言笔试题.docx
- 文档编号:12691322
- 上传时间:2023-06-07
- 格式:DOCX
- 页数:35
- 大小:51.72KB
经典c语言笔试题.docx
《经典c语言笔试题.docx》由会员分享,可在线阅读,更多相关《经典c语言笔试题.docx(35页珍藏版)》请在冰点文库上搜索。
经典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)/*保
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 经典 语言 笔试