} }
8. 函数void fun(int x,char * p)实现十进制整数x到二进制的转换。转换后的二
进制数以字符串的方式放置于p所指向的数组中。如输入13,输出1101,输入-13,输出-1101。 #include \#include
void fun(int x,char *p) { int i,k=x; char s[80]; for(i=0; ;i++)
{if(x%2==0) s[i]='0'; else s[i]='1'; x/=2;
if(x==0) break; }
if(k<0) *(p+0)='-'; for( ;i>=0;i--,p++) if(k<0) *(p+1)=s[i]; else *p=s[i]; if(i==-1)
{if(k<0) *(p+1)='\\0'; else *p='\\0'; } }
void main() {int a;
char c[18];
scanf(\ fun(a,c);
printf(\}
9. 编写函数int fun(char (*ss)[N],int m,char *s),功能是:形参ss指向一个
m行N列的二维字符数组,每行存放一个字符串。求出最大的字符串,复制到s所指的字符数组中,然后返回此最大字符串的长度。 #define N 30
#include
int fun(char (*ss)[N],int m,char *s)
6
{ int i;
s=strcpy(s,*(ss+0)); for (i=0;i if(strcmp(*(ss+i),s)>0) strcpy(s,*(ss+i)); return(strlen(s)); } void main() {char a[8][N],b[N]; int i,len; for(i=0;i<8;i++) gets(a[i]); len=fun(a,8,b); printf(\ } 10. 给定程序中,函数void fun(char *s)的功能是:在形参s所指字符串中的每个数字字符之后插入一个*号。例如,形参s所指的字符串为:def35adh3kjsdf7。执行结果为:def3*5*adh3*kjsdf7*。 #include for(i=0,j=0;*(s+i)!='\\0';i++,j++) {a[j]=*(s+i); if(*(s+i)>='0'&&*(s+i)<='9') {*(a+j+1)='*';j++;} } a[j]='\\0'; strcpy(s,a); } void main() {char str[80]; gets(str); fun(str); puts(str); } 11.给定程序中,函数void fun(char *s)的功能是:把形参s所指字符串中下标为 7 偶数的字符右移到下一个偶数位置,最右边被移出字符串的字符绕回放到第一个偶数位置,下标为奇数的字符不动(注:字符串的长度大于等于2)。例:若输入:abcd123,输出:3badc21 #include void main() {char str[80]; gets(str); fun(str); puts(str); } 12.编写函数void fun(char *s1,char *s2),功能是:对形参s1所指字符串升序排 序,并将排序后下标为偶数的字符取出,写入形参s2所指字符数组中,形成一个新串。例如,下面程序若输入:The C Programming Language,输出:□□LTaegghmnor。(□表空格) #include void fun(char *s1,char *s2) { int i,j,k,n=0;char t; for(i=0;*(s1+i)!=0;i++) n+=1; for(i=0;i for(j=i+1;j for(i=0,j=0;i { if(i%2==0) {s2[j]=s1[i];j++;} } s2[j]=0; } void main() {char a[80],b[80]; gets(a); fun(a,b); puts(b); } 13.函数void fun(char s[])的功能是:将s所指字符串中ASCII值为奇数的字符删 除。例如,若s所指字符串中的内容为:“ABCDEFG12345”,其中字符A的ASCII 8 码值为奇数、?、字符1的ASCII码值也为奇数、?都应当删除,其它依此类推。最后s中内容是:“BDF24”。 #include for(i=0;s[i]!='\\0';i++) if(s[i]%2!=0) {for(j=i;s[j]!='\\0';j++) s[j]=s[j+1]; i--; } } void main() {char a[80]; gets(a); fun(a); puts(a); } 14.请编写一个函数int fun(long int x),它的功能是:判断整数x是否是同构数。 若是同构数,函数返回1;否则返回0。所谓“同构数”是指这样的数,它出现在它的平方数的右边。例如:输入整数5,5的平方数是25,5是25中右侧的数,所以5是同构数,输出\。要求x的值不大于10000。 #include for(a=10; ;a*=10) {m=x*x%a; if(x==m) return(1); if(x*x/a==0) return(0); } } void main() {int x; scanf(\ if(fun(x)==1) puts(\ else puts(\} 15.编写取子字符串函数void fun(char s1[],char s2[],int m,int n),其作用是将 9 字符数组s2中从第m个字符开始的共n个字符拷贝到数组s1中;若s2中剩余字符不足n个,则取到尾部。程序运行时,当输入\、4,3时应输出\;当我们输入\、4,6时应输出\。注意,这里是将1作为起始计数。 #include void fun(char s1[],char s2[],int m,int n) { int i,a,b; a=strlen(s2); b=(a void main() {static char a[100],b[100]; int s,len; void fun(char s1[],char s2[],int m,int n); puts(\ gets(a); puts(\ scanf(\ fun(b,a,s,len); printf(\} 16. 编写函数void fun(char *str),将参数字符串中各单词首字母变大写,其余字 母变小写。输入输出在main中实现。如输入\输出\。单词以空格、逗号、句号分隔。 #include if(*(str+0)>='a'&&*(str+0)<='z') *(str+0)=*(str+0)-32; for(i=1;*(str+i)!='\\0';i++) {if(*(str+i-1)==' '||*(str+i-1)==','||*(str+i-1)=='.') {if(*(str+i)>='a'&&*(str+i)<='z') *(str+i)=*(str+i)-32; } else if(*(str+i)>='A'&&*(str+i)<='Z') *(str+i)=*(str+i)+32; } 10