声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

楼主: 风花雪月

[C/C++] [分享]c语言 ---- 经典百例[zz]

[复制链接]
发表于 2006-3-7 15:14 | 显示全部楼层

回复:(风花雪月)[分享]c语言 ---- 时间陷进

<P>/********<BR>使用过basic语言的朋友都知道,basic中有一种重要的功能,就是时间陷阱.它能是主程序的运行和对事件的处理异步进行.通过设置时间陷阱.可以在规定的时间间隔到达后自动执行某个子程序.子程序运行结束后又回到主程序的断点处继续执行.basic语言提供了有关时间陷阱的语句.可以直接调拥獵语言没有这样的功能,为了能实现上述功能,这里给出了几个子函数以帮助实现.</P>
<P>    on_timer(t,p):    设定定时时间间隔为t(以秒为单位).并规定了事件处理子函数的入口点.t是整<BR>                      型数,p是指向子函数的指针.<BR>    timer_on():      启动定时器开始计时.以后每个t秒,指针p所指向的子函数运行一次.<BR>    timer_off():    关闭定时器.</P>
<P>下面是子函数清单.<BR>***************/<BR>/*timer 模块源程序清单*/</P>
<P>#include&lt;dos.h&gt;</P>
<P>#define Sizeprogram 375<BR>void interrupt (*oldtimer)();<BR>void interrupt newtimer();<BR>static struct SREGS seg;<BR>unsigned intsp,intss;<BR>unsigned myss,stack;<BR>unsigned vseg;<BR>int running=0;<BR>int m1,m2,m3=0;<BR>int (*sub_ptr)();<BR>void on_timer();<BR>void timer_on();<BR>void timer_off();</P>
<P>void on_timer(t,pp)<BR>int t;<BR>int (*pp)();<BR>{<BR>    sub_ptr=pp;<BR>    m1=t;<BR>    segread(&amp;seg);<BR>    stack=(Sizeprogram-(seg.ds-seg.cs))*16-300;<BR>    myss=_SS;<BR>    oldtimer=getvect(0x1c);<BR>}</P>
<P>void timer_on()<BR>{<BR>    m2=0;<BR>    m3=1;<BR>    setvect(0x1c,newtimer);<BR>}<BR>void timer_off()<BR>{<BR>    m3=0;<BR>    setvect(0x1c,oldtimer);<BR>}<BR>void interrupt newtimer()<BR>{<BR>    (*oldtimer)();<BR>    if(running==0)<BR>        running=1;<BR>        disable();<BR>        intsp=_SP;<BR>        intss=_SS;<BR>        _SP=stack;<BR>        _SS=myss;<BR>        enable();<BR>        if(m3==1){<BR>            if(m2==m1*18){<BR>            m2=0;<BR>     (*sb_ptr)();<BR>            }<BR>            m2+=1;<BR>        }<BR>        disable();<BR>        _SP=intsp;<BR>        _SS=intss;<BR>        enable();<BR>        running=0;<BR>    }<BR>}</P>
回复 支持 反对
分享到:

使用道具 举报

发表于 2006-3-7 15:14 | 显示全部楼层

汉诺塔

<P>这是个汉诺塔程序,在调试的时候,输入的数字最好不要大于15,因为每大一个数<BR>所得的结果的步骤都会多一倍。如果你有耐心等待结果的话除外。汉诺塔是在欧洲<BR>流行的一种游戏,有a,b,c三个竿。a竿上有若干个由大到小的圆盘,大的在下面,<BR>小的在上面,b,c都是空杆,请你把a杆上的圆盘都倒到别的杆上,或b或c,在倒盘<BR>的过程中不可以大的压小的,实例程序如下:</P>
<P>#include &lt;stdio.h&gt;<BR>int i=0;<BR>main()<BR>{<BR> unsigned n;<BR> printf("Please enter the number of discs: ");<BR> scanf("%d",&amp;n);<BR> printf("\tneedle:\ta\t b\t c\n");<BR> movedisc(n,'a','c','b');<BR> printf("\t Total: %d\n",i);<BR> getch();<BR>}<BR>movedisc(n,fromneedle,toneedle,usingneedle)<BR>unsigned n;<BR>char fromneedle,toneedle,usingneedle;<BR>{<BR> if(n&gt;0)<BR> {<BR>  movedisc(n-1,fromneedle,usingneedle,toneedle);<BR>  i++;<BR>  switch(fromneedle)<BR>  {<BR>     case 'a':switch(toneedle)<BR>     {<BR>              case 'b':printf("\t[%d]:\t%2d------&gt;%2d\n",i,n,n);<BR>      break;<BR>     case 'c':printf("\t[%d]:\t%2d-------------&gt;%2d\n",i,n,n);<BR>      break;<BR>     }<BR>      break;<BR>            case 'b':switch(toneedle)<BR>     {<BR>              case 'a':printf("\t[%d]:\t%2d&lt;----------%2d\n",i,n,n);<BR>      break;<BR>     case 'c':printf("\t[%d]:\t\t%2d------&gt;%2d\n",i,n,n);<BR>      break;<BR>     }<BR>      break;<BR>            case 'c':switch(toneedle)<BR>     {<BR>              case 'a':printf("\t[%d]:\t%2d&lt;--------------%2d\n",i,n,n);<BR>      break;<BR>     case 'b':printf("\t[%d]:\t\t%2d&lt;--------%2d\n",i,n,n);<BR>      break;<BR>     }<BR>      break;<BR>  }<BR>        movedisc(n-1,usingneedle,toneedle,fromneedle);<BR> }<BR>}</P>
发表于 2006-3-7 15:18 | 显示全部楼层

