for(j=0;j<6;j++)
{t=a[i][j];a[i][j]=a[i+1][j];a[i+1][j]=t;}
}
voidmain()
{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"stdio.h"
#include
voidfun(intx,char*p)
{inti,k=x;
chars[80];
for(i=0;;i++)
{if(x%2==0)s[i]='0';
elses[i]='1';
x/=2;
if(x==0)break;
}
if(k<0)*(p+0)='-';
for(;i>=0;i--,p++)
if(k<0)*(p+1)=s[i];
else*p=s[i];
if(i==-1)
{if(k<0)*(p+1)='\0';
else*p='\0';
}
}
voidmain()
{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
#include
intfun(char(*ss)[N],intm,char*s)
{inti;
s=strcpy(s,*(ss+0));
for(i=0;iif(strcmp(*(ss+i),s)>0)
strcpy(s,*(ss+i));
return(strlen(s));
}
voidmain()
{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
#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);
}
voidmain()
{charstr[80];
gets(str);fun(str);
puts(str);
}
11.给定程序中,函数voidfun(char*s)的功能是:
把形参s所指字符串中下标为偶数的字符右移到下一个偶数位置,最右边被移出字符串的字符绕回放到第一个偶数位置,下标为奇数的字符不动(注:
字符串的长度大于等于2)。
例:
若输入:
abcd123,输出:
3badc21
#include
voidfun(char*s)
{inti;chart;
for(i=1;*(s+i)!
='\0';i++)
if(i%2==0)
{t=*(s+0);*(s+0)=*(s+i);*(s+i)=t;}
}
voidmain()
{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,k,n=0;chart;
for(i=0;*(s1+i)!
=0;i++)n+=1;
for(i=0;i{k=i;
for(j=i+1;jif(k!
=i){t=s1[k];s1[k]=s1[i];s1[i]=t;}
}
for(i=0,j=0;i{if(i%2==0){s2[j]=s1[i];j++;}
}
s2[j]=0;
}
voidmain()
{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!
=0)
{for(j=i;s[j]!
='\0';j++)
s[j]=s[j+1];
i--;
}
}
voidmain()
{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)
{longm,a;
for(a=10;;a*=10)
{m=x*x%a;
if(x==m)return
(1);
if(x*x/a==0)return(0);
}
}
voidmain()
{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,a,b;
a=strlen(s2);
b=(aa:
m+n-1);
for(i=m-1;i
{*s1=*(s2+i);s1++;}
*s1='\0';
}
voidmain()
{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;
if(*(str+0)>='a'&&*(str+0)<='z')
*(str+0)=*(str+0)-32;
for(i=1;*(str+i)!
='\0';i++)
{if(*(str+i-1)==''||*(str+i-1)==','||*(str+i-1)=='.')
{if(*(str+i)>='a'&&*(str+i)<='z')
*(str+i)=*(str+i)-32;
}
elseif(*(str+i)>='A'&&*(str+i)<='Z')
*(str+i)=*(str+i)+32;
}
}
voidmain()
{chara[100];
gets(a);
fun(a);
puts(a);
}
17.n个整数,前面各数循环顺序后移m个位置,最后m个数变成最前面m个数。
写函数voidfun(int*p,intn,intm),实现上述功能。
在main()中输入与输出。
如下面程序输出78910123456。
注意,m可能大于n。
#include"stdio.h"
voidfun(int*p,intn,intm)
{inti,j;
for(i=1;i<=m;i++)
{for(j=n-1;j>=0;j--)
*(p+j+1)=*(p+j);
*(p+0)=*(p+n);
}
}
voidmain()
{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++;
}
}
voidmain()
{chara[100],b[100];
voidfun(char*,char*);
gets(a);
gets(b);
fun(a,b);
puts(a);
}
19.传说可以根据两个人的生日来计算其缘分.方法:
将两个人的生日各位相加,将得到的数再一次各位相加,直到其值为一个一位数,此数即代表两个人的缘分.例如,两个生日为:
19820523,19841111,则各位相加:
1+9+8+2+5+2+3+1+9+8+4+1+1+1+1得:
56;再5+6得11;再1+1得2,即为两人的缘分.编写计算缘分程序,两个生日由键盘输入.
#include"stdio.h"
intfun(longx,longy)
{longsum=0,m;
for(m=x+y;m>0||sum>=10;)
{sum+=m%10;
m/=10;
if(m==0&&sum>=10)
{m=sum;
sum=0;
}
}
return(sum);
}
voidmain()
{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)
{intarr1[10000]={0};
inti,j;
intt1,t2;
for(i=0;i{
arr1[i]=i+1;
}
*p=arr1[2];
p++;
for(j=0;j{
t1=arr1[0];
t2=arr1[1];
for(i=0;i{
arr1[i]=arr1[i+3];
}
arr1[n-3-j]=t1;
arr1[n-2-j]=t2;
*p=arr1[2];
p++;
}
*p=arr1[0];
p++;
*p=arr1[1];
return*p;
}
voidmain()
{intm,a[10000],i,num;
scanf