zoukankan      html  css  js  c++  java
  • 第三周学习内容

    转载请注明出处:http://www.cnblogs.com/Christen/p/6035441.html

    L3 函数

    1. 什么是函数

    之前我们写的程序只有一个main函数,里面是程序的内容。对的,main就是一个函数,我们称为主函数。运行一个.c文件,第一步就是找到main函数,然后顺序执行。

    在main函数中,我们可以调用其他函数。例如,求绝对值函数abs(),fabs();三角函数sin(),cos();对数函数log()等等(自己上网搜具体用法)使用是需要添加它们对应的头文件。

    除了这些标准函数之外,我们还可以自定义函数。以下是函数定义的一般形式:

    返回值类型 函数名(类型1 形参1, 类型2 形参2,...) {
    	函数体内容
    }
    

    举一个栗子:

    int max(int x,int y)
    {
    	if (x > y) return x;
    	return y;
    }
    
    int main() {
    	int a, b;
    	scanf("%d %d", &a, &b);
    	printf("%d
    ", max(a, b));
    	return 0;
    }
    

    这是一个求最大值的程序。分为两个部分。
    上面的max函数,这是我们写的一个自定义函数。这个max函数定义可以结合上面的格式来看。
    程序从main函数开始,在max(a,b)这一步,我们调用了max函数,并将a和b的数值传入。这两个值,分别对应到max函数中的x和y。在max函数中,对传入的两个数进行大小比较,并返回较大的那个数。return语句是返回结果值,一旦执行到return语句,函数就结束了,不论后面还有什么语句,它直接结束(当然,是带着它的返回值结束的)。这就是为什么在max函数里面,return x之后我们不用再写else语句,就可以直接return y。带着这个返回值,回到调用该函数的地方。自然地,我们就能输出两个数中的较大值了。

    形象化地理解,一个函数就是一个盒子。这个盒子有一个入口和一个出口。入口是括号中的那些参数,可以是一个、多个、甚至没有,具体根据程序的功能来定。通过入口,函数内部会进行一系列的操作,这就是大括号中的内容。最后这个盒子会有一个出口,通过return语句来实现,也就是这个函数最后的结果。

    2. 为什么要定义函数

    • 一个程序通常会有好多功能。我们把每一项功能单独写成一个函数,可以使代码结构更加清晰。

    • 比如说你要多次使用一段同样的代码,将其放到一个函数里面,每当需要用到的时候直接调用这个函数就可以了。

    程序设计原则

    • 模块分解
      • 高聚合,低耦合(模块功能独立单一,模块之间联系松散)
    • 自顶向下、逐步求精
      • 对问题全局分析
      • 将整个问题分解成若干相对独立的子问题
      • 确定子问题的具体功能及其相互关系
      • 将子问题逐一精细化

    3. 栗子

    下面这个例子是求一个组合数c的问题。

    其中求阶乘的函数给出了两种写法。我们课上讲的是第一种fact的写法,即直接一个循环语句。第二个factorial函数也可以求阶乘,这是递归调用的思路,感兴趣的可以自己钻研一下。

    int fact(int x)
    {
    	int i,num = 1;
    	for (i = 2;i <= x;i++)
    	 num = num * i;
    	return num; 
    }
    
    int factorial(int x)
    {
    	if (x == 1 ||x ==0) return 1;
    	               else return x * factorial(x -1); 
    }
    int c(int n,int m)
    {
    //	return fact(n)/fact(m)/fact(n-m);
        return factorial(n)/factorial(m)/factorial(n-m);
    }
    
    int main()
    {
    	int n,m;
    	scanf("%d%d",&n,&m);
    	printf("%d",c(n,m));
    	return 0;
    }
    

    4. 作业

    1. 随机生成一个数字n(1~100),用户输入猜测的数字,程序给出反馈(过大、正确、过小),直至猜测正确。
    2. 判断素数:对每一个输入的数字进行判断,直至输入-1结束程序。
    3. *汉诺塔 :题目背景百度,要求输入盘子个数n,输出移动的步骤。
  • 相关阅读:
    【Loj146】DFS序3-树链剖分
    【BZOJ3083】遥远的国度- 树剖-换根
    树链剖分-树剖换根
    c++ 随机生成树
    【HAOI2015】树上操作-树链剖分
    centos修改dns
    HttpClient
    aiax跨域问题
    伪静态
    springboot父子项目
  • 原文地址:https://www.cnblogs.com/Christen/p/6035441.html
Copyright © 2011-2022 走看看