求简单逆阵

<P># include "stdio.h" <BR># define M  3 </P>
<P><BR>void main (  ) </P>
<P> { <BR>  float MAT[M][2*M]; <BR>  float MAT1[M][M]; <BR>  float t; <BR>  int i,j,k,l; </P>
<P>/***********************************************/ </P>
<P>   /*对矩阵进行初始化*/ <BR>  for(i=0;i&lt;M;i++) <BR>    for(j=0;j&lt;2*M;j++) <BR>      MAT1[j]='\0'; <BR>  <BR>  for(i=0;i&lt;M;i++) <BR>     for(j=0;j&lt;2*M;j++) <BR>     MAT[j]='\0'; </P>
<P>    /*对MAT1矩阵赋初值  */ <BR>  for(i=0;i&lt;M;i++) <BR>    for (j=0;j&lt;M;j++) <BR>      scanf("%f",&amp;MAT1[j]); </P>
<P><BR>  /*打印目标矩阵?*/ <BR>  printf("原矩阵为:\n"); <BR>  for (i=0;i&lt;M;i++) <BR>    { <BR>     for (j=0;j&lt;M;j++)   <BR>printf("%5.2f",MAT1[j]); <BR>     printf("\n"); <BR>     } </P>
<P>/********************************************/ </P>
<P>    /*对MAT1矩阵进行扩展,MAT1矩阵添加单位阵,由M*M变成2M*2M矩阵  */ <BR>  for(i=0;i&lt;M;i++) <BR>    for(j=0;j&lt;2*M;j++) <BR>      if (j&lt;M)  MAT[j]=MAT1[j]; <BR>     else if (j==M+i)  MAT[j]=1; <BR>   else MAT[j]=0; </P>
<P><BR>    /*对M矩阵进行变换,使得前半部分矩阵成为单位阵,则  */ <BR>    /*后半部分矩阵即为所求矩阵逆阵  */ <BR>  for(i=0;i&lt;M;i++) <BR>   { <BR>    /*对第i行进行归一化    */ <BR>     for (j=0;j&lt;2*M;j++) <BR>     for(k=i+1;k&lt;M;k++) <BR>MAT[j]=MAT[j]+MAT[k][j]; <BR>     t=MAT; <BR>     for(j=i;j&lt;2*M;j++) <BR>MAT[j]=MAT[j]/t; </P>
<P>     /*对矩阵进行行变换,使得第i 列只有一个元素不为零,且为1*/ <BR>     for(k=0;k&lt;M;k++) <BR>if(k!=i) <BR>  { <BR>   t=MAT[k]; <BR>   for (l=i;l&lt;2*M;l++) <BR>   MAT[k][l]=MAT[k][l]-MAT[l]*t; <BR>  } <BR>     } </P>
<P><BR> /*将后半部分矩阵即所求矩阵逆阵存入MAT2矩阵。*/ <BR>  for(i=0;i&lt;M;i++) <BR>   { <BR>  <BR>    for(j=0;j&lt;M;j++) <BR>      MAT1[j]=MAT[j+M]; <BR>    printf("\n"); <BR>      <BR>   } </P>
<P><BR>/*********************************************/ </P>
<P>   /*输出所求的逆阵*/ <BR>   printf("逆阵为:\n"); <BR>   for(i=0;i&lt;M;i++) <BR>   { <BR>    <BR>     for(j=0;j&lt;M;j++) <BR>     printf("%5.2f",MAT1[j]); <BR>     printf("\n"); <BR>   } </P>
<P>} </P>
发表于 2006-3-7 15:19 | 显示全部楼层

求逆阵

