35. #include
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]);
printf(″\n″);
inv (a,10);
printf(″The array has been in verted:\n″);
for(i=0;i<10;i++)
printf (″%d,″,a[i]);
printf (″\n″);
}
36. void inv(int x[ ],int n) /*形参x是数组名*/
{ 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;
}运行情况如下:
The original array:
3,7,9,11,0,6,7,5,4,2
The array has been inverted:
2,4,5,7,6,0,11,9,7,3
37. (本页无文本内容)
38. #include
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]);
printf (″\n″);
inv(a,10);
printf ( ″The array has been in verted:\n″ );
for(i=0;i<10;i++)
printf (″%d,″,a[i]);
printf (″\n″);}对刚才的程序可以作一些改动。将函数inv中的形参x改成指针变量。
60. (2) 用字符指针指向一个字符串
可以不定义字符数组,而定义一个字符指针。用字符指针指向字符串中的字符。 例10.15 定义字符指针,使它指向一个字符串。
#include
void main()
{charstring=″ I love China!″;
printf(″%s\n″,string);
}
61. 例10.16 将字符串a复制为字符串b #include
void main()
{char a[ ]=″I am a boy.″,b[20];
int i;
for(i=0;*(a+i)!=′\0′;i++)
*(b+i)=*(a+i);
*(b+i)=′\0′;
printf(″string a is :%s\n″,a);
printf(″string b is:″);
for(i=0;b[i]!=′\0′;i++)
printf(″%c″,b[i]);
printf(″\n″);
}
62. 也可以设指针变量,用它的值的改变来指向字符串中的不同的字符。 例10.17 用指针变量来处理例10.16问题。#include
void main()
{char a[ ] =″I am a boy. ″,b[20],*p1,*p2;
int i;
p1=a;p2=b;
for(;*p1!=′\0′;p1++,p2++)
65. 10.4.2 字符指针作函数参数例10.110 用函数调用实现字符串的复制 #include
void main()
{void copy_string(char *from, char *to);
char *a="I am a teacher.";
char b[]="You are a student.";
char *p=b;
printf("string a=%s\nstring b=%s\n",a,p);
printf("copy string a to string b:\n ");
copy_string(a,p);
printf("\nstring a=%s\nstring b=%s\n",a,b);
}(1) 用字符数组作参数
66. void copy_string(char *from, char *to)
{ for(;*from!='\0';from++,to++)
{*to=*from;}
*to='\0';
} 程序运行结果如下:
string a=I am a teacher.
string b =You are a student.
copy string a to string b:
string a =I am a teacher.
stringb=I am a teacher.
78. #include
void main()
{ int max(int,int);
int a,b,c;
printf("please enter a and b:");
scanf(″%d,%d″,&a,&b);
c=max(a,b);
printf(″a=%d,b=%d,max=%d
″,a,b,c);
}
int max(int x,int y)
{ int z;
if(x>y)z=x;
else z=y;
return(z);
}运行情况如下:
please enter a and b:3,10↙
a=3,b=10,max=10
79. 将 程序改写为
#include
void main()
{int max(int,int);
int (*p)(int,int); int a,b,c;
p=max; printf("please enter a anb b:");
scanf("%d,%d",&a,&b);
c=(*p)(a,b); printf("a=%d,b=%d,max=%d\n",a,b,c);}
int max(int x,int y)
{int z;
if(x>y) z=x;
else z=y;
return(z);}(2)通过指针变量来访问它指向的函数。
80. 例10.21 输入两个整数,然后让用户选择1或2,选1时调用max函数,输出二者中的大数,选1时调用min函数,输出二者中的小数。#include
void main()
{int max(int,int);
int min(int ,int); int (*p)(int,int);
int a,b,c,n;
printf("please enter a and b:");
scanf("%d,%d",&a,&b);
printf("please choose 1 or 2:");
scanf("%d",&n);
if (n==1) p=max;
81. else if (n==2) p=min; c=(*p)(a,b);
printf("a=%d,b=%d,",a,b);
if (n==1) printf("max=%d\n",c);
else printf("min=%d\n",c);
}
int max(int x,int y)
{int z;
if(x>y) z=x;
else z=y;
return(z); }
int min(int x,int y)
{int z;
if(x
83. 实参函数名 f1 f2
↓ ↓
void fun(int (*x1)(int),int (*x2)(int,int))
{ int a,b,i,j;
a=(*x1)(i); /*调用f1函数*/
b=(*x2)(i,j);/*调用f2函数*/
}
84. 例10.22 有两个整数a和b,由用户输入1,2或3。如输入1,程序就给出a和b中大者,输入2,就给出a和b中小者,输入3,则求a与b之和。 #include
void main()
{int max(int,int); /* 函数声明 */
int min(int,int); /* 函数声明 */
int add(int,int); /* 函数声明 */
int fun(int x,int y, int (*p)(int,int)); /* 函数声明 */
int a=34,b=-21,n;
printf("please choose 1,2 or 3:");
scanf("%d",&n);
if (n==1) fun(a,b,max);
else if (n==2) fun(a,b,min);
else if (n==3) fun(a,b,add); }