您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > C语言经典算法100例(3)
【程序68】题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数1.程序分析:2.程序源代码:main(){intnumber[20],n,m,i;printf(“thetotalnumbersis:“);scanf(“%d“,&n);printf(“backm:“);scanf(“%d“,&m);for(i=0;i〈n-1;i++)scanf(“%d,“,&number[i]);scanf(“%d“,&number[n-1]);move(number,n,m);for(i=0;i〈n-1;i++)printf(“%d,“,number[i]);printf(“%d“,number[n-1]);}move(array,n,m)intn,m,array[20];{int*p,array_end;array_end=*(array+n-1);for(p=array+n-1;p〉array;p--)*p=*(p-1);*array=array_end;m--;if(m〉0)move(array,n,m);}==============================================================【程序69】题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。1.程序分析:2.程序源代码:#definenmax50main(){inti,k,m,n,num[nmax],*p;printf(“pleaseinputthetotalofnumbers:“);scanf(“%d“,&n);p=num;for(i=0;i〈n;i++)*(p+i)=i+1;i=0;k=0;m=0;while(m〈n-1){if(*(p+i)!=0)k++;if(k==3){*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;}while(*p==0)p++;printf(“%disleft\n“,*p);}==============================================================【程序70】题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。1.程序分析:2.程序源代码:main(){intlen;char*str[20];printf(“pleaseinputastring:\n“);scanf(“%s“,str);len=length(str);printf(“thestringhas%dcharacters.“,len);}length(p)char*p;{intn;n=0;while(*p!=’\0’){n++;p++;}returnn;}【程序71】题目:编写input()和output()函数输入,输出5个学生的数据记录。1.程序分析:2.程序源代码:#defineN5structstudent{charnum[6];charname[8];intscore[4];}stu[N];input(stu)structstudentstu[];{inti,j;for(i=0;i〈N;i++){printf(“\npleaseinput%dof%d\n“,i+1,N);printf(“num:“);scanf(“%s“,stu[i].num);printf(“name:“);scanf(“%s“,stu[i].name);for(j=0;j〈3;j++){printf(“score%d.“,j+1);scanf(“%d“,&stu[i].score[j]);}printf(“\n“);}}print(stu)structstudentstu[];{inti,j;printf(“\nNo.NameSco1Sco2Sco3\n“);for(i=0;i〈N;i++){printf(“%-6s%-10s“,stu[i].num,stu[i].name);for(j=0;j〈3;j++)printf(“%-8d“,stu[i].score[j]);printf(“\n“);}}main(){input();print();}==============================================================【程序72】题目:创建一个链表。1.程序分析:2.程序源代码:/*creatalist*/#include“stdlib.h“#include“stdio.h“structlist{intdata;structlist*next;};typedefstructlistnode;typedefnode*link;voidmain(){linkptr,head;intnum,i;ptr=(link)malloc(sizeof(node));ptr=head;printf(“pleaseinput5numbers==〉\n“);for(i=0;i〈=4;i++){scanf(“%d“,&num);ptr-〉data=num;ptr-〉next=(link)malloc(sizeof(node));if(i==4)ptr-〉next=NULL;elseptr=ptr-〉next;}ptr=head;while(ptr!=NULL){printf(“Thevalueis==〉%d\n“,ptr-〉data);ptr=ptr-〉next;}}==============================================================【程序73】题目:反向输出一个链表。1.程序分析:2.程序源代码:/*reverseoutputalist*/#include“stdlib.h“#include“stdio.h“structlist{intdata;structlist*next;};typedefstructlistnode;typedefnode*link;voidmain(){linkptr,head,tail;intnum,i;tail=(link)malloc(sizeof(node));tail-〉next=NULL;ptr=tail;printf(“\npleaseinput5data==〉\n“);for(i=0;i〈=4;i++){scanf(“%d“,&num);ptr-〉data=num;head=(link)malloc(sizeof(node));head-〉next=ptr;ptr=head;}ptr=ptr-〉next;while(ptr!=NULL){printf(“Thevalueis==〉%d\n“,ptr-〉data);ptr=ptr-〉next;}}==============================================================【程序74】题目:连接两个链表。1.程序分析:2.程序源代码:#include“stdlib.h“#include“stdio.h“structlist{intdata;structlist*next;};typedefstructlistnode;typedefnode*link;linkdelete_node(linkpointer,linktmp){if(tmp==NULL)/*deletefirstnode*/returnpointer-〉next;else{if(tmp-〉next-〉next==NULL)/*deletelastnode*/tmp-〉next=NULL;else/*deletetheothernode*/tmp-〉next=tmp-〉next-〉next;returnpointer;}}voidselection_sort(linkpointer,intnum){linktmp,btmp;inti,min;for(i=0;i〈num;i++){tmp=pointer;min=tmp-〉data;btmp=NULL;while(tmp-〉next){if(min〉tmp-〉next-〉data){min=tmp-〉next-〉data;btmp=tmp;}tmp=tmp-〉next;}printf(“\40:%d\n“,min);pointer=delete_node(pointer,btmp);}}linkcreate_list(intarray[],intnum){linktmp1,tmp2,pointer;inti;pointer=(link)malloc(sizeof(node));pointer-〉data=array[0];tmp1=pointer;for(i=1;i〈num;i++){tmp2=(link)malloc(sizeof(node));tmp2-〉next=NULL;tmp2-〉data=array[i];tmp1-〉next=tmp2;tmp1=tmp1-〉next;}returnpointer;}linkconcatenate(linkpointer1,linkpointer2){linktmp;tmp=pointer1;while(tmp-〉next)tmp=tmp-〉next;tmp-〉next=pointer2;returnpointer1;}voidmain(void){intarr1[]={3,12,8,9,11};linkptr;ptr=create_list(arr1,5);selection_sort(ptr,5);}==============================================================【程序75】题目:放松一下,算一道简单的题目。1.程序分析:2.程序源代码:main(){inti,n;for(i=1;i〈5;i++){n=0;if(i!=1)n=n+1;if(i==3)n=n+1;if(i==4)n=n+1;if(i!=4)n=n+1;if(n==3)printf(“zhuhaoshideshi:%c“,64+i);}}==============================================================【程序76】题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数)1.程序分析:2.程序源代码:main()#include“stdio.h“main(){floatpeven(),podd(),dcall();floatsum;intn;while(1){scanf(“%d“,&n);if(n〉1)break;}if(n%2==0){printf(“Even=“);sum=dcall(peven,n);}else{printf(“Odd=“);sum=dcall(podd,n);}printf(“%f“,sum);}floatpeven(intn){floats;inti;s=1;for(i=2;i〈=n;i+=2)s+=1/(float)i;return(s);}floatpodd(n)intn;{floats;inti;s=0;for(i=1;i〈=n;i+=2)s+=1/(float)i;return(s);}floatdcall(fp,n)float(*fp)();intn;{floats;s=(*fp)(n);return(s);}==============================================================【程序77】题目:填空练习(指向指针的指针)1.程序分析:2.程序源代码:main(){char*s[]={“man“,“woman“,“gi
本文标题:C语言经典算法100例(3)
链接地址:https://www.777doc.com/doc-5527771 .html