习题9答案1.解答1:#include<iostream.h>void swap( int *pa, int *pb, int *pc){int t;if(*pa>*pb){ t=*pa; *pa=*pb; *pb=t; }if(*pa>*pc){ t=*pa; *pa=*pc; *pc=t; }if(*pb>*pc){ t=*pb; *pb=*pc; *pc=t; }}void main(void){int a, b, c;cin>>a>>b>>c;swap(&a,&b,&c);cout<<a<<'\t'<<b<<'\t'<<c<<'\n';}解答2:#include<iostream.h>void swap( int *m, int *n){int t;t=*m; *m=*n; *n=t;}void swap( int *pa, int *pb, int *pc){if(*pa>*pb) swap(pa, pb);if(*pa>*pc) swap(pa, pc);if(*pb>*pc) swap(pb, pc);}void main(void){int a, b, c;cin>>a>>b>>c;swap(&a,&b,&c);cout<<a<<'\t'<<b<<'\t'<<c<<'\n';}2.解答①(指针做参数):#include <iostream.h>void stat(char *str, int *letter, int *digit, int *other){char c;for( ; *str; str++)c=*str;if(('a'<=c&&c<='z')||('A'<=c&&c<='Z'))(*letter)++;else if('0'<=c && c<='9')(*digit)++;else(*other)++;}}void main( ){char str[100];int letter=0, digit=0, other=0; //变量letter用于统计字母的个数cin.getline(str,100); //变量digit用于统计数字字符的个数stat(str, &letter, &digit, &other); //变量other用于统计其他字符的个数cout<<"letter="<<letter<<endl;cout<<" digit="<<digit<<endl;cout<<" other="<<other<<endl;}程序的一次运行过程如下:She has 5 apples. <回车>letter=12digit=1other=4解答②(引用做参数):#include <iostream.h>void stat(char *str, int &letter, int &digit, int &other){char c;for( ; *str; str++){c=*str;if(('a'<=c&&c<='z')||('A'<=c&&c<='Z'))letter++;else if('0'<=c&&c<='9')digit++;elseother++;}}void main( ){char str[100];int letter=0, digit=0, other=0;cin.getline(str,100);stat(str, letter, digit, other);cout<<"letter="<<letter<<endl;cout<<" digit="<<digit<<endl;cout<<" other="<<other<<endl;}3.#include <iostream.h>void output(int *p, int n){for(int i=0; i<n; i++)cout<<*p++<<'\t';cout<<'\n';}void change(int a[10], int n){int t,*pend,*p,*maxp,*minp;minp=a;pend=a+n;for(p=a+1; p<pend; p++)if(*p<*minp) minp=p;if(minp!=a){t=*minp; *minp=*a; *a=t;}maxp=a;for(p=a+1;p<pend;p++)if(*p>*maxp) maxp=p;if(maxp!=a+n-1){t=*maxp; *maxp=*(a+n-1); *(a+n-1)=t;}}void main (){int a[10],n,i;cin>>n;for(i=0; i<n; i++)cin>> *(a+i);output(a,n); // 输出原数组change(a,n);output(a,n); // 输出调换后的数组}4.解答:#include <iostream.h>void output(int *p, int n){for(int i=0; i<n; i++)cout<<*p++<<'\t';cout<<'\n';}void right_move(int a[10], int n, int k){int *p1, *p2, *tp;tp=new int[k];p1=a+n-k;for(int i=0; i<k; i++) //将数组右侧k个数复制到临时数组中{*tp=*p1;tp++;p1++;}p1=a+n-1;p2=a+n-1-k;for(i=0; i<n-k; i++) //将数组前n-k个数移到数组最右侧{*p1 = *p2;p1--; p2--;}tp--;for(i=0; i<k; i++) //将临时数组中的k个元素复制到数组最前面{*p1 = *tp;p1--; tp--;}tp++;delete [] tp;}void main (){int a[10],k,i;cout<<"Please input 10 elements: ";for(i=0; i<10; i++)cin>> *(a+i);cout<<"Please input k: ";cin>>k;if(k<0)k=10+k;output(a,10); // 输出原数组right_move(a,10, k);output(a,10); // 输出调换后的数组}5.解答:#include <iostream.h>void select_odd_index(char *str1, char *str2){str1++;while(*str1){*str2 = *str1;str2++;str1++;if(*str1=='\0')break;str1++;}*str2='\0';}void main (){char str1[100],str2[50];cout<<"Please input a string: ";cin.getline(str1,100);select_odd_index(str1, str2);cout<<str2<<endl;}6.解答:#include <iostream.h>#include <string.h>void select_max(char *p1, char *p2){char temp[100];int maxlen=0,len;while(*p1){while(*p1==' ') p1++;len=0;while( *p1!=' ' && *p1!='\0' ){*(temp+len)=*p1;len++;p1++;}*(temp+len)='\0';if(len>maxlen){maxlen=len;strcpy(p2,temp);}}}void main (){char main_str[100],sub_str[50];cout<<"Please input main string: ";cin.getline(main_str,100);select_max(main_str, sub_str);cout<<sub_str<<endl;}7.解答:#include <iostream.h>int find(int a[ ][5], int *rowp, int *colp){int i, j, flag, max, maxj;for(i=0; i<4; i++){max=a[i][0];maxj=0;for(j=1; j<5; j++) // 找出第i行中最大值,并记下该最大值所在的列号。