(1912制作)C语言编程题大题集合.pdf
《(1912制作)C语言编程题大题集合.pdf》由会员分享,可在线阅读,更多相关《(1912制作)C语言编程题大题集合.pdf(30页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第三部分:编程题第三部分:编程题 1、读文件、读文件 file1.txt 的内容(例如):的内容(例如):12 34 56 输出到 file2.txt:56 34 12#include#include int main(void)int MAX=10;int*a=(int*)malloc(MAX*sizeof(int);int*b;FILE*fp1;FILE*fp2;fp1=fopen(a.txt,r);if(fp1=NULL)printf(error1);exit(-1);fp2=fopen(b.txt,w);if(fp2=NULL)printf(error2);exit(-1);int i
2、=0;int j=0;while(fscanf(fp1,%d,&ai)!=EOF)i+;j+;if(i=MAX)MAX=2*MAX;b=(int*)realloc(a,MAX*sizeof(int);if(b=NULL)printf(error3);exit(-1);a=b;for(;-j=0;)fprintf(fp2,%dn,aj);fclose(fp1);fclose(fp2);return 0;2、输出和为一个给定整数的所有组合、输出和为一个给定整数的所有组合 例如 n=5 5=1+4;5=2+3(相加的数不能重复)则输出 1,4;2,3。#include int main(void)u
3、nsigned long int i,j,k;printf(please input the numbern);scanf(%d,&i);if(i%2=0)j=i/2;else j=i/2+1;printf(The result is n);for(k=0;k j;k+)printf(%d=%d+%dn,i,k,i-k);return 0;#include void main()unsigned long int a,i=1;scanf(%d,&a);if(a%2=0)for(i=1;ia/2;i+)printf(%d,a,a-i);else for(i=1;i=a/2;i+)printf(%
4、d,%d,i,a-i);3、递规反向输出字符串的例子、递规反向输出字符串的例子,可谓是反序的经典例程可谓是反序的经典例程.void inverse(char*p)if(*p=0)return;inverse(p+1);printf(%c,*p);int main(int argc,char*argv)inverse(abc0);return 0;对对 1 的另一种做法:的另一种做法:#include void test(FILE*fread,FILE*fwrite)char buf1024=0;if(!fgets(buf,sizeof(buf),fread)return;test(fread,
5、fwrite);fputs(buf,fwrite);int main(int argc,char*argv)FILE*fr=NULL;FILE*fw=NULL;fr=fopen(data,rb);fw=fopen(dataout,wb);test(fr,fw);fclose(fr);fclose(fw);return 0;4、写一段程序,、写一段程序,找出数组中第 k 大小的数,输出数所在的位置。例如2,4,3,4,7中,第一大的数是 7,位置在4。第二大、第三大的数都是4,位置在1、3随便输出哪一个均可。函数接口为:int find_orderk(const int*narry,const
6、int n,const int k)要求算法复杂度不能是 O(n2)谢谢!可以先用快速排序进行排序,其中用另外一个进行地址查找 代码如下,在 VC+6.0 运行通过。给分吧-/快速排序#include usingnamespacestd;intPartition(int*L,intlow,int high)inttemp=Llow;intpt=Llow;while(low high)while(low=pt)-high;Llow=Lhigh;while(low high&Llow=pt)+low;Llow=temp;Llow=temp;returnlow;voidQSort(int*L,int
7、low,int high)if(low high)intpl=Partition(L,low,high);QSort(L,low,pl-1);QSort(L,pl+1,high);intmain()intnarry100,addr100;intsum=1,t;cout Input number:t;while(t!=-1)narrysum=t;addrsum-1=t;sum+;cin t;sum-=1;QSort(narry,1,sum);for(int i=1;i=sum;i+)cout narryi t;cout endl;intk;cout Please input place you
8、want:k;intaa=1;intkk=0;for(;)if(aa=k)break;if(narrykk!=narrykk+1)aa+=1;kk+;cout The NO.k number is:narrysum-kk endl;cout And its place is:;for(i=0;i sum;i+)if(addri=narrysum-kk)cout i next!=NULL&qa-next!=NULL)if(pa-dataqa-data)ra-next=qa;qa=qa-next;else ra-next=pa;pa=pa-next;if(pa-next!=NULL)ra-next
9、=pa;if(qa-next!=NULL)ra-next=qa;return R;6、用递归算法判断数组、用递归算法判断数组 aN是否为一个递增数组。是否为一个递增数组。递归的方法,记录当前最大的,并且判断当前的是否比这个还大,大则继续,否则返回 false 结束:bool fun(int a,int n)if(n=1)return true;if(n=2)return an-1=an-2;return fun(a,n-1)&(an-1=an-2);7、单连表的建立,把、单连表的建立,把a-z26 个字母插入到连表中,并且倒叙,还要打印!个字母插入到连表中,并且倒叙,还要打印!方法 1:typ
10、edef struct val int date_1;struct val*next;*p;void main(void)char c;for(c=122;c=97;c-)p.date=c;p=p-next;p.next=NULL;方法 2:node*p=NULL;node*q=NULL;node*head=(node*)malloc(sizeof(node);head-data=;head-next=NULL;node*first=(node*)malloc(sizeof(node);first-data=a;first-next=NULL;head-next=first;p=first;i
11、nt longth=z-b;int i=0;while(idata=b+i;temp-next=NULL;q=temp;head-next=temp;temp-next=p;p=q;i+;print(head);8、请列举一个软件中时间换空间或者空间换时间的例子。、请列举一个软件中时间换空间或者空间换时间的例子。void swap(int a,int b)int c;c=a;a=b;b=a;-空优 void swap(int a,int b)a=a+b;b=a-b;a=a-b;9、outputstr 所指的值为所指的值为 123456789 int continumax(char*output
12、str,char*inputstr)char*in=inputstr,*out=outputstr,*temp,*final;int count=0,maxlen=0;while(*in!=0)if(*in 47&*in 47&*in 58;in+)count+;else in+;if(maxlen count)maxlen=count;count=0;final=temp;for(int i=0;i maxlen;i+)*out=*final;out+;final+;*out=0;return maxlen;10、不用库函数、不用库函数,用用 C 语言实现将一整型数字转化为字符串语言实现将一
13、整型数字转化为字符串 方法 1:int getlen(char*s)int n;for(n=0;*s!=0;s+)n+;return n;void reverse(char s)int c,i,j;for(i=0,j=getlen(s)-1;i j;i+,j-)c=si;si=sj;sj=c;void itoa(int n,char s)int i,sign;if(sign=n)0);/*delete the number*/if(sign 0)si+=-;si=0;reverse(s);方法 2:#include using namespace std;void itochar(int nu
14、m);void itochar(int num)int i=0;int j;char stra10;char strb10;while(num)strai+=num%10+48;num=num/10;strai=0;for(j=0;j i;j+)strbj=strai-j-1;strbj=0;coutstrbnum;itochar(num);return 0;11、求组合数:求 n 个数(1.n)中 k 个数的组合.如:combination(5,3)要求输出:543,542,541,532,531,521,432,431,421,321,#include int pop(int*);int
15、push(int);void combination(int,int);int stack3=0;top=-1;int main()int n,m;printf(Input two numbers:n);while(2!=scanf(%d%*c%d,&n,&m)fflush(stdin);printf(Input error!Again:n);combination(n,m);printf(n);void combination(int m,int n)int temp=m;push(temp);while(1)if(1=temp)if(pop(&temp)&stack0=n)/当栈底元素弹出
16、&为可能取的最小值,循环退出 break;else if(push(-temp)printf(%d%d%d ,stack0,stack1,stack2);/ä?pop(&temp);int push(int i)stack+top=i;if(top=0)return 0;else return 1;12、用指针的方法,将字符串、用指针的方法,将字符串“ABCD1234efgh”前后对调显示前后对调显示#include#include#include int main()char str=ABCD1234efgh;int length=strlen(str);char*p1=str;c
17、har*p2=str+length-1;while(p1 p2)char c=*p1;*p1=*p2;*p2=c;+p1;-p2;printf(str now is%sn,str);system(pause);return 0;13、有一分数序列:、有一分数序列:1/2,1/4,1/6,1/8,用函数调用的方法,求此数列前,用函数调用的方法,求此数列前 20 项的和项的和#include double getValue()double result=0;int i=2;while(i 1-2(删除)-3-4-5(删除)-6-7-0(删除),如此循环直到最后一个数被删除。方法 1:数组#incl
18、ude using namespace std;#define null 1000 int main()int arr1000;for(int i=0;i1000;+i)arri=i;int j=0;int count=0;while(count999)while(arrj%1000=null)j=(+j)%1000;j=(+j)%1000;while(arrj%1000=null)j=(+j)%1000;j=(+j)%1000;while(arrj%1000=null)j=(+j)%1000;arrj=null;+count;while(arrj=null)j=(+j)%1000;coutj
19、endl;return 0;方法 2:链表#include using namespace std;#define null 0 struct node int data;node*next;int main()node*head=new node;head-data=0;head-next=null;node*p=head;for(int i=1;idata=i;tmp-next=null;head-next=tmp;head=head-next;head-next=p;while(p!=p-next)p-next-next=p-next-next-next;p=p-next-next;co
20、utdata;return 0;方法 3:通用算法#include#define MAXLINE 1000 /元素个数/*MAXLINE 元素个数 a 元素数组 R 指针场 suffix 下标 index 返回最后的下标序号 values 返回最后的下标对应的值 start 从第几个开始 K 间隔*/int find_n(int a,int R,int K,int&index,int&values,int s=0)int suffix;int front_node,current_node;suffix=0;if(s=0)current_node=0;front_node=MAXLINE-1;
21、else current_node=s;front_node=s-1;while(Rfront_node!=front_node)printf(%dn,acurrent_node);Rfront_node=Rcurrent_node;if(K=1)current_node=Rfront_node;continue;for(int i=0;iK;i+)front_node=Rfront_node;current_node=Rfront_node;index=front_node;values=afront_node;return 0;int main(void)int aMAXLINE,RMAX
22、LINE,suffix,index,values,start,i,K;suffix=index=values=start=0;K=2;for(i=0;inumber=key)Head=Pointer-next;free(Pointer);break;Back=Pointer;Pointer=Pointer-next;if(Pointer-number=key)Back-next=Pointer-next;free(Pointer);break;void delete(Node*p)if(Head=Node)while(p)18、有、有 1,2,.一直到一直到 n 的无序数组的无序数组,求排序算
23、法求排序算法,并且要求时间复杂度为并且要求时间复杂度为 O(n),空间复杂度空间复杂度 O(1),使用交使用交换换,而且一次只能交换两个数而且一次只能交换两个数.(华为)(华为)#include int main()int a =10,6,9,5,2,8,4,7,1,3;int len=sizeof(a)/sizeof(int);int temp;for(int i=0;i len;)temp=aai-1;aai-1=ai;ai=temp;if(ai=i+1)i+;for(int j=0;j len;j+)coutajnext;while(q!=NULL)r=q-next;q-next=p;p
24、=q;q=r;head-next=NULL;head=p;return head;20、写出程序删除链表中的所有接点、写出程序删除链表中的所有接点 void del_all(node*head)node*p;while(head!=NULL)p=head-next;free(head);head=p;cout释放空间成功!src)282 d=(char*)dst+len-1;283 s=(char*)src+len-1;284 while(len=4)285 *d-=*s-;286 *d-=*s-;287 *d-=*s-;288 *d-=*s-;289 len-=4;290 291 while
25、(len-)292 *d-=*s-;293 294 else if(dst=4)298 *d+=*s+;299 *d+=*s+;300 *d+=*s+;301 *d+=*s+;302 len-=4;303 304 while(len-)305 *d+=*s+;306 307 308 return dst;309 23、公司考试这种题目主要考你编写的代码是否考虑到各种情况,是否安全(不会溢出)、公司考试这种题目主要考你编写的代码是否考虑到各种情况,是否安全(不会溢出)各种情况包括:各种情况包括:、参数是指针,检查指针是否有效、检查复制的源目标和目的地是否为同一个,若为同一个,则直接跳出、读写权限
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 1912 制作 语言 编程 题大题 集合
限制150内