1、C程序设计第四版谭浩强习题例题第8章第8章例8.1#includeint main() int a=100,b=10; int *pointer_1,*pointer_2;/可以直接写为int *pointer_1=&a,*pointer_2=&b; pointer_1=&a; pointer_2=&b; printf(a=%d,n=%dn,a,b); printf(*pointer_1=%d,*pointer_2=%dn,pointer_1,pointer_2); return 0;例8.2#includeint main() int *p1,*p2,*p,a,b; printf(pleas
2、e enter two integer numbers:n); scanf(%d,%d,&a,&b); p1=&a; p2=&b; if(ab) p=p1; p1=p2; p2=p; /if可换为p1=&b;p2=&a ,p也不用定义了. printf(a=%d,b=%dn,a,b); printf(max=%d,min=%dn,*p1,*p2); return 0; 例8.3#includeint main() void swap(int *p1,int *p2); int a,b; int *pointer_1,*pointer_2; printf(please enter a and b
3、:n); scanf(%d,%d,&a,&b); pointer_1=&a; pointer_2=&b; if(ab) swap(pointer_1,pointer_2);/传递的两个地址. printf(max=%d,min=%dn,*pointer_1,*pointer_2); return 0; void swap(int *p1,int *p2)/必须是定义地址的函数. int temp; temp=*p1; *p1=*p2; *p2=temp;/这里不能直接调换p1,p2的地址值.例8.4#includeint main() void swap(int *p1,int *p2); i
4、nt a,b; int *pointer_1,*pointer_2; printf(please enter two integer numbers:n); scanf(%d,%d,&a,&b); pointer_1=&a; pointer_2=&b; if(ab) swap(pointer_1,pointer_2); printf(%d,%dn,a,b); printf(max=%d,min=%dn,*pointer_1,*pointer_2); return 0; void swap(int *p1,int *p2) int *p; p=p1; p1=p2; p2=p;例8.5#inclu
5、deint main() void exchange(int *q1,int *q2,int *q3); int a,b,c,*p1,*p2,*p3; printf(please enter three integer numbers:n); scanf(%d,%d,%d,&a,&b,&c); p1=&a; p2=&b; p3=&c; exchange(p1,p2,p3); printf(The order is:%d,%d,%dn,a,b,c); return 0; void exchange(int *q1,int *q2,int *q3) void swap(int *pt1,int *
6、pt2); if(*q1*q2)swap(q1,q2); if(*q1*q3)swap(q1,q3); if(*q2*q3)swap(q2,q3);void swap(int *pt1,int *pt2) int temp; temp=*pt1; *pt1=*pt2; *pt2=temp;例8.6数组下标法:#includeint main() int a10; int i; printf(please enter 10 integer numbers:n); for(i=0;i10;i+) scanf(%d,&ai); for(i=0;i10;i+) printf(%d ,ai); prin
7、tf(n); return 0;数组名指向法#includeint main() int a10; int i; printf(please enter 10 integer numbers:n); for(i=0;i10;i+) scanf(%d,&ai); for(i=0;i10;i+) printf(%d ,*(a+i); printf(n); return 0;指针变量法:#includeint main() int a10; int *p,i; printf(please enter 10 integer numbers:n); for(i=0;i10;i+) scanf(%d,&a
8、i); for(p=a;pa+10;p+) printf(%d ,*p); printf(n); return 0;进一步改进:#includeint main() int a10; int *p; printf(please enter 10 integer numbers:n); for(p=a;pa+10;p+) scanf(%d,p); for(p=a;pa+10;p+) printf(%d ,*p); printf(n); return 0;例8.7#includeint main() int a10,*p,i; p=a; printf(please enter 10 integer
9、 numbers:n); for(i=0;i10;i+) scanf(%d,p+); for(i=0;i10;i+,p+) printf(%d ,*p); printf(n); return 0;#includeint main() int a10,*p,i; p=a; printf(please enter 10 integer numbers:n); for(i=0;i10;i+) scanf(%d,p+); for(i=0,p=a;i10;i+,p+) printf(%d ,*p);/这里可改为for(i=0,p=a;i10;i+)printf(%d ,*p+); printf(n);
10、return 0;例8.8#includeint main() void inv(int x,int n); int i,a10=3,7,9,11,0,6,7,5,4,2; printf(The original array:n); for(i=0;i10;i+) printf(%d ,ai); printf(n); inv(a,10); printf(The array has been inverted:n); for(i=0;i10;i+) printf(%d ,ai); printf(n); return 0;void inv(int x,int n) int temp,i,j,m=(
11、n-1)/2; for(i=0;i=m;i+) j=n-1-i; temp=xi; xi=xj; xj=temp; return;#includeint main() void inv(int *x,int n); int i,a10=3,7,9,11,0,6,7,5,4,2; printf(The original array:n); for(i=0;i10;i+) printf(%d ,ai); printf(n); inv(a,10); printf(The array has been inverted:n); for(i=0;i10;i+) printf(%d ,ai); print
12、f(n); return 0;void inv(int *x,int n) int *p,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;例8.9#includeint main() void inv(int *x,int n); int i,arr10,*p=arr; printf(The original array:n); for(i=0;i10;i+,p+) scanf(%d,p); printf(n); p=arr; inv(p,10); printf(T
13、he array has been inverted:n); for(p=arr;parr+10;p+) printf(%d ,*p); printf(n); return 0;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;例8.10#includeint main() void sort(int x,int n); int i,*p,a10; p=a; printf(please enter 10
14、 integer numbers:n); for(i=0;i10;i+) scanf(%d,p+); p=a; sort(p,10); for(p=a,i=0;i10;i+) printf(%d ,*p+);/书中为 printf(%d ,*p);p+; printf(n); return 0;void sort(int x,int n) int i,j,k,t; for(i=0;in-1;i+) k=i; for(j=i+1;jxk)k=j; if(k!=i) t=xi; xi=xk; xk=t; #includeint main() void sort(int *x,int n); int
15、 i,*p,a10; p=a; printf(please enter 10 integer numbers:n); for(i=0;i10;i+) scanf(%d,p+); p=a; sort(p,10); for(p=a,i=0;i10;i+) printf(%d ,*p+); printf(n); return 0;void sort(int *x,int n) int i,j,k,t; for(i=0;in-1;i+) k=i; for(j=i+1;j*(x+k)k=j; if(k!=i) t=*(x+i); *(x+i)=*(x+k); *(x+k)=t; 例8.11 #inclu
16、deint main() int a34=1,3,5,7,9,11,13,15,17,19,21,23; printf(%d,%dn,a,*a); printf(%d,%dn,a0,*(a+0); printf(%d,%dn,&a0,&a00); printf(%d,%dn,a1,a+1); printf(%d,%dn,&a10,*(a+1)+0); printf(%d,%dn,a2,*(a+2); printf(%d,%dn,&a2,a+2); printf(%d,%dn,a10,*(*(a+1)+0); printf(%d,%dn,*a2,*(*(a+2)+0); return 0;例8.
17、12#includeint main() int a34=1,3,5,7,9,11,13,15,17,19,21,23; int *p; for(p=a0;pa0+12;p+) if(p-a0)%4=0)printf(n); printf(%4d,*p); printf(n); return 0;例8.13#includeint main() int a34=1,3,5,7,9,11,13,15,17,19,21,23; int (*p)4,i,j; p=a; printf(please enter row and colum:); scanf(%d,%d,&i,&j); printf(a%d
18、,%d=%dn,i,j,*(*(p+i)+j); return 0;#includeint main() int a4=1,3,5,7; int (*p)4; p=&a; printf(%dn,(*p)3); return 0;例8.14#includeint main() void average(float *p,int n); void search(float (*p)4,int n); float score34=65,67,70,60,80,87,90,81,90,99,100,98; average(*score,12); search(score,2); return 0;vo
19、id average(float *p,int n) float *p_end; float sum=0,aver; p_end=p+n-1; for(;p=p_end;p+) sum=sum+(*p); aver=sum/n; printf(average=%5.2fn,aver);void search(float (*p)4,int n) int i; printf(The score of No.%d are:n,n); for(i=0;i4;i+) printf(%5.2f ,*(*(p+n)+i); printf(n);例8.15#includeint main() void se
20、arch(float (*p)4,int n); float score34=65,57,70,60,58,87,90,81,90,99,100,98; search(score,3); return 0;void search(float (*p)4,int n) int i,j,flag; for(j=0;jn;j+) flag=0; for(i=0;i4;i+) if(*(*(p+j)+i)60)flag=1; if(flag=1) printf(No.%d fails,his scores are:n,j+1); for(i=0;i4;i+) printf(%5.2f ,*(*(p+j
21、)+i); printf(n); 例8.16#includeint main() char string=I love China; printf(%sn,string); printf(%cn,string7); return 0;例8.17#includeint main() char *string=I love China; printf(%sn,string); return 0;例8.18字符数组#includeint main() char a=I an a student.,b20; int i; for(i=0;*(a+i)!=0;i+) *(b+i)=*(a+i); *(b
22、+i)=0; printf(string a is:%sn,a); printf(string b is:); for(i=0;*(b+i)!=0;i+) printf(%c,bi);/这三句可替换为printf(string b is:%sn,b); printf(n); return 0;例8.19指针变量指向字符数组#includeint main() char a=I an a student.,b20,*p1,*p2; p1=a; p2=b; for(;*p1!=0;p1+,p2+) *p2=*p1; *p2=0; printf(string a is:%sn,a); printf(
23、string b is:%sn,b); return 0;例8.20字符数组名做函数参数#includeint main() void copy_string(char from,char to); char a=I an a teacher.; char b=You are a student.; printf(string a=%snstring b=%sn,a,b); printf(copy string a to string b:n); copy_string(a,b); printf(nstring a=%snstring b=%sn,a,b); return 0;void cop
24、y_string(char from,char to) int i=0; while(fromi!=0) toi=fromi;i+; toi=0;字符型指针变量做参数#includeint main() void copy_string(char from,char to); char a=I an a teacher.; char b=You are a student.; char *from=a,*to=b; printf(string a=%snstring b=%sn,a,b); printf(copy string a to string b:n); copy_string(fro
25、m,to); printf(nstring a=%snstring b=%sn,a,b); return 0;void copy_string(char from,char to) int i=0; while(fromi!=0) toi=fromi;i+; toi=0;字符型指针变量做形参和实参#includeint main() void copy_string(char *from,char *to); char *a=I an a teacher.; char b=You are a student.; char *p=b; printf(string a=%snstring b=%sn,a,b); printf(copy string a to string b:n); copy_string(a,p); printf(nstring a=%snstring b=%sn,a,b); return 0;void copy_string(c
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1