第十章要点整理图:

【入门】C程序设计(第三版)谭浩强—第十章_第十章

 

第十章例题:

  1. 例题10.1 
  2. #include<stdio.h> 
  3. void main() 
  4.     int a,b; 
  5.     int *pointer_1,*pointer_2; 
  6.     a=100;b=10; 
  7.     pointer_1=&a;           /*将a的地址赋给pointer_1*/ 
  8.     pointer_2=&b;           /*将b的地址赋给pointer_2*/ 
  9.     printf("%d,%d\n",a,b); 
  10.     printf("%d,%d\n",*pointer_1,*pointer_2); 
  11.  
  12. 例题10.2 
  13. #include<stdio.h> 
  14. void main() 
  15.     int *p1,*p2,*p,a,b; 
  16.     scanf("%d,%d",&a,&b);               /*输入两个整数*/ 
  17.     p1=&a;p2=&b; 
  18.     if(a<b)                             /*使得p1指向大的数,p2指向小的数*/ 
  19.     { 
  20.         p=p1;p1=p2;p2=p; 
  21.     } 
  22.     printf("a=%d,b=%d\n\n",a,b); 
  23.     printf("max=%d,min=%d\n",*p1,*p2); 
  24.  
  25. 例题10.3 
  26. #include<stdio.h> 
  27. void main() 
  28.     void swap(int *p1,int *p2);     /*对swap函数声明*/ 
  29.     int a,b; 
  30.     int *pointer_1,*pointer_2; 
  31.     scanf("%d,%d",&a,&b); 
  32.     pointer_1=&a;pointer_2=&b; 
  33.     if(a<b) 
  34.     { 
  35.         swap(pointer_1,pointer_2); 
  36.     } 
  37.     printf("\n%d,%d\n",a,b); 
  38.  
  39. void swap(int *p1,int *p2)          /*swap函数定义*/ 
  40.     int temp;                       /*不用指针类型【初值不可预见】*/ 
  41.     temp=*p1; 
  42.     *p1=*p2; 
  43.     *p2=temp
  44.  
  45. 例题10.4 
  46. #include<stdio.h> 
  47. void main() 
  48.     void exchange(int *q1,int *q2,int *q3); /*exchange函数声明*/ 
  49.     int a,b,c,*p1,*p2,*p3; 
  50.     scanf("%d,%d,%d",&a,&b,&c); 
  51.     p1=&a;p2=&b;p3=&c; 
  52.     exchange(p1,p2,p3);                     /*3个数排序*/ 
  53.     printf("\n%d,%d,%d\n",a,b,c); 
  54.  
  55. void exchange(int *q1,int *q2,int *q3)      /*exchange函数定义*/ 
  56.     void swap(int *pt1,int *pt2);           /*swap函数声明*/ 
  57.     if(*q1<*q2)                             /*先将最大数移至最前面*/ 
  58.     { 
  59.         swap(q1,q2); 
  60.     } 
  61.     if(*q1<*q3) 
  62.     { 
  63.         swap(q1,q3); 
  64.     } 
  65.     if(*q2<*q3) 
  66.     { 
  67.         swap(q2,q3); 
  68.     } 
  69.  
  70. void swap(int *pt1,int *pt2)                /*swap函数定义*/ 
  71.     int temp
  72.     temp=*pt1; 
  73.     *pt1=*pt2; 
  74.     *pt2=temp
  75.  
  76. 例题10.5 
  77. #include<stdio.h> 
  78. void main() 
  79.     int a[10]; 
  80.     int i; 
  81.     for(i=0;i<10;i++) 
  82.     { 
  83.         scanf("%d",&a[i]); 
  84.     } 
  85.     printf("\n"); 
  86.     for(i=0;i<10;i++) 
  87.     { 
  88.         printf("%d ",a[i]); 
  89.     } 
  90.     printf("\n"); 
  91.  
  92. #include<stdio.h> 
  93. void main() 
  94.     int a[10]; 
  95.     int i; 
  96.     for(i=0;i<10;i++) 
  97.     { 
  98.         scanf("%d",&a[i]); 
  99.     } 
  100.     printf("\n"); 
  101.     for(i=0;i<10;i++) 
  102.     { 
  103.         printf("%d ",*(a+i)); 
  104.     } 
  105.     printf("\n"); 
  106.  
  107. #include<stdio.h> 
  108. void main() 
  109.     int a[10]; 
  110.     int *p,i; 
  111.     for(i=0;i<10;i++) 
  112.     { 
  113.         scanf("%d",&a[i]); 
  114.     } 
  115.     printf("\n"); 
  116.     for(p=a;p<(a+10);p++) 
  117.     { 
  118.         printf("%d ",*p); 
  119.     } 
  120.     printf("\n"); 
  121.  
  122. 例题10.6 
  123. #include<stdio.h> 
  124. void main() 
  125.     int *p,i,a[10]; 
  126.     p=a; 
  127.     for(i=0;i<10;i++,p++) 
  128.     { 
  129.         scanf("%d",p); 
  130.     } 
  131.     printf("\n"); 
  132.     p=a;                    /*注意要写此句使指针指回数组首地址*/ 
  133.     for(i=0;i<10;i++,p++) 
  134.     { 
  135.         printf("%d ",*p); 
  136.     } 
  137.     printf("\n"); 
  138.  
  139. 例题10.7 
  140. #include<stdio.h> 
  141. void main() 
  142.     void inv(int x[],int n); 
  143.     int i,a[10]={3,7,9,11,0,6,7,5,4,2}; 
  144.     printf("The original array:\n"); 
  145.     for(i=0;i<10;i++) 
  146.     { 
  147.         printf("%d ",a[i]); 
  148.     } 
  149.     inv(a,10); 
  150.     printf("\nThe array has been inverted:\n"); 
  151.     for(i=0;i<10;i++) 
  152.     { 
  153.         printf("%d ",a[i]); 
  154.     } 
  155.     printf("\n"); 
  156. /*书中的方法,但我不推荐,多使用了一个变量m 
  157. void inv(int x[],int n) 
  158.     int temp,i,j,m=(n-1)/2; 
  159.     for(i=0;i<=m;i++) 
  160.     { 
  161.         j=n-1-i; 
  162.         temp=x[i];x[i]=x[j];x[j]=temp
  163.     } 
  164.     return
  165. */ 
  166. void inv(int x[],int n) 
  167.     int temp,i=0,j=n-1; 
  168.     for(;i<j;i++) 
  169.     { 
  170.         j=n-1-i; 
  171.         temp=x[i];x[i]=x[j];x[j]=temp
  172.     } 
  173.     return
  174.  
  175. 例题10.8 
  176. #include<stdio.h> 
  177. void main() 
  178.     void inv(int *x,int n); 
  179.     int i,arr[10],*p=arr;               /*注意:要给指针变量赋值,不然指针变量的指向是不确定的*/ 
  180.     printf("The original array:\n"); 
  181.     for(i=0;i<10;i++,p++) 
  182.     { 
  183.         scanf("%d",p); 
  184.     } 
  185.     printf("\n"); 
  186.     p=arr; 
  187.     inv(p,10); 
  188.     printf("The array has been inverted:\n"); 
  189.     for(i=0;i<10;i++,p++) 
  190.     { 
  191.         printf("%d ",*p); 
  192.     } 
  193.     printf("\n"); 
  194.  
  195. void inv(int *x,int n) 
  196.     int *p,m,temp,*i,*j; 
  197.     m=(n-1)/2; 
  198.     i=x;j=x+n-1;p=x+m; 
  199.     for(;i<=p;i++,j--) 
  200.     { 
  201.         temp=*i;*i=*j;*j=temp
  202.     } 
  203.     return
  204.  
  205. 例题10.9 
  206. #include<stdio.h> 
  207. void main() 
  208.     void sort(int x[],int n); 
  209.     int *p,i,a[10]; 
  210.     p=a; 
  211.     for(i=0;i<10;i++) 
  212.     { 
  213.         scanf("%d",p++); 
  214.     } 
  215.     p=a; 
  216.     sort(p,10); 
  217.     for(i=0;i<10;i++) 
  218.     { 
  219.         printf("%d ",*p); 
  220.         p++; 
  221.     } 
  222.  
  223. void sort(int x[],int n) 
  224.     int i,j,k,t; 
  225.     for(i=0;i<n-1;i++) 
  226.     { 
  227.         k=i; 
  228.         for(j=i+1;j<n;j++) 
  229.         { 
  230.             if(x[j]>x[k]) 
  231.             { 
  232.                 k=j; 
  233.             } 
  234.         } 
  235.         if(k!=i) 
  236.         { 
  237.             t=x[i];x[i]=x[k];x[k]=t; 
  238.         } 
  239.     } 
  240.  
  241. 例题10.10 
  242. #include<stdio.h> 
  243. #define FORMAT "%d,%d\n" 
  244. void main() 
  245.     int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; 
  246.     printf(FORMAT,a,*a);                /*0行首地址,0行0列元素地址*/ 
  247.     printf(FORMAT,a[0],*(a+0));         /*0行0列元素地址*/ 
  248.     printf(FORMAT,&a[0],&a[0][0]);      /*0行首地址,0行0列元素地址*/ 
  249.     printf(FORMAT,a[1],a+1);            /*1行首地址,1行0列元素地址*/ 
  250.     printf(FORMAT,&a[1][0],*(a+1)+0);   /*1行0列元素地址*/ 
  251.     printf(FORMAT,a[2],*(a+2));         /*2行0列元素地址*/ 
  252.     printf(FORMAT,&a[2],a+2);           /*2行首地址*/ 
  253.     printf(FORMAT,a[1][0],*(*(a+1)+0)); /*1行0列元素的值*/