例题:
题目描述
编写函数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语言中的本质就是存储结构,从存储去理解程序运行的过程,去理解指针、函数以及及结构体,可以事半功倍。