第十章要点整理图:
第十章例题:
- 例题10.1
- #include<stdio.h>
- void main()
- {
- int a,b;
- int *pointer_1,*pointer_2;
- a=100;b=10;
- pointer_1=&a; /*将a的地址赋给pointer_1*/
- pointer_2=&b; /*将b的地址赋给pointer_2*/
- printf("%d,%d\n",a,b);
- printf("%d,%d\n",*pointer_1,*pointer_2);
- }
- 例题10.2
- #include<stdio.h>
- void main()
- {
- int *p1,*p2,*p,a,b;
- scanf("%d,%d",&a,&b); /*输入两个整数*/
- p1=&a;p2=&b;
- if(a<b) /*使得p1指向大的数,p2指向小的数*/
- {
- p=p1;p1=p2;p2=p;
- }
- printf("a=%d,b=%d\n\n",a,b);
- printf("max=%d,min=%d\n",*p1,*p2);
- }
- 例题10.3
- #include<stdio.h>
- void main()
- {
- void swap(int *p1,int *p2); /*对swap函数声明*/
- int a,b;
- int *pointer_1,*pointer_2;
- scanf("%d,%d",&a,&b);
- pointer_1=&a;pointer_2=&b;
- if(a<b)
- {
- swap(pointer_1,pointer_2);
- }
- printf("\n%d,%d\n",a,b);
- }
- void swap(int *p1,int *p2) /*swap函数定义*/
- {
- int temp; /*不用指针类型【初值不可预见】*/
- temp=*p1;
- *p1=*p2;
- *p2=temp;
- }
- 例题10.4
- #include<stdio.h>
- void main()
- {
- void exchange(int *q1,int *q2,int *q3); /*exchange函数声明*/
- int a,b,c,*p1,*p2,*p3;
- scanf("%d,%d,%d",&a,&b,&c);
- p1=&a;p2=&b;p3=&c;
- exchange(p1,p2,p3); /*3个数排序*/
- printf("\n%d,%d,%d\n",a,b,c);
- }
- void exchange(int *q1,int *q2,int *q3) /*exchange函数定义*/
- {
- void swap(int *pt1,int *pt2); /*swap函数声明*/
- if(*q1<*q2) /*先将最大数移至最前面*/
- {
- swap(q1,q2);
- }
- if(*q1<*q3)
- {
- swap(q1,q3);
- }
- if(*q2<*q3)
- {
- swap(q2,q3);
- }
- }
- void swap(int *pt1,int *pt2) /*swap函数定义*/
- {
- int temp;
- temp=*pt1;
- *pt1=*pt2;
- *pt2=temp;
- }
- 例题10.5
- #include<stdio.h>
- void main()
- {
- int a[10];
- int i;
- for(i=0;i<10;i++)
- {
- scanf("%d",&a[i]);
- }
- printf("\n");
- for(i=0;i<10;i++)
- {
- printf("%d ",a[i]);
- }
- printf("\n");
- }
- #include<stdio.h>
- void main()
- {
- int a[10];
- int i;
- for(i=0;i<10;i++)
- {
- scanf("%d",&a[i]);
- }
- printf("\n");
- for(i=0;i<10;i++)
- {
- printf("%d ",*(a+i));
- }
- printf("\n");
- }
- #include<stdio.h>
- void main()
- {
- int a[10];
- int *p,i;
- for(i=0;i<10;i++)
- {
- scanf("%d",&a[i]);
- }
- printf("\n");
- for(p=a;p<(a+10);p++)
- {
- printf("%d ",*p);
- }
- printf("\n");
- }
- 例题10.6
- #include<stdio.h>
- void main()
- {
- int *p,i,a[10];
- p=a;
- for(i=0;i<10;i++,p++)
- {
- scanf("%d",p);
- }
- printf("\n");
- p=a; /*注意要写此句使指针指回数组首地址*/
- for(i=0;i<10;i++,p++)
- {
- printf("%d ",*p);
- }
- printf("\n");
- }
- 例题10.7
- #include<stdio.h>
- void main()
- {
- void inv(int x[],int n);
- int i,a[10]={3,7,9,11,0,6,7,5,4,2};
- printf("The original array:\n");
- for(i=0;i<10;i++)
- {
- printf("%d ",a[i]);
- }
- inv(a,10);
- printf("\nThe array has been inverted:\n");
- for(i=0;i<10;i++)
- {
- printf("%d ",a[i]);
- }
- printf("\n");
- }
- /*书中的方法,但我不推荐,多使用了一个变量m
- void inv(int x[],int n)
- {
- int temp,i,j,m=(n-1)/2;
- for(i=0;i<=m;i++)
- {
- j=n-1-i;
- temp=x[i];x[i]=x[j];x[j]=temp;
- }
- return;
- }
- */
- void inv(int x[],int n)
- {
- int temp,i=0,j=n-1;
- for(;i<j;i++)
- {
- j=n-1-i;
- temp=x[i];x[i]=x[j];x[j]=temp;
- }
- return;
- }
- 例题10.8
- #include<stdio.h>
- void main()
- {
- void inv(int *x,int n);
- int i,arr[10],*p=arr; /*注意:要给指针变量赋值,不然指针变量的指向是不确定的*/
- printf("The original array:\n");
- for(i=0;i<10;i++,p++)
- {
- scanf("%d",p);
- }
- printf("\n");
- p=arr;
- inv(p,10);
- printf("The array has been inverted:\n");
- for(i=0;i<10;i++,p++)
- {
- printf("%d ",*p);
- }
- printf("\n");
- }
- void inv(int *x,int n)
- {
- int *p,m,temp,*i,*j;
- m=(n-1)/2;
- i=x;j=x+n-1;p=x+m;
- for(;i<=p;i++,j--)
- {
- temp=*i;*i=*j;*j=temp;
- }
- return;
- }
- 例题10.9
- #include<stdio.h>
- void main()
- {
- void sort(int x[],int n);
- int *p,i,a[10];
- p=a;
- for(i=0;i<10;i++)
- {
- scanf("%d",p++);
- }
- p=a;
- sort(p,10);
- for(i=0;i<10;i++)
- {
- printf("%d ",*p);
- p++;
- }
- }
- void sort(int x[],int n)
- {
- int i,j,k,t;
- for(i=0;i<n-1;i++)
- {
- k=i;
- for(j=i+1;j<n;j++)
- {
- if(x[j]>x[k])
- {
- k=j;
- }
- }
- if(k!=i)
- {
- t=x[i];x[i]=x[k];x[k]=t;
- }
- }
- }
- 例题10.10
- #include<stdio.h>
- #define FORMAT "%d,%d\n"
- void main()
- {
- int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
- printf(FORMAT,a,*a); /*0行首地址,0行0列元素地址*/
- printf(FORMAT,a[0],*(a+0)); /*0行0列元素地址*/
- printf(FORMAT,&a[0],&a[0][0]); /*0行首地址,0行0列元素地址*/
- printf(FORMAT,a[1],a+1); /*1行首地址,1行0列元素地址*/
- printf(FORMAT,&a[1][0],*(a+1)+0); /*1行0列元素地址*/
- printf(FORMAT,a[2],*(a+2)); /*2行0列元素地址*/
- printf(FORMAT,&a[2],a+2); /*2行首地址*/
- printf(FORMAT,a[1][0],*(*(a+1)+0)); /*1行0列元素的值*/
- }