C语言入门:函数的概要

/* Note:Your choice is C IDE */
#include "stdio.h"
#include "windows.h"//头文件 仓库
void gbtc()//函数首 ---》 函数类型 函数名 ()
{
//被调函数。
//函数体
printf("1");
Sleep(5000);//S必须大写
printf("2");
Sleep(5000);
printf("3");
Sleep(5000);
printf("4");
}
void main()//主调函数
{
//函数

//什么是函数 具有特定功能的模块。
//函数的组成部分。由两部分来组成: 函数首 和 函数体。
//使用函数 就是 调用 函数 主调函数 调 被调函数
gbtc();//调用
}

//----------------------------------------------------------------------------------------

/* Note:Your choice is C IDE */
#include "stdio.h" //值传递(普通变量) 地址传递 (数组,指针)

//函数的组成部分
//函数首
//函数体
//什么是参数 参数就就是函数之间 交流的数据 void gbtc(形式参数)
//什么是实参 是在函数调用的时 函数后括号内的内容(参数)
//什么是形参 是在函数定义的时 函数后括号内的内容(参数)
//参数的传递方向 必须是实参 传递给形参。
//形参接收的时候,会和实参的 顺序 ,个数,类型 相匹配。
void gbtc(int a,int b,char w) //100为整数类型的,
//形参的存储空间只有在用的时候(接收的时候) 才有内存的占有。
//一旦不用,立即释放
{
printf("接收的a的值为:%d,接收的b的值为:%d,接收的w的值为:%c ",a,b,w);
}
void main()
{
int a,b;
char w;
//从有无参数的角度 分为 有参函数 和无参函数
//主调函数 调 被调函数的时候 传递的数据 叫实参
// main() 调 gbtc(100); 100
printf("请输入a和b的值:");
scanf("%d%d",&a,&b);//原样输入
getchar();//接收回车
printf("请输入字符w的值:");
scanf("%c",&w);
gbtc(a,b,w);//a,b,w为实参
printf("调用之后的a的值为:%d,调用之后的b的值为:%d,调用之后的w的值为:%c ",a,b,w);
//实参的存储空间 一直都存在
} //值传递的时候 实参的值会赋值一份给形参,也就是 实参的值可以改变形参的值
//形参的值并不能改变 实参的值,因为 形参在值传递的时候 不用,立即释放。
//实参 和形参 并没有共用一块空间。

//----------------------------------------------------------------------------------------------------------------------------------

/* Note:Your choice is C IDE */
#include "stdio.h"
void jsq(int a,int b,int c,char fh)//计算器函数
{
printf("根据传递过来四则运算符号:");
switch(fh)//表达式
{
//case 后面 只能是整数 和字符 不能是小数
case '+':printf("%d+%d+%d=%d",a,b,c,a+b+c);
break;
case '-':printf("%d-%d-%d=%d",a,b,c,a-b-c);
break;
case '*':printf("%d*%d*%d=%d",a,b,c,a*b*c);
break;
case '/':
//按a和b相除 a/b/c b不能为0 c也不能为0
if(b!=0 && c!=0)
{
printf("%d/%d/%d=%d",a,b,c,a/b/c);
}
else
{
printf("分母不能为0 ");
}
break;
}

}

void main()//多敲 多看 多练 多想
{
//实现一个功能:输入a,b,c三个数的值,然后在子函数(自定义函数)中,进行四则运算(+,-,*,/)。
//想当 于 简单计算器。
//需要自己设计 页面。
int a,b,c;//三个数
char fh;//符号
printf("请输入a,b,c的值:");
scanf("%d%d%d",&a,&b,&c);
getchar();//接收回车
printf("请输入四则运算的符号:");
scanf("%c",&fh);
jsq(a,b,c,fh);//先调用函数
}

//----------------------------------------------------------------------------------------------------------------------------------

