上机考试答案.docx
《上机考试答案.docx》由会员分享,可在线阅读,更多相关《上机考试答案.docx(20页珍藏版)》请在冰豆网上搜索。
上机考试答案
1.请编写函数longfun(longintx),功能是:
将长整型数x中每一位上为奇数的数依次取出,并逆序构成一个新数返回。
#include<>
longfun(longintx)
{
longb=0;
while(x>0)
if((x%10)%2==1)
b=b*10+x%10;
x/=10;
}
returnb;
intmain()
longa,b;
printf("Pleaseinputalongintnum:
");
scanf("%ld",&a);
b=fun(a);
printf("b=%ld\n",b);
2.编写函数voidfun(char*s,char*t,char*p)将未在字符串s中出现、而在字符串t中出现的字符,形成一个新的字符串放在p中,p中字符按原字符串中字符顺序排列,但去掉重复字符。
例如:
当s为"12345",t为"8624677"时,p中的字符为:
"867";
当s为”goodluck”,t为”thankyouverymuch”时,输出:
”thanyverm”
inttest(char*s,intn,charch)
{inti;
for(i=0;iif(s[i]==ch)return1;return0;}voidfun(char*s,char*t,char*p){inti,j;for(i=j=0;t[i]!=0;i++)if(test(s,strlen(s),t[i])==0&&test(t,i,t[i])==0){p[j]=t[i];j++;}p[j]=0;}intmain(){chars1[50],s2[50],s3[50];gets(s1);gets(s2);fun(s1,s2,s3);puts(s3);}3.编写函数intfun(intm),计算并返回满足表达式:1+(1+2)+(1+2+3)+(1+2+3+4)+……+(1+2+3+……+n)<=m最大的n。例如,当m=10000时,程序输出:n=38。#include<>intfun(intm){inta,i,s;for(a=1,s=0;s<=m;a++)for(i=1;i<=a;i++)s+=i;returna-2;}intmain(){intx;scanf("%d",&x);printf("n=%d\n",fun(x));}4.编写函数voidfun(int*x,intn),它的功能是:删除有n个数据的数组x中所有包含数字6的数据,后续的剩余元素赋值为-1。n为数组长度,规定x中数据都为正数。如程序运行时若输入:12214616234161166391126713816删除后输出:12211911381-1-1-1-1-1-1#defineN10#include<>voidfun(int*x,intn){inti,j=0,k,t;for(i=0;i{k=x[i];while(k!=0){t=k%10;if(t==6)break;elsek=k/10;}if(k==0)x[j++]=x[i];}for(;jx[j]=-1;return;}intmain(){inta[N],i;for(i=0;iscanf("%d",a+i);fun(a,N);for(i=0;iprintf("%d",a[i]);printf("\n");}5.编写函数longfun(inthigh,intn),功能是:计算并返回high以内(不包含high)最大的n个素数之和。若不足n个,则到最小素数2为止。例如:若high=100,n=10,则函数的返回值为:732;若high=11,n=10,则函数返回:17。#include<>longsushu(longm){inti;for(i=2;iif(m%i==0)break;if(i>=m)return1;elsereturn0;}longfun(inthigh,intn){inti,j=0;longs=0;if(high<=2)return0;for(i=high-1;i>1;i--)if(sushu(i)){s+=i;j++;if(j>=n)returns;}returns;}intmain(){intk,n;scanf("%d%d",&k,&n);printf("sum=%ld\n",fun(k,n));}6.请编写函数intfun(int*a,intn),它的功能是:把形参a所指数组中的偶数按原顺序依次存放到a[0]、a[1]、a[2]、……中,把奇数从数组中删除,偶数个数通过函数值返回,以-1作为有效数据的结束标志。例:若输入:123456789101112131415,输出:2468101214n=7#include<>intfun(int*a,intn){inti,j;for(i=0,j=0;i{if(*(a+i)%2==0){a[j]=a[i];j++;}}a[j]=-1;returnj;}intmain(){intx[15],i,n;for(i=0;i<15;i++)scanf("%d",x+i);n=fun(x,15);for(i=0;x[i]!=-1;i++)printf("%d",x[i]);printf("n=%d\n",n);}7.给定程序中,函数fun的功能是:有M×N二维数组,分别将每一行的最大值与本行的最后一个数据(第N-1列数据)对调,其余数据保持不变。然后按每一行的最大值对二维数据各行降序排序。例如,有右侧数组数据:11524342522求最大值并对调后:1122434255222334658164722334647165883425426470042542647834567894567894596171839245217183996排序后最终输出:452171839960425426478322334647165811224342552456789#defineN6#defineM5#include<>voidfun(inta[M][N]){inti,j,k,m,t;for(i=0;i{k=0;for(j=1;jif(a[i][k]k=j;t=a[i][k];a[i][k]=a[i][N-1];a[i][N-1]=t;}for(i=0;i{k=i;for(j=i+1;jif(a[k][N-1]k=j;if(i!=k){for(m=0;m{t=a[k][m];a[k][m]=a[i][m];a[i][m]=t;}}}}intmain(){intx[M][N]={{11,52,43,4,25,22},{22,33,46,58,16,47},{83,42,54,26,47,0},{4,5,6,7,8,9},{45,96,17,18,39,2}},i,j;fun(x);for(i=0;i{for(j=0;jprintf("%3d",x[i][j]);printf("\n");}}8.函数voidfun(intx,char*p)实现十进制整数x到二进制的转换。转换后的二进制数以字符串的方式放置于p所指向的数组中。如输入13,输出1101,输入-13,输出-1101。#include""voidfun(intx,char*p){char*q,t;if(x<0){*p++='-';x=-x;}if(x==0){*p++='0';*p=0;return;}q=p;for(;x!=0;x/=2)*p++=x%2+'0';*p=0;for(p--;q{t=*q;*q=*p;*p=t;}}intmain(){inta;charc[18];scanf("%d",&a);fun(a,c);printf("%d'SBINARYIS:%s\n",a,c);}9.编写函数intfun(char(*ss)[N],intm,char*s),功能是:形参ss指向一个m行N列的二维字符数组,每行存放一个字符串。求出最大的字符串,复制到s所指的字符数组中,然后返回此最大字符串的长度。#include<>#include<>#defineN30intfun(char(*ss)[N],intm,char*s){inti,max;max=0;for(i=1;iif(strcmp(ss[i],ss[max])>0)max=i;strcpy(s,ss[max]);returnstrlen(ss[max]);}intmain(){chara[8][N],b[N];inti,len;for(i=0;i<8;i++)gets(a[i]);len=fun(a,8,b);printf("len=%d,str=%s\n",len,b);}10.给定程序中,函数voidfun(char*s)的功能是:在形参s所指字符串中的每个数字字符之后插入一个*号。例如,形参s所指的字符串为:def35adh3kjsdf7。执行结果为:def3*5*adh3*kjsdf7*。#include<>#include<>voidfun(char*s){inti,j;chara[100];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);}intmain(){charstr[80];gets(str);fun(str);puts(str);}11.给定程序中,函数voidfun(char*s)的功能是:把形参s所指字符串中下标为偶数的字符右移到下一个偶数位置,最右边被移出字符串的字符绕回放到第一个偶数位置,下标为奇数的字符不动(注:字符串的长度大于等于2)。例:若输入:abcd123,输出:3badc21#include<>#include<>voidfun(char*s){inti,t,l;l=strlen(s);if(l%2==1){t=s[l-1];for(i=l-1;i>0;i-=2)s[i]=s[i-2];}s[0]=t;else{t=s[l-2];for(i=l-2;i>0;i-=2)s[i]=s[i-2];s[0]=t;}}intmain(){charstr[80];gets(str);fun(str);puts(str);}12.编写函数voidfun(char*s1,char*s2),功能是:对形参s1所指字符串升序排序,并将排序后下标为偶数的字符取出,写入形参s2所指字符数组中,形成一个新串。例如,下面程序若输入:TheCProgrammingLanguage,输出:□□LTaegghmnor。(□表空格)#include<>voidfun(char*s1,char*s2){inti,j,n;chart;for(i=0;*(s1+i)!='\0';i++){n=i;for(j=i;*(s1+j)!='\0';j++){if(*(s1+n)>*(s1+j))n=j;}t=*(s1+n);*(s1+n)=*(s1+i);*(s1+i)=t;}for(i=0;*(s1+i)!='\0';i++){if(i%2==0){*s2=*(s1+i);s2++;}}*s2='\0';}intmain(){chara[80],b[80];gets(a);fun(a,b);puts(b);}13.函数voidfun(chars[])的功能是:将s所指字符串中ASCII值为奇数的字符删除。例如,若s所指字符串中的内容为:“ABCDEFG12345”,其中字符A的ASCII码值为奇数、…、字符1的ASCII码值也为奇数、…都应当删除,其它依此类推。最后s中内容是:“BDF24”。#include<>voidfun(chars[]){inti,j;for(i=0;s[i]!=0;i++){if(s[i]%2==1){for(j=i;s[j]!=0;j++)s[j]=s[j+1];i--;}}}intmain(){chara[80];gets(a);fun(a);puts(a);}14.请编写一个函数intfun(longintx),它的功能是:判断整数x是否是同构数。若是同构数,函数返回1;否则返回0。所谓“同构数”是指这样的数,它出现在它的平方数的右边。例如:输入整数5,5的平方数是25,5是25中右侧的数,所以5是同构数,输出"Yes"。要求x的值不大于10000。#include<>intfun(longintx){longs;s=x*x;while(x!=0){if(s%10!=x%10)return0;x/=10;s/=10;}return1;}intmain(){intx;scanf("%d",&x);if(fun(x)==1)puts("Yse");elseputs("No");}15.编写取子字符串函数voidfun(chars1[],chars2[],intm,intn),其作用是将字符数组s2中从第m个字符开始的共n个字符拷贝到数组s1中;若s2中剩余字符不足n个,则取到尾部。程序运行时,当输入"abcd123"、4,3时应输出"d12";当我们输入"abcd123"、4,6时应输出"d123"。注意,这里是将1作为起始计数.#include<>voidfun(chars1[],chars2[],intm,intn){inti;for(i=0;is1[i]=s2[m+i-1];s1[n]=0;}main(){staticchara[100],b[100];ints,len;voidfun(chars1[],chars2[],intm,intn);puts("ENTERASTRING:");gets(a);puts("ENTERSTARTINGPOSITIONANDLENGTH:");scanf("%d,%d",&s,&len);fun(b,a,s,len);printf("THESRBSTINGIS:%s\n",b);}16.编写函数voidfun(char*str),将参数字符串中各单词首字母变大写,其余字母变小写。输入输出在main中实现。如输入"youHAVE10books,don'tyou?"输出"YouHave10Books,Don'tYou?"。单词以空格、逗号、句号分隔。#include<>voidfun(char*str){inti,j;for(i=0;str[i];i++)if(str[i]>='A'&&str[i]<='Z')str[i]+=32;if(str[0]>='a'&&str[0]<='z')str[0]-=32;for(i=0;str[i];i++)if(str[i]==''||str[i]==','||str[i]=='.'){if(str[i+1]>='a'&&str[i+1]<='z')str[i+1]-=32;}}intmain(){chara[100];gets(a);fun(a);puts(a);}17.n个整数,前面各数循环顺序后移m个位置,最后m个数变成最前面m个数。写函数voidfun(int*p,intn,intm),实现上述功能。在main()中输入与输出。如下面程序输出78910123456。注意,m可能大于n。#include""voidfun(int*p,intn,intm){inti,j,k,t;k=m%n;for(i=0;i{t=p[n-1];for(j=n-2;j>=0;j--)p[j+1]=p[j];p[0]=t;}}intmain(){voidfun(int*,int,int);intx[10]={1,2,3,4,5,6,7,8,9,10},i;fun(x,10,14);for(i=0;i<10;i++)printf("%d",x[i]);printf("\n");}18.编写函数voidfun(char*s1,char*s2),实现字符串s1与s2的交叉连接,连接后得到的新字符串放在s1中。如输入abc12345,输出a1b2c345,若输入abcde123,则输出a1b2c3de。#include<>#include<>voidfun(char*s1,char*s2){inti,j,k;for(j=0,i=1;s2[j]!='\0';){for(k=strlen(s1);k>=i;k--)s1[k+1]=s1[k];s1[i]=s2[j];j++;i++;if(s1[i])i++;}}intmain(){chara[100],b[100];voidfun(char*,char*);gets(a);gets(b);fun(a,b);puts(a);}19.#include""intfun(longx,longy){inti,s,t;for(i=0,s=0;i<8;i++){s+=(x%10+y%10);x=x/10;y=y/10;}while(s>=10){for(i=0,t=0;s;i++){t+=s%10;s=s/10;}s=t;}returns;}intmain(){longx,y;intk;scanf("%ld%ld",&x,&y);k=fun(x,y);printf("yuanfenis%d",k);}20.m个人围成一圈,1,2,3循环报数,报到3的人退出,并将退出的序号依次存到数组p中,包括最后一个人的序号。到最后只余1人,输出最后留下的是第几号(最初的序号,以1起始)。若m=6,则输出n=1364251;若m=10,则输出n=436927185104;若m=100,则输出n=91369……1005891。函数intfun(intn,int*p)实现上述功能,返回n个人中最后余的1人的起始序号,并将退出的序号顺序写入p指向的数组中。#include<>intfun(intn,int*p){inta[10000];inti,j,k,m;for(i=0;ia[i]=1;i=0;j=1;m=n;while(m>0){if(j==3)if(a[i]==1){*(p+n-m)=i+1;a[i]=0;m--;k=i+1;j=1;i=(i+1)%n;}elsei=(i+1)%n;elseif(a[i]==1){j++;i=(i+1)%n;}elsei=(i+1)%n;}returnk;}intmain(){intm,a[10000],i,num;scanf("%d",&m);num=fun(m,a);printf("n=%d\n",num);for(i=0;iprintf("%-4d",a[i]);printf("\n");}
if(s[i]==ch)return1;
return0;
voidfun(char*s,char*t,char*p)
{inti,j;
for(i=j=0;t[i]!
=0;i++)
if(test(s,strlen(s),t[i])==0&&test(t,i,t[i])==0)
{p[j]=t[i];
j++;
p[j]=0;
{chars1[50],s2[50],s3[50];
gets(s1);gets(s2);
fun(s1,s2,s3);
puts(s3);
3.编写函数intfun(intm),计算并返回满足表达式:
1+(1+2)+(1+2+3)+(1+2+3+4)+……+(1+2+3+……+n)<=m最大的n。
例如,当m=10000时,程序输出:
n=38。
intfun(intm)
{inta,i,s;
for(a=1,s=0;s<=m;a++)
for(i=1;i<=a;i++)
s+=i;
returna-2;
{intx;
scanf("%d",&x);
printf("n=%d\n",fun(x));
4.编写函数voidfun(int*x,intn),它的功能是:
删除有n个数据的数组x中所有包含数字6的数据,后续的剩余元素赋值为-1。
n为数组长度,规定x中数据都为正数。
如程序运行时若输入:
12214616234161166391126713816
删除后输出:
12211911381-1-1-1-1-1-1
#defineN10
voidfun(int*x,intn)
inti,j=0,k,t;
for(i=0;i{k=x[i];while(k!=0){t=k%10;if(t==6)break;elsek=k/10;}if(k==0)x[j++]=x[i];}for(;jx[j]=-1;return;}intmain(){inta[N],i;for(i=0;iscanf("%d",a+i);fun(a,N);for(i=0;iprintf("%d",a[i]);printf("\n");}5.编写函数longfun(inthigh,intn),功能是:计算并返回high以内(不包含high)最大的n个素数之和。若不足n个,则到最小素数2为止。例如:若high=100,n=10,则函数的返回值为:732;若high=11,n=10,则函数返回:17。#include<>longsushu(longm){inti;for(i=2;iif(m%i==0)break;if(i>=m)return1;elsereturn0;}longfun(inthigh,intn){inti,j=0;longs=0;if(high<=2)return0;for(i=high-1;i>1;i--)if(sushu(i)){s+=i;j++;if(j>=n)returns;}returns;}intmain(){intk,n;scanf("%d%d",&k,&n);printf("sum=%ld\n",fun(k,n));}6.请编写函数intfun(int*a,intn),它的功能是:把形参a所指数组中的偶数按原顺序依次存放到a[0]、a[1]、a[2]、……中,把奇数从数组中删除,偶数个数通过函数值返回,以-1作为有效数据的结束标志。例:若输入:123456789101112131415,输出:2468101214n=7#include<>intfun(int*a,intn){inti,j;for(i=0,j=0;i{if(*(a+i)%2==0){a[j]=a[i];j++;}}a[j]=-1;returnj;}intmain(){intx[15],i,n;for(i=0;i<15;i++)scanf("%d",x+i);n=fun(x,15);for(i=0;x[i]!=-1;i++)printf("%d",x[i]);printf("n=%d\n",n);}7.给定程序中,函数fun的功能是:有M×N二维数组,分别将每一行的最大值与本行的最后一个数据(第N-1列数据)对调,其余数据保持不变。然后按每一行的最大值对二维数据各行降序排序。例如,有右侧数组数据:11524342522求最大值并对调后:1122434255222334658164722334647165883425426470042542647834567894567894596171839245217183996排序后最终输出:452171839960425426478322334647165811224342552456789#defineN6#defineM5#include<>voidfun(inta[M][N]){inti,j,k,m,t;for(i=0;i{k=0;for(j=1;jif(a[i][k]k=j;t=a[i][k];a[i][k]=a[i][N-1];a[i][N-1]=t;}for(i=0;i{k=i;for(j=i+1;jif(a[k][N-1]k=j;if(i!=k){for(m=0;m{t=a[k][m];a[k][m]=a[i][m];a[i][m]=t;}}}}intmain(){intx[M][N]={{11,52,43,4,25,22},{22,33,46,58,16,47},{83,42,54,26,47,0},{4,5,6,7,8,9},{45,96,17,18,39,2}},i,j;fun(x);for(i=0;i{for(j=0;jprintf("%3d",x[i][j]);printf("\n");}}8.函数voidfun(intx,char*p)实现十进制整数x到二进制的转换。转换后的二进制数以字符串的方式放置于p所指向的数组中。如输入13,输出1101,输入-13,输出-1101。#include""voidfun(intx,char*p){char*q,t;if(x<0){*p++='-';x=-x;}if(x==0){*p++='0';*p=0;return;}q=p;for(;x!=0;x/=2)*p++=x%2+'0';*p=0;for(p--;q{t=*q;*q=*p;*p=t;}}intmain(){inta;charc[18];scanf("%d",&a);fun(a,c);printf("%d'SBINARYIS:%s\n",a,c);}9.编写函数intfun(char(*ss)[N],intm,char*s),功能是:形参ss指向一个m行N列的二维字符数组,每行存放一个字符串。求出最大的字符串,复制到s所指的字符数组中,然后返回此最大字符串的长度。#include<>#include<>#defineN30intfun(char(*ss)[N],intm,char*s){inti,max;max=0;for(i=1;iif(strcmp(ss[i],ss[max])>0)max=i;strcpy(s,ss[max]);returnstrlen(ss[max]);}intmain(){chara[8][N],b[N];inti,len;for(i=0;i<8;i++)gets(a[i]);len=fun(a,8,b);printf("len=%d,str=%s\n",len,b);}10.给定程序中,函数voidfun(char*s)的功能是:在形参s所指字符串中的每个数字字符之后插入一个*号。例如,形参s所指的字符串为:def35adh3kjsdf7。执行结果为:def3*5*adh3*kjsdf7*。#include<>#include<>voidfun(char*s){inti,j;chara[100];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);}intmain(){charstr[80];gets(str);fun(str);puts(str);}11.给定程序中,函数voidfun(char*s)的功能是:把形参s所指字符串中下标为偶数的字符右移到下一个偶数位置,最右边被移出字符串的字符绕回放到第一个偶数位置,下标为奇数的字符不动(注:字符串的长度大于等于2)。例:若输入:abcd123,输出:3badc21#include<>#include<>voidfun(char*s){inti,t,l;l=strlen(s);if(l%2==1){t=s[l-1];for(i=l-1;i>0;i-=2)s[i]=s[i-2];}s[0]=t;else{t=s[l-2];for(i=l-2;i>0;i-=2)s[i]=s[i-2];s[0]=t;}}intmain(){charstr[80];gets(str);fun(str);puts(str);}12.编写函数voidfun(char*s1,char*s2),功能是:对形参s1所指字符串升序排序,并将排序后下标为偶数的字符取出,写入形参s2所指字符数组中,形成一个新串。例如,下面程序若输入:TheCProgrammingLanguage,输出:□□LTaegghmnor。(□表空格)#include<>voidfun(char*s1,char*s2){inti,j,n;chart;for(i=0;*(s1+i)!='\0';i++){n=i;for(j=i;*(s1+j)!='\0';j++){if(*(s1+n)>*(s1+j))n=j;}t=*(s1+n);*(s1+n)=*(s1+i);*(s1+i)=t;}for(i=0;*(s1+i)!='\0';i++){if(i%2==0){*s2=*(s1+i);s2++;}}*s2='\0';}intmain(){chara[80],b[80];gets(a);fun(a,b);puts(b);}13.函数voidfun(chars[])的功能是:将s所指字符串中ASCII值为奇数的字符删除。例如,若s所指字符串中的内容为:“ABCDEFG12345”,其中字符A的ASCII码值为奇数、…、字符1的ASCII码值也为奇数、…都应当删除,其它依此类推。最后s中内容是:“BDF24”。#include<>voidfun(chars[]){inti,j;for(i=0;s[i]!=0;i++){if(s[i]%2==1){for(j=i;s[j]!=0;j++)s[j]=s[j+1];i--;}}}intmain(){chara[80];gets(a);fun(a);puts(a);}14.请编写一个函数intfun(longintx),它的功能是:判断整数x是否是同构数。若是同构数,函数返回1;否则返回0。所谓“同构数”是指这样的数,它出现在它的平方数的右边。例如:输入整数5,5的平方数是25,5是25中右侧的数,所以5是同构数,输出"Yes"。要求x的值不大于10000。#include<>intfun(longintx){longs;s=x*x;while(x!=0){if(s%10!=x%10)return0;x/=10;s/=10;}return1;}intmain(){intx;scanf("%d",&x);if(fun(x)==1)puts("Yse");elseputs("No");}15.编写取子字符串函数voidfun(chars1[],chars2[],intm,intn),其作用是将字符数组s2中从第m个字符开始的共n个字符拷贝到数组s1中;若s2中剩余字符不足n个,则取到尾部。程序运行时,当输入"abcd123"、4,3时应输出"d12";当我们输入"abcd123"、4,6时应输出"d123"。注意,这里是将1作为起始计数.#include<>voidfun(chars1[],chars2[],intm,intn){inti;for(i=0;is1[i]=s2[m+i-1];s1[n]=0;}main(){staticchara[100],b[100];ints,len;voidfun(chars1[],chars2[],intm,intn);puts("ENTERASTRING:");gets(a);puts("ENTERSTARTINGPOSITIONANDLENGTH:");scanf("%d,%d",&s,&len);fun(b,a,s,len);printf("THESRBSTINGIS:%s\n",b);}16.编写函数voidfun(char*str),将参数字符串中各单词首字母变大写,其余字母变小写。输入输出在main中实现。如输入"youHAVE10books,don'tyou?"输出"YouHave10Books,Don'tYou?"。单词以空格、逗号、句号分隔。#include<>voidfun(char*str){inti,j;for(i=0;str[i];i++)if(str[i]>='A'&&str[i]<='Z')str[i]+=32;if(str[0]>='a'&&str[0]<='z')str[0]-=32;for(i=0;str[i];i++)if(str[i]==''||str[i]==','||str[i]=='.'){if(str[i+1]>='a'&&str[i+1]<='z')str[i+1]-=32;}}intmain(){chara[100];gets(a);fun(a);puts(a);}17.n个整数,前面各数循环顺序后移m个位置,最后m个数变成最前面m个数。写函数voidfun(int*p,intn,intm),实现上述功能。在main()中输入与输出。如下面程序输出78910123456。注意,m可能大于n。#include""voidfun(int*p,intn,intm){inti,j,k,t;k=m%n;for(i=0;i{t=p[n-1];for(j=n-2;j>=0;j--)p[j+1]=p[j];p[0]=t;}}intmain(){voidfun(int*,int,int);intx[10]={1,2,3,4,5,6,7,8,9,10},i;fun(x,10,14);for(i=0;i<10;i++)printf("%d",x[i]);printf("\n");}18.编写函数voidfun(char*s1,char*s2),实现字符串s1与s2的交叉连接,连接后得到的新字符串放在s1中。如输入abc12345,输出a1b2c345,若输入abcde123,则输出a1b2c3de。#include<>#include<>voidfun(char*s1,char*s2){inti,j,k;for(j=0,i=1;s2[j]!='\0';){for(k=strlen(s1);k>=i;k--)s1[k+1]=s1[k];s1[i]=s2[j];j++;i++;if(s1[i])i++;}}intmain(){chara[100],b[100];voidfun(char*,char*);gets(a);gets(b);fun(a,b);puts(a);}19.#include""intfun(longx,longy){inti,s,t;for(i=0,s=0;i<8;i++){s+=(x%10+y%10);x=x/10;y=y/10;}while(s>=10){for(i=0,t=0;s;i++){t+=s%10;s=s/10;}s=t;}returns;}intmain(){longx,y;intk;scanf("%ld%ld",&x,&y);k=fun(x,y);printf("yuanfenis%d",k);}20.m个人围成一圈,1,2,3循环报数,报到3的人退出,并将退出的序号依次存到数组p中,包括最后一个人的序号。到最后只余1人,输出最后留下的是第几号(最初的序号,以1起始)。若m=6,则输出n=1364251;若m=10,则输出n=436927185104;若m=100,则输出n=91369……1005891。函数intfun(intn,int*p)实现上述功能,返回n个人中最后余的1人的起始序号,并将退出的序号顺序写入p指向的数组中。#include<>intfun(intn,int*p){inta[10000];inti,j,k,m;for(i=0;ia[i]=1;i=0;j=1;m=n;while(m>0){if(j==3)if(a[i]==1){*(p+n-m)=i+1;a[i]=0;m--;k=i+1;j=1;i=(i+1)%n;}elsei=(i+1)%n;elseif(a[i]==1){j++;i=(i+1)%n;}elsei=(i+1)%n;}returnk;}intmain(){intm,a[10000],i,num;scanf("%d",&m);num=fun(m,a);printf("n=%d\n",num);for(i=0;iprintf("%-4d",a[i]);printf("\n");}
k=x[i];
while(k!
=0)
t=k%10;
if(t==6)
break;
else
k=k/10;
if(k==0)
x[j++]=x[i];
for(;jx[j]=-1;return;}intmain(){inta[N],i;for(i=0;iscanf("%d",a+i);fun(a,N);for(i=0;iprintf("%d",a[i]);printf("\n");}5.编写函数longfun(inthigh,intn),功能是:计算并返回high以内(不包含high)最大的n个素数之和。若不足n个,则到最小素数2为止。例如:若high=100,n=10,则函数的返回值为:732;若high=11,n=10,则函数返回:17。#include<>longsushu(longm){inti;for(i=2;iif(m%i==0)break;if(i>=m)return1;elsereturn0;}longfun(inthigh,intn){inti,j=0;longs=0;if(high<=2)return0;for(i=high-1;i>1;i--)if(sushu(i)){s+=i;j++;if(j>=n)returns;}returns;}intmain(){intk,n;scanf("%d%d",&k,&n);printf("sum=%ld\n",fun(k,n));}6.请编写函数intfun(int*a,intn),它的功能是:把形参a所指数组中的偶数按原顺序依次存放到a[0]、a[1]、a[2]、……中,把奇数从数组中删除,偶数个数通过函数值返回,以-1作为有效数据的结束标志。例:若输入:123456789101112131415,输出:2468101214n=7#include<>intfun(int*a,intn){inti,j;for(i=0,j=0;i{if(*(a+i)%2==0){a[j]=a[i];j++;}}a[j]=-1;returnj;}intmain(){intx[15],i,n;for(i=0;i<15;i++)scanf("%d",x+i);n=fun(x,15);for(i=0;x[i]!=-1;i++)printf("%d",x[i]);printf("n=%d\n",n);}7.给定程序中,函数fun的功能是:有M×N二维数组,分别将每一行的最大值与本行的最后一个数据(第N-1列数据)对调,其余数据保持不变。然后按每一行的最大值对二维数据各行降序排序。例如,有右侧数组数据:11524342522求最大值并对调后:1122434255222334658164722334647165883425426470042542647834567894567894596171839245217183996排序后最终输出:452171839960425426478322334647165811224342552456789#defineN6#defineM5#include<>voidfun(inta[M][N]){inti,j,k,m,t;for(i=0;i{k=0;for(j=1;jif(a[i][k]k=j;t=a[i][k];a[i][k]=a[i][N-1];a[i][N-1]=t;}for(i=0;i{k=i;for(j=i+1;jif(a[k][N-1]k=j;if(i!=k){for(m=0;m{t=a[k][m];a[k][m]=a[i][m];a[i][m]=t;}}}}intmain(){intx[M][N]={{11,52,43,4,25,22},{22,33,46,58,16,47},{83,42,54,26,47,0},{4,5,6,7,8,9},{45,96,17,18,39,2}},i,j;fun(x);for(i=0;i{for(j=0;jprintf("%3d",x[i][j]);printf("\n");}}8.函数voidfun(intx,char*p)实现十进制整数x到二进制的转换。转换后的二进制数以字符串的方式放置于p所指向的数组中。如输入13,输出1101,输入-13,输出-1101。#include""voidfun(intx,char*p){char*q,t;if(x<0){*p++='-';x=-x;}if(x==0){*p++='0';*p=0;return;}q=p;for(;x!=0;x/=2)*p++=x%2+'0';*p=0;for(p--;q{t=*q;*q=*p;*p=t;}}intmain(){inta;charc[18];scanf("%d",&a);fun(a,c);printf("%d'SBINARYIS:%s\n",a,c);}9.编写函数intfun(char(*ss)[N],intm,char*s),功能是:形参ss指向一个m行N列的二维字符数组,每行存放一个字符串。求出最大的字符串,复制到s所指的字符数组中,然后返回此最大字符串的长度。#include<>#include<>#defineN30intfun(char(*ss)[N],intm,char*s){inti,max;max=0;for(i=1;iif(strcmp(ss[i],ss[max])>0)max=i;strcpy(s,ss[max]);returnstrlen(ss[max]);}intmain(){chara[8][N],b[N];inti,len;for(i=0;i<8;i++)gets(a[i]);len=fun(a,8,b);printf("len=%d,str=%s\n",len,b);}10.给定程序中,函数voidfun(char*s)的功能是:在形参s所指字符串中的每个数字字符之后插入一个*号。例如,形参s所指的字符串为:def35adh3kjsdf7。执行结果为:def3*5*adh3*kjsdf7*。#include<>#include<>voidfun(char*s){inti,j;chara[100];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);}intmain(){charstr[80];gets(str);fun(str);puts(str);}11.给定程序中,函数voidfun(char*s)的功能是:把形参s所指字符串中下标为偶数的字符右移到下一个偶数位置,最右边被移出字符串的字符绕回放到第一个偶数位置,下标为奇数的字符不动(注:字符串的长度大于等于2)。例:若输入:abcd123,输出:3badc21#include<>#include<>voidfun(char*s){inti,t,l;l=strlen(s);if(l%2==1){t=s[l-1];for(i=l-1;i>0;i-=2)s[i]=s[i-2];}s[0]=t;else{t=s[l-2];for(i=l-2;i>0;i-=2)s[i]=s[i-2];s[0]=t;}}intmain(){charstr[80];gets(str);fun(str);puts(str);}12.编写函数voidfun(char*s1,char*s2),功能是:对形参s1所指字符串升序排序,并将排序后下标为偶数的字符取出,写入形参s2所指字符数组中,形成一个新串。例如,下面程序若输入:TheCProgrammingLanguage,输出:□□LTaegghmnor。(□表空格)#include<>voidfun(char*s1,char*s2){inti,j,n;chart;for(i=0;*(s1+i)!='\0';i++){n=i;for(j=i;*(s1+j)!='\0';j++){if(*(s1+n)>*(s1+j))n=j;}t=*(s1+n);*(s1+n)=*(s1+i);*(s1+i)=t;}for(i=0;*(s1+i)!='\0';i++){if(i%2==0){*s2=*(s1+i);s2++;}}*s2='\0';}intmain(){chara[80],b[80];gets(a);fun(a,b);puts(b);}13.函数voidfun(chars[])的功能是:将s所指字符串中ASCII值为奇数的字符删除。例如,若s所指字符串中的内容为:“ABCDEFG12345”,其中字符A的ASCII码值为奇数、…、字符1的ASCII码值也为奇数、…都应当删除,其它依此类推。最后s中内容是:“BDF24”。#include<>voidfun(chars[]){inti,j;for(i=0;s[i]!=0;i++){if(s[i]%2==1){for(j=i;s[j]!=0;j++)s[j]=s[j+1];i--;}}}intmain(){chara[80];gets(a);fun(a);puts(a);}14.请编写一个函数intfun(longintx),它的功能是:判断整数x是否是同构数。若是同构数,函数返回1;否则返回0。所谓“同构数”是指这样的数,它出现在它的平方数的右边。例如:输入整数5,5的平方数是25,5是25中右侧的数,所以5是同构数,输出"Yes"。要求x的值不大于10000。#include<>intfun(longintx){longs;s=x*x;while(x!=0){if(s%10!=x%10)return0;x/=10;s/=10;}return1;}intmain(){intx;scanf("%d",&x);if(fun(x)==1)puts("Yse");elseputs("No");}15.编写取子字符串函数voidfun(chars1[],chars2[],intm,intn),其作用是将字符数组s2中从第m个字符开始的共n个字符拷贝到数组s1中;若s2中剩余字符不足n个,则取到尾部。程序运行时,当输入"abcd123"、4,3时应输出"d12";当我们输入"abcd123"、4,6时应输出"d123"。注意,这里是将1作为起始计数.#include<>voidfun(chars1[],chars2[],intm,intn){inti;for(i=0;is1[i]=s2[m+i-1];s1[n]=0;}main(){staticchara[100],b[100];ints,len;voidfun(chars1[],chars2[],intm,intn);puts("ENTERASTRING:");gets(a);puts("ENTERSTARTINGPOSITIONANDLENGTH:");scanf("%d,%d",&s,&len);fun(b,a,s,len);printf("THESRBSTINGIS:%s\n",b);}16.编写函数voidfun(char*str),将参数字符串中各单词首字母变大写,其余字母变小写。输入输出在main中实现。如输入"youHAVE10books,don'tyou?"输出"YouHave10Books,Don'tYou?"。单词以空格、逗号、句号分隔。#include<>voidfun(char*str){inti,j;for(i=0;str[i];i++)if(str[i]>='A'&&str[i]<='Z')str[i]+=32;if(str[0]>='a'&&str[0]<='z')str[0]-=32;for(i=0;str[i];i++)if(str[i]==''||str[i]==','||str[i]=='.'){if(str[i+1]>='a'&&str[i+1]<='z')str[i+1]-=32;}}intmain(){chara[100];gets(a);fun(a);puts(a);}17.n个整数,前面各数循环顺序后移m个位置,最后m个数变成最前面m个数。写函数voidfun(int*p,intn,intm),实现上述功能。在main()中输入与输出。如下面程序输出78910123456。注意,m可能大于n。#include""voidfun(int*p,intn,intm){inti,j,k,t;k=m%n;for(i=0;i{t=p[n-1];for(j=n-2;j>=0;j--)p[j+1]=p[j];p[0]=t;}}intmain(){voidfun(int*,int,int);intx[10]={1,2,3,4,5,6,7,8,9,10},i;fun(x,10,14);for(i=0;i<10;i++)printf("%d",x[i]);printf("\n");}18.编写函数voidfun(char*s1,char*s2),实现字符串s1与s2的交叉连接,连接后得到的新字符串放在s1中。如输入abc12345,输出a1b2c345,若输入abcde123,则输出a1b2c3de。#include<>#include<>voidfun(char*s1,char*s2){inti,j,k;for(j=0,i=1;s2[j]!='\0';){for(k=strlen(s1);k>=i;k--)s1[k+1]=s1[k];s1[i]=s2[j];j++;i++;if(s1[i])i++;}}intmain(){chara[100],b[100];voidfun(char*,char*);gets(a);gets(b);fun(a,b);puts(a);}19.#include""intfun(longx,longy){inti,s,t;for(i=0,s=0;i<8;i++){s+=(x%10+y%10);x=x/10;y=y/10;}while(s>=10){for(i=0,t=0;s;i++){t+=s%10;s=s/10;}s=t;}returns;}intmain(){longx,y;intk;scanf("%ld%ld",&x,&y);k=fun(x,y);printf("yuanfenis%d",k);}20.m个人围成一圈,1,2,3循环报数,报到3的人退出,并将退出的序号依次存到数组p中,包括最后一个人的序号。到最后只余1人,输出最后留下的是第几号(最初的序号,以1起始)。若m=6,则输出n=1364251;若m=10,则输出n=436927185104;若m=100,则输出n=91369……1005891。函数intfun(intn,int*p)实现上述功能,返回n个人中最后余的1人的起始序号,并将退出的序号顺序写入p指向的数组中。#include<>intfun(intn,int*p){inta[10000];inti,j,k,m;for(i=0;ia[i]=1;i=0;j=1;m=n;while(m>0){if(j==3)if(a[i]==1){*(p+n-m)=i+1;a[i]=0;m--;k=i+1;j=1;i=(i+1)%n;}elsei=(i+1)%n;elseif(a[i]==1){j++;i=(i+1)%n;}elsei=(i+1)%n;}returnk;}intmain(){intm,a[10000],i,num;scanf("%d",&m);num=fun(m,a);printf("n=%d\n",num);for(i=0;iprintf("%-4d",a[i]);printf("\n");}
x[j]=-1;
return;
{inta[N],i;
for(i=0;iscanf("%d",a+i);fun(a,N);for(i=0;iprintf("%d",a[i]);printf("\n");}5.编写函数longfun(inthigh,intn),功能是:计算并返回high以内(不包含high)最大的n个素数之和。若不足n个,则到最小素数2为止。例如:若high=100,n=10,则函数的返回值为:732;若high=11,n=10,则函数返回:17。#include<>longsushu(longm){inti;for(i=2;iif(m%i==0)break;if(i>=m)return1;elsereturn0;}longfun(inthigh,intn){inti,j=0;longs=0;if(high<=2)return0;for(i=high-1;i>1;i--)if(sushu(i)){s+=i;j++;if(j>=n)returns;}returns;}intmain(){intk,n;scanf("%d%d",&k,&n);printf("sum=%ld\n",fun(k,n));}6.请编写函数intfun(int*a,intn),它的功能是:把形参a所指数组中的偶数按原顺序依次存放到a[0]、a[1]、a[2]、……中,把奇数从数组中删除,偶数个数通过函数值返回,以-1作为有效数据的结束标志。例:若输入:123456789101112131415,输出:2468101214n=7#include<>intfun(int*a,intn){inti,j;for(i=0,j=0;i{if(*(a+i)%2==0){a[j]=a[i];j++;}}a[j]=-1;returnj;}intmain(){intx[15],i,n;for(i=0;i<15;i++)scanf("%d",x+i);n=fun(x,15);for(i=0;x[i]!=-1;i++)printf("%d",x[i]);printf("n=%d\n",n);}7.给定程序中,函数fun的功能是:有M×N二维数组,分别将每一行的最大值与本行的最后一个数据(第N-1列数据)对调,其余数据保持不变。然后按每一行的最大值对二维数据各行降序排序。例如,有右侧数组数据:11524342522求最大值并对调后:1122434255222334658164722334647165883425426470042542647834567894567894596171839245217183996排序后最终输出:452171839960425426478322334647165811224342552456789#defineN6#defineM5#include<>voidfun(inta[M][N]){inti,j,k,m,t;for(i=0;i{k=0;for(j=1;jif(a[i][k]k=j;t=a[i][k];a[i][k]=a[i][N-1];a[i][N-1]=t;}for(i=0;i{k=i;for(j=i+1;jif(a[k][N-1]k=j;if(i!=k){for(m=0;m{t=a[k][m];a[k][m]=a[i][m];a[i][m]=t;}}}}intmain(){intx[M][N]={{11,52,43,4,25,22},{22,33,46,58,16,47},{83,42,54,26,47,0},{4,5,6,7,8,9},{45,96,17,18,39,2}},i,j;fun(x);for(i=0;i{for(j=0;jprintf("%3d",x[i][j]);printf("\n");}}8.函数voidfun(intx,char*p)实现十进制整数x到二进制的转换。转换后的二进制数以字符串的方式放置于p所指向的数组中。如输入13,输出1101,输入-13,输出-1101。#include""voidfun(intx,char*p){char*q,t;if(x<0){*p++='-';x=-x;}if(x==0){*p++='0';*p=0;return;}q=p;for(;x!=0;x/=2)*p++=x%2+'0';*p=0;for(p--;q{t=*q;*q=*p;*p=t;}}intmain(){inta;charc[18];scanf("%d",&a);fun(a,c);printf("%d'SBINARYIS:%s\n",a,c);}9.编写函数intfun(char(*ss)[N],intm,char*s),功能是:形参ss指向一个m行N列的二维字符数组,每行存放一个字符串。求出最大的字符串,复制到s所指的字符数组中,然后返回此最大字符串的长度。#include<>#include<>#defineN30intfun(char(*ss)[N],intm,char*s){inti,max;max=0;for(i=1;iif(strcmp(ss[i],ss[max])>0)max=i;strcpy(s,ss[max]);returnstrlen(ss[max]);}intmain(){chara[8][N],b[N];inti,len;for(i=0;i<8;i++)gets(a[i]);len=fun(a,8,b);printf("len=%d,str=%s\n",len,b);}10.给定程序中,函数voidfun(char*s)的功能是:在形参s所指字符串中的每个数字字符之后插入一个*号。例如,形参s所指的字符串为:def35adh3kjsdf7。执行结果为:def3*5*adh3*kjsdf7*。#include<>#include<>voidfun(char*s){inti,j;chara[100];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);}intmain(){charstr[80];gets(str);fun(str);puts(str);}11.给定程序中,函数voidfun(char*s)的功能是:把形参s所指字符串中下标为偶数的字符右移到下一个偶数位置,最右边被移出字符串的字符绕回放到第一个偶数位置,下标为奇数的字符不动(注:字符串的长度大于等于2)。例:若输入:abcd123,输出:3badc21#include<>#include<>voidfun(char*s){inti,t,l;l=strlen(s);if(l%2==1){t=s[l-1];for(i=l-1;i>0;i-=2)s[i]=s[i-2];}s[0]=t;else{t=s[l-2];for(i=l-2;i>0;i-=2)s[i]=s[i-2];s[0]=t;}}intmain(){charstr[80];gets(str);fun(str);puts(str);}12.编写函数voidfun(char*s1,char*s2),功能是:对形参s1所指字符串升序排序,并将排序后下标为偶数的字符取出,写入形参s2所指字符数组中,形成一个新串。例如,下面程序若输入:TheCProgrammingLanguage,输出:□□LTaegghmnor。(□表空格)#include<>voidfun(char*s1,char*s2){inti,j,n;chart;for(i=0;*(s1+i)!='\0';i++){n=i;for(j=i;*(s1+j)!='\0';j++){if(*(s1+n)>*(s1+j))n=j;}t=*(s1+n);*(s1+n)=*(s1+i);*(s1+i)=t;}for(i=0;*(s1+i)!='\0';i++){if(i%2==0){*s2=*(s1+i);s2++;}}*s2='\0';}intmain(){chara[80],b[80];gets(a);fun(a,b);puts(b);}13.函数voidfun(chars[])的功能是:将s所指字符串中ASCII值为奇数的字符删除。例如,若s所指字符串中的内容为:“ABCDEFG12345”,其中字符A的ASCII码值为奇数、…、字符1的ASCII码值也为奇数、…都应当删除,其它依此类推。最后s中内容是:“BDF24”。#include<>voidfun(chars[]){inti,j;for(i=0;s[i]!=0;i++){if(s[i]%2==1){for(j=i;s[j]!=0;j++)s[j]=s[j+1];i--;}}}intmain(){chara[80];gets(a);fun(a);puts(a);}14.请编写一个函数intfun(longintx),它的功能是:判断整数x是否是同构数。若是同构数,函数返回1;否则返回0。所谓“同构数”是指这样的数,它出现在它的平方数的右边。例如:输入整数5,5的平方数是25,5是25中右侧的数,所以5是同构数,输出"Yes"。要求x的值不大于10000。#include<>intfun(longintx){longs;s=x*x;while(x!=0){if(s%10!=x%10)return0;x/=10;s/=10;}return1;}intmain(){intx;scanf("%d",&x);if(fun(x)==1)puts("Yse");elseputs("No");}15.编写取子字符串函数voidfun(chars1[],chars2[],intm,intn),其作用是将字符数组s2中从第m个字符开始的共n个字符拷贝到数组s1中;若s2中剩余字符不足n个,则取到尾部。程序运行时,当输入"abcd123"、4,3时应输出"d12";当我们输入"abcd123"、4,6时应输出"d123"。注意,这里是将1作为起始计数.#include<>voidfun(chars1[],chars2[],intm,intn){inti;for(i=0;is1[i]=s2[m+i-1];s1[n]=0;}main(){staticchara[100],b[100];ints,len;voidfun(chars1[],chars2[],intm,intn);puts("ENTERASTRING:");gets(a);puts("ENTERSTARTINGPOSITIONANDLENGTH:");scanf("%d,%d",&s,&len);fun(b,a,s,len);printf("THESRBSTINGIS:%s\n",b);}16.编写函数voidfun(char*str),将参数字符串中各单词首字母变大写,其余字母变小写。输入输出在main中实现。如输入"youHAVE10books,don'tyou?"输出"YouHave10Books,Don'tYou?"。单词以空格、逗号、句号分隔。#include<>voidfun(char*str){inti,j;for(i=0;str[i];i++)if(str[i]>='A'&&str[i]<='Z')str[i]+=32;if(str[0]>='a'&&str[0]<='z')str[0]-=32;for(i=0;str[i];i++)if(str[i]==''||str[i]==','||str[i]=='.'){if(str[i+1]>='a'&&str[i+1]<='z')str[i+1]-=32;}}intmain(){chara[100];gets(a);fun(a);puts(a);}17.n个整数,前面各数循环顺序后移m个位置,最后m个数变成最前面m个数。写函数voidfun(int*p,intn,intm),实现上述功能。在main()中输入与输出。如下面程序输出78910123456。注意,m可能大于n。#include""voidfun(int*p,intn,intm){inti,j,k,t;k=m%n;for(i=0;i{t=p[n-1];for(j=n-2;j>=0;j--)p[j+1]=p[j];p[0]=t;}}intmain(){voidfun(int*,int,int);intx[10]={1,2,3,4,5,6,7,8,9,10},i;fun(x,10,14);for(i=0;i<10;i++)printf("%d",x[i]);printf("\n");}18.编写函数voidfun(char*s1,char*s2),实现字符串s1与s2的交叉连接,连接后得到的新字符串放在s1中。如输入abc12345,输出a1b2c345,若输入abcde123,则输出a1b2c3de。#include<>#include<>voidfun(char*s1,char*s2){inti,j,k;for(j=0,i=1;s2[j]!='\0';){for(k=strlen(s1);k>=i;k--)s1[k+1]=s1[k];s1[i]=s2[j];j++;i++;if(s1[i])i++;}}intmain(){chara[100],b[100];voidfun(char*,char*);gets(a);gets(b);fun(a,b);puts(a);}19.#include""intfun(longx,longy){inti,s,t;for(i=0,s=0;i<8;i++){s+=(x%10+y%10);x=x/10;y=y/10;}while(s>=10){for(i=0,t=0;s;i++){t+=s%10;s=s/10;}s=t;}returns;}intmain(){longx,y;intk;scanf("%ld%ld",&x,&y);k=fun(x,y);printf("yuanfenis%d",k);}20.m个人围成一圈,1,2,3循环报数,报到3的人退出,并将退出的序号依次存到数组p中,包括最后一个人的序号。到最后只余1人,输出最后留下的是第几号(最初的序号,以1起始)。若m=6,则输出n=1364251;若m=10,则输出n=436927185104;若m=100,则输出n=91369……1005891。函数intfun(intn,int*p)实现上述功能,返回n个人中最后余的1人的起始序号,并将退出的序号顺序写入p指向的数组中。#include<>intfun(intn,int*p){inta[10000];inti,j,k,m;for(i=0;ia[i]=1;i=0;j=1;m=n;while(m>0){if(j==3)if(a[i]==1){*(p+n-m)=i+1;a[i]=0;m--;k=i+1;j=1;i=(i+1)%n;}elsei=(i+1)%n;elseif(a[i]==1){j++;i=(i+1)%n;}elsei=(i+1)%n;}returnk;}intmain(){intm,a[10000],i,num;scanf("%d",&m);num=fun(m,a);printf("n=%d\n",num);for(i=0;iprintf("%-4d",a[i]);printf("\n");}
scanf("%d",a+i);
fun(a,N);
for(i=0;iprintf("%d",a[i]);printf("\n");}5.编写函数longfun(inthigh,intn),功能是:计算并返回high以内(不包含high)最大的n个素数之和。若不足n个,则到最小素数2为止。例如:若high=100,n=10,则函数的返回值为:732;若high=11,n=10,则函数返回:17。#include<>longsushu(longm){inti;for(i=2;iif(m%i==0)break;if(i>=m)return1;elsereturn0;}longfun(inthigh,intn){inti,j=0;longs=0;if(high<=2)return0;for(i=high-1;i>1;i--)if(sushu(i)){s+=i;j++;if(j>=n)returns;}returns;}intmain(){intk,n;scanf("%d%d",&k,&n);printf("sum=%ld\n",fun(k,n));}6.请编写函数intfun(int*a,intn),它的功能是:把形参a所指数组中的偶数按原顺序依次存放到a[0]、a[1]、a[2]、……中,把奇数从数组中删除,偶数个数通过函数值返回,以-1作为有效数据的结束标志。例:若输入:123456789101112131415,输出:2468101214n=7#include<>intfun(int*a,intn){inti,j;for(i=0,j=0;i{if(*(a+i)%2==0){a[j]=a[i];j++;}}a[j]=-1;returnj;}intmain(){intx[15],i,n;for(i=0;i<15;i++)scanf("%d",x+i);n=fun(x,15);for(i=0;x[i]!=-1;i++)printf("%d",x[i]);printf("n=%d\n",n);}7.给定程序中,函数fun的功能是:有M×N二维数组,分别将每一行的最大值与本行的最后一个数据(第N-1列数据)对调,其余数据保持不变。然后按每一行的最大值对二维数据各行降序排序。例如,有右侧数组数据:11524342522求最大值并对调后:1122434255222334658164722334647165883425426470042542647834567894567894596171839245217183996排序后最终输出:452171839960425426478322334647165811224342552456789#defineN6#defineM5#include<>voidfun(inta[M][N]){inti,j,k,m,t;for(i=0;i{k=0;for(j=1;jif(a[i][k]k=j;t=a[i][k];a[i][k]=a[i][N-1];a[i][N-1]=t;}for(i=0;i{k=i;for(j=i+1;jif(a[k][N-1]k=j;if(i!=k){for(m=0;m{t=a[k][m];a[k][m]=a[i][m];a[i][m]=t;}}}}intmain(){intx[M][N]={{11,52,43,4,25,22},{22,33,46,58,16,47},{83,42,54,26,47,0},{4,5,6,7,8,9},{45,96,17,18,39,2}},i,j;fun(x);for(i=0;i{for(j=0;jprintf("%3d",x[i][j]);printf("\n");}}8.函数voidfun(intx,char*p)实现十进制整数x到二进制的转换。转换后的二进制数以字符串的方式放置于p所指向的数组中。如输入13,输出1101,输入-13,输出-1101。#include""voidfun(intx,char*p){char*q,t;if(x<0){*p++='-';x=-x;}if(x==0){*p++='0';*p=0;return;}q=p;for(;x!=0;x/=2)*p++=x%2+'0';*p=0;for(p--;q{t=*q;*q=*p;*p=t;}}intmain(){inta;charc[18];scanf("%d",&a);fun(a,c);printf("%d'SBINARYIS:%s\n",a,c);}9.编写函数intfun(char(*ss)[N],intm,char*s),功能是:形参ss指向一个m行N列的二维字符数组,每行存放一个字符串。求出最大的字符串,复制到s所指的字符数组中,然后返回此最大字符串的长度。#include<>#include<>#defineN30intfun(char(*ss)[N],intm,char*s){inti,max;max=0;for(i=1;iif(strcmp(ss[i],ss[max])>0)max=i;strcpy(s,ss[max]);returnstrlen(ss[max]);}intmain(){chara[8][N],b[N];inti,len;for(i=0;i<8;i++)gets(a[i]);len=fun(a,8,b);printf("len=%d,str=%s\n",len,b);}10.给定程序中,函数voidfun(char*s)的功能是:在形参s所指字符串中的每个数字字符之后插入一个*号。例如,形参s所指的字符串为:def35adh3kjsdf7。执行结果为:def3*5*adh3*kjsdf7*。#include<>#include<>voidfun(char*s){inti,j;chara[100];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);}intmain(){charstr[80];gets(str);fun(str);puts(str);}11.给定程序中,函数voidfun(char*s)的功能是:把形参s所指字符串中下标为偶数的字符右移到下一个偶数位置,最右边被移出字符串的字符绕回放到第一个偶数位置,下标为奇数的字符不动(注:字符串的长度大于等于2)。例:若输入:abcd123,输出:3badc21#include<>#include<>voidfun(char*s){inti,t,l;l=strlen(s);if(l%2==1){t=s[l-1];for(i=l-1;i>0;i-=2)s[i]=s[i-2];}s[0]=t;else{t=s[l-2];for(i=l-2;i>0;i-=2)s[i]=s[i-2];s[0]=t;}}intmain(){charstr[80];gets(str);fun(str);puts(str);}12.编写函数voidfun(char*s1,char*s2),功能是:对形参s1所指字符串升序排序,并将排序后下标为偶数的字符取出,写入形参s2所指字符数组中,形成一个新串。例如,下面程序若输入:TheCProgrammingLanguage,输出:□□LTaegghmnor。(□表空格)#include<>voidfun(char*s1,char*s2){inti,j,n;chart;for(i=0;*(s1+i)!='\0';i++){n=i;for(j=i;*(s1+j)!='\0';j++){if(*(s1+n)>*(s1+j))n=j;}t=*(s1+n);*(s1+n)=*(s1+i);*(s1+i)=t;}for(i=0;*(s1+i)!='\0';i++){if(i%2==0){*s2=*(s1+i);s2++;}}*s2='\0';}intmain(){chara[80],b[80];gets(a);fun(a,b);puts(b);}13.函数voidfun(chars[])的功能是:将s所指字符串中ASCII值为奇数的字符删除。例如,若s所指字符串中的内容为:“ABCDEFG12345”,其中字符A的ASCII码值为奇数、…、字符1的ASCII码值也为奇数、…都应当删除,其它依此类推。最后s中内容是:“BDF24”。#include<>voidfun(chars[]){inti,j;for(i=0;s[i]!=0;i++){if(s[i]%2==1){for(j=i;s[j]!=0;j++)s[j]=s[j+1];i--;}}}intmain(){chara[80];gets(a);fun(a);puts(a);}14.请编写一个函数intfun(longintx),它的功能是:判断整数x是否是同构数。若是同构数,函数返回1;否则返回0。所谓“同构数”是指这样的数,它出现在它的平方数的右边。例如:输入整数5,5的平方数是25,5是25中右侧的数,所以5是同构数,输出"Yes"。要求x的值不大于10000。#include<>intfun(longintx){longs;s=x*x;while(x!=0){if(s%10!=x%10)return0;x/=10;s/=10;}return1;}intmain(){intx;scanf("%d",&x);if(fun(x)==1)puts("Yse");elseputs("No");}15.编写取子字符串函数voidfun(chars1[],chars2[],intm,intn),其作用是将字符数组s2中从第m个字符开始的共n个字符拷贝到数组s1中;若s2中剩余字符不足n个,则取到尾部。程序运行时,当输入"abcd123"、4,3时应输出"d12";当我们输入"abcd123"、4,6时应输出"d123"。注意,这里是将1作为起始计数.#include<>voidfun(chars1[],chars2[],intm,intn){inti;for(i=0;is1[i]=s2[m+i-1];s1[n]=0;}main(){staticchara[100],b[100];ints,len;voidfun(chars1[],chars2[],intm,intn);puts("ENTERASTRING:");gets(a);puts("ENTERSTARTINGPOSITIONANDLENGTH:");scanf("%d,%d",&s,&len);fun(b,a,s,len);printf("THESRBSTINGIS:%s\n",b);}16.编写函数voidfun(char*str),将参数字符串中各单词首字母变大写,其余字母变小写。输入输出在main中实现。如输入"youHAVE10books,don'tyou?"输出"YouHave10Books,Don'tYou?"。单词以空格、逗号、句号分隔。#include<>voidfun(char*str){inti,j;for(i=0;str[i];i++)if(str[i]>='A'&&str[i]<='Z')str[i]+=32;if(str[0]>='a'&&str[0]<='z')str[0]-=32;for(i=0;str[i];i++)if(str[i]==''||str[i]==','||str[i]=='.'){if(str[i+1]>='a'&&str[i+1]<='z')str[i+1]-=32;}}intmain(){chara[100];gets(a);fun(a);puts(a);}17.n个整数,前面各数循环顺序后移m个位置,最后m个数变成最前面m个数。写函数voidfun(int*p,intn,intm),实现上述功能。在main()中输入与输出。如下面程序输出78910123456。注意,m可能大于n。#include""voidfun(int*p,intn,intm){inti,j,k,t;k=m%n;for(i=0;i{t=p[n-1];for(j=n-2;j>=0;j--)p[j+1]=p[j];p[0]=t;}}intmain(){voidfun(int*,int,int);intx[10]={1,2,3,4,5,6,7,8,9,10},i;fun(x,10,14);for(i=0;i<10;i++)printf("%d",x[i]);printf("\n");}18.编写函数voidfun(char*s1,char*s2),实现字符串s1与s2的交叉连接,连接后得到的新字符串放在s1中。如输入abc12345,输出a1b2c345,若输入abcde123,则输出a1b2c3de。#include<>#include<>voidfun(char*s1,char*s2){inti,j,k;for(j=0,i=1;s2[j]!='\0';){for(k=strlen(s1);k>=i;k--)s1[k+1]=s1[k];s1[i]=s2[j];j++;i++;if(s1[i])i++;}}intmain(){chara[100],b[100];voidfun(char*,char*);gets(a);gets(b);fun(a,b);puts(a);}19.#include""intfun(longx,longy){inti,s,t;for(i=0,s=0;i<8;i++){s+=(x%10+y%10);x=x/10;y=y/10;}while(s>=10){for(i=0,t=0;s;i++){t+=s%10;s=s/10;}s=t;}returns;}intmain(){longx,y;intk;scanf("%ld%ld",&x,&y);k=fun(x,y);printf("yuanfenis%d",k);}20.m个人围成一圈,1,2,3循环报数,报到3的人退出,并将退出的序号依次存到数组p中,包括最后一个人的序号。到最后只余1人,输出最后留下的是第几号(最初的序号,以1起始)。若m=6,则输出n=1364251;若m=10,则输出n=436927185104;若m=100,则输出n=91369……1005891。函数intfun(intn,int*p)实现上述功能,返回n个人中最后余的1人的起始序号,并将退出的序号顺序写入p指向的数组中。#include<>intfun(intn,int*p){inta[10000];inti,j,k,m;for(i=0;ia[i]=1;i=0;j=1;m=n;while(m>0){if(j==3)if(a[i]==1){*(p+n-m)=i+1;a[i]=0;m--;k=i+1;j=1;i=(i+1)%n;}elsei=(i+1)%n;elseif(a[i]==1){j++;i=(i+1)%n;}elsei=(i+1)%n;}returnk;}intmain(){intm,a[10000],i,num;scanf("%d",&m);num=fun(m,a);printf("n=%d\n",num);for(i=0;iprintf("%-4d",a[i]);printf("\n");}
printf("%d",a[i]);
printf("\n");
5.编写函数longfun(inthigh,intn),功能是:
计算并返回high以内(不包含high)最大的n个素数之和。
若不足n个,则到最小素数2为止。
例如:
若high=100,n=10,则函数的返回值为:
732;若high=11,n=10,则函数返回:
17。
longsushu(longm)
inti;
for(i=2;iif(m%i==0)break;if(i>=m)return1;elsereturn0;}longfun(inthigh,intn){inti,j=0;longs=0;if(high<=2)return0;for(i=high-1;i>1;i--)if(sushu(i)){s+=i;j++;if(j>=n)returns;}returns;}intmain(){intk,n;scanf("%d%d",&k,&n);printf("sum=%ld\n",fun(k,n));}6.请编写函数intfun(int*a,intn),它的功能是:把形参a所指数组中的偶数按原顺序依次存放到a[0]、a[1]、a[2]、……中,把奇数从数组中删除,偶数个数通过函数值返回,以-1作为有效数据的结束标志。例:若输入:123456789101112131415,输出:2468101214n=7#include<>intfun(int*a,intn){inti,j;for(i=0,j=0;i{if(*(a+i)%2==0){a[j]=a[i];j++;}}a[j]=-1;returnj;}intmain(){intx[15],i,n;for(i=0;i<15;i++)scanf("%d",x+i);n=fun(x,15);for(i=0;x[i]!=-1;i++)printf("%d",x[i]);printf("n=%d\n",n);}7.给定程序中,函数fun的功能是:有M×N二维数组,分别将每一行的最大值与本行的最后一个数据(第N-1列数据)对调,其余数据保持不变。然后按每一行的最大值对二维数据各行降序排序。例如,有右侧数组数据:11524342522求最大值并对调后:1122434255222334658164722334647165883425426470042542647834567894567894596171839245217183996排序后最终输出:452171839960425426478322334647165811224342552456789#defineN6#defineM5#include<>voidfun(inta[M][N]){inti,j,k,m,t;for(i=0;i{k=0;for(j=1;jif(a[i][k]k=j;t=a[i][k];a[i][k]=a[i][N-1];a[i][N-1]=t;}for(i=0;i{k=i;for(j=i+1;jif(a[k][N-1]k=j;if(i!=k){for(m=0;m{t=a[k][m];a[k][m]=a[i][m];a[i][m]=t;}}}}intmain(){intx[M][N]={{11,52,43,4,25,22},{22,33,46,58,16,47},{83,42,54,26,47,0},{4,5,6,7,8,9},{45,96,17,18,39,2}},i,j;fun(x);for(i=0;i{for(j=0;jprintf("%3d",x[i][j]);printf("\n");}}8.函数voidfun(intx,char*p)实现十进制整数x到二进制的转换。转换后的二进制数以字符串的方式放置于p所指向的数组中。如输入13,输出1101,输入-13,输出-1101。#include""voidfun(intx,char*p){char*q,t;if(x<0){*p++='-';x=-x;}if(x==0){*p++='0';*p=0;return;}q=p;for(;x!=0;x/=2)*p++=x%2+'0';*p=0;for(p--;q{t=*q;*q=*p;*p=t;}}intmain(){inta;charc[18];scanf("%d",&a);fun(a,c);printf("%d'SBINARYIS:%s\n",a,c);}9.编写函数intfun(char(*ss)[N],intm,char*s),功能是:形参ss指向一个m行N列的二维字符数组,每行存放一个字符串。求出最大的字符串,复制到s所指的字符数组中,然后返回此最大字符串的长度。#include<>#include<>#defineN30intfun(char(*ss)[N],intm,char*s){inti,max;max=0;for(i=1;iif(strcmp(ss[i],ss[max])>0)max=i;strcpy(s,ss[max]);returnstrlen(ss[max]);}intmain(){chara[8][N],b[N];inti,len;for(i=0;i<8;i++)gets(a[i]);len=fun(a,8,b);printf("len=%d,str=%s\n",len,b);}10.给定程序中,函数voidfun(char*s)的功能是:在形参s所指字符串中的每个数字字符之后插入一个*号。例如,形参s所指的字符串为:def35adh3kjsdf7。执行结果为:def3*5*adh3*kjsdf7*。#include<>#include<>voidfun(char*s){inti,j;chara[100];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);}intmain(){charstr[80];gets(str);fun(str);puts(str);}11.给定程序中,函数voidfun(char*s)的功能是:把形参s所指字符串中下标为偶数的字符右移到下一个偶数位置,最右边被移出字符串的字符绕回放到第一个偶数位置,下标为奇数的字符不动(注:字符串的长度大于等于2)。例:若输入:abcd123,输出:3badc21#include<>#include<>voidfun(char*s){inti,t,l;l=strlen(s);if(l%2==1){t=s[l-1];for(i=l-1;i>0;i-=2)s[i]=s[i-2];}s[0]=t;else{t=s[l-2];for(i=l-2;i>0;i-=2)s[i]=s[i-2];s[0]=t;}}intmain(){charstr[80];gets(str);fun(str);puts(str);}12.编写函数voidfun(char*s1,char*s2),功能是:对形参s1所指字符串升序排序,并将排序后下标为偶数的字符取出,写入形参s2所指字符数组中,形成一个新串。例如,下面程序若输入:TheCProgrammingLanguage,输出:□□LTaegghmnor。(□表空格)#include<>voidfun(char*s1,char*s2){inti,j,n;chart;for(i=0;*(s1+i)!='\0';i++){n=i;for(j=i;*(s1+j)!='\0';j++){if(*(s1+n)>*(s1+j))n=j;}t=*(s1+n);*(s1+n)=*(s1+i);*(s1+i)=t;}for(i=0;*(s1+i)!='\0';i++){if(i%2==0){*s2=*(s1+i);s2++;}}*s2='\0';}intmain(){chara[80],b[80];gets(a);fun(a,b);puts(b);}13.函数voidfun(chars[])的功能是:将s所指字符串中ASCII值为奇数的字符删除。例如,若s所指字符串中的内容为:“ABCDEFG12345”,其中字符A的ASCII码值为奇数、…、字符1的ASCII码值也为奇数、…都应当删除,其它依此类推。最后s中内容是:“BDF24”。#include<>voidfun(chars[]){inti,j;for(i=0;s[i]!=0;i++){if(s[i]%2==1){for(j=i;s[j]!=0;j++)s[j]=s[j+1];i--;}}}intmain(){chara[80];gets(a);fun(a);puts(a);}14.请编写一个函数intfun(longintx),它的功能是:判断整数x是否是同构数。若是同构数,函数返回1;否则返回0。所谓“同构数”是指这样的数,它出现在它的平方数的右边。例如:输入整数5,5的平方数是25,5是25中右侧的数,所以5是同构数,输出"Yes"。要求x的值不大于10000。#include<>intfun(longintx){longs;s=x*x;while(x!=0){if(s%10!=x%10)return0;x/=10;s/=10;}return1;}intmain(){intx;scanf("%d",&x);if(fun(x)==1)puts("Yse");elseputs("No");}15.编写取子字符串函数voidfun(chars1[],chars2[],intm,intn),其作用是将字符数组s2中从第m个字符开始的共n个字符拷贝到数组s1中;若s2中剩余字符不足n个,则取到尾部。程序运行时,当输入"abcd123"、4,3时应输出"d12";当我们输入"abcd123"、4,6时应输出"d123"。注意,这里是将1作为起始计数.#include<>voidfun(chars1[],chars2[],intm,intn){inti;for(i=0;is1[i]=s2[m+i-1];s1[n]=0;}main(){staticchara[100],b[100];ints,len;voidfun(chars1[],chars2[],intm,intn);puts("ENTERASTRING:");gets(a);puts("ENTERSTARTINGPOSITIONANDLENGTH:");scanf("%d,%d",&s,&len);fun(b,a,s,len);printf("THESRBSTINGIS:%s\n",b);}16.编写函数voidfun(char*str),将参数字符串中各单词首字母变大写,其余字母变小写。输入输出在main中实现。如输入"youHAVE10books,don'tyou?"输出"YouHave10Books,Don'tYou?"。单词以空格、逗号、句号分隔。#include<>voidfun(char*str){inti,j;for(i=0;str[i];i++)if(str[i]>='A'&&str[i]<='Z')str[i]+=32;if(str[0]>='a'&&str[0]<='z')str[0]-=32;for(i=0;str[i];i++)if(str[i]==''||str[i]==','||str[i]=='.'){if(str[i+1]>='a'&&str[i+1]<='z')str[i+1]-=32;}}intmain(){chara[100];gets(a);fun(a);puts(a);}17.n个整数,前面各数循环顺序后移m个位置,最后m个数变成最前面m个数。写函数voidfun(int*p,intn,intm),实现上述功能。在main()中输入与输出。如下面程序输出78910123456。注意,m可能大于n。#include""voidfun(int*p,intn,intm){inti,j,k,t;k=m%n;for(i=0;i{t=p[n-1];for(j=n-2;j>=0;j--)p[j+1]=p[j];p[0]=t;}}intmain(){voidfun(int*,int,int);intx[10]={1,2,3,4,5,6,7,8,9,10},i;fun(x,10,14);for(i=0;i<10;i++)printf("%d",x[i]);printf("\n");}18.编写函数voidfun(char*s1,char*s2),实现字符串s1与s2的交叉连接,连接后得到的新字符串放在s1中。如输入abc12345,输出a1b2c345,若输入abcde123,则输出a1b2c3de。#include<>#include<>voidfun(char*s1,char*s2){inti,j,k;for(j=0,i=1;s2[j]!='\0';){for(k=strlen(s1);k>=i;k--)s1[k+1]=s1[k];s1[i]=s2[j];j++;i++;if(s1[i])i++;}}intmain(){chara[100],b[100];voidfun(char*,char*);gets(a);gets(b);fun(a,b);puts(a);}19.#include""intfun(longx,longy){inti,s,t;for(i=0,s=0;i<8;i++){s+=(x%10+y%10);x=x/10;y=y/10;}while(s>=10){for(i=0,t=0;s;i++){t+=s%10;s=s/10;}s=t;}returns;}intmain(){longx,y;intk;scanf("%ld%ld",&x,&y);k=fun(x,y);printf("yuanfenis%d",k);}20.m个人围成一圈,1,2,3循环报数,报到3的人退出,并将退出的序号依次存到数组p中,包括最后一个人的序号。到最后只余1人,输出最后留下的是第几号(最初的序号,以1起始)。若m=6,则输出n=1364251;若m=10,则输出n=436927185104;若m=100,则输出n=91369……1005891。函数intfun(intn,int*p)实现上述功能,返回n个人中最后余的1人的起始序号,并将退出的序号顺序写入p指向的数组中。#include<>intfun(intn,int*p){inta[10000];inti,j,k,m;for(i=0;ia[i]=1;i=0;j=1;m=n;while(m>0){if(j==3)if(a[i]==1){*(p+n-m)=i+1;a[i]=0;m--;k=i+1;j=1;i=(i+1)%n;}elsei=(i+1)%n;elseif(a[i]==1){j++;i=(i+1)%n;}elsei=(i+1)%n;}returnk;}intmain(){intm,a[10000],i,num;scanf("%d",&m);num=fun(m,a);printf("n=%d\n",num);for(i=0;iprintf("%-4d",a[i]);printf("\n");}
if(m%i==0)
if(i>=m)return1;
elsereturn0;
longfun(inthigh,intn)
inti,j=0;
longs=0;
if(high<=2)return0;
for(i=high-1;i>1;i--)
if(sushu(i))
if(j>=n)
returns;
{intk,n;
scanf("%d%d",&k,&n);
printf("sum=%ld\n",fun(k,n));
6.请编写函数intfun(int*a,intn),它的功能是:
把形参a所指数组中的偶数按原顺序依次存放到a[0]、a[1]、a[2]、……中,把奇数从数组中删除,偶数个数通过函数值返回,以-1作为有效数据的结束标志。
例:
若输入:
123456789101112131415,输出:
2468101214n=7
intfun(int*a,intn)
inti,j;
for(i=0,j=0;i{if(*(a+i)%2==0){a[j]=a[i];j++;}}a[j]=-1;returnj;}intmain(){intx[15],i,n;for(i=0;i<15;i++)scanf("%d",x+i);n=fun(x,15);for(i=0;x[i]!=-1;i++)printf("%d",x[i]);printf("n=%d\n",n);}7.给定程序中,函数fun的功能是:有M×N二维数组,分别将每一行的最大值与本行的最后一个数据(第N-1列数据)对调,其余数据保持不变。然后按每一行的最大值对二维数据各行降序排序。例如,有右侧数组数据:11524342522求最大值并对调后:1122434255222334658164722334647165883425426470042542647834567894567894596171839245217183996排序后最终输出:452171839960425426478322334647165811224342552456789#defineN6#defineM5#include<>voidfun(inta[M][N]){inti,j,k,m,t;for(i=0;i{k=0;for(j=1;jif(a[i][k]k=j;t=a[i][k];a[i][k]=a[i][N-1];a[i][N-1]=t;}for(i=0;i{k=i;for(j=i+1;jif(a[k][N-1]k=j;if(i!=k){for(m=0;m{t=a[k][m];a[k][m]=a[i][m];a[i][m]=t;}}}}intmain(){intx[M][N]={{11,52,43,4,25,22},{22,33,46,58,16,47},{83,42,54,26,47,0},{4,5,6,7,8,9},{45,96,17,18,39,2}},i,j;fun(x);for(i=0;i{for(j=0;jprintf("%3d",x[i][j]);printf("\n");}}8.函数voidfun(intx,char*p)实现十进制整数x到二进制的转换。转换后的二进制数以字符串的方式放置于p所指向的数组中。如输入13,输出1101,输入-13,输出-1101。#include""voidfun(intx,char*p){char*q,t;if(x<0){*p++='-';x=-x;}if(x==0){*p++='0';*p=0;return;}q=p;for(;x!=0;x/=2)*p++=x%2+'0';*p=0;for(p--;q{t=*q;*q=*p;*p=t;}}intmain(){inta;charc[18];scanf("%d",&a);fun(a,c);printf("%d'SBINARYIS:%s\n",a,c);}9.编写函数intfun(char(*ss)[N],intm,char*s),功能是:形参ss指向一个m行N列的二维字符数组,每行存放一个字符串。求出最大的字符串,复制到s所指的字符数组中,然后返回此最大字符串的长度。#include<>#include<>#defineN30intfun(char(*ss)[N],intm,char*s){inti,max;max=0;for(i=1;iif(strcmp(ss[i],ss[max])>0)max=i;strcpy(s,ss[max]);returnstrlen(ss[max]);}intmain(){chara[8][N],b[N];inti,len;for(i=0;i<8;i++)gets(a[i]);len=fun(a,8,b);printf("len=%d,str=%s\n",len,b);}10.给定程序中,函数voidfun(char*s)的功能是:在形参s所指字符串中的每个数字字符之后插入一个*号。例如,形参s所指的字符串为:def35adh3kjsdf7。执行结果为:def3*5*adh3*kjsdf7*。#include<>#include<>voidfun(char*s){inti,j;chara[100];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);}intmain(){charstr[80];gets(str);fun(str);puts(str);}11.给定程序中,函数voidfun(char*s)的功能是:把形参s所指字符串中下标为偶数的字符右移到下一个偶数位置,最右边被移出字符串的字符绕回放到第一个偶数位置,下标为奇数的字符不动(注:字符串的长度大于等于2)。例:若输入:abcd123,输出:3badc21#include<>#include<>voidfun(char*s){inti,t,l;l=strlen(s);if(l%2==1){t=s[l-1];for(i=l-1;i>0;i-=2)s[i]=s[i-2];}s[0]=t;else{t=s[l-2];for(i=l-2;i>0;i-=2)s[i]=s[i-2];s[0]=t;}}intmain(){charstr[80];gets(str);fun(str);puts(str);}12.编写函数voidfun(char*s1,char*s2),功能是:对形参s1所指字符串升序排序,并将排序后下标为偶数的字符取出,写入形参s2所指字符数组中,形成一个新串。例如,下面程序若输入:TheCProgrammingLanguage,输出:□□LTaegghmnor。(□表空格)#include<>voidfun(char*s1,char*s2){inti,j,n;chart;for(i=0;*(s1+i)!='\0';i++){n=i;for(j=i;*(s1+j)!='\0';j++){if(*(s1+n)>*(s1+j))n=j;}t=*(s1+n);*(s1+n)=*(s1+i);*(s1+i)=t;}for(i=0;*(s1+i)!='\0';i++){if(i%2==0){*s2=*(s1+i);s2++;}}*s2='\0';}intmain(){chara[80],b[80];gets(a);fun(a,b);puts(b);}13.函数voidfun(chars[])的功能是:将s所指字符串中ASCII值为奇数的字符删除。例如,若s所指字符串中的内容为:“ABCDEFG12345”,其中字符A的ASCII码值为奇数、…、字符1的ASCII码值也为奇数、…都应当删除,其它依此类推。最后s中内容是:“BDF24”。#include<>voidfun(chars[]){inti,j;for(i=0;s[i]!=0;i++){if(s[i]%2==1){for(j=i;s[j]!=0;j++)s[j]=s[j+1];i--;}}}intmain(){chara[80];gets(a);fun(a);puts(a);}14.请编写一个函数intfun(longintx),它的功能是:判断整数x是否是同构数。若是同构数,函数返回1;否则返回0。所谓“同构数”是指这样的数,它出现在它的平方数的右边。例如:输入整数5,5的平方数是25,5是25中右侧的数,所以5是同构数,输出"Yes"。要求x的值不大于10000。#include<>intfun(longintx){longs;s=x*x;while(x!=0){if(s%10!=x%10)return0;x/=10;s/=10;}return1;}intmain(){intx;scanf("%d",&x);if(fun(x)==1)puts("Yse");elseputs("No");}15.编写取子字符串函数voidfun(chars1[],chars2[],intm,intn),其作用是将字符数组s2中从第m个字符开始的共n个字符拷贝到数组s1中;若s2中剩余字符不足n个,则取到尾部。程序运行时,当输入"abcd123"、4,3时应输出"d12";当我们输入"abcd123"、4,6时应输出"d123"。注意,这里是将1作为起始计数.#include<>voidfun(chars1[],chars2[],intm,intn){inti;for(i=0;is1[i]=s2[m+i-1];s1[n]=0;}main(){staticchara[100],b[100];ints,len;voidfun(chars1[],chars2[],intm,intn);puts("ENTERASTRING:");gets(a);puts("ENTERSTARTINGPOSITIONANDLENGTH:");scanf("%d,%d",&s,&len);fun(b,a,s,len);printf("THESRBSTINGIS:%s\n",b);}16.编写函数voidfun(char*str),将参数字符串中各单词首字母变大写,其余字母变小写。输入输出在main中实现。如输入"youHAVE10books,don'tyou?"输出"YouHave10Books,Don'tYou?"。单词以空格、逗号、句号分隔。#include<>voidfun(char*str){inti,j;for(i=0;str[i];i++)if(str[i]>='A'&&str[i]<='Z')str[i]+=32;if(str[0]>='a'&&str[0]<='z')str[0]-=32;for(i=0;str[i];i++)if(str[i]==''||str[i]==','||str[i]=='.'){if(str[i+1]>='a'&&str[i+1]<='z')str[i+1]-=32;}}intmain(){chara[100];gets(a);fun(a);puts(a);}17.n个整数,前面各数循环顺序后移m个位置,最后m个数变成最前面m个数。写函数voidfun(int*p,intn,intm),实现上述功能。在main()中输入与输出。如下面程序输出78910123456。注意,m可能大于n。#include""voidfun(int*p,intn,intm){inti,j,k,t;k=m%n;for(i=0;i{t=p[n-1];for(j=n-2;j>=0;j--)p[j+1]=p[j];p[0]=t;}}intmain(){voidfun(int*,int,int);intx[10]={1,2,3,4,5,6,7,8,9,10},i;fun(x,10,14);for(i=0;i<10;i++)printf("%d",x[i]);printf("\n");}18.编写函数voidfun(char*s1,char*s2),实现字符串s1与s2的交叉连接,连接后得到的新字符串放在s1中。如输入abc12345,输出a1b2c345,若输入abcde123,则输出a1b2c3de。#include<>#include<>voidfun(char*s1,char*s2){inti,j,k;for(j=0,i=1;s2[j]!='\0';){for(k=strlen(s1);k>=i;k--)s1[k+1]=s1[k];s1[i]=s2[j];j++;i++;if(s1[i])i++;}}intmain(){chara[100],b[100];voidfun(char*,char*);gets(a);gets(b);fun(a,b);puts(a);}19.#include""intfun(longx,longy){inti,s,t;for(i=0,s=0;i<8;i++){s+=(x%10+y%10);x=x/10;y=y/10;}while(s>=10){for(i=0,t=0;s;i++){t+=s%10;s=s/10;}s=t;}returns;}intmain(){longx,y;intk;scanf("%ld%ld",&x,&y);k=fun(x,y);printf("yuanfenis%d",k);}20.m个人围成一圈,1,2,3循环报数,报到3的人退出,并将退出的序号依次存到数组p中,包括最后一个人的序号。到最后只余1人,输出最后留下的是第几号(最初的序号,以1起始)。若m=6,则输出n=1364251;若m=10,则输出n=436927185104;若m=100,则输出n=91369……1005891。函数intfun(intn,int*p)实现上述功能,返回n个人中最后余的1人的起始序号,并将退出的序号顺序写入p指向的数组中。#include<>intfun(intn,int*p){inta[10000];inti,j,k,m;for(i=0;ia[i]=1;i=0;j=1;m=n;while(m>0){if(j==3)if(a[i]==1){*(p+n-m)=i+1;a[i]=0;m--;k=i+1;j=1;i=(i+1)%n;}elsei=(i+1)%n;elseif(a[i]==1){j++;i=(i+1)%n;}elsei=(i+1)%n;}returnk;}intmain(){intm,a[10000],i,num;scanf("%d",&m);num=fun(m,a);printf("n=%d\n",num);for(i=0;iprintf("%-4d",a[i]);printf("\n");}
if(*(a+i)%2==0)
a[j]=a[i];
a[j]=-1;
returnj;
{intx[15],i,n;
for(i=0;i<15;i++)
scanf("%d",x+i);
n=fun(x,15);
for(i=0;x[i]!
=-1;i++)
printf("%d",x[i]);
printf("n=%d\n",n);
7.给定程序中,函数fun的功能是:
有M×N二维数组,分别将每一行的最大值与本行的最后一个数据(第N-1列数据)对调,其余数据保持不变。
然后按每一行的最大值对二维数据各行降序排序。
例如,有右侧数组数据:
11524342522求最大值并对调后:
11224342552
223346581647223346471658
8342542647004254264783
456789456789
4596171839245217183996
排序后最终输出:
45217183996
04254264783
223346471658
456789
#defineN6
#defineM5
voidfun(inta[M][N])
{inti,j,k,m,t;
for(i=0;i{k=0;for(j=1;jif(a[i][k]k=j;t=a[i][k];a[i][k]=a[i][N-1];a[i][N-1]=t;}for(i=0;i{k=i;for(j=i+1;jif(a[k][N-1]k=j;if(i!=k){for(m=0;m{t=a[k][m];a[k][m]=a[i][m];a[i][m]=t;}}}}intmain(){intx[M][N]={{11,52,43,4,25,22},{22,33,46,58,16,47},{83,42,54,26,47,0},{4,5,6,7,8,9},{45,96,17,18,39,2}},i,j;fun(x);for(i=0;i{for(j=0;jprintf("%3d",x[i][j]);printf("\n");}}8.函数voidfun(intx,char*p)实现十进制整数x到二进制的转换。转换后的二进制数以字符串的方式放置于p所指向的数组中。如输入13,输出1101,输入-13,输出-1101。#include""voidfun(intx,char*p){char*q,t;if(x<0){*p++='-';x=-x;}if(x==0){*p++='0';*p=0;return;}q=p;for(;x!=0;x/=2)*p++=x%2+'0';*p=0;for(p--;q{t=*q;*q=*p;*p=t;}}intmain(){inta;charc[18];scanf("%d",&a);fun(a,c);printf("%d'SBINARYIS:%s\n",a,c);}9.编写函数intfun(char(*ss)[N],intm,char*s),功能是:形参ss指向一个m行N列的二维字符数组,每行存放一个字符串。求出最大的字符串,复制到s所指的字符数组中,然后返回此最大字符串的长度。#include<>#include<>#defineN30intfun(char(*ss)[N],intm,char*s){inti,max;max=0;for(i=1;iif(strcmp(ss[i],ss[max])>0)max=i;strcpy(s,ss[max]);returnstrlen(ss[max]);}intmain(){chara[8][N],b[N];inti,len;for(i=0;i<8;i++)gets(a[i]);len=fun(a,8,b);printf("len=%d,str=%s\n",len,b);}10.给定程序中,函数voidfun(char*s)的功能是:在形参s所指字符串中的每个数字字符之后插入一个*号。例如,形参s所指的字符串为:def35adh3kjsdf7。执行结果为:def3*5*adh3*kjsdf7*。#include<>#include<>voidfun(char*s){inti,j;chara[100];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);}intmain(){charstr[80];gets(str);fun(str);puts(str);}11.给定程序中,函数voidfun(char*s)的功能是:把形参s所指字符串中下标为偶数的字符右移到下一个偶数位置,最右边被移出字符串的字符绕回放到第一个偶数位置,下标为奇数的字符不动(注:字符串的长度大于等于2)。例:若输入:abcd123,输出:3badc21#include<>#include<>voidfun(char*s){inti,t,l;l=strlen(s);if(l%2==1){t=s[l-1];for(i=l-1;i>0;i-=2)s[i]=s[i-2];}s[0]=t;else{t=s[l-2];for(i=l-2;i>0;i-=2)s[i]=s[i-2];s[0]=t;}}intmain(){charstr[80];gets(str);fun(str);puts(str);}12.编写函数voidfun(char*s1,char*s2),功能是:对形参s1所指字符串升序排序,并将排序后下标为偶数的字符取出,写入形参s2所指字符数组中,形成一个新串。例如,下面程序若输入:TheCProgrammingLanguage,输出:□□LTaegghmnor。(□表空格)#include<>voidfun(char*s1,char*s2){inti,j,n;chart;for(i=0;*(s1+i)!='\0';i++){n=i;for(j=i;*(s1+j)!='\0';j++){if(*(s1+n)>*(s1+j))n=j;}t=*(s1+n);*(s1+n)=*(s1+i);*(s1+i)=t;}for(i=0;*(s1+i)!='\0';i++){if(i%2==0){*s2=*(s1+i);s2++;}}*s2='\0';}intmain(){chara[80],b[80];gets(a);fun(a,b);puts(b);}13.函数voidfun(chars[])的功能是:将s所指字符串中ASCII值为奇数的字符删除。例如,若s所指字符串中的内容为:“ABCDEFG12345”,其中字符A的ASCII码值为奇数、…、字符1的ASCII码值也为奇数、…都应当删除,其它依此类推。最后s中内容是:“BDF24”。#include<>voidfun(chars[]){inti,j;for(i=0;s[i]!=0;i++){if(s[i]%2==1){for(j=i;s[j]!=0;j++)s[j]=s[j+1];i--;}}}intmain(){chara[80];gets(a);fun(a);puts(a);}14.请编写一个函数intfun(longintx),它的功能是:判断整数x是否是同构数。若是同构数,函数返回1;否则返回0。所谓“同构数”是指这样的数,它出现在它的平方数的右边。例如:输入整数5,5的平方数是25,5是25中右侧的数,所以5是同构数,输出"Yes"。要求x的值不大于10000。#include<>intfun(longintx){longs;s=x*x;while(x!=0){if(s%10!=x%10)return0;x/=10;s/=10;}return1;}intmain(){intx;scanf("%d",&x);if(fun(x)==1)puts("Yse");elseputs("No");}15.编写取子字符串函数voidfun(chars1[],chars2[],intm,intn),其作用是将字符数组s2中从第m个字符开始的共n个字符拷贝到数组s1中;若s2中剩余字符不足n个,则取到尾部。程序运行时,当输入"abcd123"、4,3时应输出"d12";当我们输入"abcd123"、4,6时应输出"d123"。注意,这里是将1作为起始计数.#include<>voidfun(chars1[],chars2[],intm,intn){inti;for(i=0;is1[i]=s2[m+i-1];s1[n]=0;}main(){staticchara[100],b[100];ints,len;voidfun(chars1[],chars2[],intm,intn);puts("ENTERASTRING:");gets(a);puts("ENTERSTARTINGPOSITIONANDLENGTH:");scanf("%d,%d",&s,&len);fun(b,a,s,len);printf("THESRBSTINGIS:%s\n",b);}16.编写函数voidfun(char*str),将参数字符串中各单词首字母变大写,其余字母变小写。输入输出在main中实现。如输入"youHAVE10books,don'tyou?"输出"YouHave10Books,Don'tYou?"。单词以空格、逗号、句号分隔。#include<>voidfun(char*str){inti,j;for(i=0;str[i];i++)if(str[i]>='A'&&str[i]<='Z')str[i]+=32;if(str[0]>='a'&&str[0]<='z')str[0]-=32;for(i=0;str[i];i++)if(str[i]==''||str[i]==','||str[i]=='.'){if(str[i+1]>='a'&&str[i+1]<='z')str[i+1]-=32;}}intmain(){chara[100];gets(a);fun(a);puts(a);}17.n个整数,前面各数循环顺序后移m个位置,最后m个数变成最前面m个数。写函数voidfun(int*p,intn,intm),实现上述功能。在main()中输入与输出。如下面程序输出78910123456。注意,m可能大于n。#include""voidfun(int*p,intn,intm){inti,j,k,t;k=m%n;for(i=0;i{t=p[n-1];for(j=n-2;j>=0;j--)p[j+1]=p[j];p[0]=t;}}intmain(){voidfun(int*,int,int);intx[10]={1,2,3,4,5,6,7,8,9,10},i;fun(x,10,14);for(i=0;i<10;i++)printf("%d",x[i]);printf("\n");}18.编写函数voidfun(char*s1,char*s2),实现字符串s1与s2的交叉连接,连接后得到的新字符串放在s1中。如输入abc12345,输出a1b2c345,若输入abcde123,则输出a1b2c3de。#include<>#include<>voidfun(char*s1,char*s2){inti,j,k;for(j=0,i=1;s2[j]!='\0';){for(k=strlen(s1);k>=i;k--)s1[k+1]=s1[k];s1[i]=s2[j];j++;i++;if(s1[i])i++;}}intmain(){chara[100],b[100];voidfun(char*,char*);gets(a);gets(b);fun(a,b);puts(a);}19.#include""intfun(longx,longy){inti,s,t;for(i=0,s=0;i<8;i++){s+=(x%10+y%10);x=x/10;y=y/10;}while(s>=10){for(i=0,t=0;s;i++){t+=s%10;s=s/10;}s=t;}returns;}intmain(){longx,y;intk;scanf("%ld%ld",&x,&y);k=fun(x,y);printf("yuanfenis%d",k);}20.m个人围成一圈,1,2,3循环报数,报到3的人退出,并将退出的序号依次存到数组p中,包括最后一个人的序号。到最后只余1人,输出最后留下的是第几号(最初的序号,以1起始)。若m=6,则输出n=1364251;若m=10,则输出n=436927185104;若m=100,则输出n=91369……1005891。函数intfun(intn,int*p)实现上述功能,返回n个人中最后余的1人的起始序号,并将退出的序号顺序写入p指向的数组中。#include<>intfun(intn,int*p){inta[10000];inti,j,k,m;for(i=0;ia[i]=1;i=0;j=1;m=n;while(m>0){if(j==3)if(a[i]==1){*(p+n-m)=i+1;a[i]=0;m--;k=i+1;j=1;i=(i+1)%n;}elsei=(i+1)%n;elseif(a[i]==1){j++;i=(i+1)%n;}elsei=(i+1)%n;}returnk;}intmain(){intm,a[10000],i,num;scanf("%d",&m);num=fun(m,a);printf("n=%d\n",num);for(i=0;iprintf("%-4d",a[i]);printf("\n");}
k=0;
for(j=1;jif(a[i][k]k=j;t=a[i][k];a[i][k]=a[i][N-1];a[i][N-1]=t;}for(i=0;i{k=i;for(j=i+1;jif(a[k][N-1]k=j;if(i!=k){for(m=0;m{t=a[k][m];a[k][m]=a[i][m];a[i][m]=t;}}}}intmain(){intx[M][N]={{11,52,43,4,25,22},{22,33,46,58,16,47},{83,42,54,26,47,0},{4,5,6,7,8,9},{45,96,17,18,39,2}},i,j;fun(x);for(i=0;i{for(j=0;jprintf("%3d",x[i][j]);printf("\n");}}8.函数voidfun(intx,char*p)实现十进制整数x到二进制的转换。转换后的二进制数以字符串的方式放置于p所指向的数组中。如输入13,输出1101,输入-13,输出-1101。#include""voidfun(intx,char*p){char*q,t;if(x<0){*p++='-';x=-x;}if(x==0){*p++='0';*p=0;return;}q=p;for(;x!=0;x/=2)*p++=x%2+'0';*p=0;for(p--;q{t=*q;*q=*p;*p=t;}}intmain(){inta;charc[18];scanf("%d",&a);fun(a,c);printf("%d'SBINARYIS:%s\n",a,c);}9.编写函数intfun(char(*ss)[N],intm,char*s),功能是:形参ss指向一个m行N列的二维字符数组,每行存放一个字符串。求出最大的字符串,复制到s所指的字符数组中,然后返回此最大字符串的长度。#include<>#include<>#defineN30intfun(char(*ss)[N],intm,char*s){inti,max;max=0;for(i=1;iif(strcmp(ss[i],ss[max])>0)max=i;strcpy(s,ss[max]);returnstrlen(ss[max]);}intmain(){chara[8][N],b[N];inti,len;for(i=0;i<8;i++)gets(a[i]);len=fun(a,8,b);printf("len=%d,str=%s\n",len,b);}10.给定程序中,函数voidfun(char*s)的功能是:在形参s所指字符串中的每个数字字符之后插入一个*号。例如,形参s所指的字符串为:def35adh3kjsdf7。执行结果为:def3*5*adh3*kjsdf7*。#include<>#include<>voidfun(char*s){inti,j;chara[100];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);}intmain(){charstr[80];gets(str);fun(str);puts(str);}11.给定程序中,函数voidfun(char*s)的功能是:把形参s所指字符串中下标为偶数的字符右移到下一个偶数位置,最右边被移出字符串的字符绕回放到第一个偶数位置,下标为奇数的字符不动(注:字符串的长度大于等于2)。例:若输入:abcd123,输出:3badc21#include<>#include<>voidfun(char*s){inti,t,l;l=strlen(s);if(l%2==1){t=s[l-1];for(i=l-1;i>0;i-=2)s[i]=s[i-2];}s[0]=t;else{t=s[l-2];for(i=l-2;i>0;i-=2)s[i]=s[i-2];s[0]=t;}}intmain(){charstr[80];gets(str);fun(str);puts(str);}12.编写函数voidfun(char*s1,char*s2),功能是:对形参s1所指字符串升序排序,并将排序后下标为偶数的字符取出,写入形参s2所指字符数组中,形成一个新串。例如,下面程序若输入:TheCProgrammingLanguage,输出:□□LTaegghmnor。(□表空格)#include<>voidfun(char*s1,char*s2){inti,j,n;chart;for(i=0;*(s1+i)!='\0';i++){n=i;for(j=i;*(s1+j)!='\0';j++){if(*(s1+n)>*(s1+j))n=j;}t=*(s1+n);*(s1+n)=*(s1+i);*(s1+i)=t;}for(i=0;*(s1+i)!='\0';i++){if(i%2==0){*s2=*(s1+i);s2++;}}*s2='\0';}intmain(){chara[80],b[80];gets(a);fun(a,b);puts(b);}13.函数voidfun(chars[])的功能是:将s所指字符串中ASCII值为奇数的字符删除。例如,若s所指字符串中的内容为:“ABCDEFG12345”,其中字符A的ASCII码值为奇数、…、字符1的ASCII码值也为奇数、…都应当删除,其它依此类推。最后s中内容是:“BDF24”。#include<>voidfun(chars[]){inti,j;for(i=0;s[i]!=0;i++){if(s[i]%2==1){for(j=i;s[j]!=0;j++)s[j]=s[j+1];i--;}}}intmain(){chara[80];gets(a);fun(a);puts(a);}14.请编写一个函数intfun(longintx),它的功能是:判断整数x是否是同构数。若是同构数,函数返回1;否则返回0。所谓“同构数”是指这样的数,它出现在它的平方数的右边。例如:输入整数5,5的平方数是25,5是25中右侧的数,所以5是同构数,输出"Yes"。要求x的值不大于10000。#include<>intfun(longintx){longs;s=x*x;while(x!=0){if(s%10!=x%10)return0;x/=10;s/=10;}return1;}intmain(){intx;scanf("%d",&x);if(fun(x)==1)puts("Yse");elseputs("No");}15.编写取子字符串函数voidfun(chars1[],chars2[],intm,intn),其作用是将字符数组s2中从第m个字符开始的共n个字符拷贝到数组s1中;若s2中剩余字符不足n个,则取到尾部。程序运行时,当输入"abcd123"、4,3时应输出"d12";当我们输入"abcd123"、4,6时应输出"d123"。注意,这里是将1作为起始计数.#include<>voidfun(chars1[],chars2[],intm,intn){inti;for(i=0;is1[i]=s2[m+i-1];s1[n]=0;}main(){staticchara[100],b[100];ints,len;voidfun(chars1[],chars2[],intm,intn);puts("ENTERASTRING:");gets(a);puts("ENTERSTARTINGPOSITIONANDLENGTH:");scanf("%d,%d",&s,&len);fun(b,a,s,len);printf("THESRBSTINGIS:%s\n",b);}16.编写函数voidfun(char*str),将参数字符串中各单词首字母变大写,其余字母变小写。输入输出在main中实现。如输入"youHAVE10books,don'tyou?"输出"YouHave10Books,Don'tYou?"。单词以空格、逗号、句号分隔。#include<>voidfun(char*str){inti,j;for(i=0;str[i];i++)if(str[i]>='A'&&str[i]<='Z')str[i]+=32;if(str[0]>='a'&&str[0]<='z')str[0]-=32;for(i=0;str[i];i++)if(str[i]==''||str[i]==','||str[i]=='.'){if(str[i+1]>='a'&&str[i+1]<='z')str[i+1]-=32;}}intmain(){chara[100];gets(a);fun(a);puts(a);}17.n个整数,前面各数循环顺序后移m个位置,最后m个数变成最前面m个数。写函数voidfun(int*p,intn,intm),实现上述功能。在main()中输入与输出。如下面程序输出78910123456。注意,m可能大于n。#include""voidfun(int*p,intn,intm){inti,j,k,t;k=m%n;for(i=0;i{t=p[n-1];for(j=n-2;j>=0;j--)p[j+1]=p[j];p[0]=t;}}intmain(){voidfun(int*,int,int);intx[10]={1,2,3,4,5,6,7,8,9,10},i;fun(x,10,14);for(i=0;i<10;i++)printf("%d",x[i]);printf("\n");}18.编写函数voidfun(char*s1,char*s2),实现字符串s1与s2的交叉连接,连接后得到的新字符串放在s1中。如输入abc12345,输出a1b2c345,若输入abcde123,则输出a1b2c3de。#include<>#include<>voidfun(char*s1,char*s2){inti,j,k;for(j=0,i=1;s2[j]!='\0';){for(k=strlen(s1);k>=i;k--)s1[k+1]=s1[k];s1[i]=s2[j];j++;i++;if(s1[i])i++;}}intmain(){chara[100],b[100];voidfun(char*,char*);gets(a);gets(b);fun(a,b);puts(a);}19.#include""intfun(longx,longy){inti,s,t;for(i=0,s=0;i<8;i++){s+=(x%10+y%10);x=x/10;y=y/10;}while(s>=10){for(i=0,t=0;s;i++){t+=s%10;s=s/10;}s=t;}returns;}intmain(){longx,y;intk;scanf("%ld%ld",&x,&y);k=fun(x,y);printf("yuanfenis%d",k);}20.m个人围成一圈,1,2,3循环报数,报到3的人退出,并将退出的序号依次存到数组p中,包括最后一个人的序号。到最后只余1人,输出最后留下的是第几号(最初的序号,以1起始)。若m=6,则输出n=1364251;若m=10,则输出n=436927185104;若m=100,则输出n=91369……1005891。函数intfun(intn,int*p)实现上述功能,返回n个人中最后余的1人的起始序号,并将退出的序号顺序写入p指向的数组中。#include<>intfun(intn,int*p){inta[10000];inti,j,k,m;for(i=0;ia[i]=1;i=0;j=1;m=n;while(m>0){if(j==3)if(a[i]==1){*(p+n-m)=i+1;a[i]=0;m--;k=i+1;j=1;i=(i+1)%n;}elsei=(i+1)%n;elseif(a[i]==1){j++;i=(i+1)%n;}elsei=(i+1)%n;}returnk;}intmain(){intm,a[10000],i,num;scanf("%d",&m);num=fun(m,a);printf("n=%d\n",num);for(i=0;iprintf("%-4d",a[i]);printf("\n");}
if(a[i][k]k=j;t=a[i][k];a[i][k]=a[i][N-1];a[i][N-1]=t;}for(i=0;i{k=i;for(j=i+1;jif(a[k][N-1]k=j;if(i!=k){for(m=0;m{t=a[k][m];a[k][m]=a[i][m];a[i][m]=t;}}}}intmain(){intx[M][N]={{11,52,43,4,25,22},{22,33,46,58,16,47},{83,42,54,26,47,0},{4,5,6,7,8,9},{45,96,17,18,39,2}},i,j;fun(x);for(i=0;i{for(j=0;jprintf("%3d",x[i][j]);printf("\n");}}8.函数voidfun(intx,char*p)实现十进制整数x到二进制的转换。转换后的二进制数以字符串的方式放置于p所指向的数组中。如输入13,输出1101,输入-13,输出-1101。#include""voidfun(intx,char*p){char*q,t;if(x<0){*p++='-';x=-x;}if(x==0){*p++='0';*p=0;return;}q=p;for(;x!=0;x/=2)*p++=x%2+'0';*p=0;for(p--;q{t=*q;*q=*p;*p=t;}}intmain(){inta;charc[18];scanf("%d",&a);fun(a,c);printf("%d'SBINARYIS:%s\n",a,c);}9.编写函数intfun(char(*ss)[N],intm,char*s),功能是:形参ss指向一个m行N列的二维字符数组,每行存放一个字符串。求出最大的字符串,复制到s所指的字符数组中,然后返回此最大字符串的长度。#include<>#include<>#defineN30intfun(char(*ss)[N],intm,char*s){inti,max;max=0;for(i=1;iif(strcmp(ss[i],ss[max])>0)max=i;strcpy(s,ss[max]);returnstrlen(ss[max]);}intmain(){chara[8][N],b[N];inti,len;for(i=0;i<8;i++)gets(a[i]);len=fun(a,8,b);printf("len=%d,str=%s\n",len,b);}10.给定程序中,函数voidfun(char*s)的功能是:在形参s所指字符串中的每个数字字符之后插入一个*号。例如,形参s所指的字符串为:def35adh3kjsdf7。执行结果为:def3*5*adh3*kjsdf7*。#include<>#include<>voidfun(char*s){inti,j;chara[100];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);}intmain(){charstr[80];gets(str);fun(str);puts(str);}11.给定程序中,函数voidfun(char*s)的功能是:把形参s所指字符串中下标为偶数的字符右移到下一个偶数位置,最右边被移出字符串的字符绕回放到第一个偶数位置,下标为奇数的字符不动(注:字符串的长度大于等于2)。例:若输入:abcd123,输出:3badc21#include<>#include<>voidfun(char*s){inti,t,l;l=strlen(s);if(l%2==1){t=s[l-1];for(i=l-1;i>0;i-=2)s[i]=s[i-2];}s[0]=t;else{t=s[l-2];for(i=l-2;i>0;i-=2)s[i]=s[i-2];s[0]=t;}}intmain(){charstr[80];gets(str);fun(str);puts(str);}12.编写函数voidfun(char*s1,char*s2),功能是:对形参s1所指字符串升序排序,并将排序后下标为偶数的字符取出,写入形参s2所指字符数组中,形成一个新串。例如,下面程序若输入:TheCProgrammingLanguage,输出:□□LTaegghmnor。(□表空格)#include<>voidfun(char*s1,char*s2){inti,j,n;chart;for(i=0;*(s1+i)!='\0';i++){n=i;for(j=i;*(s1+j)!='\0';j++){if(*(s1+n)>*(s1+j))n=j;}t=*(s1+n);*(s1+n)=*(s1+i);*(s1+i)=t;}for(i=0;*(s1+i)!='\0';i++){if(i%2==0){*s2=*(s1+i);s2++;}}*s2='\0';}intmain(){chara[80],b[80];gets(a);fun(a,b);puts(b);}13.函数voidfun(chars[])的功能是:将s所指字符串中ASCII值为奇数的字符删除。例如,若s所指字符串中的内容为:“ABCDEFG12345”,其中字符A的ASCII码值为奇数、…、字符1的ASCII码值也为奇数、…都应当删除,其它依此类推。最后s中内容是:“BDF24”。#include<>voidfun(chars[]){inti,j;for(i=0;s[i]!=0;i++){if(s[i]%2==1){for(j=i;s[j]!=0;j++)s[j]=s[j+1];i--;}}}intmain(){chara[80];gets(a);fun(a);puts(a);}14.请编写一个函数intfun(longintx),它的功能是:判断整数x是否是同构数。若是同构数,函数返回1;否则返回0。所谓“同构数”是指这样的数,它出现在它的平方数的右边。例如:输入整数5,5的平方数是25,5是25中右侧的数,所以5是同构数,输出"Yes"。要求x的值不大于10000。#include<>intfun(longintx){longs;s=x*x;while(x!=0){if(s%10!=x%10)return0;x/=10;s/=10;}return1;}intmain(){intx;scanf("%d",&x);if(fun(x)==1)puts("Yse");elseputs("No");}15.编写取子字符串函数voidfun(chars1[],chars2[],intm,intn),其作用是将字符数组s2中从第m个字符开始的共n个字符拷贝到数组s1中;若s2中剩余字符不足n个,则取到尾部。程序运行时,当输入"abcd123"、4,3时应输出"d12";当我们输入"abcd123"、4,6时应输出"d123"。注意,这里是将1作为起始计数.#include<>voidfun(chars1[],chars2[],intm,intn){inti;for(i=0;is1[i]=s2[m+i-1];s1[n]=0;}main(){staticchara[100],b[100];ints,len;voidfun(chars1[],chars2[],intm,intn);puts("ENTERASTRING:");gets(a);puts("ENTERSTARTINGPOSITIONANDLENGTH:");scanf("%d,%d",&s,&len);fun(b,a,s,len);printf("THESRBSTINGIS:%s\n",b);}16.编写函数voidfun(char*str),将参数字符串中各单词首字母变大写,其余字母变小写。输入输出在main中实现。如输入"youHAVE10books,don'tyou?"输出"YouHave10Books,Don'tYou?"。单词以空格、逗号、句号分隔。#include<>voidfun(char*str){inti,j;for(i=0;str[i];i++)if(str[i]>='A'&&str[i]<='Z')str[i]+=32;if(str[0]>='a'&&str[0]<='z')str[0]-=32;for(i=0;str[i];i++)if(str[i]==''||str[i]==','||str[i]=='.'){if(str[i+1]>='a'&&str[i+1]<='z')str[i+1]-=32;}}intmain(){chara[100];gets(a);fun(a);puts(a);}17.n个整数,前面各数循环顺序后移m个位置,最后m个数变成最前面m个数。写函数voidfun(int*p,intn,intm),实现上述功能。在main()中输入与输出。如下面程序输出78910123456。注意,m可能大于n。#include""voidfun(int*p,intn,intm){inti,j,k,t;k=m%n;for(i=0;i{t=p[n-1];for(j=n-2;j>=0;j--)p[j+1]=p[j];p[0]=t;}}intmain(){voidfun(int*,int,int);intx[10]={1,2,3,4,5,6,7,8,9,10},i;fun(x,10,14);for(i=0;i<10;i++)printf("%d",x[i]);printf("\n");}18.编写函数voidfun(char*s1,char*s2),实现字符串s1与s2的交叉连接,连接后得到的新字符串放在s1中。如输入abc12345,输出a1b2c345,若输入abcde123,则输出a1b2c3de。#include<>#include<>voidfun(char*s1,char*s2){inti,j,k;for(j=0,i=1;s2[j]!='\0';){for(k=strlen(s1);k>=i;k--)s1[k+1]=s1[k];s1[i]=s2[j];j++;i++;if(s1[i])i++;}}intmain(){chara[100],b[100];voidfun(char*,char*);gets(a);gets(b);fun(a,b);puts(a);}19.#include""intfun(longx,longy){inti,s,t;for(i=0,s=0;i<8;i++){s+=(x%10+y%10);x=x/10;y=y/10;}while(s>=10){for(i=0,t=0;s;i++){t+=s%10;s=s/10;}s=t;}returns;}intmain(){longx,y;intk;scanf("%ld%ld",&x,&y);k=fun(x,y);printf("yuanfenis%d",k);}20.m个人围成一圈,1,2,3循环报数,报到3的人退出,并将退出的序号依次存到数组p中,包括最后一个人的序号。到最后只余1人,输出最后留下的是第几号(最初的序号,以1起始)。若m=6,则输出n=1364251;若m=10,则输出n=436927185104;若m=100,则输出n=91369……1005891。函数intfun(intn,int*p)实现上述功能,返回n个人中最后余的1人的起始序号,并将退出的序号顺序写入p指向的数组中。#include<>intfun(intn,int*p){inta[10000];inti,j,k,m;for(i=0;ia[i]=1;i=0;j=1;m=n;while(m>0){if(j==3)if(a[i]==1){*(p+n-m)=i+1;a[i]=0;m--;k=i+1;j=1;i=(i+1)%n;}elsei=(i+1)%n;elseif(a[i]==1){j++;i=(i+1)%n;}elsei=(i+1)%n;}returnk;}intmain(){intm,a[10000],i,num;scanf("%d",&m);num=fun(m,a);printf("n=%d\n",num);for(i=0;iprintf("%-4d",a[i]);printf("\n");}
k=j;
t=a[i][k];
a[i][k]=a[i][N-1];
a[i][N-1]=t;
for(i=0;i{k=i;for(j=i+1;jif(a[k][N-1]k=j;if(i!=k){for(m=0;m{t=a[k][m];a[k][m]=a[i][m];a[i][m]=t;}}}}intmain(){intx[M][N]={{11,52,43,4,25,22},{22,33,46,58,16,47},{83,42,54,26,47,0},{4,5,6,7,8,9},{45,96,17,18,39,2}},i,j;fun(x);for(i=0;i{for(j=0;jprintf("%3d",x[i][j]);printf("\n");}}8.函数voidfun(intx,char*p)实现十进制整数x到二进制的转换。转换后的二进制数以字符串的方式放置于p所指向的数组中。如输入13,输出1101,输入-13,输出-1101。#include""voidfun(intx,char*p){char*q,t;if(x<0){*p++='-';x=-x;}if(x==0){*p++='0';*p=0;return;}q=p;for(;x!=0;x/=2)*p++=x%2+'0';*p=0;for(p--;q{t=*q;*q=*p;*p=t;}}intmain(){inta;charc[18];scanf("%d",&a);fun(a,c);printf("%d'SBINARYIS:%s\n",a,c);}9.编写函数intfun(char(*ss)[N],intm,char*s),功能是:形参ss指向一个m行N列的二维字符数组,每行存放一个字符串。求出最大的字符串,复制到s所指的字符数组中,然后返回此最大字符串的长度。#include<>#include<>#defineN30intfun(char(*ss)[N],intm,char*s){inti,max;max=0;for(i=1;iif(strcmp(ss[i],ss[max])>0)max=i;strcpy(s,ss[max]);returnstrlen(ss[max]);}intmain(){chara[8][N],b[N];inti,len;for(i=0;i<8;i++)gets(a[i]);len=fun(a,8,b);printf("len=%d,str=%s\n",len,b);}10.给定程序中,函数voidfun(char*s)的功能是:在形参s所指字符串中的每个数字字符之后插入一个*号。例如,形参s所指的字符串为:def35adh3kjsdf7。执行结果为:def3*5*adh3*kjsdf7*。#include<>#include<>voidfun(char*s){inti,j;chara[100];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);}intmain(){charstr[80];gets(str);fun(str);puts(str);}11.给定程序中,函数voidfun(char*s)的功能是:把形参s所指字符串中下标为偶数的字符右移到下一个偶数位置,最右边被移出字符串的字符绕回放到第一个偶数位置,下标为奇数的字符不动(注:字符串的长度大于等于2)。例:若输入:abcd123,输出:3badc21#include<>#include<>voidfun(char*s){inti,t,l;l=strlen(s);if(l%2==1){t=s[l-1];for(i=l-1;i>0;i-=2)s[i]=s[i-2];}s[0]=t;else{t=s[l-2];for(i=l-2;i>0;i-=2)s[i]=s[i-2];s[0]=t;}}intmain(){charstr[80];gets(str);fun(str);puts(str);}12.编写函数voidfun(char*s1,char*s2),功能是:对形参s1所指字符串升序排序,并将排序后下标为偶数的字符取出,写入形参s2所指字符数组中,形成一个新串。例如,下面程序若输入:TheCProgrammingLanguage,输出:□□LTaegghmnor。(□表空格)#include<>voidfun(char*s1,char*s2){inti,j,n;chart;for(i=0;*(s1+i)!='\0';i++){n=i;for(j=i;*(s1+j)!='\0';j++){if(*(s1+n)>*(s1+j))n=j;}t=*(s1+n);*(s1+n)=*(s1+i);*(s1+i)=t;}for(i=0;*(s1+i)!='\0';i++){if(i%2==0){*s2=*(s1+i);s2++;}}*s2='\0';}intmain(){chara[80],b[80];gets(a);fun(a,b);puts(b);}13.函数voidfun(chars[])的功能是:将s所指字符串中ASCII值为奇数的字符删除。例如,若s所指字符串中的内容为:“ABCDEFG12345”,其中字符A的ASCII码值为奇数、…、字符1的ASCII码值也为奇数、…都应当删除,其它依此类推。最后s中内容是:“BDF24”。#include<>voidfun(chars[]){inti,j;for(i=0;s[i]!=0;i++){if(s[i]%2==1){for(j=i;s[j]!=0;j++)s[j]=s[j+1];i--;}}}intmain(){chara[80];gets(a);fun(a);puts(a);}14.请编写一个函数intfun(longintx),它的功能是:判断整数x是否是同构数。若是同构数,函数返回1;否则返回0。所谓“同构数”是指这样的数,它出现在它的平方数的右边。例如:输入整数5,5的平方数是25,5是25中右侧的数,所以5是同构数,输出"Yes"。要求x的值不大于10000。#include<>intfun(longintx){longs;s=x*x;while(x!=0){if(s%10!=x%10)return0;x/=10;s/=10;}return1;}intmain(){intx;scanf("%d",&x);if(fun(x)==1)puts("Yse");elseputs("No");}15.编写取子字符串函数voidfun(chars1[],chars2[],intm,intn),其作用是将字符数组s2中从第m个字符开始的共n个字符拷贝到数组s1中;若s2中剩余字符不足n个,则取到尾部。程序运行时,当输入"abcd123"、4,3时应输出"d12";当我们输入"abcd123"、4,6时应输出"d123"。注意,这里是将1作为起始计数.#include<>voidfun(chars1[],chars2[],intm,intn){inti;for(i=0;is1[i]=s2[m+i-1];s1[n]=0;}main(){staticchara[100],b[100];ints,len;voidfun(chars1[],chars2[],intm,intn);puts("ENTERASTRING:");gets(a);puts("ENTERSTARTINGPOSITIONANDLENGTH:");scanf("%d,%d",&s,&len);fun(b,a,s,len);printf("THESRBSTINGIS:%s\n",b);}16.编写函数voidfun(char*str),将参数字符串中各单词首字母变大写,其余字母变小写。输入输出在main中实现。如输入"youHAVE10books,don'tyou?"输出"YouHave10Books,Don'tYou?"。单词以空格、逗号、句号分隔。#include<>voidfun(char*str){inti,j;for(i=0;str[i];i++)if(str[i]>='A'&&str[i]<='Z')str[i]+=32;if(str[0]>='a'&&str[0]<='z')str[0]-=32;for(i=0;str[i];i++)if(str[i]==''||str[i]==','||str[i]=='.'){if(str[i+1]>='a'&&str[i+1]<='z')str[i+1]-=32;}}intmain(){chara[100];gets(a);fun(a);puts(a);}17.n个整数,前面各数循环顺序后移m个位置,最后m个数变成最前面m个数。写函数voidfun(int*p,intn,intm),实现上述功能。在main()中输入与输出。如下面程序输出78910123456。注意,m可能大于n。#include""voidfun(int*p,intn,intm){inti,j,k,t;k=m%n;for(i=0;i{t=p[n-1];for(j=n-2;j>=0;j--)p[j+1]=p[j];p[0]=t;}}intmain(){voidfun(int*,int,int);intx[10]={1,2,3,4,5,6,7,8,9,10},i;fun(x,10,14);for(i=0;i<10;i++)printf("%d",x[i]);printf("\n");}18.编写函数voidfun(char*s1,char*s2),实现字符串s1与s2的交叉连接,连接后得到的新字符串放在s1中。如输入abc12345,输出a1b2c345,若输入abcde123,则输出a1b2c3de。#include<>#include<>voidfun(char*s1,char*s2){inti,j,k;for(j=0,i=1;s2[j]!='\0';){for(k=strlen(s1);k>=i;k--)s1[k+1]=s1[k];s1[i]=s2[j];j++;i++;if(s1[i])i++;}}intmain(){chara[100],b[100];voidfun(char*,char*);gets(a);gets(b);fun(a,b);puts(a);}19.#include""intfun(longx,longy){inti,s,t;for(i=0,s=0;i<8;i++){s+=(x%10+y%10);x=x/10;y=y/10;}while(s>=10){for(i=0,t=0;s;i++){t+=s%10;s=s/10;}s=t;}returns;}intmain(){longx,y;intk;scanf("%ld%ld",&x,&y);k=fun(x,y);printf("yuanfenis%d",k);}20.m个人围成一圈,1,2,3循环报数,报到3的人退出,并将退出的序号依次存到数组p中,包括最后一个人的序号。到最后只余1人,输出最后留下的是第几号(最初的序号,以1起始)。若m=6,则输出n=1364251;若m=10,则输出n=436927185104;若m=100,则输出n=91369……1005891。函数intfun(intn,int*p)实现上述功能,返回n个人中最后余的1人的起始序号,并将退出的序号顺序写入p指向的数组中。#include<>intfun(intn,int*p){inta[10000];inti,j,k,m;for(i=0;ia[i]=1;i=0;j=1;m=n;while(m>0){if(j==3)if(a[i]==1){*(p+n-m)=i+1;a[i]=0;m--;k=i+1;j=1;i=(i+1)%n;}elsei=(i+1)%n;elseif(a[i]==1){j++;i=(i+1)%n;}elsei=(i+1)%n;}returnk;}intmain(){intm,a[10000],i,num;scanf("%d",&m);num=fun(m,a);printf("n=%d\n",num);for(i=0;iprintf("%-4d",a[i]);printf("\n");}
k=i;
for(j=i+1;jif(a[k][N-1]k=j;if(i!=k){for(m=0;m{t=a[k][m];a[k][m]=a[i][m];a[i][m]=t;}}}}intmain(){intx[M][N]={{11,52,43,4,25,22},{22,33,46,58,16,47},{83,42,54,26,47,0},{4,5,6,7,8,9},{45,96,17,18,39,2}},i,j;fun(x);for(i=0;i{for(j=0;jprintf("%3d",x[i][j]);printf("\n");}}8.函数voidfun(intx,char*p)实现十进制整数x到二进制的转换。转换后的二进制数以字符串的方式放置于p所指向的数组中。如输入13,输出1101,输入-13,输出-1101。#include""voidfun(intx,char*p){char*q,t;if(x<0){*p++='-';x=-x;}if(x==0){*p++='0';*p=0;return;}q=p;for(;x!=0;x/=2)*p++=x%2+'0';*p=0;for(p--;q{t=*q;*q=*p;*p=t;}}intmain(){inta;charc[18];scanf("%d",&a);fun(a,c);printf("%d'SBINARYIS:%s\n",a,c);}9.编写函数intfun(char(*ss)[N],intm,char*s),功能是:形参ss指向一个m行N列的二维字符数组,每行存放一个字符串。求出最大的字符串,复制到s所指的字符数组中,然后返回此最大字符串的长度。#include<>#include<>#defineN30intfun(char(*ss)[N],intm,char*s){inti,max;max=0;for(i=1;iif(strcmp(ss[i],ss[max])>0)max=i;strcpy(s,ss[max]);returnstrlen(ss[max]);}intmain(){chara[8][N],b[N];inti,len;for(i=0;i<8;i++)gets(a[i]);len=fun(a,8,b);printf("len=%d,str=%s\n",len,b);}10.给定程序中,函数voidfun(char*s)的功能是:在形参s所指字符串中的每个数字字符之后插入一个*号。例如,形参s所指的字符串为:def35adh3kjsdf7。执行结果为:def3*5*adh3*kjsdf7*。#include<>#include<>voidfun(char*s){inti,j;chara[100];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);}intmain(){charstr[80];gets(str);fun(str);puts(str);}11.给定程序中,函数voidfun(char*s)的功能是:把形参s所指字符串中下标为偶数的字符右移到下一个偶数位置,最右边被移出字符串的字符绕回放到第一个偶数位置,下标为奇数的字符不动(注:字符串的长度大于等于2)。例:若输入:abcd123,输出:3badc21#include<>#include<>voidfun(char*s){inti,t,l;l=strlen(s);if(l%2==1){t=s[l-1];for(i=l-1;i>0;i-=2)s[i]=s[i-2];}s[0]=t;else{t=s[l-2];for(i=l-2;i>0;i-=2)s[i]=s[i-2];s[0]=t;}}intmain(){charstr[80];gets(str);fun(str);puts(str);}12.编写函数voidfun(char*s1,char*s2),功能是:对形参s1所指字符串升序排序,并将排序后下标为偶数的字符取出,写入形参s2所指字符数组中,形成一个新串。例如,下面程序若输入:TheCProgrammingLanguage,输出:□□LTaegghmnor。(□表空格)#include<>voidfun(char*s1,char*s2){inti,j,n;chart;for(i=0;*(s1+i)!='\0';i++){n=i;for(j=i;*(s1+j)!='\0';j++){if(*(s1+n)>*(s1+j))n=j;}t=*(s1+n);*(s1+n)=*(s1+i);*(s1+i)=t;}for(i=0;*(s1+i)!='\0';i++){if(i%2==0){*s2=*(s1+i);s2++;}}*s2='\0';}intmain(){chara[80],b[80];gets(a);fun(a,b);puts(b);}13.函数voidfun(chars[])的功能是:将s所指字符串中ASCII值为奇数的字符删除。例如,若s所指字符串中的内容为:“ABCDEFG12345”,其中字符A的ASCII码值为奇数、…、字符1的ASCII码值也为奇数、…都应当删除,其它依此类推。最后s中内容是:“BDF24”。#include<>voidfun(chars[]){inti,j;for(i=0;s[i]!=0;i++){if(s[i]%2==1){for(j=i;s[j]!=0;j++)s[j]=s[j+1];i--;}}}intmain(){chara[80];gets(a);fun(a);puts(a);}14.请编写一个函数intfun(longintx),它的功能是:判断整数x是否是同构数。若是同构数,函数返回1;否则返回0。所谓“同构数”是指这样的数,它出现在它的平方数的右边。例如:输入整数5,5的平方数是25,5是25中右侧的数,所以5是同构数,输出"Yes"。要求x的值不大于10000。#include<>intfun(longintx){longs;s=x*x;while(x!=0){if(s%10!=x%10)return0;x/=10;s/=10;}return1;}intmain(){intx;scanf("%d",&x);if(fun(x)==1)puts("Yse");elseputs("No");}15.编写取子字符串函数voidfun(chars1[],chars2[],intm,intn),其作用是将字符数组s2中从第m个字符开始的共n个字符拷贝到数组s1中;若s2中剩余字符不足n个,则取到尾部。程序运行时,当输入"abcd123"、4,3时应输出"d12";当我们输入"abcd123"、4,6时应输出"d123"。注意,这里是将1作为起始计数.#include<>voidfun(chars1[],chars2[],intm,intn){inti;for(i=0;is1[i]=s2[m+i-1];s1[n]=0;}main(){staticchara[100],b[100];ints,len;voidfun(chars1[],chars2[],intm,intn);puts("ENTERASTRING:");gets(a);puts("ENTERSTARTINGPOSITIONANDLENGTH:");scanf("%d,%d",&s,&len);fun(b,a,s,len);printf("THESRBSTINGIS:%s\n",b);}16.编写函数voidfun(char*str),将参数字符串中各单词首字母变大写,其余字母变小写。输入输出在main中实现。如输入"youHAVE10books,don'tyou?"输出"YouHave10Books,Don'tYou?"。单词以空格、逗号、句号分隔。#include<>voidfun(char*str){inti,j;for(i=0;str[i];i++)if(str[i]>='A'&&str[i]<='Z')str[i]+=32;if(str[0]>='a'&&str[0]<='z')str[0]-=32;for(i=0;str[i];i++)if(str[i]==''||str[i]==','||str[i]=='.'){if(str[i+1]>='a'&&str[i+1]<='z')str[i+1]-=32;}}intmain(){chara[100];gets(a);fun(a);puts(a);}17.n个整数,前面各数循环顺序后移m个位置,最后m个数变成最前面m个数。写函数voidfun(int*p,intn,intm),实现上述功能。在main()中输入与输出。如下面程序输出78910123456。注意,m可能大于n。#include""voidfun(int*p,intn,intm){inti,j,k,t;k=m%n;for(i=0;i{t=p[n-1];for(j=n-2;j>=0;j--)p[j+1]=p[j];p[0]=t;}}intmain(){voidfun(int*,int,int);intx[10]={1,2,3,4,5,6,7,8,9,10},i;fun(x,10,14);for(i=0;i<10;i++)printf("%d",x[i]);printf("\n");}18.编写函数voidfun(char*s1,char*s2),实现字符串s1与s2的交叉连接,连接后得到的新字符串放在s1中。如输入abc12345,输出a1b2c345,若输入abcde123,则输出a1b2c3de。#include<>#include<>voidfun(char*s1,char*s2){inti,j,k;for(j=0,i=1;s2[j]!='\0';){for(k=strlen(s1);k>=i;k--)s1[k+1]=s1[k];s1[i]=s2[j];j++;i++;if(s1[i])i++;}}intmain(){chara[100],b[100];voidfun(char*,char*);gets(a);gets(b);fun(a,b);puts(a);}19.#include""intfun(longx,longy){inti,s,t;for(i=0,s=0;i<8;i++){s+=(x%10+y%10);x=x/10;y=y/10;}while(s>=10){for(i=0,t=0;s;i++){t+=s%10;s=s/10;}s=t;}returns;}intmain(){longx,y;intk;scanf("%ld%ld",&x,&y);k=fun(x,y);printf("yuanfenis%d",k);}20.m个人围成一圈,1,2,3循环报数,报到3的人退出,并将退出的序号依次存到数组p中,包括最后一个人的序号。到最后只余1人,输出最后留下的是第几号(最初的序号,以1起始)。若m=6,则输出n=1364251;若m=10,则输出n=436927185104;若m=100,则输出n=91369……1005891。函数intfun(intn,int*p)实现上述功能,返回n个人中最后余的1人的起始序号,并将退出的序号顺序写入p指向的数组中。#include<>intfun(intn,int*p){inta[10000];inti,j,k,m;for(i=0;ia[i]=1;i=0;j=1;m=n;while(m>0){if(j==3)if(a[i]==1){*(p+n-m)=i+1;a[i]=0;m--;k=i+1;j=1;i=(i+1)%n;}elsei=(i+1)%n;elseif(a[i]==1){j++;i=(i+1)%n;}elsei=(i+1)%n;}returnk;}intmain(){intm,a[10000],i,num;scanf("%d",&m);num=fun(m,a);printf("n=%d\n",num);for(i=0;iprintf("%-4d",a[i]);printf("\n");}
if(a[k][N-1]k=j;if(i!=k){for(m=0;m{t=a[k][m];a[k][m]=a[i][m];a[i][m]=t;}}}}intmain(){intx[M][N]={{11,52,43,4,25,22},{22,33,46,58,16,47},{83,42,54,26,47,0},{4,5,6,7,8,9},{45,96,17,18,39,2}},i,j;fun(x);for(i=0;i{for(j=0;jprintf("%3d",x[i][j]);printf("\n");}}8.函数voidfun(intx,char*p)实现十进制整数x到二进制的转换。转换后的二进制数以字符串的方式放置于p所指向的数组中。如输入13,输出1101,输入-13,输出-1101。#include""voidfun(intx,char*p){char*q,t;if(x<0){*p++='-';x=-x;}if(x==0){*p++='0';*p=0;return;}q=p;for(;x!=0;x/=2)*p++=x%2+'0';*p=0;for(p--;q{t=*q;*q=*p;*p=t;}}intmain(){inta;charc[18];scanf("%d",&a);fun(a,c);printf("%d'SBINARYIS:%s\n",a,c);}9.编写函数intfun(char(*ss)[N],intm,char*s),功能是:形参ss指向一个m行N列的二维字符数组,每行存放一个字符串。求出最大的字符串,复制到s所指的字符数组中,然后返回此最大字符串的长度。#include<>#include<>#defineN30intfun(char(*ss)[N],intm,char*s){inti,max;max=0;for(i=1;iif(strcmp(ss[i],ss[max])>0)max=i;strcpy(s,ss[max]);returnstrlen(ss[max]);}intmain(){chara[8][N],b[N];inti,len;for(i=0;i<8;i++)gets(a[i]);len=fun(a,8,b);printf("len=%d,str=%s\n",len,b);}10.给定程序中,函数voidfun(char*s)的功能是:在形参s所指字符串中的每个数字字符之后插入一个*号。例如,形参s所指的字符串为:def35adh3kjsdf7。执行结果为:def3*5*adh3*kjsdf7*。#include<>#include<>voidfun(char*s){inti,j;chara[100];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);}intmain(){charstr[80];gets(str);fun(str);puts(str);}11.给定程序中,函数voidfun(char*s)的功能是:把形参s所指字符串中下标为偶数的字符右移到下一个偶数位置,最右边被移出字符串的字符绕回放到第一个偶数位置,下标为奇数的字符不动(注:字符串的长度大于等于2)。例:若输入:abcd123,输出:3badc21#include<>#include<>voidfun(char*s){inti,t,l;l=strlen(s);if(l%2==1){t=s[l-1];for(i=l-1;i>0;i-=2)s[i]=s[i-2];}s[0]=t;else{t=s[l-2];for(i=l-2;i>0;i-=2)s[i]=s[i-2];s[0]=t;}}intmain(){charstr[80];gets(str);fun(str);puts(str);}12.编写函数voidfun(char*s1,char*s2),功能是:对形参s1所指字符串升序排序,并将排序后下标为偶数的字符取出,写入形参s2所指字符数组中,形成一个新串。例如,下面程序若输入:TheCProgrammingLanguage,输出:□□LTaegghmnor。(□表空格)#include<>voidfun(char*s1,char*s2){inti,j,n;chart;for(i=0;*(s1+i)!='\0';i++){n=i;for(j=i;*(s1+j)!='\0';j++){if(*(s1+n)>*(s1+j))n=j;}t=*(s1+n);*(s1+n)=*(s1+i);*(s1+i)=t;}for(i=0;*(s1+i)!='\0';i++){if(i%2==0){*s2=*(s1+i);s2++;}}*s2='\0';}intmain(){chara[80],b[80];gets(a);fun(a,b);puts(b);}13.函数voidfun(chars[])的功能是:将s所指字符串中ASCII值为奇数的字符删除。例如,若s所指字符串中的内容为:“ABCDEFG12345”,其中字符A的ASCII码值为奇数、…、字符1的ASCII码值也为奇数、…都应当删除,其它依此类推。最后s中内容是:“BDF24”。#include<>voidfun(chars[]){inti,j;for(i=0;s[i]!=0;i++){if(s[i]%2==1){for(j=i;s[j]!=0;j++)s[j]=s[j+1];i--;}}}intmain(){chara[80];gets(a);fun(a);puts(a);}14.请编写一个函数intfun(longintx),它的功能是:判断整数x是否是同构数。若是同构数,函数返回1;否则返回0。所谓“同构数”是指这样的数,它出现在它的平方数的右边。例如:输入整数5,5的平方数是25,5是25中右侧的数,所以5是同构数,输出"Yes"。要求x的值不大于10000。#include<>intfun(longintx){longs;s=x*x;while(x!=0){if(s%10!=x%10)return0;x/=10;s/=10;}return1;}intmain(){intx;scanf("%d",&x);if(fun(x)==1)puts("Yse");elseputs("No");}15.编写取子字符串函数voidfun(chars1[],chars2[],intm,intn),其作用是将字符数组s2中从第m个字符开始的共n个字符拷贝到数组s1中;若s2中剩余字符不足n个,则取到尾部。程序运行时,当输入"abcd123"、4,3时应输出"d12";当我们输入"abcd123"、4,6时应输出"d123"。注意,这里是将1作为起始计数.#include<>voidfun(chars1[],chars2[],intm,intn){inti;for(i=0;is1[i]=s2[m+i-1];s1[n]=0;}main(){staticchara[100],b[100];ints,len;voidfun(chars1[],chars2[],intm,intn);puts("ENTERASTRING:");gets(a);puts("ENTERSTARTINGPOSITIONANDLENGTH:");scanf("%d,%d",&s,&len);fun(b,a,s,len);printf("THESRBSTINGIS:%s\n",b);}16.编写函数voidfun(char*str),将参数字符串中各单词首字母变大写,其余字母变小写。输入输出在main中实现。如输入"youHAVE10books,don'tyou?"输出"YouHave10Books,Don'tYou?"。单词以空格、逗号、句号分隔。#include<>voidfun(char*str){inti,j;for(i=0;str[i];i++)if(str[i]>='A'&&str[i]<='Z')str[i]+=32;if(str[0]>='a'&&str[0]<='z')str[0]-=32;for(i=0;str[i];i++)if(str[i]==''||str[i]==','||str[i]=='.'){if(str[i+1]>='a'&&str[i+1]<='z')str[i+1]-=32;}}intmain(){chara[100];gets(a);fun(a);puts(a);}17.n个整数,前面各数循环顺序后移m个位置,最后m个数变成最前面m个数。写函数voidfun(int*p,intn,intm),实现上述功能。在main()中输入与输出。如下面程序输出78910123456。注意,m可能大于n。#include""voidfun(int*p,intn,intm){inti,j,k,t;k=m%n;for(i=0;i{t=p[n-1];for(j=n-2;j>=0;j--)p[j+1]=p[j];p[0]=t;}}intmain(){voidfun(int*,int,int);intx[10]={1,2,3,4,5,6,7,8,9,10},i;fun(x,10,14);for(i=0;i<10;i++)printf("%d",x[i]);printf("\n");}18.编写函数voidfun(char*s1,char*s2),实现字符串s1与s2的交叉连接,连接后得到的新字符串放在s1中。如输入abc12345,输出a1b2c345,若输入abcde123,则输出a1b2c3de。#include<>#include<>voidfun(char*s1,char*s2){inti,j,k;for(j=0,i=1;s2[j]!='\0';){for(k=strlen(s1);k>=i;k--)s1[k+1]=s1[k];s1[i]=s2[j];j++;i++;if(s1[i])i++;}}intmain(){chara[100],b[100];voidfun(char*,char*);gets(a);gets(b);fun(a,b);puts(a);}19.#include""intfun(longx,longy){inti,s,t;for(i=0,s=0;i<8;i++){s+=(x%10+y%10);x=x/10;y=y/10;}while(s>=10){for(i=0,t=0;s;i++){t+=s%10;s=s/10;}s=t;}returns;}intmain(){longx,y;intk;scanf("%ld%ld",&x,&y);k=fun(x,y);printf("yuanfenis%d",k);}20.m个人围成一圈,1,2,3循环报数,报到3的人退出,并将退出的序号依次存到数组p中,包括最后一个人的序号。到最后只余1人,输出最后留下的是第几号(最初的序号,以1起始)。若m=6,则输出n=1364251;若m=10,则输出n=436927185104;若m=100,则输出n=91369……1005891。函数intfun(intn,int*p)实现上述功能,返回n个人中最后余的1人的起始序号,并将退出的序号顺序写入p指向的数组中。#include<>intfun(intn,int*p){inta[10000];inti,j,k,m;for(i=0;ia[i]=1;i=0;j=1;m=n;while(m>0){if(j==3)if(a[i]==1){*(p+n-m)=i+1;a[i]=0;m--;k=i+1;j=1;i=(i+1)%n;}elsei=(i+1)%n;elseif(a[i]==1){j++;i=(i+1)%n;}elsei=(i+1)%n;}returnk;}intmain(){intm,a[10000],i,num;scanf("%d",&m);num=fun(m,a);printf("n=%d\n",num);for(i=0;iprintf("%-4d",a[i]);printf("\n");}
if(i!
=k)
for(m=0;m{t=a[k][m];a[k][m]=a[i][m];a[i][m]=t;}}}}intmain(){intx[M][N]={{11,52,43,4,25,22},{22,33,46,58,16,47},{83,42,54,26,47,0},{4,5,6,7,8,9},{45,96,17,18,39,2}},i,j;fun(x);for(i=0;i{for(j=0;jprintf("%3d",x[i][j]);printf("\n");}}8.函数voidfun(intx,char*p)实现十进制整数x到二进制的转换。转换后的二进制数以字符串的方式放置于p所指向的数组中。如输入13,输出1101,输入-13,输出-1101。#include""voidfun(intx,char*p){char*q,t;if(x<0){*p++='-';x=-x;}if(x==0){*p++='0';*p=0;return;}q=p;for(;x!=0;x/=2)*p++=x%2+'0';*p=0;for(p--;q{t=*q;*q=*p;*p=t;}}intmain(){inta;charc[18];scanf("%d",&a);fun(a,c);printf("%d'SBINARYIS:%s\n",a,c);}9.编写函数intfun(char(*ss)[N],intm,char*s),功能是:形参ss指向一个m行N列的二维字符数组,每行存放一个字符串。求出最大的字符串,复制到s所指的字符数组中,然后返回此最大字符串的长度。#include<>#include<>#defineN30intfun(char(*ss)[N],intm,char*s){inti,max;max=0;for(i=1;iif(strcmp(ss[i],ss[max])>0)max=i;strcpy(s,ss[max]);returnstrlen(ss[max]);}intmain(){chara[8][N],b[N];inti,len;for(i=0;i<8;i++)gets(a[i]);len=fun(a,8,b);printf("len=%d,str=%s\n",len,b);}10.给定程序中,函数voidfun(char*s)的功能是:在形参s所指字符串中的每个数字字符之后插入一个*号。例如,形参s所指的字符串为:def35adh3kjsdf7。执行结果为:def3*5*adh3*kjsdf7*。#include<>#include<>voidfun(char*s){inti,j;chara[100];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);}intmain(){charstr[80];gets(str);fun(str);puts(str);}11.给定程序中,函数voidfun(char*s)的功能是:把形参s所指字符串中下标为偶数的字符右移到下一个偶数位置,最右边被移出字符串的字符绕回放到第一个偶数位置,下标为奇数的字符不动(注:字符串的长度大于等于2)。例:若输入:abcd123,输出:3badc21#include<>#include<>voidfun(char*s){inti,t,l;l=strlen(s);if(l%2==1){t=s[l-1];for(i=l-1;i>0;i-=2)s[i]=s[i-2];}s[0]=t;else{t=s[l-2];for(i=l-2;i>0;i-=2)s[i]=s[i-2];s[0]=t;}}intmain(){charstr[80];gets(str);fun(str);puts(str);}12.编写函数voidfun(char*s1,char*s2),功能是:对形参s1所指字符串升序排序,并将排序后下标为偶数的字符取出,写入形参s2所指字符数组中,形成一个新串。例如,下面程序若输入:TheCProgrammingLanguage,输出:□□LTaegghmnor。(□表空格)#include<>voidfun(char*s1,char*s2){inti,j,n;chart;for(i=0;*(s1+i)!='\0';i++){n=i;for(j=i;*(s1+j)!='\0';j++){if(*(s1+n)>*(s1+j))n=j;}t=*(s1+n);*(s1+n)=*(s1+i);*(s1+i)=t;}for(i=0;*(s1+i)!='\0';i++){if(i%2==0){*s2=*(s1+i);s2++;}}*s2='\0';}intmain(){chara[80],b[80];gets(a);fun(a,b);puts(b);}13.函数voidfun(chars[])的功能是:将s所指字符串中ASCII值为奇数的字符删除。例如,若s所指字符串中的内容为:“ABCDEFG12345”,其中字符A的ASCII码值为奇数、…、字符1的ASCII码值也为奇数、…都应当删除,其它依此类推。最后s中内容是:“BDF24”。#include<>voidfun(chars[]){inti,j;for(i=0;s[i]!=0;i++){if(s[i]%2==1){for(j=i;s[j]!=0;j++)s[j]=s[j+1];i--;}}}intmain(){chara[80];gets(a);fun(a);puts(a);}14.请编写一个函数intfun(longintx),它的功能是:判断整数x是否是同构数。若是同构数,函数返回1;否则返回0。所谓“同构数”是指这样的数,它出现在它的平方数的右边。例如:输入整数5,5的平方数是25,5是25中右侧的数,所以5是同构数,输出"Yes"。要求x的值不大于10000。#include<>intfun(longintx){longs;s=x*x;while(x!=0){if(s%10!=x%10)return0;x/=10;s/=10;}return1;}intmain(){intx;scanf("%d",&x);if(fun(x)==1)puts("Yse");elseputs("No");}15.编写取子字符串函数voidfun(chars1[],chars2[],intm,intn),其作用是将字符数组s2中从第m个字符开始的共n个字符拷贝到数组s1中;若s2中剩余字符不足n个,则取到尾部。程序运行时,当输入"abcd123"、4,3时应输出"d12";当我们输入"abcd123"、4,6时应输出"d123"。注意,这里是将1作为起始计数.#include<>voidfun(chars1[],chars2[],intm,intn){inti;for(i=0;is1[i]=s2[m+i-1];s1[n]=0;}main(){staticchara[100],b[100];ints,len;voidfun(chars1[],chars2[],intm,intn);puts("ENTERASTRING:");gets(a);puts("ENTERSTARTINGPOSITIONANDLENGTH:");scanf("%d,%d",&s,&len);fun(b,a,s,len);printf("THESRBSTINGIS:%s\n",b);}16.编写函数voidfun(char*str),将参数字符串中各单词首字母变大写,其余字母变小写。输入输出在main中实现。如输入"youHAVE10books,don'tyou?"输出"YouHave10Books,Don'tYou?"。单词以空格、逗号、句号分隔。#include<>voidfun(char*str){inti,j;for(i=0;str[i];i++)if(str[i]>='A'&&str[i]<='Z')str[i]+=32;if(str[0]>='a'&&str[0]<='z')str[0]-=32;for(i=0;str[i];i++)if(str[i]==''||str[i]==','||str[i]=='.'){if(str[i+1]>='a'&&str[i+1]<='z')str[i+1]-=32;}}intmain(){chara[100];gets(a);fun(a);puts(a);}17.n个整数,前面各数循环顺序后移m个位置,最后m个数变成最前面m个数。写函数voidfun(int*p,intn,intm),实现上述功能。在main()中输入与输出。如下面程序输出78910123456。注意,m可能大于n。#include""voidfun(int*p,intn,intm){inti,j,k,t;k=m%n;for(i=0;i{t=p[n-1];for(j=n-2;j>=0;j--)p[j+1]=p[j];p[0]=t;}}intmain(){voidfun(int*,int,int);intx[10]={1,2,3,4,5,6,7,8,9,10},i;fun(x,10,14);for(i=0;i<10;i++)printf("%d",x[i]);printf("\n");}18.编写函数voidfun(char*s1,char*s2),实现字符串s1与s2的交叉连接,连接后得到的新字符串放在s1中。如输入abc12345,输出a1b2c345,若输入abcde123,则输出a1b2c3de。#include<>#include<>voidfun(char*s1,char*s2){inti,j,k;for(j=0,i=1;s2[j]!='\0';){for(k=strlen(s1);k>=i;k--)s1[k+1]=s1[k];s1[i]=s2[j];j++;i++;if(s1[i])i++;}}intmain(){chara[100],b[100];voidfun(char*,char*);gets(a);gets(b);fun(a,b);puts(a);}19.#include""intfun(longx,longy){inti,s,t;for(i=0,s=0;i<8;i++){s+=(x%10+y%10);x=x/10;y=y/10;}while(s>=10){for(i=0,t=0;s;i++){t+=s%10;s=s/10;}s=t;}returns;}intmain(){longx,y;intk;scanf("%ld%ld",&x,&y);k=fun(x,y);printf("yuanfenis%d",k);}20.m个人围成一圈,1,2,3循环报数,报到3的人退出,并将退出的序号依次存到数组p中,包括最后一个人的序号。到最后只余1人,输出最后留下的是第几号(最初的序号,以1起始)。若m=6,则输出n=1364251;若m=10,则输出n=436927185104;若m=100,则输出n=91369……1005891。函数intfun(intn,int*p)实现上述功能,返回n个人中最后余的1人的起始序号,并将退出的序号顺序写入p指向的数组中。#include<>intfun(intn,int*p){inta[10000];inti,j,k,m;for(i=0;ia[i]=1;i=0;j=1;m=n;while(m>0){if(j==3)if(a[i]==1){*(p+n-m)=i+1;a[i]=0;m--;k=i+1;j=1;i=(i+1)%n;}elsei=(i+1)%n;elseif(a[i]==1){j++;i=(i+1)%n;}elsei=(i+1)%n;}returnk;}intmain(){intm,a[10000],i,num;scanf("%d",&m);num=fun(m,a);printf("n=%d\n",num);for(i=0;iprintf("%-4d",a[i]);printf("\n");}
t=a[k][m];
a[k][m]=a[i][m];
a[i][m]=t;
{intx[M][N]={{11,52,43,4,25,22},{22,33,46,58,16,47},{83,42,54,26,47,0},
{4,5,6,7,8,9},{45,96,17,18,39,2}},i,j;
fun(x);
for(i=0;i{for(j=0;jprintf("%3d",x[i][j]);printf("\n");}}8.函数voidfun(intx,char*p)实现十进制整数x到二进制的转换。转换后的二进制数以字符串的方式放置于p所指向的数组中。如输入13,输出1101,输入-13,输出-1101。#include""voidfun(intx,char*p){char*q,t;if(x<0){*p++='-';x=-x;}if(x==0){*p++='0';*p=0;return;}q=p;for(;x!=0;x/=2)*p++=x%2+'0';*p=0;for(p--;q{t=*q;*q=*p;*p=t;}}intmain(){inta;charc[18];scanf("%d",&a);fun(a,c);printf("%d'SBINARYIS:%s\n",a,c);}9.编写函数intfun(char(*ss)[N],intm,char*s),功能是:形参ss指向一个m行N列的二维字符数组,每行存放一个字符串。求出最大的字符串,复制到s所指的字符数组中,然后返回此最大字符串的长度。#include<>#include<>#defineN30intfun(char(*ss)[N],intm,char*s){inti,max;max=0;for(i=1;iif(strcmp(ss[i],ss[max])>0)max=i;strcpy(s,ss[max]);returnstrlen(ss[max]);}intmain(){chara[8][N],b[N];inti,len;for(i=0;i<8;i++)gets(a[i]);len=fun(a,8,b);printf("len=%d,str=%s\n",len,b);}10.给定程序中,函数voidfun(char*s)的功能是:在形参s所指字符串中的每个数字字符之后插入一个*号。例如,形参s所指的字符串为:def35adh3kjsdf7。执行结果为:def3*5*adh3*kjsdf7*。#include<>#include<>voidfun(char*s){inti,j;chara[100];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);}intmain(){charstr[80];gets(str);fun(str);puts(str);}11.给定程序中,函数voidfun(char*s)的功能是:把形参s所指字符串中下标为偶数的字符右移到下一个偶数位置,最右边被移出字符串的字符绕回放到第一个偶数位置,下标为奇数的字符不动(注:字符串的长度大于等于2)。例:若输入:abcd123,输出:3badc21#include<>#include<>voidfun(char*s){inti,t,l;l=strlen(s);if(l%2==1){t=s[l-1];for(i=l-1;i>0;i-=2)s[i]=s[i-2];}s[0]=t;else{t=s[l-2];for(i=l-2;i>0;i-=2)s[i]=s[i-2];s[0]=t;}}intmain(){charstr[80];gets(str);fun(str);puts(str);}12.编写函数voidfun(char*s1,char*s2),功能是:对形参s1所指字符串升序排序,并将排序后下标为偶数的字符取出,写入形参s2所指字符数组中,形成一个新串。例如,下面程序若输入:TheCProgrammingLanguage,输出:□□LTaegghmnor。(□表空格)#include<>voidfun(char*s1,char*s2){inti,j,n;chart;for(i=0;*(s1+i)!='\0';i++){n=i;for(j=i;*(s1+j)!='\0';j++){if(*(s1+n)>*(s1+j))n=j;}t=*(s1+n);*(s1+n)=*(s1+i);*(s1+i)=t;}for(i=0;*(s1+i)!='\0';i++){if(i%2==0){*s2=*(s1+i);s2++;}}*s2='\0';}intmain(){chara[80],b[80];gets(a);fun(a,b);puts(b);}13.函数voidfun(chars[])的功能是:将s所指字符串中ASCII值为奇数的字符删除。例如,若s所指字符串中的内容为:“ABCDEFG12345”,其中字符A的ASCII码值为奇数、…、字符1的ASCII码值也为奇数、…都应当删除,其它依此类推。最后s中内容是:“BDF24”。#include<>voidfun(chars[]){inti,j;for(i=0;s[i]!=0;i++){if(s[i]%2==1){for(j=i;s[j]!=0;j++)s[j]=s[j+1];i--;}}}intmain(){chara[80];gets(a);fun(a);puts(a);}14.请编写一个函数intfun(longintx),它的功能是:判断整数x是否是同构数。若是同构数,函数返回1;否则返回0。所谓“同构数”是指这样的数,它出现在它的平方数的右边。例如:输入整数5,5的平方数是25,5是25中右侧的数,所以5是同构数,输出"Yes"。要求x的值不大于10000。#include<>intfun(longintx){longs;s=x*x;while(x!=0){if(s%10!=x%10)return0;x/=10;s/=10;}return1;}intmain(){intx;scanf("%d",&x);if(fun(x)==1)puts("Yse");elseputs("No");}15.编写取子字符串函数voidfun(chars1[],chars2[],intm,intn),其作用是将字符数组s2中从第m个字符开始的共n个字符拷贝到数组s1中;若s2中剩余字符不足n个,则取到尾部。程序运行时,当输入"abcd123"、4,3时应输出"d12";当我们输入"abcd123"、4,6时应输出"d123"。注意,这里是将1作为起始计数.#include<>voidfun(chars1[],chars2[],intm,intn){inti;for(i=0;is1[i]=s2[m+i-1];s1[n]=0;}main(){staticchara[100],b[100];ints,len;voidfun(chars1[],chars2[],intm,intn);puts("ENTERASTRING:");gets(a);puts("ENTERSTARTINGPOSITIONANDLENGTH:");scanf("%d,%d",&s,&len);fun(b,a,s,len);printf("THESRBSTINGIS:%s\n",b);}16.编写函数voidfun(char*str),将参数字符串中各单词首字母变大写,其余字母变小写。输入输出在main中实现。如输入"youHAVE10books,don'tyou?"输出"YouHave10Books,Don'tYou?"。单词以空格、逗号、句号分隔。#include<>voidfun(char*str){inti,j;for(i=0;str[i];i++)if(str[i]>='A'&&str[i]<='Z')str[i]+=32;if(str[0]>='a'&&str[0]<='z')str[0]-=32;for(i=0;str[i];i++)if(str[i]==''||str[i]==','||str[i]=='.'){if(str[i+1]>='a'&&str[i+1]<='z')str[i+1]-=32;}}intmain(){chara[100];gets(a);fun(a);puts(a);}17.n个整数,前面各数循环顺序后移m个位置,最后m个数变成最前面m个数。写函数voidfun(int*p,intn,intm),实现上述功能。在main()中输入与输出。如下面程序输出78910123456。注意,m可能大于n。#include""voidfun(int*p,intn,intm){inti,j,k,t;k=m%n;for(i=0;i{t=p[n-1];for(j=n-2;j>=0;j--)p[j+1]=p[j];p[0]=t;}}intmain(){voidfun(int*,int,int);intx[10]={1,2,3,4,5,6,7,8,9,10},i;fun(x,10,14);for(i=0;i<10;i++)printf("%d",x[i]);printf("\n");}18.编写函数voidfun(char*s1,char*s2),实现字符串s1与s2的交叉连接,连接后得到的新字符串放在s1中。如输入abc12345,输出a1b2c345,若输入abcde123,则输出a1b2c3de。#include<>#include<>voidfun(char*s1,char*s2){inti,j,k;for(j=0,i=1;s2[j]!='\0';){for(k=strlen(s1);k>=i;k--)s1[k+1]=s1[k];s1[i]=s2[j];j++;i++;if(s1[i])i++;}}intmain(){chara[100],b[100];voidfun(char*,char*);gets(a);gets(b);fun(a,b);puts(a);}19.#include""intfun(longx,longy){inti,s,t;for(i=0,s=0;i<8;i++){s+=(x%10+y%10);x=x/10;y=y/10;}while(s>=10){for(i=0,t=0;s;i++){t+=s%10;s=s/10;}s=t;}returns;}intmain(){longx,y;intk;scanf("%ld%ld",&x,&y);k=fun(x,y);printf("yuanfenis%d",k);}20.m个人围成一圈,1,2,3循环报数,报到3的人退出,并将退出的序号依次存到数组p中,包括最后一个人的序号。到最后只余1人,输出最后留下的是第几号(最初的序号,以1起始)。若m=6,则输出n=1364251;若m=10,则输出n=436927185104;若m=100,则输出n=91369……1005891。函数intfun(intn,int*p)实现上述功能,返回n个人中最后余的1人的起始序号,并将退出的序号顺序写入p指向的数组中。#include<>intfun(intn,int*p){inta[10000];inti,j,k,m;for(i=0;ia[i]=1;i=0;j=1;m=n;while(m>0){if(j==3)if(a[i]==1){*(p+n-m)=i+1;a[i]=0;m--;k=i+1;j=1;i=(i+1)%n;}elsei=(i+1)%n;elseif(a[i]==1){j++;i=(i+1)%n;}elsei=(i+1)%n;}returnk;}intmain(){intm,a[10000],i,num;scanf("%d",&m);num=fun(m,a);printf("n=%d\n",num);for(i=0;iprintf("%-4d",a[i]);printf("\n");}
{for(j=0;jprintf("%3d",x[i][j]);printf("\n");}}8.函数voidfun(intx,char*p)实现十进制整数x到二进制的转换。转换后的二进制数以字符串的方式放置于p所指向的数组中。如输入13,输出1101,输入-13,输出-1101。#include""voidfun(intx,char*p){char*q,t;if(x<0){*p++='-';x=-x;}if(x==0){*p++='0';*p=0;return;}q=p;for(;x!=0;x/=2)*p++=x%2+'0';*p=0;for(p--;q{t=*q;*q=*p;*p=t;}}intmain(){inta;charc[18];scanf("%d",&a);fun(a,c);printf("%d'SBINARYIS:%s\n",a,c);}9.编写函数intfun(char(*ss)[N],intm,char*s),功能是:形参ss指向一个m行N列的二维字符数组,每行存放一个字符串。求出最大的字符串,复制到s所指的字符数组中,然后返回此最大字符串的长度。#include<>#include<>#defineN30intfun(char(*ss)[N],intm,char*s){inti,max;max=0;for(i=1;iif(strcmp(ss[i],ss[max])>0)max=i;strcpy(s,ss[max]);returnstrlen(ss[max]);}intmain(){chara[8][N],b[N];inti,len;for(i=0;i<8;i++)gets(a[i]);len=fun(a,8,b);printf("len=%d,str=%s\n",len,b);}10.给定程序中,函数voidfun(char*s)的功能是:在形参s所指字符串中的每个数字字符之后插入一个*号。例如,形参s所指的字符串为:def35adh3kjsdf7。执行结果为:def3*5*adh3*kjsdf7*。#include<>#include<>voidfun(char*s){inti,j;chara[100];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);}intmain(){charstr[80];gets(str);fun(str);puts(str);}11.给定程序中,函数voidfun(char*s)的功能是:把形参s所指字符串中下标为偶数的字符右移到下一个偶数位置,最右边被移出字符串的字符绕回放到第一个偶数位置,下标为奇数的字符不动(注:字符串的长度大于等于2)。例:若输入:abcd123,输出:3badc21#include<>#include<>voidfun(char*s){inti,t,l;l=strlen(s);if(l%2==1){t=s[l-1];for(i=l-1;i>0;i-=2)s[i]=s[i-2];}s[0]=t;else{t=s[l-2];for(i=l-2;i>0;i-=2)s[i]=s[i-2];s[0]=t;}}intmain(){charstr[80];gets(str);fun(str);puts(str);}12.编写函数voidfun(char*s1,char*s2),功能是:对形参s1所指字符串升序排序,并将排序后下标为偶数的字符取出,写入形参s2所指字符数组中,形成一个新串。例如,下面程序若输入:TheCProgrammingLanguage,输出:□□LTaegghmnor。(□表空格)#include<>voidfun(char*s1,char*s2){inti,j,n;chart;for(i=0;*(s1+i)!='\0';i++){n=i;for(j=i;*(s1+j)!='\0';j++){if(*(s1+n)>*(s1+j))n=j;}t=*(s1+n);*(s1+n)=*(s1+i);*(s1+i)=t;}for(i=0;*(s1+i)!='\0';i++){if(i%2==0){*s2=*(s1+i);s2++;}}*s2='\0';}intmain(){chara[80],b[80];gets(a);fun(a,b);puts(b);}13.函数voidfun(chars[])的功能是:将s所指字符串中ASCII值为奇数的字符删除。例如,若s所指字符串中的内容为:“ABCDEFG12345”,其中字符A的ASCII码值为奇数、…、字符1的ASCII码值也为奇数、…都应当删除,其它依此类推。最后s中内容是:“BDF24”。#include<>voidfun(chars[]){inti,j;for(i=0;s[i]!=0;i++){if(s[i]%2==1){for(j=i;s[j]!=0;j++)s[j]=s[j+1];i--;}}}intmain(){chara[80];gets(a);fun(a);puts(a);}14.请编写一个函数intfun(longintx),它的功能是:判断整数x是否是同构数。若是同构数,函数返回1;否则返回0。所谓“同构数”是指这样的数,它出现在它的平方数的右边。例如:输入整数5,5的平方数是25,5是25中右侧的数,所以5是同构数,输出"Yes"。要求x的值不大于10000。#include<>intfun(longintx){longs;s=x*x;while(x!=0){if(s%10!=x%10)return0;x/=10;s/=10;}return1;}intmain(){intx;scanf("%d",&x);if(fun(x)==1)puts("Yse");elseputs("No");}15.编写取子字符串函数voidfun(chars1[],chars2[],intm,intn),其作用是将字符数组s2中从第m个字符开始的共n个字符拷贝到数组s1中;若s2中剩余字符不足n个,则取到尾部。程序运行时,当输入"abcd123"、4,3时应输出"d12";当我们输入"abcd123"、4,6时应输出"d123"。注意,这里是将1作为起始计数.#include<>voidfun(chars1[],chars2[],intm,intn){inti;for(i=0;is1[i]=s2[m+i-1];s1[n]=0;}main(){staticchara[100],b[100];ints,len;voidfun(chars1[],chars2[],intm,intn);puts("ENTERASTRING:");gets(a);puts("ENTERSTARTINGPOSITIONANDLENGTH:");scanf("%d,%d",&s,&len);fun(b,a,s,len);printf("THESRBSTINGIS:%s\n",b);}16.编写函数voidfun(char*str),将参数字符串中各单词首字母变大写,其余字母变小写。输入输出在main中实现。如输入"youHAVE10books,don'tyou?"输出"YouHave10Books,Don'tYou?"。单词以空格、逗号、句号分隔。#include<>voidfun(char*str){inti,j;for(i=0;str[i];i++)if(str[i]>='A'&&str[i]<='Z')str[i]+=32;if(str[0]>='a'&&str[0]<='z')str[0]-=32;for(i=0;str[i];i++)if(str[i]==''||str[i]==','||str[i]=='.'){if(str[i+1]>='a'&&str[i+1]<='z')str[i+1]-=32;}}intmain(){chara[100];gets(a);fun(a);puts(a);}17.n个整数,前面各数循环顺序后移m个位置,最后m个数变成最前面m个数。写函数voidfun(int*p,intn,intm),实现上述功能。在main()中输入与输出。如下面程序输出78910123456。注意,m可能大于n。#include""voidfun(int*p,intn,intm){inti,j,k,t;k=m%n;for(i=0;i{t=p[n-1];for(j=n-2;j>=0;j--)p[j+1]=p[j];p[0]=t;}}intmain(){voidfun(int*,int,int);intx[10]={1,2,3,4,5,6,7,8,9,10},i;fun(x,10,14);for(i=0;i<10;i++)printf("%d",x[i]);printf("\n");}18.编写函数voidfun(char*s1,char*s2),实现字符串s1与s2的交叉连接,连接后得到的新字符串放在s1中。如输入abc12345,输出a1b2c345,若输入abcde123,则输出a1b2c3de。#include<>#include<>voidfun(char*s1,char*s2){inti,j,k;for(j=0,i=1;s2[j]!='\0';){for(k=strlen(s1);k>=i;k--)s1[k+1]=s1[k];s1[i]=s2[j];j++;i++;if(s1[i])i++;}}intmain(){chara[100],b[100];voidfun(char*,char*);gets(a);gets(b);fun(a,b);puts(a);}19.#include""intfun(longx,longy){inti,s,t;for(i=0,s=0;i<8;i++){s+=(x%10+y%10);x=x/10;y=y/10;}while(s>=10){for(i=0,t=0;s;i++){t+=s%10;s=s/10;}s=t;}returns;}intmain(){longx,y;intk;scanf("%ld%ld",&x,&y);k=fun(x,y);printf("yuanfenis%d",k);}20.m个人围成一圈,1,2,3循环报数,报到3的人退出,并将退出的序号依次存到数组p中,包括最后一个人的序号。到最后只余1人,输出最后留下的是第几号(最初的序号,以1起始)。若m=6,则输出n=1364251;若m=10,则输出n=436927185104;若m=100,则输出n=91369……1005891。函数intfun(intn,int*p)实现上述功能,返回n个人中最后余的1人的起始序号,并将退出的序号顺序写入p指向的数组中。#include<>intfun(intn,int*p){inta[10000];inti,j,k,m;for(i=0;ia[i]=1;i=0;j=1;m=n;while(m>0){if(j==3)if(a[i]==1){*(p+n-m)=i+1;a[i]=0;m--;k=i+1;j=1;i=(i+1)%n;}elsei=(i+1)%n;elseif(a[i]==1){j++;i=(i+1)%n;}elsei=(i+1)%n;}returnk;}intmain(){intm,a[10000],i,num;scanf("%d",&m);num=fun(m,a);printf("n=%d\n",num);for(i=0;iprintf("%-4d",a[i]);printf("\n");}
printf("%3d",x[i][j]);
8.函数voidfun(intx,char*p)实现十进制整数x到二进制的转换。
转换后的二进制数以字符串的方式放置于p所指向的数组中。
如输入13,输出1101,输入-13,输出-1101。
#include""
voidfun(intx,char*p)
char*q,t;
if(x<0){*p++='-';x=-x;}
if(x==0)
*p++='0';
*p=0;
q=p;
for(;x!
=0;x/=2)
*p++=x%2+'0';
for(p--;q
t=*q;
*q=*p;
*p=t;
{inta;
charc[18];
scanf("%d",&a);
fun(a,c);
printf("%d'SBINARYIS:
%s\n",a,c);
9.编写函数intfun(char(*ss)[N],intm,char*s),功能是:
形参ss指向一个m行N列的二维字符数组,每行存放一个字符串。
求出最大的字符串,复制到s所指的字符数组中,然后返回此最大字符串的长度。
#defineN30
intfun(char(*ss)[N],intm,char*s)
inti,max;
max=0;
for(i=1;iif(strcmp(ss[i],ss[max])>0)max=i;strcpy(s,ss[max]);returnstrlen(ss[max]);}intmain(){chara[8][N],b[N];inti,len;for(i=0;i<8;i++)gets(a[i]);len=fun(a,8,b);printf("len=%d,str=%s\n",len,b);}10.给定程序中,函数voidfun(char*s)的功能是:在形参s所指字符串中的每个数字字符之后插入一个*号。例如,形参s所指的字符串为:def35adh3kjsdf7。执行结果为:def3*5*adh3*kjsdf7*。#include<>#include<>voidfun(char*s){inti,j;chara[100];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);}intmain(){charstr[80];gets(str);fun(str);puts(str);}11.给定程序中,函数voidfun(char*s)的功能是:把形参s所指字符串中下标为偶数的字符右移到下一个偶数位置,最右边被移出字符串的字符绕回放到第一个偶数位置,下标为奇数的字符不动(注:字符串的长度大于等于2)。例:若输入:abcd123,输出:3badc21#include<>#include<>voidfun(char*s){inti,t,l;l=strlen(s);if(l%2==1){t=s[l-1];for(i=l-1;i>0;i-=2)s[i]=s[i-2];}s[0]=t;else{t=s[l-2];for(i=l-2;i>0;i-=2)s[i]=s[i-2];s[0]=t;}}intmain(){charstr[80];gets(str);fun(str);puts(str);}12.编写函数voidfun(char*s1,char*s2),功能是:对形参s1所指字符串升序排序,并将排序后下标为偶数的字符取出,写入形参s2所指字符数组中,形成一个新串。例如,下面程序若输入:TheCProgrammingLanguage,输出:□□LTaegghmnor。(□表空格)#include<>voidfun(char*s1,char*s2){inti,j,n;chart;for(i=0;*(s1+i)!='\0';i++){n=i;for(j=i;*(s1+j)!='\0';j++){if(*(s1+n)>*(s1+j))n=j;}t=*(s1+n);*(s1+n)=*(s1+i);*(s1+i)=t;}for(i=0;*(s1+i)!='\0';i++){if(i%2==0){*s2=*(s1+i);s2++;}}*s2='\0';}intmain(){chara[80],b[80];gets(a);fun(a,b);puts(b);}13.函数voidfun(chars[])的功能是:将s所指字符串中ASCII值为奇数的字符删除。例如,若s所指字符串中的内容为:“ABCDEFG12345”,其中字符A的ASCII码值为奇数、…、字符1的ASCII码值也为奇数、…都应当删除,其它依此类推。最后s中内容是:“BDF24”。#include<>voidfun(chars[]){inti,j;for(i=0;s[i]!=0;i++){if(s[i]%2==1){for(j=i;s[j]!=0;j++)s[j]=s[j+1];i--;}}}intmain(){chara[80];gets(a);fun(a);puts(a);}14.请编写一个函数intfun(longintx),它的功能是:判断整数x是否是同构数。若是同构数,函数返回1;否则返回0。所谓“同构数”是指这样的数,它出现在它的平方数的右边。例如:输入整数5,5的平方数是25,5是25中右侧的数,所以5是同构数,输出"Yes"。要求x的值不大于10000。#include<>intfun(longintx){longs;s=x*x;while(x!=0){if(s%10!=x%10)return0;x/=10;s/=10;}return1;}intmain(){intx;scanf("%d",&x);if(fun(x)==1)puts("Yse");elseputs("No");}15.编写取子字符串函数voidfun(chars1[],chars2[],intm,intn),其作用是将字符数组s2中从第m个字符开始的共n个字符拷贝到数组s1中;若s2中剩余字符不足n个,则取到尾部。程序运行时,当输入"abcd123"、4,3时应输出"d12";当我们输入"abcd123"、4,6时应输出"d123"。注意,这里是将1作为起始计数.#include<>voidfun(chars1[],chars2[],intm,intn){inti;for(i=0;is1[i]=s2[m+i-1];s1[n]=0;}main(){staticchara[100],b[100];ints,len;voidfun(chars1[],chars2[],intm,intn);puts("ENTERASTRING:");gets(a);puts("ENTERSTARTINGPOSITIONANDLENGTH:");scanf("%d,%d",&s,&len);fun(b,a,s,len);printf("THESRBSTINGIS:%s\n",b);}16.编写函数voidfun(char*str),将参数字符串中各单词首字母变大写,其余字母变小写。输入输出在main中实现。如输入"youHAVE10books,don'tyou?"输出"YouHave10Books,Don'tYou?"。单词以空格、逗号、句号分隔。#include<>voidfun(char*str){inti,j;for(i=0;str[i];i++)if(str[i]>='A'&&str[i]<='Z')str[i]+=32;if(str[0]>='a'&&str[0]<='z')str[0]-=32;for(i=0;str[i];i++)if(str[i]==''||str[i]==','||str[i]=='.'){if(str[i+1]>='a'&&str[i+1]<='z')str[i+1]-=32;}}intmain(){chara[100];gets(a);fun(a);puts(a);}17.n个整数,前面各数循环顺序后移m个位置,最后m个数变成最前面m个数。写函数voidfun(int*p,intn,intm),实现上述功能。在main()中输入与输出。如下面程序输出78910123456。注意,m可能大于n。#include""voidfun(int*p,intn,intm){inti,j,k,t;k=m%n;for(i=0;i{t=p[n-1];for(j=n-2;j>=0;j--)p[j+1]=p[j];p[0]=t;}}intmain(){voidfun(int*,int,int);intx[10]={1,2,3,4,5,6,7,8,9,10},i;fun(x,10,14);for(i=0;i<10;i++)printf("%d",x[i]);printf("\n");}18.编写函数voidfun(char*s1,char*s2),实现字符串s1与s2的交叉连接,连接后得到的新字符串放在s1中。如输入abc12345,输出a1b2c345,若输入abcde123,则输出a1b2c3de。#include<>#include<>voidfun(char*s1,char*s2){inti,j,k;for(j=0,i=1;s2[j]!='\0';){for(k=strlen(s1);k>=i;k--)s1[k+1]=s1[k];s1[i]=s2[j];j++;i++;if(s1[i])i++;}}intmain(){chara[100],b[100];voidfun(char*,char*);gets(a);gets(b);fun(a,b);puts(a);}19.#include""intfun(longx,longy){inti,s,t;for(i=0,s=0;i<8;i++){s+=(x%10+y%10);x=x/10;y=y/10;}while(s>=10){for(i=0,t=0;s;i++){t+=s%10;s=s/10;}s=t;}returns;}intmain(){longx,y;intk;scanf("%ld%ld",&x,&y);k=fun(x,y);printf("yuanfenis%d",k);}20.m个人围成一圈,1,2,3循环报数,报到3的人退出,并将退出的序号依次存到数组p中,包括最后一个人的序号。到最后只余1人,输出最后留下的是第几号(最初的序号,以1起始)。若m=6,则输出n=1364251;若m=10,则输出n=436927185104;若m=100,则输出n=91369……1005891。函数intfun(intn,int*p)实现上述功能,返回n个人中最后余的1人的起始序号,并将退出的序号顺序写入p指向的数组中。#include<>intfun(intn,int*p){inta[10000];inti,j,k,m;for(i=0;ia[i]=1;i=0;j=1;m=n;while(m>0){if(j==3)if(a[i]==1){*(p+n-m)=i+1;a[i]=0;m--;k=i+1;j=1;i=(i+1)%n;}elsei=(i+1)%n;elseif(a[i]==1){j++;i=(i+1)%n;}elsei=(i+1)%n;}returnk;}intmain(){intm,a[10000],i,num;scanf("%d",&m);num=fun(m,a);printf("n=%d\n",num);for(i=0;iprintf("%-4d",a[i]);printf("\n");}
if(strcmp(ss[i],ss[max])>0)max=i;
strcpy(s,ss[max]);
returnstrlen(ss[max]);
{chara[8][N],b[N];
inti,len;
for(i=0;i<8;i++)
gets(a[i]);
len=fun(a,8,b);
printf("len=%d,str=%s\n",len,b);
10.给定程序中,函数voidfun(char*s)的功能是:
在形参s所指字符串中的每个数字字符之后插入一个*号。
例如,形参s所指的字符串为:
def35adh3kjsdf7。
执行结果为:
def3*5*adh3*kjsdf7*。
voidfun(char*s)
chara[100];
for(i=0,j=0;*(s+i)!
='\0';i++,j++)
a[j]=*(s+i);
if(*(s+i)>='0'&&*(s+i)<='9')
*(a+j+1)='*';
a[j]='\0';
strcpy(s,a);
{charstr[80];
gets(str);fun(str);
puts(str);
11.给定程序中,函数voidfun(char*s)的功能是:
把形参s所指字符串中下标为偶数的字符右移到下一个偶数位置,最右边被移出字符串的字符绕回放到第一个偶数位置,下标为奇数的字符不动(注:
字符串的长度大于等于2)。
abcd123,输出:
3badc21
inti,t,l;
l=strlen(s);
if(l%2==1)
t=s[l-1];
for(i=l-1;i>0;i-=2)
s[i]=s[i-2];
s[0]=t;
t=s[l-2];
for(i=l-2;i>0;i-=2)
gets(str);
fun(str);
12.编写函数voidfun(char*s1,char*s2),功能是:
对形参s1所指字符串升序排序,并将排序后下标为偶数的字符取出,写入形参s2所指字符数组中,形成一个新串。
例如,下面程序若输入:
TheCProgrammingLanguage,输出:
□□LTaegghmnor。
(□表空格)
voidfun(char*s1,char*s2)
inti,j,n;
chart;
for(i=0;*(s1+i)!
='\0';i++)
n=i;
for(j=i;*(s1+j)!
='\0';j++)
if(*(s1+n)>*(s1+j))n=j;}
t=*(s1+n);*(s1+n)=*(s1+i);*(s1+i)=t;
if(i%2==0)
*s2=*(s1+i);
s2++;
*s2='\0';
{chara[80],b[80];
gets(a);
fun(a,b);
puts(b);
13.函数voidfun(chars[])的功能是:
将s所指字符串中ASCII值为奇数的字符删除。
例如,若s所指字符串中的内容为:
“ABCDEFG12345”,其中字符A的ASCII码值为奇数、…、字符1的ASCII码值也为奇数、…都应当删除,其它依此类推。
最后s中内容是:
“BDF24”。
voidfun(chars[])
for(i=0;s[i]!
if(s[i]%2==1)
for(j=i;s[j]!
=0;j++)
s[j]=s[j+1];
i--;
{chara[80];
fun(a);
puts(a);
14.请编写一个函数intfun(longintx),它的功能是:
判断整数x是否是同构数。
若是同构数,函数返回1;否则返回0。
所谓“同构数”是指这样的数,它出现在它的平方数的右边。
输入整数5,5的平方数是25,5是25中右侧的数,所以5是同构数,输出"Yes"。
要求x的值不大于10000。
intfun(longintx)
longs;
s=x*x;
while(x!
if(s%10!
=x%10)
s/=10;
return1;
if(fun(x)==1)
puts("Yse");
elseputs("No");
15.编写取子字符串函数voidfun(chars1[],chars2[],intm,intn),其作用是将字符数组s2中从第m个字符开始的共n个字符拷贝到数组s1中;若s2中剩余字符不足n个,则取到尾部。
程序运行时,当输入"abcd123"、4,3时应输出"d12";当我们输入"abcd123"、4,6时应输出"d123"。
注意,这里是将1作为起始计数.
voidfun(chars1[],chars2[],intm,intn)
for(i=0;is1[i]=s2[m+i-1];s1[n]=0;}main(){staticchara[100],b[100];ints,len;voidfun(chars1[],chars2[],intm,intn);puts("ENTERASTRING:");gets(a);puts("ENTERSTARTINGPOSITIONANDLENGTH:");scanf("%d,%d",&s,&len);fun(b,a,s,len);printf("THESRBSTINGIS:%s\n",b);}16.编写函数voidfun(char*str),将参数字符串中各单词首字母变大写,其余字母变小写。输入输出在main中实现。如输入"youHAVE10books,don'tyou?"输出"YouHave10Books,Don'tYou?"。单词以空格、逗号、句号分隔。#include<>voidfun(char*str){inti,j;for(i=0;str[i];i++)if(str[i]>='A'&&str[i]<='Z')str[i]+=32;if(str[0]>='a'&&str[0]<='z')str[0]-=32;for(i=0;str[i];i++)if(str[i]==''||str[i]==','||str[i]=='.'){if(str[i+1]>='a'&&str[i+1]<='z')str[i+1]-=32;}}intmain(){chara[100];gets(a);fun(a);puts(a);}17.n个整数,前面各数循环顺序后移m个位置,最后m个数变成最前面m个数。写函数voidfun(int*p,intn,intm),实现上述功能。在main()中输入与输出。如下面程序输出78910123456。注意,m可能大于n。#include""voidfun(int*p,intn,intm){inti,j,k,t;k=m%n;for(i=0;i{t=p[n-1];for(j=n-2;j>=0;j--)p[j+1]=p[j];p[0]=t;}}intmain(){voidfun(int*,int,int);intx[10]={1,2,3,4,5,6,7,8,9,10},i;fun(x,10,14);for(i=0;i<10;i++)printf("%d",x[i]);printf("\n");}18.编写函数voidfun(char*s1,char*s2),实现字符串s1与s2的交叉连接,连接后得到的新字符串放在s1中。如输入abc12345,输出a1b2c345,若输入abcde123,则输出a1b2c3de。#include<>#include<>voidfun(char*s1,char*s2){inti,j,k;for(j=0,i=1;s2[j]!='\0';){for(k=strlen(s1);k>=i;k--)s1[k+1]=s1[k];s1[i]=s2[j];j++;i++;if(s1[i])i++;}}intmain(){chara[100],b[100];voidfun(char*,char*);gets(a);gets(b);fun(a,b);puts(a);}19.#include""intfun(longx,longy){inti,s,t;for(i=0,s=0;i<8;i++){s+=(x%10+y%10);x=x/10;y=y/10;}while(s>=10){for(i=0,t=0;s;i++){t+=s%10;s=s/10;}s=t;}returns;}intmain(){longx,y;intk;scanf("%ld%ld",&x,&y);k=fun(x,y);printf("yuanfenis%d",k);}20.m个人围成一圈,1,2,3循环报数,报到3的人退出,并将退出的序号依次存到数组p中,包括最后一个人的序号。到最后只余1人,输出最后留下的是第几号(最初的序号,以1起始)。若m=6,则输出n=1364251;若m=10,则输出n=436927185104;若m=100,则输出n=91369……1005891。函数intfun(intn,int*p)实现上述功能,返回n个人中最后余的1人的起始序号,并将退出的序号顺序写入p指向的数组中。#include<>intfun(intn,int*p){inta[10000];inti,j,k,m;for(i=0;ia[i]=1;i=0;j=1;m=n;while(m>0){if(j==3)if(a[i]==1){*(p+n-m)=i+1;a[i]=0;m--;k=i+1;j=1;i=(i+1)%n;}elsei=(i+1)%n;elseif(a[i]==1){j++;i=(i+1)%n;}elsei=(i+1)%n;}returnk;}intmain(){intm,a[10000],i,num;scanf("%d",&m);num=fun(m,a);printf("n=%d\n",num);for(i=0;iprintf("%-4d",a[i]);printf("\n");}
s1[i]=s2[m+i-1];
s1[n]=0;
main()
staticchara[100],b[100];
ints,len;
voidfun(chars1[],chars2[],intm,intn);
puts("ENTERASTRING:
puts("ENTERSTARTINGPOSITIONANDLENGTH:
scanf("%d,%d",&s,&len);
fun(b,a,s,len);
printf("THESRBSTINGIS:
%s\n",b);
16.编写函数voidfun(char*str),将参数字符串中各单词首字母变大写,其余字母变小写。
输入输出在main中实现。
如输入"youHAVE10books,don'tyou?
"输出"YouHave10Books,Don'tYou?
"。
单词以空格、逗号、句号分隔。
voidfun(char*str)
for(i=0;str[i];i++)
if(str[i]>='A'&&str[i]<='Z')
str[i]+=32;
if(str[0]>='a'&&str[0]<='z')
str[0]-=32;
if(str[i]==''||str[i]==','||str[i]=='.')
if(str[i+1]>='a'&&str[i+1]<='z')
str[i+1]-=32;
{chara[100];
17.n个整数,前面各数循环顺序后移m个位置,最后m个数变成最前面m个数。
写函数voidfun(int*p,intn,intm),实现上述功能。
在main()中输入与输出。
如下面程序输出78910123456。
注意,m可能大于n。
voidfun(int*p,intn,intm)
inti,j,k,t;
k=m%n;
for(i=0;i{t=p[n-1];for(j=n-2;j>=0;j--)p[j+1]=p[j];p[0]=t;}}intmain(){voidfun(int*,int,int);intx[10]={1,2,3,4,5,6,7,8,9,10},i;fun(x,10,14);for(i=0;i<10;i++)printf("%d",x[i]);printf("\n");}18.编写函数voidfun(char*s1,char*s2),实现字符串s1与s2的交叉连接,连接后得到的新字符串放在s1中。如输入abc12345,输出a1b2c345,若输入abcde123,则输出a1b2c3de。#include<>#include<>voidfun(char*s1,char*s2){inti,j,k;for(j=0,i=1;s2[j]!='\0';){for(k=strlen(s1);k>=i;k--)s1[k+1]=s1[k];s1[i]=s2[j];j++;i++;if(s1[i])i++;}}intmain(){chara[100],b[100];voidfun(char*,char*);gets(a);gets(b);fun(a,b);puts(a);}19.#include""intfun(longx,longy){inti,s,t;for(i=0,s=0;i<8;i++){s+=(x%10+y%10);x=x/10;y=y/10;}while(s>=10){for(i=0,t=0;s;i++){t+=s%10;s=s/10;}s=t;}returns;}intmain(){longx,y;intk;scanf("%ld%ld",&x,&y);k=fun(x,y);printf("yuanfenis%d",k);}20.m个人围成一圈,1,2,3循环报数,报到3的人退出,并将退出的序号依次存到数组p中,包括最后一个人的序号。到最后只余1人,输出最后留下的是第几号(最初的序号,以1起始)。若m=6,则输出n=1364251;若m=10,则输出n=436927185104;若m=100,则输出n=91369……1005891。函数intfun(intn,int*p)实现上述功能,返回n个人中最后余的1人的起始序号,并将退出的序号顺序写入p指向的数组中。#include<>intfun(intn,int*p){inta[10000];inti,j,k,m;for(i=0;ia[i]=1;i=0;j=1;m=n;while(m>0){if(j==3)if(a[i]==1){*(p+n-m)=i+1;a[i]=0;m--;k=i+1;j=1;i=(i+1)%n;}elsei=(i+1)%n;elseif(a[i]==1){j++;i=(i+1)%n;}elsei=(i+1)%n;}returnk;}intmain(){intm,a[10000],i,num;scanf("%d",&m);num=fun(m,a);printf("n=%d\n",num);for(i=0;iprintf("%-4d",a[i]);printf("\n");}
t=p[n-1];
for(j=n-2;j>=0;j--)
p[j+1]=p[j];
p[0]=t;
{voidfun(int*,int,int);
intx[10]={1,2,3,4,5,6,7,8,9,10},i;
fun(x,10,14);
for(i=0;i<10;i++)
18.编写函数voidfun(char*s1,char*s2),实现字符串s1与s2的交叉连接,连接后得到的新字符串放在s1中。
如输入abc12345,输出a1b2c345,若输入abcde123,则输出a1b2c3de。
inti,j,k;
for(j=0,i=1;s2[j]!
='\0';)
for(k=strlen(s1);k>=i;k--)
s1[k+1]=s1[k];
s1[i]=s2[j];
j++;i++;
if(s1[i])i++;
{chara[100],b[100];
voidfun(char*,char*);
gets(b);
19.
intfun(longx,longy)
{inti,s,t;
for(i=0,s=0;i<8;i++)
s+=(x%10+y%10);
x=x/10;y=y/10;
while(s>=10)
for(i=0,t=0;s;i++)
t+=s%10;
s=s/10;
s=t;
{longx,y;
intk;
scanf("%ld%ld",&x,&y);
k=fun(x,y);
printf("yuanfenis%d",k);
20.m个人围成一圈,1,2,3循环报数,报到3的人退出,并将退出的序号依次存到数组p中,包括最后一个人的序号。
到最后只余1人,输出最后留下的是第几号(最初的序号,以1起始)。
若m=6,则输出n=1364251;若m=10,则输出n=436927185104;若m=100,则输出n=91369……1005891。
函数intfun(intn,int*p)实现上述功能,返回n个人中最后余的1人的起始序号,并将退出的序号顺序写入p指向的数组中。
intfun(intn,int*p)
inta[10000];
inti,j,k,m;
for(i=0;ia[i]=1;i=0;j=1;m=n;while(m>0){if(j==3)if(a[i]==1){*(p+n-m)=i+1;a[i]=0;m--;k=i+1;j=1;i=(i+1)%n;}elsei=(i+1)%n;elseif(a[i]==1){j++;i=(i+1)%n;}elsei=(i+1)%n;}returnk;}intmain(){intm,a[10000],i,num;scanf("%d",&m);num=fun(m,a);printf("n=%d\n",num);for(i=0;iprintf("%-4d",a[i]);printf("\n");}
a[i]=1;
i=0;
j=1;
m=n;
while(m>0)
if(j==3)
if(a[i]==1)
*(p+n-m)=i+1;
a[i]=0;
m--;
k=i+1;
i=(i+1)%n;
returnk;
intm,a[10000],i,num;
scanf("%d",&m);
num=fun(m,a);
printf("n=%d\n",num);
for(i=0;iprintf("%-4d",a[i]);printf("\n");}
printf("%-4d",a[i]);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1