<P>#define N 5      /*[注]:修改6为你所要的矩阵阶数*/ <BR>#include "stdio.h" <BR>#include "conio.h" </P>
<P><BR>/*js()函数用于计算行列式,通过递归算法实现*/ <BR>int js(s,n) <BR>int s[][N],n; <BR>{int z,j,k,r,total=0; <BR>int b[N][N];/*b[N][N]用于存放,在矩阵s[N][N]中元素s[0]的余子式*/ <BR>if(n&gt;2) {for(z=0;z&lt;n;z++) <BR>{for(j=0;j&lt;n-1;j++) <BR>for(k=0;k&lt;n-1;k++) <BR>if(k&gt;=z) b[j][k]=s[j+1][k+1]; <BR>else b[j][k]=s[j+1][k]; <BR>if(z%2==0) r=s[0][z]*js(b,n-1);  /*递归调用*/ <BR>else  r=(-1)*s[0][z]*js(b,n-1); <BR>total=total+r; <BR>} <BR>} <BR>else if(n==2) total=s[0][0]*s[1][1]-s[0][1]*s[1][0]; <BR>return total; <BR>} </P>
<P><BR>/*n_1()函数用于求原矩阵各元素对应的余子式,存放在数组b[N][N]中,定义为float型*/ <BR>void n_1(s,b,n) <BR>int s[][N],n; <BR>float b[][N]; <BR>{int z,j,k,l,m,g,a[N][N]; <BR>for(z=0;z&lt;n;z++) <BR>   {l=z; <BR>    for(j=0;j&lt;n;j++) <BR>{ m=j; <BR> for (k=0;k&lt;n-1;k++) <BR>      for(g=0;g&lt;n-1;g++) <BR> { if(g&gt;=m&amp;&amp;k&lt;l) a[k][g]=s[k][g+1]; <BR>   else if(k&gt;=l&amp;&amp;g&lt;m)  a[k][g]=s[k+1][g]; <BR>   else if(k&gt;=l&amp;&amp;g&gt;=m) a[k][g]=s[k+1][g+1]; <BR>   else a[k][g]=s[k][g]; <BR> } <BR>         b[z][j]=js(a,n-1); <BR>} <BR>   } <BR>} </P>

<P>main() <BR>{int a[N][N]; <BR>float b[N][N]; <BR>int r,z,j; <BR>float temp; <BR>//clrscr(); <BR>printf("Input original data:\n"); <BR>for(z=0;z&lt;N;z++)              /*输入所需要的数据,为整型数据*/ <BR>    for(j=0;j&lt;N;j++) <BR>scanf("%d",&amp;a[z][j]); <BR>printf("\nPress Enter continue......"); <BR>getchar(); <BR>//gotoxy(1,1); <BR>printf("The original matrix is:\n"); <BR>for(z=0;z&lt;N;z++)/*打印原矩阵*/ <BR>    {for(j=0;j&lt;N;j++) <BR> printf("%5d",a[z][j]); <BR>     printf("\n"); <BR>    } <BR>r=js(a,N);                     /*调用js()函数计算原矩阵的行列式值*/ <BR>printf("\nThe original matrix hanglieshi is:|A|==%d\n",r);     <BR>if (r==0) printf("Because |A|==0,the original matrix have no nijuzhen!");  /*判断条件:若|A|==0,则原矩阵无逆矩阵,反之则存在逆矩阵*/ <BR>else <BR>    {n_1(a,b,N);                                       /*调用n_1()函数,得到原矩阵各元素对应的"余子式",存放在数组b[N][N]中*/ <BR>     for(z=0;z&lt;N;z++)                                  /*求代数余子式,此时b[N][N]中存放的为原矩阵各元素对应的"代数余子式"*/ <BR>          for(j=0;j&lt;N;j++) <BR>              if((z+j)%2!=0 &amp;&amp; b[z][j]!=0) b[z][j]=-b[z][j]; <BR>     for(z=0;z&lt;N;z++)        /*对b[N][N]转置,此时b[N][N]中存放的为原矩阵的伴随矩阵*/ <BR>  for(j=z+2;j&lt;N;j++) <BR>{temp=b[z][j]; <BR>b[z][j]=b[j][z]; <BR>b[j][z]=temp; <BR>} <BR>     printf("Because |A|!=0,the original matrix have nijuzhen!\n"); <BR>     printf("The bansuijuzhen A* is:\n"); <BR>     for(z=0;z&lt;N;z++)/* 打印伴随矩阵A* */ <BR>         {for(j=0;j&lt;N;j++) <BR>              printf("%4.0f\t",b[z][j]); <BR>          printf("\n"); <BR>         } </P>
<P>     for(z=0;z&lt;N;z++)                                  /*求逆矩阵,此时b[N][N]中存放的是原矩阵的逆矩阵*/ <BR>          for(j=0;j&lt;N;j++) <BR>b[z][j]=b[z][j]/r; <BR>     printf("\nThe nijuzhen is:(A*)/|A|(|A|=%d)\n",r);  /*打印逆矩阵*/ <BR>     for(z=0;z&lt;N;z++) <BR>    {for(j=0;j&lt;N;j++) <BR>printf("%8.3f",b[z][j]); <BR>   printf("\n"); <BR>  } <BR>    } <BR>}<BR></P>
发表于 2006-3-7 15:20 | 显示全部楼层