/* Note:Your choice is C IDE */
#include "stdio.h"
//传递到子函数 我让这个数组 所有元素*2
void dou(int a[5],int i)//1.重新定义为数组。 2.指针来接收。
{
printf("所有元素都*2: ");
for(i=0;i<5;i++)
{
a[i]=a[i]*2;
}
printf("打印传递之后的数组数据(*2): ");
for(i=0;i<5;i++)
{
printf("%d ",a[i]);
}
printf(" ");
}
void main()
{
//值传递 实参传递形参 单向传递 实参改变形参,形参不可以改变实参 实参和形参并不共用同一空间。
//地址传递 (数组 指针 )
//实参传递形参 单向传递 实参可以改变形参,形参改变 也可以 改变实参的值。 实参和形参 共用同一空间。
//数组 数组名是数组的首地址。
int a[5]={1,2,3,4,5};
int i;
// a=&a[0];代表的是 首地址。 a[0]为第一个元素 ,那么 第一个元素的地址 就为 首地址。
printf("数组中原数据为: ");
for(i=0;i<5;i++)
{
printf("%d ",a[i]);
}
printf(" ");
printf("开始传递数据: ");//需要调用函数 并且传递参数
dou(a,5);//传递 参数为什么? 只需要传递数组名 , 因为 通过 数组名 可以找到 数组 还需要传递长度
printf("调用之后 main中原数据为: ");
for(i=0;i<5;i++)
{
printf("%d ",a[i]);
}
}

//----------------------------------------------------------------------------------------------------------------------------------

/* Note:Your choice is C IDE */
#include "stdio.h"
//函数的类型 void(空类型 也代表无返回值) int,char,double,float 代表 返回值的类型。
//函数的类型 省略的时候 为int
int fun(int a,int b)
{
return a+b;//返回到调用的位置。 //出口。 结束


}
void main()
{
int k;
//从返回值角度 有返回值函数 无返回值函数
//在函数中 有return 就是 有返回值函数。
k= fun(1,2);//
printf("返回的结果为:%d",k);
}

//----------------------------------------------------------------------------------------------------------------------------------

/* Note:Your choice is C IDE */
#include "stdio.h"
//利用函数处理 一批数,奇数返回1, 偶数返回2. 通过返回的结果 在主函数 输出 “奇数” “偶数”
int fun(int num)
{
if(num%2==0)//偶数
{
return 2;//返回到调用的位置上
}
else //奇数
{
return 1;
}
}
void main()
{
int num,k;
for(;;)
{
printf("请输入一个数字");
scanf("%d",&num);
k=fun(num);

if(k==2)
{
printf("偶数 ");
}
else
{
printf("奇数 ");
}
}
}

//------------------------------------------------------------------

/* Note:Your choice is C IDE */
#include "stdio.h"
int fun(int a,int b)
{

return a+b;
}
void main()
{
int k;
k=fun(1,2);
printf("%d",k);
}

//-----------------------------------------------------------------------------------------------

/* Note:Your choice is C IDE */
#include "stdio.h"
//递归
//什么是递归 递归的概念 程序/(函数)自身调用自身的一种编程技巧
void fun()
{
printf("上课睡觉的同学,站起来! ");
fun();//函数自己调用自己 称为 递归
}
void main()
{
fun();//第一次调用
}

//------------------------------------------------------------------------------------------------

/* Note:Your choice is C IDE */
#include "stdio.h"
//定义函数
int fun(int n)
{
//2.递归的方式。

if(n==1)
{
return 1;//1的阶乘 为1
}
else if(n==0)
{
return 0;//0的阶乘为 0
}
else
{
// 1*2*3*4*5 5*4*3*2*1
return n*fun(n-1);
// 5* 4 * 3 * 2 * 1
// 5*fun(5-1); 5*4*3*2*1
// fun(4)= 4*fun(4-1); 4*3*2*1
// fun(3)=3*fun(3-1); 3*2*1
// fun(2)=2*fun(2-1); 2*1
// fun(1) 1
}
}
void main()
{
//递归阶乘 1-5 1-n

int i,n,k;//循环变量
int cj=1;
printf("请输入一个n:");
scanf("%d",&n);
//1.非递归的方式!
for(i=1;i<=n;i++)
{
cj=cj*i;
}
printf("非递归的方式的阶乘为:%d ",cj);

k= fun(n); // 5*4*3*2*1
printf("递归的方式的阶乘为:%d ",k);
}

原文地址:https://www.cnblogs.com/ZJ-CN/p/12266377.html