现在的位置: 首页 > 综合 > 正文

给考二级C的网友:全国二级C语言教材(高等教育出版社)中

2013年10月15日 ⁄ 综合 ⁄ 共 13800字 ⁄ 字号 评论关闭
Code:
  1. 1./*教材p.97*/  
  2. #include <stdio.h>   
  3. main()   
  4. {   
  5.  int *p,m,n;   
  6.  scanf("%d%d",&m,&n);   
  7.  if(m>n)   
  8.   p=&n;   
  9.  else    
  10.  p=&m;   
  11.  printf("%d/n",*p);   
  12. }   
  13. /*用指针指向两个变量,通过指针运算选出最小数*/  
  14. **************************************************************************   
  15. 2./*教材p.100*/  
  16. #include <stdio.h>   
  17. void order (int *a,int *b);   
  18. main()   
  19. {   
  20.  int m,n;   
  21.  order(&m,&n);   
  22.  printf("%d/n%d/n",m,n);   
  23. }   
  24. void order (int *a,int *b)   
  25. {   
  26.  int x,y;   
  27.  scanf("%d%d",&x,&y);   
  28.  if(x<y)   
  29.  {   
  30.  *a=x;   
  31.  *b=y;   
  32.  }   
  33.  else  
  34.  {   
  35.  *a=y;   
  36.  *b=x;   
  37.  }   
  38. }   
  39. /*使调用函数中的第一个实参总是存放两个数中的较小的数,第二个存放较大的*/  
  40. **************************************************************************   
  41. 3./*教材p.101*/  
  42. #include <stdio.h>   
  43. int * max (int *);   
  44. main()   
  45. {   
  46.  int x,y;   
  47.  y=max(&x);   
  48.  printf("%d/n",y);   
  49. }   
  50. int * max (int *a)   
  51. {   
  52.  int m,n;   
  53.  scanf("%d%d",&m,&n);   
  54.  if(m>n)   
  55.   *a=m;   
  56.  else  
  57.   *a=n;   
  58.  return *a;   
  59. }   
  60. /*输入两个数输出最大数*/  
  61. **************************************************************************   
  62. 4./*教材p.108*/  
  63. #include <stdio.h>   
  64. main()   
  65. {   
  66.  int i,j,n=-1,x=0,y=0,a[30];   
  67.  for(i=0;i<=29;i++)   
  68.  {   
  69.   n+=2;   
  70.   a[i]=n;   
  71.   x++;   
  72.   if(x%10!=0)   
  73.    printf("%4d",a[i]);   
  74.   else  
  75.   {   
  76.    printf("%4d",a[i]);   
  77.    printf("/n");   
  78.   }   
  79.  }   
  80.  printf("/n");   
  81.  for(j=29;j>=-1;j--)   
  82.  {   
  83.   y++;   
  84.   if(y%10!=0)   
  85.    printf("%4d",a[j]);   
  86.   else  
  87.   {   
  88.    printf("%4d",a[j]);   
  89.    printf("/n");   
  90.   }   
  91.  }   
  92. }   
  93. /*给数组赋奇数,先每行10个正序输出,再每行10个逆序输出*/  
  94. **************************************************************************   
  95. 5./*教材p.112*/  
  96. #include <stdio.h>   
  97. int * sr (int *p)   
  98. {   
  99.  int i=0;   
  100.  do  
  101.  {   
  102.  scanf("%d",p);   
  103.  i++;   
  104.  }   
  105.  while(*p>=0);   
  106.  return i;   
  107. }   
  108. main()   
  109. {   
  110.  int n,a[100],j=0;   
  111.  j=sr(a);   
  112.  for(n=0;n<j;n++)   
  113.   printf("%4d",a[n]);   
  114. }   
  115. /*输入大于等于0的数,负数结束,并输出它们。*/  
  116. **************************************************************************   
  117. 6./*教材p.113*/  
  118. #include <stdio.h>   
  119. void gb (char *p);   
  120. main()   
  121. {   
  122.  int i;   
  123.  char s[10];   
  124.  for(i=0;i<10;i++)   
  125.   s[i]=getchar();   
  126.  gb(s);   
  127. }   
  128. void gb (char *p)   
  129. {   
  130.  int i;   
  131.  for(i=4;i<10;i++)   
  132.   *(p+i)='*';   
  133.  for(i=0;i<10;i++)   
  134.   printf("%c",p[i]);   
  135.  printf("/n");   
  136. }   
  137. /*对有10个元素的字符型数组,从下标4开始,全部变为"*",其他不变.*/  
  138. **************************************************************************   
  139. 7./*教材p.117*/  
  140. #include <stdio.h>   
  141. #define M 8   
  142. void dx ( int * );   
  143. main()   
  144. {   
  145.  int a[M]={10,20,30,40,50,60,70,80};   
  146.  dx(a);   
  147. }   
  148. void dx ( int *a)   
  149. {   
  150.  int i,j,t,n;   
  151.  for(i=0;i<M-1;i++)         /*处理好i和j初值与上界能使算法复杂度变小*/  
  152.   for(j=i+1;j<M;j++)   
  153.    if(a[i]<a[j])   
  154.    {   
  155.     t=a[i];   
  156.     a[i]=a[j];   
  157.     a[j]=t;   
  158.    }   
  159.  for(n=0;n<M;n++)   
  160.  printf("%d/n",a[n]);   
  161. }   
  162. /*逆序输出数组a*/  
  163. /*此题应用冒泡排序,不能用首尾比较交换*/  
  164. **************************************************************************   
  165. 8./*教材p.118*/  
  166. #include <stdio.h>   
  167. #include <stdlib.h>   
  168. #define N 50   
  169. #define M 10   
  170. void tjgs ( int * );   
  171. main()   
  172. {   
  173.  int str[N],i;   
  174.  for(i=0;i<N;i++)   
  175.   str[i]=rand()%10;   
  176.  tjgs(str);   
  177. }   
  178. void tjgs ( int *str)   
  179. {   
  180.  int i,k,j=0;   
  181.   for(k=0;k<M;k++)   
  182.   {   
  183.    for(i=0;i<N;i++)   
  184.    if(str[i]==k)   
  185.     j++;   
  186.    printf("%d:%d/n",k,j);   
  187.    j=0;                      /*j为记数的东西,所以当次记完后应重新赋值0,以便下次记数*/  
  188.   }   
  189.       
  190. }   
  191. /*整形数组中的值在0至9范围内,统计每个整数个数*/  
  192. **************************************************************************   
  193. 9./*教材p.121*/  
  194. #include <stdio.h>   
  195. #define N 6   
  196. int *px (int *);   
  197. void sc (int *,int );   
  198. main()   
  199. {   
  200.  int m=0,a[N]={5,7,4,2,8,6};   
  201.  m=px(a);   
  202.  sc(m,N);   
  203. }   
  204. int *px(int *a)   
  205. {   
  206.  int i,k,t;   
  207.  for(k=0;k<N-1;k++)        /*此处应正确给出k,i的初值及上界,才能使算法复杂度最小*/  
  208.   for(i=k+1;i<N;i++)   
  209.    if(a[k]>a[i])   
  210.    {   
  211.     t=a[k];   
  212.     a[k]=a[i];   
  213.     a[i]=t;   
  214.    }   
  215.  return a;   
  216. }   
  217. void sc(int a[],int n)   
  218. {   
  219.  int i;   
  220.  for(i=0;i<n;i++)   
  221.   printf("%4d",a[i]);   
  222.  printf("/n");   
  223. }      
  224. /*把数组中数由小到大排列*/  
  225. **************************************************************************   
  226. 10./*教材p.126*/  
  227. #include <stdio.h>   
  228. main()   
  229. {   
  230.  int a[2][3],i,j;   
  231.  for(i=0;i<2;i++)   
  232.   for(j=0;j<3;j++)   
  233.    scanf("%d",&a[i][j]);   
  234.   for(i=0;i<2;i++)   
  235.   {   
  236.    for(j=0;j<3;j++)   
  237.     printf("%4d",a[i][j]);   
  238.    printf("/n");   
  239.   }   
  240. }   
  241. /*输出:1  2  3  10  20  30  <CR>时
     
  242. 输出是否为:1   2   3  
  243.             10  20  30*/  
  244. **************************************************************************   
  245. 11./*教材p.132*/  
  246. #include <stdio.h>   
  247. #define M 7   
  248. #define N 7   
  249. main()   
  250. {   
  251.  int m,n,a[M][N];   
  252.  for(m=0;m<M;m++)   
  253.   a[m][0]=1;   
  254.  for(n=0;n<N;n++)   
  255.   a[n][n]=1;   
  256.  for(m=2;m<M;m++)   
  257.   for(n=1;n<m;n++)   
  258.    a[m][n]=a[m-1][n-1]+a[m-1][n];   
  259.  for(m=0;m<M;m++)   
  260.  {   
  261.   for(n=0;n<=m;n++)   
  262.    printf("%4d",a[m][n]);   
  263.   printf("/n");   
  264.  }   
  265. }   
  266. /*打印出杨辉三角:  
  267. 1  
  268. 1  1  
  269. 1  2  1  
  270. 1  3  3   1  
  271. 1  4  6   4   1  
  272. 1  5  10  10  5   1  
  273. 1  6  15  20  15  6  1  */  
  274. **************************************************************************   
  275. 12./*教材p.133*/  
  276. #include <stdio.h>   
  277. #include <stdlib.h>   
  278. #define M 10   
  279. #define N 10   
  280. main()   
  281. {   
  282.  int m,n,t,k,a[M][N];   
  283.  for(m=0;m<M;m++)   
  284.  {   
  285.   for(n=0;n<N;n++)   
  286.   {   
  287.    a[m][n]=rand()%50;   
  288.    printf("%4d",a[m][n]);   
  289.   }   
  290.   printf("/n");   
  291.  }   
  292.   for(n=0;n<N;n++)   
  293.   {   
  294.    t=a[0][n];   
  295.    for(m=0;m<M;m++)   
  296.     if(a[m][n]<t)   
  297.     {   
  298.      t=a[m][n];   
  299.      k=m;   
  300.     }   
  301.     printf("min(%d):%d/n",t,k);   
  302.   }   
  303. }   
  304. /*找出方阵每列中最小元素,及所在行号*/  
  305. **************************************************************************   
  306. 13./*教材p.87*/  
  307. #include <stdio.h>   
  308. #include <ctype.h>   
  309. int tj (int );   
  310. main()   
  311. {   
  312.  int x=0,y=0;   
  313.  y=tj(x);   
  314.  printf("y=%d/n",y);   
  315. }   
  316. int tj (int i)   
  317. {   
  318.  char ch;   
  319.  do  
  320.  {   
  321.   ch=getchar();   
  322.   switch(ch)   
  323.   {   
  324.   case ' ':i++;break;   
  325.   case '/n':i++;break;   
  326.   case '/t':i++;break;   
  327.   }   
  328.  }   
  329.  while(ch!='@');   
  330.  return i+1;   
  331. }   
  332. /*统计文章单词数,出现'@'时结束统计*/  
  333. **************************************************************************   
  334. 14./*教材p.149*/  
  335. #include <stdio.h>   
  336. #define M 1000   
  337. int slength();   
  338. main()   
  339. {   
  340.  char a[M];   
  341.  int x=0;   
  342.  scanf("%s",a);   
  343.  x=slength(a);   
  344.  printf("%d/n",x);   
  345. }   
  346. int slength(char *s)   
  347. {   
  348.  int m=0;   
  349.  while(1)               /*使用while的永真循环,但return使循环结束.*/  
  350.   if(*(s+m)=='/0')        
  351.    return m;   
  352.   else m++;     
  353. }   
  354. /*利用编写的函数,使函数返回指针所指字符串长度*/  
  355. /*注意:输入时别越界,越界系统并不包错,且照常统计,但如果再实现其他功能,则会影响结果。输入时空格是间隔符,使程序停止统计,且空格本身不被统计。*/  
  356. **************************************************************************   
  357. 15./*自己出的*/  
  358. #include <stdio.h>   
  359. main()   
  360. {   
  361.  char a;   
  362.  while(a!='/n')   
  363.  {   
  364.   scanf("%c",&a);   
  365.   if(a>='A'&&a<='Z')   
  366.    printf("%c",a+32);   
  367.   else  
  368.    if(a>='a'&&a<='z')   
  369.     printf("%c",a-32);   
  370.    else  
  371.     if(a!='/n')              /*如果此处不加这个条件,那么输出时总有"Error!"*/  
  372.     printf("Error!");   
  373.     else  
  374.      printf("/n");   
  375.  }   
  376. }   
  377. /*把文中的大小写字母相互转换,不是字母时输出错误提示*/  
  378. **************************************************************************   
  379. 16./*自己出的*/  
  380. #include<stdio.h>   
  381. #define M 100   
  382. #define N 10   
  383. main()   
  384. {   
  385.  int i=0,k,m,t,x,y,a[M],b[N][N],c[N]={0},E=0,F=0,J=0;   
  386.  float d[N]={0.0};   
  387.   for(k=1;k<1000;k++)   
  388.   {   
  389.    for(m=2;m<=k/2;m++)   
  390.     if(k%m==0)   
  391.     {   
  392.      t=0;   
  393.      break;   
  394.     }   
  395.     else  
  396.      t=1;   
  397.    if(t==0)   
  398.     ;   
  399.    else  
  400.    {   
  401.     if(i>=100)                       
  402.      break;   
  403.     else  
  404.      a[i]=k;   
  405.        printf("a[%2d]=%3d/t",i++,k);   
  406.    }   
  407.   }   
  408.   printf("/n");   
  409.   for(i=0;i<M;i++)   
  410.   {   
  411.    printf("%d/t",a[i]);   
  412.    if((i+1)%10==0)   
  413.    printf("/n");   
  414.   }   
  415.   for(i=0;i<M;i++)   
  416.   {   
  417.    x=i/10;   
  418.    y=i%10;   
  419.    b[x][y]=a[i];   
  420.   }   
  421.   for(x=0;x<N;x++)   
  422.   {   
  423.    for(y=0;y<N;y++)   
  424.     c[x]+=b[x][y];   
  425.    d[x]=c[x]/N;   
  426.    printf("行和:c[%d]=%d/t行均数:d[%d]=%f/t",x,c[x],x,d[x]);   
  427.   }   
  428.   printf("/n");   
  429.   for(y=0;y<N;y++)   
  430.   {   
  431.    for(x=0;x<N;x++)   
  432.     c[y]+=b[x][y];   
  433.    d[y]=c[y]/N;   
  434.    printf("列和:c[%d]=%d/t列均数:d[%d]=%f/t",y,c[y],y,d[y]);   
  435.   }   
  436.   printf("/n");   
  437.   for(x=0;x<N;x++)   
  438.    E+=b[x][x];   
  439.   printf("左右对角线和:E=%d/n",E);   
  440.   for(x=0;x<N;x++)   
  441.    F+=b[x][(N-1)-x];   
  442.   printf("右左对角线和:F=%d/n/n",F);   
  443.   for(x=0;x<N;x++)   
  444.    for(y=0;y<N;y++)   
  445.     if(b[x][y]/100==3||(b[x][y]/10)%10==3||b[x][y]%10==3)   
  446.      J++;   
  447.   printf("含'3'的数字的个数:J=%d/n/n",J);   
  448. }   
  449. /*输出100个素数,然后按10*10矩阵输出,再输出行和、列和、行均数、列均数、对角线和;并统计含'3'的数字的个数*/  
  450. /*素数定义:只能被一和本身整除的自然数*/  
  451. **************************************************************************   
  452. 17./*教材p.90题7.12*/  
  453. #include <stdio.h>   
  454. double fun(double,int);   
  455. main()   
  456. {   
  457.  double a,c;   
  458.  int b;   
  459.  scanf("%lf%d",&a,&b);   
  460.  c=fun(a,b);   
  461.  printf("(%f)%d=%f/n",a,b,c);   
  462. }   
  463. double fun(double x,int y)   
  464. {   
  465.  int i;   
  466.  double z=1.0;   
  467.  for(i=1;i<=y;i++)   
  468.   z*=x;   
  469.  return z;   
  470. }   
  471. /*编一个函数求a的b次方*/  
  472. **************************************************************************   
  473. 18./*教材p.149*/  
  474. #include <stdio.h>   
  475. #define M 1000   
  476. int slength(char *s);   
  477. main()   
  478. {   
  479.  int x;   
  480.  char a[M];   
  481.  scanf("%s",a);   
  482.  x=slength(a);   
  483.  printf("%d/n",x);   
  484. }   
  485. int slength(char *s)   
  486. {   
  487.  int m=0;   
  488.  while(1)   
  489.   if(*(s+m)=='/0')   
  490.    return m;   
  491.   else  
  492.    m++;   
  493. }   
  494. /*编写函数,使函数返回指针所指字符串长度。*/  
  495. **************************************************************************   
  496. 19./*教材p.149*/  
  497. #include <stdio.h>   
  498. #define M 1000   
  499. void scopy(char *s,char *t);   
  500. main()   
  501. {   
  502.  char a[M],b[M-1];   
  503.  scanf("%s",b);   
  504.  scopy(a,b);   
  505.  printf("%s/n",a);   
  506. }   
  507. void scopy(char *s,char *t)   
  508. {   
  509.  int i,n=0;   
  510.  while(t[n]!='/0')   /*只要累计寻找或计数,那么就要用循环*/  
  511.   n++;   
  512.  for(i=0;i<n+1;i++)   
  513.  {   
  514.   s[i]=t[i];   
  515.  }   
  516. }   
  517. /*将指针t所指的字符串复制到指针s所指的存储空间中*/  
  518. **************************************************************************   
  519. 20./*教材p.150*/  
  520. #include <stdio.h>   
  521. #define M 1000   
  522. int scomp(char *s1,char *s2);   
  523. main()   
  524. {   
  525.  char a[M],b[M];   
  526.  int x;   
  527.  scanf("%s%s",a,b);   
  528.  x=scomp(a,b);   
  529.  switch(x)   
  530.  {   
  531.  case 1 :printf("a>b/n");break;   
  532.  case 0 :printf("a=b/n");break;   
  533.  case -1 :printf("a<b/n");break;   
  534.  }   
  535. }   
  536. int scomp(char *s1,char *s2)   
  537. {   
  538.  int i,k,n=0,m=0;   
  539.  while(s1[n]!='/0')     /*因为是计数所以用循环*/  
  540.   n++;   
  541.  while(s2[m]!='/0')   
  542.   m++;   
  543.  if(m>=n)   
  544.   k=m;   
  545.  else  
  546.   k=n;   
  547.  for(i=0;i<k;i++)   
  548.  {   
  549.   if(s1[i]>s2[i])   
  550.    return 1;   
  551.   else  
  552.    if(s1[i]<s2[i])   
  553.     return -1;   
  554.    else  
  555.     continue;       
  556.  }   
  557.  return 0;   
  558. }   
  559. /*编写函数,进行字符串比较。*/  
  560. **************************************************************************   
  561. 21./*教材p.150*/  
  562. #include <stdio.h>   
  563. #define M 40   
  564. #define N 61   
  565. main()   
  566. {   
  567.  char a[M][N];   
  568.  int i,j,m=0,x=1;   
  569.  for(i=0;i<M;i++)   
  570.  {   
  571.   for(j=0;j<N-1;j++)     /*此for循环内部不可以为每个字符串记字符的个数,因为每个字符串的个数都不一样.*/  
  572.   {                         
  573.    scanf("%c",&a[i][j]);   
  574.    if(a[i][j]=='/n'||a[i][j]==' '||a[i][j]=='/t')   
  575.    {   
  576.     a[i][j]='/n';    /*把空格与制表符变成切断符*/  
  577.     break;   
  578.    }   
  579.   }   
  580.   if(a[i][0]=='/n')         
  581.    break;   
  582.   m++;    
  583.  }   
  584.  for(i=0;i<m;i++)       
  585.  {   
  586.   printf("%d:",x++);   
  587.   for(j=0;a[i][j]!='/n';j++)      
  588.    printf("%c",a[i][j]);   
  589.   printf("/n");   
  590.  }   
  591. }   
  592. /*从终端读入若干文本行(不超过40行,每行不超过60个字符),  
  593. 遇空行结束输入,然后将此文本左侧加上行号后输出*/  
  594. /*当连续出现换行符,空格,制表符时,则后面输入的不起作用*/  
  595. **************************************************************************   
  596. 22./*教材p.150*/  
  597. #include <stdio.h>   
  598. #define M 40   
  599. #define N 61   
  600. main()   
  601. {   
  602. char a[M][N];   
  603. int i,j,m=0,n=0,x=1;   
  604. for(i=0;i<M;i++)   
  605. {   
  606.  for(j=0;j<N-1;j++)   
  607.  {   
  608.   //scanf("%c",&a[i][j]);   
  609.   a[i][j]=getchar();   
  610.   //n++;   
  611.   //这里n没有作用,字符串长度都不一样的
      
  612.   //if(a[i][j]=='/n'||a[i][j]==' '||a[i][j]=='/t')
      
  613.   //字符串可以包含空字符,而且gets认为空格是字符,而%s认为空格是切断符。
      
  614.   if(a[i][j]=='/n')   
  615.    break;   
  616.  }   
  617.  if(a[i][0]=='/n')   
  618.   break;   
  619.  m++;   
  620.  //必须换成串结束符,否则编译后结果错误   
  621.  a[i][j] = '/0';   
  622. }   
  623. for(i=0;i<m;i++)    /*应除去最后一行即(i <m-1),因为最后一行是空行*/  
  624. {   
  625.  printf("%d:",x++);   
  626.  //for(j=0;j <n-1;j++)   
  627.   //printf("%c",a[i][j]);
      
  628.  printf("%s/n", a[i]);   
  629. }   
  630. }   
  631. /*从终端读入若干文本行(不超过40行,每行不超过60个字符),
     
  632. 遇空行结束输入,然后将此文本左侧加上行号后输出*/  
  633. /*这是朋友在我的错误的基础上改的,且把空格与制表符当成字符*/  
  634. **************************************************************************   
  635. 23./*教材p.151*/  
  636. #include <stdio.h>   
  637. #include <string.h>    
  638. #define M 100   
  639. main()   
  640. {   
  641.  char a[M][M],*t;   
  642.  int i,m=0;   
  643.  for(i=0;i<M;i++)   
  644.  {   
  645.   scanf("%s",a[i]);   
  646.   if(*a[i]=='@')   
  647.    break;   
  648.   m++;   
  649.  }   
  650.  t=a[0];   
  651.  for(i=1;i<m;i++)   
  652.  {   
  653.   if(strcmp(t,a[i])>=0)/*因为是终于最小的比较,所以是t而不是a[0]*/  
  654.    t=a[i];   
  655.  }   
  656.  printf("The min String is:%s/n",t);   
  657. }   
  658. /*从输入的若干字符串(不超过100个)中找出最小的串进行输出,当字符串为@时结束输入*/  
  659. **************************************************************************   
  660. 24./*教材p.151*/  
  661. #include <stdio.h>   
  662. #include <string.h>    
  663. #define M 100   
  664. main()   
  665. {   
  666.  char a[M][M],*t;   
  667.  int i,j,m=0;   
  668.  for(i=0;i<M;i++)   
  669.  {   
  670.   for(j=0;j<M;j++)   
  671.   {   
  672.   a[i][j]=getchar();   /*这样一来空格,制表符都是字符了,而不是间断符*/  
  673.   if(a[i][j]=='/n'||a[i][j]==' '||a[i][j]=='/t')  /*但这一句使空格,制表符又是间断符了*/  
  674.    break;   
  675.   }   
  676.   if(a[i][0]=='/n')   
  677.    break;   
  678.   m++;   
  679.   a[i][j]='/0';   
  680.  }   
  681.  t=a[0];   
  682.  for(i=1;i<m;i++)   
  683.  {   
  684.   if(strcmp(t,a[i])>=0)/*因为是终于最小的比较,所以是t而不是a[0]*/  
  685.    t=a[i];   
  686.  }   
  687.  printf("The min String is:%s/n",t);   
  688. }   
  689. /*从输入的若干字符串(不超过100个)中找出最小的串进行输出。*/  
  690. /*受2009-06-20-004(2).c中的语句启发,自己在2009-07-07-001.c的基础上改编的。*/  
  691. /*与2009-07-07-001.c除了程序语句有区别外,结束符也有区别:*/  
  692. /*这个不用"@"字符串结束,而用回车结束*/  
  693. **************************************************************************   
  694. 25./*自己出的*/  
  695. #include <stdio.h>   
  696. main()   
  697. {   
  698.  int i,j,k;   
  699.  for(k=0;k<4;k++)   
  700.  {   
  701.   for(i=0;i<k;i++)   
  702.    printf(" ");   
  703.   for(j=0;j<7-2*k;j++)  /*注意2与k相乘时之间应加星号*/  
  704.    printf("*");   
  705.   printf("/n");   
  706.  }   
  707. }   
  708. /*打印倒三角*/  
  709. **************************************************************************   
  710. 26./*教材p.160*/  
  711. #include <stdio.h>   
  712. int fun (int m)   
  713. {   
  714.  if(m==1)   
  715.   return 1;   
  716.  else  
  717.   return m*fun(m-1);   
  718. }   
  719. main()   
  720. {   
  721.  int m,s;   
  722.  scanf("%d",&m);   
  723.  if(m<0)   
  724.   printf("Error!/n");   
  725.  else  
  726.   if(m==0)   
  727.    printf("(%d!)=1/n",m);   
  728.   else  
  729.   {   
  730.    s=fun(m);   
  731.    printf("(%d!)=%d/n",m,s);   
  732.   }   
  733. }   
  734. /*利用函数的递归调用,求一个数的阶乘*/  
  735. **************************************************************************   
  736. 27./*教材p.162*/  
  737. #include <stdio.h>   
  738. #include <math.h>   
  739. double fun(double a,double x0)   
  740. {   
  741.  double x1;   
  742.  x1=(x0+a/x0)/2.0;   
  743.  while(fabs(x1-x0)>1e-6)     
  744.   return fun(a,x1);    /*若此处不加return则下面return x1返回的始终是x1的第一次的值。而不是最终求的x1的值。最终求的x1的值,确实求出来了在临时内存中,但没被返回。*/  
  745.  return x1;                  
  746. }                            
  747. main()                          
  748. {                               
  749.  double a,x,x0=1.0;          
  750.  scanf("%lf",&a);            
  751.  if(a<0)   
  752.   printf("Error!/n");   
  753.  else  
  754.   x=fun(a,x0);   
  755.  printf("%lf/n",x);   
  756. }   
  757. /*根据此求平方根的迭代公式:x1=((x0+(a/x0))/2)求某数a的平方根*/  
  758. **************************************************************************   
  759. 28./*教材p.162*/  
  760. #include <stdio.h>   
  761. #include <math.h>   
  762. double fun(double a,double x0)   
  763. {   
  764.  double x1;   
  765.  x1=(x0+a/x0)/2.0;   
  766.  

抱歉!评论已关闭.