printf(\; } r( int m )
{ printf(\② ); m = ③ ; if( ④ ) ⑤ ; }
【3.31】输入n值,输出高度为n的等边三角形。例如当n=4时的图形如下: * *** *****
*******
#include
void prt( char c, int n )
{ if( n>0 )
{ printf( \;
① ;
}
}
main()
{ int i, n;
scanf(\;
for( i=1; i<=n; i++ )
{ ② ;
③ ; printf(\; } }
【3.32】下面的函数实现N层嵌套平方根的计算。 double y(double x, int n) { if( n==0 ) return(0);
else return ( sqrt(x+( ① )) ); }
【3.33】函数revstr(s)将字符串s置逆,如输入的实参s为字符串\, 则返回时 s 为字符串\。递归程序如下: revstr( char *s )
{ char *p=s, c;
while(*p) p++;
① ;
if(s
{ c=*s;
*s=*p;
② ;
revstr(s+1);
③ ;
}
}
如下是由非递归实现的revstr(s)函数:
revstr (s)
char *s; { char *p=s, c; while( *p ) p++; ④ ; while( s
【3.34】下面函数用递归调用的方法,将str中存放的长度为n的字符串反转过来,例如原来是\,反序为\。
void invent(char *str,int n)
{ char t;
t=*str; *str=*(str+n-1); *(str+n-1)=t; if( n>2 ) invent ( ① ,n-2); else ② ; }
【3.35】从键盘上输入10个整数,程序按降序完成从大到小的排序。 #include
max=p; for( s=p+1; s<=q; s++)
if( *s > *max ) ② ; swap( ③ ); sort( ④ ); }
swap( int *x, int *y ) { int temp; temp=*x; *x=*y; *y=temp; } main()
{ int i; printf(\; for( i=0; i<10;i++)
scanf(\; sort( ⑤ ); printf(\; for( i=0; i<10; i++)
printf(\;
}
【3.36】下面函数的功能是将一个整数存放到一个数组中。存放时按逆序存放。例如:483存放成\。#include
void convert(char *a, int n) { int i;
if((i=n/10) !=0 ) convert( ① , i ); *a = ② ; }
char str[10]= \; main()
{ int number;
scanf(\; convert( str, number ); puts(str); }
【3.38】下面程序通过指向整型的指针将数组a[3][4] 的内容按3行×4列的格式输出,请给printf( )填入适当的参数,使之通过指针p将数组元素按要求输出。 #include
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}, *p=a; main()
【3.37】下面程序的功能是实现数组元素中值的逆转。 { int i,j; #include
{ int i,n=10,a[10]={1,2,3,4,5,6,7,8,9,10}; invert(a,n-1); for(i=0;i<10;i++) printf(\; printf(\; }
invert(int *s,int num) { int *t,k; t=s+num; while( ① ) { k=*s; *s=*t; *t=k; ② ; ③ ; } }
for(i=0;i<3;i++ ) { for(j=0;j<4;j++ ) printf(\① ); } }
【3.39】下面程序的功能是:从键盘上输入一行字符,存入一个字符数组中,然后输出该字符串。 #include
{ char str[81], *sptr; int i;
for(i=0;i<80;i++ ) { str[i]=getchar( ); if(str[i]== '\\n') break; }
str[i]= ① ; sptr=str; while( *sptr ) putchar( *sptr ② ); }
【3.40】下面函数的功能是将字符变量的值插入已经按ASCII码值从小到大排好序的字符串中。 void fun(char *w,char x,int *n)
{ int i,p=0;
while(x>w[p]) ① ;
for(i=*n;i>=p;i--) ② ;
w[p]=x;
++*n;
}
【3.41】下面程序的功能是从键盘上输入两个字符串,
对两个字符串分别排序;然后将它们合并,合并后的字符串按ASCII码值从小到大排序,并删去相同的字符。
#include
strmerge(a,b,c) /* 将已排好序的字符串a、b合并到c */
char *a,*b,*c; { char t,*w; w=c;
while( *a!= '\\0' ① *b!='\\0' )
{ t= ② ?*a++:*b<*a ? *b++ : ( ③ ); /* 将*a、*b的小者存入t */ if( *w ④ '\\0' ) *w=t;
else if( t ⑤ *w) *++w=t; /* 将与*w不相同的t存入w */ }
while( *a != '\\0' ) /* 以下将a或b中剩下的字符存入w */
if( *a != *w ) *++w=*a++; else a++;
while( *b != '\\0')
if( *b != *w ) *++w=*b++; else b++;
*++w = ⑥ ;
}
strsort( char *s ) /* 将字符串s中的字符排序 */
{ int i,j,n;
char t,*w;
⑦ ;
for( n=0;*w != '\\0'; ⑧ ) w++; for( i=0;i
{ char s1[100],s2[100],s3[200]; printf(\; scanf(\,s1);
printf(\; scanf(\,s2); strsort(s1); strsort(s2); ⑩ = '\\0';
strmerge(s1,s2,s3);