冒泡法改进

<P>/*   冒泡法是数据排序的一种基本算法,它的基本方法是:相邻两元素进行比较,如有需要则进行交换,<BR>每完成一次循环就将最小元素排在最后(如从大到小排序),下一次循环是将其他的数进行类似操作?<BR>如将N 个数按从大到小排序,Turbo C语言程序函数 <BR>如下: */</P>
<P>void sort(int a[],int n);? <BR>main()<BR>{<BR>    int a[100],i ,j ,n ;? <BR> <BR>    /*输入数组元素的个数及各元素的值*/? <BR>    scanf("%d",&amp;n);? <BR>    for(i =0;i &lt;n ;i ++ )scanf("%d",&amp;a );<BR>    sort(a,n);? <BR>    for(i =0;i &lt;n ;i ++ )printf("%d",a);? <BR>    <BR>}<BR>  ?sort(int a[],int n)<BR>    {?<BR>       int i ,j ,t ;? <BR>       for(i =n -2;i &gt;=0; i--)? <BR>           for(j =0;j &lt;i ; j++)<BR>               if(a[j]&lt;a[j +1]) <BR>               {<BR>                   t =a[j];<BR>                   a[j]=a[j +1];<BR>                   a[j +1]=t ;<BR>               }<BR>    }? <BR>    <BR>/*N 个元素需比较N *(N -1)/2次,效率较差?其实,可根据每一次循环比较中的情 <BR>况改进之?   [改进一]:若某次循环中没有数据交换过,则可认为数据已经有序了,<BR>不必再进行循环了,可在程序中设一变量Flag 用来标识有无数据交换? */</P>
<P>sort(int a[],int n)<BR>{?<BR> int i ,j ,t ,flag ;? <BR> for (i =n -2;i &gt;0; i--)? <BR> {?<BR>  flag =0;? <BR>  for(j =0;j &lt;i ; j++)<BR>   if(a[j]&lt;a[j +1])<BR>   {<BR>    t =a[j];<BR>    a[j]=a[j +1];<BR>    a[j +1]=t ;<BR>    flag =1;<BR>   }? <BR>  if (flag ==0)break;? <BR> }<BR>}</P>
<P>/*[改进二]:如果在一次循环中,最后的某些元素没有交换过,则说明后面这些元 <BR>素的顺序已排序,下次循环可不对其进行比较?本方法主要考虑要排序的数组元素的范 <BR>围,而不是每一轮排序都将数组元素的范围减少1?*/</P>
<P>sort(int a[],int n)? <BR>{<BR> int i ,j ,t ,k,flag ;<BR> flag =n -1;? <BR> while (flag &gt;0)? <BR> {<BR>  k=0;? <BR>  for(j =0;j &lt;i ;j ++)<BR>  if(a[j]&lt;a[j +1])<BR>  {<BR>   t =a[j];<BR>   a[j]=a[j +1]; <BR>   a[j +1]=t ;<BR>   k=j ;<BR>  }? <BR>  flag =k; /*此处不填flag = flag -1;*/<BR> }<BR>}</P>
发表于 2006-3-7 15:20 | 显示全部楼层

神经元模型

