两数合并(多角度分析)(C语言)

例题:

题目描述

编写函数Fun,其功能是将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a的十位和个位依次存放在c数的十位和千位上,b的十位和个位依次存放在c数的个位和百位上。

注意:只提交函数Fun()。

int main()

{

int a,b,c;

scanf("%d,%d",&a,&b);

Fun(a,b,&c);

printf("%d\n",c);

return 0;

}

输入描述

仅一行。两个整数a和b,以逗号分隔。

输出描述

仅一行。一个整数,表示合并后的数据c。

样例输入

45,12
样例输出

5241

思路分析:

通过读题我们不难发现解决此题的核心步骤呢就是 数位分离 形成新数然后输出即可

解决方法:

(下面分享个人总结的四种方法)

方法一:运算符
不用函数,不用指针, 数位分离也可以用c语言的基础知识运算符来解决。

#include <stdio.h>
int main()
{
	int a,b,c;
	scanf("%d,%d",&a,&b); 
	int a1,a2,b1,b2;
	a1=a/10;
	a2=a%10;
	b1=b/10;
	b2=b%10;
	c=a2*1000+b2*100+a1*10+b1;
	printf("%d",c);
	return 0;
}

方法二:函数实现
在数学函数中输入一个x的值会得到一个或多个y值,在c语言中也是如此
我们将数为分离 形成新数 这一过程封装为函数,使我们写的代码更加清晰直观。

#include <stdio.h>
int main()
{
	int fun(int x,int y);
	int a,b,c;
	scanf("%d,%d",&a,&b);
	c=fun(a,b);
	printf("%d",c);
	return 0;
}
int fun(int x,int y)
{
	int a1,a2,b1,b2;
	a1=x/10;
	a2=x%10;
	b1=y/10;
	b2=y%10;
	int t;
	t=a2*1000+b2*100+a1*10+b1;
	return t;
} 

方法三:指针与函数
指针就是地址,使用指针与函数,采用地址传递中的间接址传递,画一下存储过程图更好理解
(画图技术粗糙,请谅解()嘿嘿)在这里插入图片描述

#include <stdio.h>
int main()

{
void Fun(int x,int y,int *p);
    int a,b,c;

    scanf("%d,%d",&a,&b);

    Fun(a,b,&c);

    printf("%d\n",c);

    return 0;

}
void Fun(int x,int y,int *p)
{
	int a1,a2,b1,b2;
	a1=x/10;
	a2=x%10;
	b1=y/10;
	b2=y%10;
	*p=a2*1000+b2*100+a1*10+b1;
}

方法四:函数的返回值是指针
既然返回的是指针(地址),所以要在主函数中用指针变量接受。

#include <stdio.h>
int main()

{
	int *Fun(int x,int y,int *p);
    int a,b,c;
	int *t;
    scanf("%d,%d",&a,&b);

    t=Fun(a,b,&c);

    printf("%d\n",*t);
    return 0;

}
int *Fun(int x,int y,int *p)
{
	int a1,a2,b1,b2;
	a1=x/10;
	a2=x%10;
	b1=y/10;
	b2=y%10;
	*p=a2*1000+b2*100+a1*10+b1;
	return p;
}

总结:

初学指针与函数确实较难理解,但个人认为从本质(深层次)去理解更容易,因为任何知识都有源头都有本质,而c语言中的本质就是存储结构,从存储去理解程序运行的过程,去理解指针、函数以及及结构体,可以事半功倍。
在这里插入图片描述

发布了17 篇原创文章 · 获赞 15 · 访问量 542

猜你喜欢

转载自blog.csdn.net/qq_46009744/article/details/104692099