定义函数的几种情况
一.参数问题:
形参也是局部变量
形式参数:有点类似变量的定义,写法也类似,如int a
实际参数:对格式没要求(如可以写整数5作为实参,也可以t提前定义整型变量a=5,a作为实参),对数据类型严格要求
void buyrice(int jinshu)
{
printf("去买%d斤米\n",jinshu);
}
jinshu是局部变量,同时也是个形式参数,作用域仅限该函数。
空间生存期:
申请空间:
当函数被调用时,才申请了该内存空间,才有了这个变量,同时,这个空间内的数据被赋值成实参的值,函数调用把实参的值拷贝一份给形参
释放空间:
函数执行结束后,该空间由内存管理单元自动回收。
void buyrice(int jinshu)
{
printf("去买%d斤米\n",jinshu);
jinshu++;
printf("jinshu=%d\n",jinshu);
}
int main()
{
int a = 30;
buyrice(a);
printf("main: a=%d\n",a);
return 0;
}
最终main函数执行结果:a=30
虽然在burice中,jinshu++ 变成31,但仅限于该函数,该函数调用结束后,回到主函数,a不变,在该函数调用时,主函数只是拷贝了一个a给他用,(两个a的地址也不一样)不会改变自己!!!
计算器
1.除法部分:
float chufa(int x,int y)
{
float z;
z = (float )x/y;
//不同数据类型运算,比如两个整数相除,必须将除数或被除数强转成小数,否则小数部分被忽略
return z;
}
- scanf 常配合getchar(); 吸收回车(回车符也是一种字符 )
基础学习使用,以后不常用。
计算器代码:
#include <stdio.h>
#include <stdlib.h>
int jia(int a,int b)
{
int ret ;
ret = a+b ;
return ret ;
}
int jian(int a,int b)
{
int ret ;
ret = a-b;
return ret;
}
int cheng(int a,int b)
{
int ret ;
ret = a*b;
return ret;
}
int chu(int a,int b)
{
float ret ;
ret = (float)a/b;
return ret;
}
int suanfa()
{
char cmd;
printf("选择+ - * /.\n");
scanf("%c",&cmd);
return cmd;
}
void tips()
{
printf("请输入算法\n");
}
int main()
{
int a;
int b;
int ret;
char cmd;
while(1){
printf("第一个数:\n");
scanf("%d",&a);
printf("第二个数:\n");
scanf("%d",&b);
getchar();
tips();
scanf("%c",&cmd);
getchar();
switch(cmd){
case '+':
jia(a,b);
printf("%d+%d=%d\n",a,b,a+b);
break;
case '-':
jian(a,b);
printf("%d-%d=%d\n",a,b,a-b);
break;
case '*':
cheng(a,b);
printf("%d*%d=%d\n",a,b,a*b);
break;
case '/':
chu(a,b);
printf("%d/%d=%d\n",a,b,a/b);
break;
default :
break;
}
}
}