<P>/*神经元模型*/<BR>#include &lt; math.h&gt;<BR>#include &lt; stdio.h&gt;<BR>#include &lt; time.h&gt;<BR>#include &lt; stdlib.h&gt;<BR>#include &lt; conio.h&gt;<BR>#define AND1 .571388<BR>#define AND2 .560999<BR>#define OR1 1.149045<BR>#define OR2 1.131896<BR>#define SITA 1<BR>#define NIU .1<BR>#define OMIGA 50</P>
<P>float w[2]; <BR>float terg[4][3]; </P>
<P>main()<BR>{int m_result = 1, s; <BR> float w1[2]; <BR> while(m_result != 5){<BR> m_result = menu(m_result); <BR> date(); <BR> switch(m_result){<BR>  case(1):             /*    学习*/<BR>  case(3):randomize();  /*重新学习*/<BR>   w[0] = random(80)+10; w[0] = w[0]/100.0; <BR>   w[1] = random(80)+10; w[1] = w[1]/100.0; <BR>   study(); <BR>   break; <BR>  case(2):practic(w);   /*实践新模型*/<BR>   break; <BR>  case(4):printf(" what do you want to see, OR or AND?(1/2) " ); <BR>   scanf(" %d" , &amp; s); <BR>   if(s==1){w1[0] = OR1;  w1[1] = OR2;  }<BR>      else if(s==2){w1[0] = AND1; w1[1] = AND2; }<BR>    else break; <BR>   practic(w1); <BR>   break;        /*演示已有模型*/<BR>  default:{}<BR>  }       /*End Switch*/<BR> }               /*End While */<BR> clrscr(); <BR> printf(" Good Bye!" ); <BR>}<BR>menu(int r)<BR>{int r1; <BR> clrscr(); <BR> printf(" \n\n\n" ); <BR> printf(" \t\t1\tStudy a Model\n" );     /*    学习    */<BR> printf(" \t\t2\tPratice the model\n" ); /*重新学习    */<BR> printf(" \t\t3\tDefail the MOdel\n" );  /*实践新模型  */<BR> printf(" \t\t4\tPrepared Model\n" );    /*演示已有模型*/<BR> printf(" \t\t5\tEnd\n" );               /*结束        */<BR> printf(" \n\n\t\tWhat do you want to choice?(%d)" , r); <BR> r1 = getche(); <BR> if (r1!=13) r = r1-48; <BR> return(r); <BR>}</P>
<P>date()    /*显示模型*/<BR>{int i, j; <BR> clrscr(); <BR> for(i = 0; i &lt; 4; i++) <BR>  for(j = 0; j&lt; 3; j++){ <BR>  gotoxy(20+j*4, i+5);  <BR>  printf("%.0f", terg[j]);  <BR>  } <BR>printf("\n\n\tThe quarities:%f, %f \n", w[0], w[1]);  <BR>} </P>
<P>study() /*学习子函数*/ <BR>{float x, y, width;  <BR> int wrong = 1, i, total = 0; <BR> input();  /*andinput(); */ /*orinput();  */ <BR> while(wrong){ <BR>  wrong = 0;  <BR>  for(i = 0; i&lt; 4; i++){<BR>   x = OMIGA*(w[0]*terg[0]+w[1]*terg[1]-SITA); <BR>   y = 1.0/(1.0+exp(-x)); <BR>   width = terg[2]-y;  /*误差 = "教师信号-Y" */ <BR>   if(fabs(width)&gt;=.01){<BR>    wrong = 1; <BR>    total++; <BR>    w[0] = w[0]*(1+width*NIU);     /*改变权值0*/<BR>    w[1] = w[1]*(1+width*NIU);     /*改变权值1*/<BR>    if(total&gt; =200)       /*防止程序进入死循环*/<BR>    {error(); return 1; }<BR>    }<BR>   }<BR>  }/*若i的四次循环均满足" fabs(width)&gt; =.01" 则wrong=0, 结束循环*/<BR>}<BR>practic(quarity) /*实践新模型或演示已有模型, 由quarity[]值决定*/<BR>float quarity[2]; <BR>{int k, y; <BR> float x, width, x1, x2; <BR> for(k = 0; k &lt; 4; k++){ <BR>  gotoxy(0, 4+k*3);  <BR>  printf("\nPlease input :x1, x2 ");  <BR>  scanf("%f, %f", &amp;x1, &amp;x2);  <BR>  x = OMIGA*(quarity[0]*x1+quarity[1]*x2-SITA); <BR>  y = 1.0/(1.0+exp(-x))+.01;  /*精度为0.01*/ <BR>  printf("\t\t\ty = "%d" , y); <BR>  getch();  <BR>  } <BR>} </P>
<P>input() /*当选择"学习"功能时输入事件*/ <BR>{int i;  <BR> printf("Please input the 4 groups data:\n\n");  <BR> for(i = 0; i&lt; 4; i++){<BR>  printf("\tThe %d group x1, x2, teacher's point: ", i+1);  <BR>  scanf("%f, %f, %f", &amp;terg[0], &amp;terg[1], &amp;terg[2]);  <BR>  } <BR> clrscr();  <BR>} </P>
<P>andinput() <BR>{terg[0][0] = 1; terg[0][1] = 1; terg[0][2] = 1; <BR> terg[1][0] = 1; <BR> terg[1][1] = 0; <BR> terg[1][2] = 0; <BR> terg[2][0] = 0; <BR> terg[2][1] = 1; <BR> terg[2][2] = 0; <BR> terg[3][0] = 0; <BR> terg[3][1] = 0; <BR> terg[3][2] = 0; <BR>} </P>
<P>orinput() <BR>{terg[0][0] = 1; <BR> terg[0][1] = 1; <BR> terg[0][2] = 1; <BR> terg[1][0] = 1; <BR> terg[1][1] = 0; <BR> terg[1][2] = 1; <BR> terg[2][0] = 0; <BR> terg[2][1] = 1; <BR> terg[2][2] = 1; <BR> terg[3][0] = 0; <BR> terg[3][1] = 0; <BR> terg[3][2] = 0; <BR>} </P>
<P>error() /*初始权值选择不当或模型无法实现(如异或模型)时退出*/ <BR>{clrscr();  <BR> printf("\n\n\n\tBecause the firse QUARITIES's choise is unavailble, \n");  <BR> printf("\tIt can't get the right result, forveve!");  <BR>} </P>
发表于 2006-3-7 15:21 | 显示全部楼层

穷举搜索法.c

<P>#include &lt;stdio.h&gt;</P>
<P>#define SIDE_N 3<BR>#define LENGTH 3<BR>#define VARIABLES 6</P>
<P>/********定义全局变量*********/<BR>int A,B,C,D,E,F;<BR>int *pt[]={&amp;A,&amp;B,&amp;C,&amp;D,&amp;E,&amp;F};<BR>int *side[SIDE_N][LENGTH]={&amp;A,&amp;B,&amp;C,<BR>      &amp;C,&amp;D,&amp;E,<BR>      &amp;E,&amp;F,&amp;A};<BR>int side_total[SIDE_N];</P>
<P>main()<BR>{<BR> int i,j,t,equal;<BR> for(j=0;j&lt;VARIABLES;j++)<BR>  *pt[j]=j+1;  /*初始化排列 1,2,3.....*/</P>
<P> while(1)<BR> {<BR>  for(i=0;i&lt;SIDE_N;i++)<BR>  {<BR>   for(t=j=0;j&lt;LENGTH;j++)<BR>    t+=*side[j];<BR>   side_total=t;<BR>  }<BR>  for(equal=1,i=0;equal &amp;&amp; i&lt;SIDE_N-1;i++)<BR>   if(side_total!=side_total[i+1]) equal=0;<BR>  if(equal)<BR>  {<BR>   for(i=0;i&lt;VARIABLES;i++)<BR>    printf("%4d",*pt);<BR>   printf("\n");<BR>   scanf("%*c");<BR>  }<BR>  for(j=VARIABLES-1;j&gt;0;j--)<BR>   if(*pt[j]&gt;*pt[j-1]) break;<BR>  if(j==0) break;<BR>  for(i=VARIABLES-1;i&gt;=j;i--)<BR>   if(*pt&gt;*pt[j-1]) break;<BR>  t=*pt[j-1];<BR>  *pt[j-1]=*pt;<BR>  *pt=t;<BR>  for(i=VARIABLES-1;i&gt;j;i--,j++)<BR>  {<BR>   t=*pt[j];<BR>   *pt[j]=*pt;<BR>   *pt=t;<BR>  }<BR> }<BR>}</P>
发表于 2006-3-7 15:22 | 显示全部楼层

小写数字转换成大写数字.c

<P>#include &lt;stdlib.h&gt;<BR>#include &lt;stdio.h&gt;<BR>#include &lt;string.h&gt;</P>
<P>char * floattoch(float m);</P>
<P>static char chinese[]="零壹贰叁肆伍陆柒捌玖点";<BR>static char ch[80];</P>
<P>void main()<BR>{<BR>  float m;<BR>  char *s;</P>
<P>  printf("Input Number: ");<BR>  scanf("%f",&amp;m);<BR>  s=floattoch(m);<BR>  printf("\n%s\n",s);<BR>}</P>
<P>char *floattoch(float m)<BR>{<BR>  char tmp[30];<BR>  int i,j,k=0,flag=0,d=0,temp;<BR>  float n;</P>
<P>  i=m;<BR>  do<BR>  {<BR>    j=i%10;<BR>    tmp[k]=chinese[j*2];<BR>    tmp[k+1]=chinese[j*2+1];<BR>    k+=2;<BR>    i/=10;<BR>  }while(i);<BR>  tmp[k]=0;<BR>  //tmp[k]=0;<BR>  printf("%d\n",strlen(tmp));<BR>  for(i=strlen(tmp)-1;i&gt;=0;i-=2,d+=2)<BR>  {<BR>    ch[d]=tmp[i-1];<BR>    ch[d+1]=tmp;<BR>  }</P>
<P>i=(m-(int)m)*1000; k=0; <BR>temp=i;       //待会判断用 <BR>do <BR>{ <BR>  j=i%10; <BR>  if(j) flag=1; <BR>  if(flag) <BR>  { <BR>    tmp[k]=chinese[j*2]; <BR>    tmp[k+1]=chinese[j*2+1]; <BR>    k+=2; <BR>  } <BR>  i/=10; <BR>}while(i); <BR> while(temp&lt;100) <BR>{//加入零 <BR>    tmp[k]=chinese[0]; <BR>    tmp[k+1]=chinese[1]; <BR>    k+=2; <BR>    temp*=10; <BR>} <BR>tmp[k]=0; <BR>  if(strlen(tmp))<BR>  {<BR>    ch[d]=chinese[20];<BR>    ch[d+1]=chinese[21];<BR>    d+=2;<BR>  }<BR>  for(i=strlen(tmp)-1;i&gt;=0;i-=2,d+=2)<BR>  {<BR>    ch[d]=tmp[i-1];<BR>    ch[d+1]=tmp;<BR>  }</P>
<P>  return(ch);<BR>}  </P>
发表于 2006-3-7 15:24 | 显示全部楼层

单链表倒序.c

<P>#include&lt;stdio.h&gt;</P>
<P><BR>struct fsb<BR>{<BR> int  data;<BR> int  flag;<BR>     struct fsb * next;<BR>};<BR>main()<BR>{<BR> struct fsb  *p,*head,*sta,*end;<BR> int i,cishu,j;<BR> end=(struct fsb *)malloc(sizeof(struct fsb));<BR> end-&gt;data=0;<BR> end-&gt;flag=0;<BR> end-&gt;next=NULL;<BR> head=p=end;<BR> <BR> for (i=2;i&lt;=10;i++)<BR> {<BR>    end=(struct fsb *)malloc(sizeof(struct fsb));<BR>    end-&gt;data=i-1;<BR>    end-&gt;flag=0;<BR>    end-&gt;next=NULL;<BR>    p-&gt;next=end;<BR>    p=end;<BR> }<BR> p-&gt;next=NULL;<BR> printf("\n倒序前:");<BR> p=head; <BR> for(i=1;i&lt;=10;i++)<BR> {<BR>  printf("%d ",p-&gt;data);<BR>  p=p-&gt;next;<BR> }<BR>/*************************/<BR> p=NULL;<BR> while(head-&gt;next != NULL)<BR> {<BR>    sta=head; <BR>    head=head-&gt;next;<BR>    sta-&gt;next=p;<BR>    p=sta;<BR>   }<BR> head-&gt;next=sta;<BR> printf("\n倒序后:");<BR> p=head;<BR> for(i=1;i&lt;=10;i++)<BR> {<BR>  printf("%d ",p-&gt;data);<BR>  p=p-&gt;next;<BR>}<BR>/*************************/<BR>}</P>
发表于 2006-3-7 15:25 | 显示全部楼层

冒泡排序

   # include "stdio.h" <BR> # include "stdlib.h" <BR>    struct node{ <BR>      int values; <BR>        struct node *next; <BR>       }; <BR>    struct node *create(int [],int); <BR>      void sort (struct node **); <BR>       int test_data[20000]={5,9,3,4,5,7,8}; <BR>   main() <BR> { struct node *h,*p; <BR>h=create(test_data,20000); <BR>for(p=h;p;p=p-&gt;next) printf("%2d",p-&gt;values); <BR>printf("\n"); <BR>sort(&amp;h); <BR>  for(p=h;p;p=p-&gt;next) printf("%2d" ,p-&gt;values); <BR>    printf("\n"); <BR>} <BR>struct node *create (int a[],int n) <BR>{struct node *h,*q; <BR>for(h=NULL;n;n--) <BR>{ q=(struct node *) malloc(sizeof(struct node)); <BR>q-&gt;values=a[n-1]; <BR>q-&gt;next=h; <BR>h=q; <BR>} <BR>return h; <BR>} <BR>void sort (struct node **h) <BR>{ struct node *q,*p,*r,*s,*h1; <BR>h1=p=(struct node *)malloc(sizeof(struct node)); <BR>p-&gt;next=*h; <BR>while(p-&gt;next!=NULL) <BR>{ q=p-&gt;next; <BR> r=p;                   <BR>while (q-&gt;next!=NULL) <BR>{ if(q-&gt;next-&gt;values&lt;r-&gt;next-&gt;values) r=q; <BR>  q=q-&gt;next; <BR>  } <BR>  if(r!=p) <BR>   { s=r-&gt;next;       <BR>     r-&gt;next=s-&gt;next; <BR>     s-&gt;next=p-&gt;next; <BR>     p-&gt;next=s; <BR>     }                           <BR>     p=p-&gt;next; <BR>     } <BR>     *h=h1-&gt;next;/*问题:h1在程序中做了啥用?  */<BR>     free(h1);                  <BR>     }
发表于 2006-3-7 15:26 | 显示全部楼层

递归车厢

<P>/**********递归题改为非递归题实例 车厢********/<BR>#include&lt;stdio.h&gt; </P>
<P>#define MAX 4 </P>
<P>int stack[MAX],p=-1; </P>
<P>struct <BR>{ <BR>  int num; <BR>  int sign; <BR>}train[MAX]; </P>
<P>void sub() <BR>{ <BR>  int inc; <BR>  if(p==MAX-1) <BR>    { <BR>      for(inc=0;inc&lt;=p;inc++)<BR>        printf("%3d",stack[inc]); <BR>      printf("\n"); <BR>    }<BR>  else <BR>    {  <BR>      for(inc=0;inc&lt;MAX;inc++) <BR>        if(train[inc].sign==0) <BR>          { <BR>            train[inc].sign=1; <BR>            stack[++p]=train[inc].num; /*进栈*/<BR>            sub();                     /*递归*/<BR>            train[inc].sign=0; <BR>            p--;                       /*出栈*/ <BR>          } <BR>    } <BR>} </P>
<P>main() <BR>{ <BR>  int temp; <BR>  for(temp=0;temp&lt;MAX;temp++) <BR>    { <BR>      train[temp].num=temp+1; <BR>      train[temp].sign=0; <BR>    } <BR>  printf("The result is:\n"); <BR>  sub(); <BR>} <BR></P>
发表于 2006-3-7 15:27 | 显示全部楼层

迷宫

<P> #include&lt;stdio.h&gt; <BR>#define MAX 20    /* the max size of a[] and stack.serial[] */ <BR>#define OVER 0 <BR>#define OK 1 <BR>struct <BR>{ <BR>int serial[MAX]; <BR>int i; <BR>}stack; <BR>int weight,a[MAX]; <BR>void put(int serial) <BR>{ <BR>if(stack.i&lt;MAX-1)stack.serial[++stack.i]=serial; <BR>else printf("The stack is full!\n"); <BR>} <BR>int seek(int num) <BR>{ <BR>int p; <BR>if(a[num]==0)return(OVER); <BR>else{ <BR>weight-=a[num]; <BR>if(weight&gt;0) <BR>{ <BR>p=seek(num+1); <BR>if(p==OK){ <BR>put(num); <BR>return(OK); <BR>} <BR>else{ <BR>weight+=a[num]; <BR>p=seek(num+1); <BR>if(p==OK)return(OK); <BR>else return(OVER); <BR>   } <BR>} <BR>if(weight==0){put(num);return(OK);} <BR>if(weight&lt;0) <BR>{ <BR>weight+=a[num]; <BR>p=seek(num+1); <BR>if(p==OK)return(OK); <BR>else return(OVER); <BR>} </P>
<P>    } </P>
<P><BR>} <BR>main() <BR>{ <BR>int temp=0; <BR>stack.i=-1; <BR>printf("\nPlease input the total wieght you need:"); <BR>scanf("%d",&amp;weight); <BR>printf("Please input the weight of little case(Input '0' to end):"); <BR>do <BR>scanf("%d",&amp;a[temp]); <BR>while(a[temp++]!=0); <BR>/* printf("\t%d",weight); <BR>for(temp=0;a[temp]!=0;temp++)printf("\t%d",a[temp]); */ <BR>temp=seek(0); <BR>if(temp==OK)printf("Complete\n"); <BR>else printf("Uncomlete\n"); <BR>for(;stack.i!=-1;stack.i--){ <BR>temp=stack.serial[stack.i]; <BR>printf("\t%d",a[temp]); <BR>} <BR>} </P>
发表于 2006-3-7 15:28 | 显示全部楼层

矩阵乘法

<P>#include &lt;stdio.h&gt;<BR>void main()<BR>{<BR> int i,j;<BR> int big[8][8];</P>
<P>    for (i = 0;i &lt; 8;i++)   /*循环嵌套*/<BR>        for (j = 0;j &lt; 8;j++)<BR>           big[j] = i * j; /* 乘法表 */</P>
<P>    big[2][6] = 748;<BR>    big[2][2] = 5;<BR>    big[5][5] = 177; </P>
<P>    for (i = 0;i &lt; 8;i++) <BR>    {<BR>        for (j = 0;j &lt; 8;j++)<BR>           printf("%5d ",big[j]);<BR>        printf("\n");             <BR>    }<BR>}</P>
发表于 2006-3-7 15:29 | 显示全部楼层

