函数概念
函数是一个功能模块,它把实现某个功能的代码打包起来,并起一个函数名字。这个功能模块通过函数名供别人调用,如printf函数,system函数,是程序运行当中包装起来的一个步骤
如何定义一个函数
int jiShuan();
int jiShuan(int a)
{
int b;
b = a+1
return 0;
}
调用函数:
函数名(实际参数); 函数名();
为什么要用函数?
1、代码简洁,便于浏览 2、对每个功能分模块后,能快速定位程序错误位置 3、可重复性的调用 4、便于项目里程序功能模块的分工编写 5、函数可以多级调用,在函数里调用函数
函数的基本调用
#include <stdio.h>
int zaoShang()
{
printf("早上好!\n");
return 0;
}
int zhongWu()
{
printf("中午好!\n");
return 0;
}
int xiaWu()
{
printf("下午好!\n");
return 0;
}
int wanShang()
{
printf("晚上好!\n");
return 0;
}
int main()
{
zaoShang();
zhongWu();
xiaWu();
wanShang();
system("pause");
return 0;
}
带参数函数
无返回值
- void代表无返回值,不需要return
- void代表返回值的类型是无类型,return要写,只不过return后面不用加变量
void zaoShang()
{
}
int jinShu是形式参数,类似于变量定义,写法也类似变量定义。如:int a
void buyRice(int jinShu)
{
}
如果调用函数带有参数,必须传参 调用的时候,传递的参数叫实际参数,对格式没有要求,对数据的类型严格要求```
代码示例:
#include <stdio.h>
void buyRice()
{
printf("买米。。。。\n");
}
void buyRice2(int jinShu)
{
printf("买%d斤米。。。。\n",jinShu);
}
void printWelcome()
{
printf("=======================================\n");
printf("=======================================\n");
printf("=================函数例子==============\n");
printf("=======================================\n");
printf("=======================================\n");
}
int main()
{
int a = 10;
printWelcome();
buyRice();
buyRice2(a);
buyRice2(3);
system("pause");
return 0;
}
形式参数
1、形式参数,作用域仅限于该函数 2、形式参数,也是一个变量,局部变量,有自己的内存空间
- 内存空间是当函数被调用时,才申请了该空间,才有这个变量
- 同时,这个空间内的数据被赋值成实际参数的值
- 就是函数拷贝了一份main函数里传来的实际参数的值给到形式参数
- 函数执行结束后,该空间由内存管理单元自动回收(释放)内存空间
buyRice()函数的jinShu变量的地址是和main函数里的实际参数变量a的地址是不同的,但也有可能因为虚拟地址映射的原因会一样
如果调用函数带有形式参数,在调用函数时必须传参
#include <stdio.h>
void buyRice(int jinShu)
{
printf("买%d斤米。。。。\n",jinShu);
printf("buy:jinShu地址:%p\n",&jinShu);
jinShu++;
printf("buy:jinShu=%d\n",jinShu);
}
int main()
{
int a = 20;
buyRice(a);
printf("main:a=%d\n",a);
printf("main:a地址:%p\n",&a);
system("pause");
return 0;
}
局部变量
形式参数也是局部变量,作用域仅限于该函数,限制了其作用范围
#include <stdio.h>
void test1()
{
int data;
data = 10;
printf("test1:data=%d\n",data);
}
void test2()
{
int data;
data = 13;
printf("test2:data=%d\n",data);
}
void test3()
{
int data;
data = 16;
printf("test3:data=%d\n",data);
}
void test4(int data)
{
printf("test4:data=%d\n",data);
}
int main()
{
test1();
test2();
test3();
test4(30);
test4(349);
system("pause");
return 0;
}
有返回值
传单个参数
1、参数怎么传
2、函数的返回值
3、通过函数名来体现功能
#include <stdio.h>
int f(int x)
{
int y = 0;
printf("f:y=%d\n",y);
y = 2*x+1;
return y;
}
int main()
{
int y = 0;
int x = 20;
y = f(x);
printf("main:y=%d\n",y);
system("pause");
return 0;
}
return ++a; ++a 的意思是把现有的值加一后在使用 a++ 的意思是先使用现有的值后在加一
有传多个参数
1、有两个参数,两个参数都是整数 2、有一个整数返回值
#include <stdio.h>
int add(int x,int y)
{
int z = 0;
z = x+y;
return z;
}
int main()
{
int data1 = 0;
int data2 = 0;
int ret = 0;
while(1){
printf("input one a numbe:\n");
scanf("%d",&data1);
if(data1 == 0){break;}
printf("input two a numbe:\n");
scanf("%d",&data2);
if(data2 == 0){break;}
ret = add(data1,data2);
printf("result:%d+%d=%d\n",data1,data2,ret);
}
system("pause");
return 0;
}
实现加减乘除函数调用代码示例:
不同类型数据运算时,比如两个整数相除,必须将除数或者被除数强制转换成小数,否则小数点后面的数据会被忽略
#include <stdio.h>
int add(int x,int y)
{
int z = 0;
z = x+y;
return z;
}
int min(int x,int y)
{
int z = 0;
z = x-y;
return z;
}
int mul(int x,int y)
{
int z = 0;
z = x*y;
return z;
}
float div(int x,int y)
{
float z = 0;
z = (float)x/y;
return z;
}
int main()
{
int data1 = 0;
int data2 = 0;
int ret = 0;
float retChu = 0;
while(1){
printf("input one a numbe:\n");
scanf("%d",&data1);
printf("input two a numbe:\n");
scanf("%d",&data2);
ret = add(data1,data2);
printf("加法结果:%d+%d=%d\n",data1,data2,ret);
ret = min(data1,data2);
printf("减法结果:%d-%d=%d\n",data1,data2,ret);
ret = mul(data1,data2);
printf("乘法结果:%dx%d=%d\n",data1,data2,ret);
retChu = div(data1,data2);
printf("除法结果:%d/%d=%f\n",data1,data2,retChu);
}
system("pause");
return 0;
}
占位符拓展 %f 小数占位符 %d 整数占位符 %p 打印地址占位符 %c 字符占位符 %s 字符串占位符
getchar(); 吸收回车字符
计算器代码优化:
#include <stdio.h>
int add(int x,int y)
{
int z = 0;
z = x+y;
return z;
}
int min(int x,int y)
{
int z = 0;
z = x-y;
return z;
}
int mul(int x,int y)
{
int z = 0;
z = x*y;
return z;
}
float div(int x,int y)
{
float z = 0;
z = (float)x/y;
return z;
}
void tips()
{
printf("**********************************\n");
printf("***** 请输入一种算法:+ - x / ****\n");
printf("******************* 作者:yyc ****\n");
printf("**********************************\n");
}
int main()
{
int data1 = 0;
int data2 = 0;
int ret = 0;
float retChu = 0;
char shuanFa;
int mark = 0;
while(1){
tips();
if(mark !=0){
getchar();
}
mark = 1;
scanf("%c",&shuanFa);
getchar();
switch(shuanFa){
case '+':
printf("你选择了加法\n");
printf("请输入第一个数:\n");
scanf("%d",&data1);
printf("请输入第二个数:\n");
scanf("%d",&data2);
ret = add(data1,data2);
printf("计算结果:%d+%d=%d\n",data1,data2,ret);
break;
case '-':
printf("你选择了减法\n");
printf("请输入第一个数:\n");
scanf("%d",&data1);
printf("请输入第二个数:\n");
scanf("%d",&data2);
ret = min(data1,data2);
printf("计算结果:%d-%d=%d\n",data1,data2,ret);
break;
case 'x':
printf("你选择了乘法\n");
printf("请输入第一个数:\n");
scanf("%d",&data1);
printf("请输入第二个数:\n");
scanf("%d",&data2);
ret = mul(data1,data2);
printf("计算结果:%dx%d=%d\n",data1,data2,ret);
break;
case '/':
printf("你选择了除法\n");
printf("请输入第一个数:\n");
scanf("%d",&data1);
printf("请输入第二个数:\n");
scanf("%d",&data2);
retChu = div(data1,data2);
printf("计算结果:%d+%d=%d\n",data1,data2,retChu);
break;
default:
printf("No\n");
break;
}
}
system("pause");
return 0;
}
计算器代码优化:
#include <stdio.h>
int add(int x,int y)
{
int z = 0;
z = x+y;
return z;
}
int min(int x,int y)
{
int z = 0;
z = x-y;
return z;
}
int mul(int x,int y)
{
int z = 0;
z = x*y;
return z;
}
float div(int x,int y)
{
float z = 0;
z = (float)x/y;
return z;
}
void tips()
{
printf("**********************************\n");
printf("***** 请输入一种算法:+ - x / ****\n");
printf("******************* 作者:yyc ****\n");
printf("**********************************\n");
}
int tipsWhicCalc(char shuanFa)
{
int ret = 1;
switch(shuanFa){
case '+':
printf("你选择了加法\n");
break;
case '-':
printf("你选择了减法\n");
break;
case 'x':
printf("你选择了乘法\n");
break;
case '/':
printf("你选择了除法\n");
break;
default:
printf("输入错误!\n");
ret = 0;
break;
}
return ret;
}
void realCalc(int data1,int data2,char shuanFa)
{
switch(shuanFa){
case '+':
printf("%d+%d=%d\n",data1,data2,add(data1,data2));
break;
case '-':
printf("%d-%d=%d\n",data1,data2,min(data1,data2));
break;
case 'x':
printf("%dx%d=%d\n",data1,data2,mul(data1,data2));
break;
case '/':
printf("%d/%d=%f\n",data1,data2,div(data1,data2));
break;
}
}
int choose()
{
int ret = 0;
char a[] = {0};
printf("是否继续运算:yes/no\n");
scanf("%s",a);
if(strcmp("yes",a) == 0){
ret = 1;
}else if(strcmp("no",a) == 0){
ret = 0;
}
return ret;
}
int calc(char shuanFa)
{
int data1 = 0;
int data2 = 0;
int ret = 0;
ret = tipsWhicCalc(shuanFa);
if(ret == 1){
printf("请输入第一个数:\n");
scanf("%d",&data1);
printf("请输入第二个数:\n");
scanf("%d",&data2);
}
realCalc(data1,data2,shuanFa);
ret = choose();
return ret;
}
int main()
{
char shuanFa;
int mark = 0;
int ret = 0;
while(1){
tips();
if(mark !=0){
getchar();
}
mark = 1;
scanf("%c",&shuanFa);
getchar();
ret = calc(shuanFa);
if(ret == 0){
break;
}
}
system("pause");
return 0;
}
|