大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
首先假设合并函数的功能:将两个两位数的整数 a、b 合并成一个整数放在 c 中。合并的方
“真诚服务,让网络创造价值”是我们的服务理念,成都创新互联公司团队10年如一日始终坚持在网站建设领域,为客户提供优质服。不管你处于什么行业,助你轻松跨入“互联网+”时代,PC网站+手机网站+公众号+成都微信小程序。
式是:将 a 的十位和个位数依次放在 c 数千位和十位上,b 数的十位和个位数依次放在 c 数的个位和百位上。
实现方法如下:
int fun(int a,int b){
int c=a%10;
c=(a/10)*100+c;
c=(b%10)*10+c;
c=(b/10)*1000+c;
return c;
}
先说结果:fun函数其实是用来将两个字符串轮流交叉合并。
也就是说,若a[]=dfg,b[]=678,则fun(a,b)后,a[]=d6f7g8
对于一些特殊情况,
1.当strlen(a)strlen(b),如a[]=dfg,b[]=67899,则运行后a[]=d6f7g899,不用再交叉,直接补上多出来的b字符串的部分99
2.当strlen(a)strlen(b),如a[]=dfghjk,b[]=678,则运行后a[]=d6f7g8hjk,不用再交叉,直接补上多出来的来自a字符串的部分hjk
以下是分析:
先看内层循环for(k=strlen(s1);k=i;k--) s1[k+1]=s1[k];
这实际上就是将字符串s1从s1[i]开始到末尾依次后移1位,这样s1[i]的位置就空出(这里的空出其实是有值的,但由于已经令s1[i+1]=s1[i],所以s1[i]相当于空出)以便插入s2[j]到sa[i]
s1[i]=s2[j];
j++;i++;
if(s1[i]) i++;
这一段,实际上是在执行插入赋值,每一次赋值后,i,j分别顺移一位,其实你可能也注意到了,s1其实应该要移两位,因为一位是保留s1的下一位,s2要插的位置是s1的下下位
所以,他有两个i++(i对应的是s1的序号),
但是他前面有个条件if(s1[i])
这个条件主要是针对s1比s2长设置的,当s2还有值没有插入,而s1已经到字符串尾部,即有s1[i]=0(注意,这里的0不是指数值0,而是char=0,也就是空"\0"),此时,i就不用+2,+1即可,因为s2[j]只要插入到下一位,不用下下位
如果没有这个条件,则每次都加入到下下为的话,由于s1序列中的\0没有被s2覆盖,则输出时,到这个\0就已经截止,如上面的特殊情况1,输出就是a[]=d6f7g8,而不会是a[]=d6f7g899
然后外层循环就是为了保证s2序列全部遍历
终于完了。。。嗯,不懂可以追问
这里是借用第三个数组。
原理:先将两个数组复制到第三个数组中,然后对第三个数组排序
如果不使用第三个函数,那么下面这个函数一样可以做到,不过函数声明就要改成:
char* fun(char *dest, char *str, char *dest)
/*------------------------------函数--------------------------------*/
char* fun(char *str1,char *str2,char *dest) //前提,目标数组能偶容纳两个数组
{
char *tmp=dest;
char *tmp_dest=dest;
if(!dest)
return NULL;
while(*str1) //将str1复制进dest
*tmp++=*str1++;
while(*str2) //将str2复制进dest
*tmp++=*str2++;
tmp_dest--; //
while(*++tmp_dest) //选择排序法
{
char *tmp_px=NULL;
tmp=tmp_dest;
while(*++tmp) //找到后面一串的最值
{
if(*tmp_dest*tmp)
tmp_px=tmp;
}
if(!tmp_px)
{
char ch=*tmp_dest;
*tmp_dest=*tmp_px;
*tmp_px=ch;
}
}
return dest;
}
代码如下:
#include stdio.h
int fun(int a,int b){
int c=10*(b%10)+(a/10)+1000*(b/10)+100*(a%10);
return c;
}
int main() {
int a;
int b;
printf("请输入第一个两位数a:");
scanf("%d",a);
printf("请输入第二个两位数b:");
scanf("%d",b);
int c=fun(a,b);
printf("结果为:%d",c);
return 0;
}
扩展资料
C语言自定义函数
强调一点,C语言不允许函数嵌套定义;也就是说,不能在一个函数中定义另外一个函数,必须在所有函数之外定义另外一个函数。main() 也是一个函数定义,也不能在 main() 函数内部定义新函数。
注意:main 是函数定义,不是函数调用。当可执行文件加载到内存后,系统从 main 函数开始执行,也就是说,系统会调用我们定义的 main 函数。
怎么合并呢?
连接: 如65,23,合并为6523还是2365,还是6253,还是2635呢?
/*
请输入两个两位正整数(任意一个为0则结束): 45 12
45和12的组合结果为 : 1524
请输入两个两位正整数(任意一个为0则结束): 36 20
36和20的组合结果为 : 2603
请输入两个两位正整数(任意一个为0则结束): 0 0
Press any key to continue
*/
#include stdio.h
int main() {
int a,b,n;
while(1) {
printf("请输入两个两位正整数(任意一个为0则结束): ");
scanf("%d%d",a,b);
if(a == 0 || b == 0) break;
n = 1000 * (b / 10); // 取b的十位放到千位上
n += 100 * (a % 10); // 取a的个位放到百位上
n += 10 * (b % 10); // 取b的个位放到十位上
n += a/10; // 取a的十位放到个位上
printf("%d和%d的组合结果为 : %d\n",a,b,n);
}
return 0;
}