大小倍约.c

<P>/*最大公约数,最小公倍数*/</P>
<P>#include &lt;stdio.h&gt;</P>
<P>int hcf(int a,int b)<BR>{<BR>  int r=0;<BR>  while(b!=0)<BR>  {<BR>      r=a%b;<BR>      a=b;<BR>      b=r;<BR>  }<BR>  return(a);<BR>} </P>
<P>lcd(int u,int v,int h)<BR>{<BR>    return(u*v/h);<BR>}</P>
<P>main()<BR>{<BR>    int u,v,h,l;<BR>    scanf("%d%d",&amp;u,&amp;v);<BR>    h=hcf(u,v);<BR>    printf("H.C.F=%d\n",h);<BR>    l=lcd(u,v,h);<BR>    printf("L.C.D=%d\n",l);<BR>}</P>
发表于 2006-3-7 15:29 | 显示全部楼层

阶乘递归.c

<P>#include &lt;stdio.h&gt;<BR>int factr(int n) <BR>{ <BR> int result,r; <BR> if (n==1) return 1; <BR>  result=factr(n-1)*n; <BR> return result; <BR>} </P>
<P>main() <BR>{ <BR> int a;<BR>  a=factr(5); <BR>  printf("%d",a); <BR>} </P>
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-23 10:53 , Processed in 0.057974 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表