函数:(function)
ps:function翻译过来其实还有功能的意思()
功能模块,相当于自己定义功能,可以简单使用
1.要先定义一个函数,表示有这一个功能模块:
void report(){内容}
2.写完了要来调用,比如干嘛要写:
report();
例子:1.一个班级报数,假设一个班级有32个人:
#include<stdio.h>
void report()//定义一个函数//
{
for(int i=1;i<=32;i++)
{
printf("%3d",i); //3d,就当我空几个位置,看起来美观点,当然要直接printf输出空格也是可以的//
if(i % 10==0) //这个定义函数的功能//
{
printf("\n");//每10个换一个行//
}
}
printf("\n");
}
int main()
{
printf("1班报数!\n");
report();
getchar();
return 0;
}
当然在命名上没有什么要求,比如void report中的report可以换任意一个词来替代在有提前定义一个函数,在重复运用上就有一定优势了,比如
#include<stdio.h>
void report()//定义一个函数//
{
for(int i=1;i<=32;i++)
{
printf("%3d",i); //3d,就当我空几个位置,看起来美观点,当然要直接printf输出空格也是可以的//
if(i % 10==0) //这个定义函数的功能//
{
printf("\n");//每10个换一个行//
}
}
printf("\n");
}
int main()
{
printf("1班报数!\n");
report();
printf("听不清楚,再来一遍!\n");
report(); //比如在这里需要再来一次报数的话,就不需要再一次去搞一大堆代码进去了,能节省一点时间和空间//
getchar();
return 0;
}
到这里就学会了函数的初步概念和定义最简单的函数并且在main()调用
ps:不会就去看例子!函数的参数(Arguments)
函数的一般形式:
返回值类型 函数名(参数列表){
函数体
}
例子:上次写了一个班报数,那么如果两个班呢(假设两个班人数不一样,一般32,二班46):
那么最简单的想法就是按照之前的一样,复制粘贴再改一下参数呗~,写出来就是:
#include<stdio.h>
void report1()
{
for(int i=1;i<=32;i++)
{
printf("%3d",i);
if(i % 10==0)
{
printf("\n");//每10个换一个行//
}
}
printf("\n");
}
void report2()
{
for(int i=1;i<=46;i++)
{
printf("%3d",i); //2d的话有点卡位置,3d就刚刚好//
if(i % 10==0)
{
printf("\n");//每10个换一个行//
}
}
printf("\n");
}int main()
{
printf("1班报数!\n");
report1();
printf("2班报数!\n");
report2();
getchar();
return 0;
}
写出来还是相当重复和啰嗦的,所以我们要搞一个灵活点的,不要这么蠢的,所以对于相同逻辑,我们要去找不同点,那么在这里面,就是班级人数的问题。
#include<stdio.h>
void report(int N)
{
for(int i=1;i<=N;i++)
{
printf("%3d",i);
if(i % 10==0)
{
printf("\n");//每10个换一个行//
}
}
printf("\n");
}
int main()
{
printf("1班报数!\n");
report(32);//这里就相当于N=32//
printf("2班报数!\n");
report(46);
getchar();
return 0;
}
用N来调整报数人数,这个N实际上就相当于调整空调的度数,程序总不能是死的吧 ~
当然实际上定义的时候也不一定要单个参数,可以有多个参数存在,不过需要对准位置~
例子:显示[from,to]之间所有的完全平方数
#include<stdio.h>
void show(int from,int to) //定义两个参量,从开始到结束//
{
for(int i=from;i<=to;i++)
{
for(int k=1;k<=i;k++)
{
if(k*k==i)
{
printf("%d=%d*%d\n",i,k,k);
}
}
}
printf("\n");
}
int main(){
printf("显示【120,300】之间的完全平方数!\n");//Form 120 to 300//
show(120,300);
getchar();
return 0;
}
例子2:打印一个三角形
#include<stdio.h>
#include<stdbool.h>//引用bool//
//显示三角形
// reversed;true<显示倒三角;false,显示正三角
void striangle(int N,bool reversed){
for(int i=1;i<=N;i++)
{
//每行星星数//
int numberStar=i;
if(reversed)//判断是否是颠倒的三角形//
{
numberStar=N-i+1; //重组一下三角形的*//
}
//答打印一行星星//
for (int k=1;k<=numberStar;k++)
{
printf("*");
}
printf("\n");
}
}
int main(){
striangle(8,false);//这里可以改ture和false,就是改正三角和倒三角//
getchar();
return 0;
}
当然注意的点要对正,比如N对8,reserve对ture和false。
函数可能没有参数int void(),也可以有多个参数,同上例子。
函数的返回值(Return Value)
函数的一般形式:
返回值类型 函数名(参数列表){
函数体
}
什么是返回值呢:(返回值和返还值都差不多啦doge)
首先,函数就想是可以做一件事情
函数的返回值,就是这件事件的结果
例子: 1.让小花去买冰淇淋,她买了,并且自己吃了,那就是
void buy(int money){}(有东西,但不多doge)
她买了,然后把冰淇淋交出来
IceCream buy (int money){}(有东西,东西还在doge)
ps:void 表示不返还任何东西 int就可以返回return一个值出来。
2."感觉"一下return的作用
#include<stdio.h>
#include<stdbool.h>
int test(int a,int b){
int result=a*a+b*b;
return result;//返还一个结果//
}
int main()
{
int v=test(3,4);
printf("result:%d\n",v);
getchar();
return 0;
}
#include<stdio.h>
#include<stdbool.h>
int test(int a,int b){
int result=a*a+b*b;
return result;//返还一个结果//
}
int main()
{
int v1=test(3,4);
int v2=test(4,5);
int result=v1+v2;
printf("result:%d\n",result);//这里用到result,至于为什么要用,你自己“感觉”一下//
getchar();
return 0;
}
//先用return返回出结果,再调用//
感觉到了吗?(doge)
例子2:判断区间内为完全平方数的数:
#include<stdio.h>
#include<stdbool.h>
//返回值:ture,是完全平方数;false,不完完全平方数//
bool is_square(int n)
{
bool result=false;
for(int i=1;i<=n;i++)
{
if(i*i==n)
{
result=true;
break;
}
}
return result;//返回结果//
}
int main(){
for(int i=200;i<300;i++)//有完全平方数的范围//
{
//调用is_square()方法,并取得其返回值//
bool ok=is_square(i);//判断这个范围内然后来输出true or false//
if(ok)
{
printf("%d是完全平方数!\n",i);
}
}
}
//printf只是用来调试而已//
return语句的作用:
1.返回一个值
2.立即回退一个函数
优化一下例子:
1.对判断完全平方数的例子进行简化,使逻辑更加清晰明了:
#include<stdio.h>
#include<stdbool.h>
//返回值:ture,是完全平方数;false,不完完全平方数//
bool is_square(int n)
{
for(int i=1;i<=n;i++)
{
if(i*i==n)
{
return true;//运行到这里,那就是true,直接退出代码//
}
}
return false;//能运行到这里,前面就是运行不动了//
}
int main(){
for(int i=200;i<300;i++)
{
bool ok=is_square(i);
if(ok)
{
printf("%d是完全平方数!\n",i);
}
}
}
2.用return对打印一个三角形的例子进行一个简单的优化,补充用户输入0时的情况:
#include<stdio.h>
#include<stdbool.h>//引用bool//
//显示三角形
// reversed;true<显示倒三角;false,显示正三角
void striangle(int N,bool reversed){
if(N<=0)
{printf("N必须大于等于0。");//加了这三行,如果为0,也不用直接输入了//
return;}
for(int i=1;i<=N;i++)
{
//每行星星数//
int numberStar=i;
if(reversed)//判断是否是颠倒的三角形//
{
numberStar=N-i+1; //重组一下三角形的*//
}
for (int k=1;k<=numberStar;k++)
{
printf("*");
}
printf("\n");
}
}
int main(){
striangle(-8,false);//那这里的话就输出不了了//
getchar();
return 0;
}
//所以一般加return的作用截断当前的程序,作用自己想(表达不出来 )//