当前课程知识点:C语言程序设计 > 第22讲 编程训练 > 编程训练 > 函数举例(上)
这一讲上下两集包括求最大公约数的两种方法、判断质数、斐波那契(Fibonacci)数列、汉诺塔(Hanoi)问题。
这一讲讲几个比较典型的函数例子
希望通过这几个例子大家能够熟悉函数的用法
同时巩固所学的知识
这几个例子必须掌握
这是基本要求
第一个例子是求两个正整数的最大公约数
要求用函数实现
在主程序中输入两个正整数
调入编写的函数
并输出最大公约数
求最大公约数有多种方法
本讲介绍两种方法
分别是穷举法和欧几里得法
我们先看一下穷举法
它的思路是这样的
两个整数a b的最大公约数不能比两者中小的那个大
先找出a,b中较小的那个数设为m
从m开始尝试看它是不是能被a b整除
就是既能被a也能被b整除
如果不能整除m就减1
再尝试
就是这个m不断往小减
第一个能同时被a b整除的
就是能同时被就是这两a b的最大公约数
大家可以随意找两个整数
按这个方法推演一下
我们看一下穷举法的具体程序实现
这儿先定义两个整型变量a b
然后在这里键盘输入a b的值
然后这就是调用这个求最大公约数的函数
然后我们来看一下这个函数
这个函数先定义一个整型变量m
然后这个地方通过条件表达式
这个意思是如果a小于b那么把a赋值给m
否则就把b赋值给m
这句话的意思就是把a b中较小的那个数的值赋给m
然后这循环a对m求余不等于0或者b对m求余不等于0
就说这两者a除以m不能整除或者b除以m不能整除
就是两个当中有1个不能整除m--
那么这个地方一直到a能整除m并且 b也能整除m的时候
然后这个循环才出来
这个循环它必然会结束的
因为最差的情况下就是m减到1的时候
它一定能被a和b整除
所以循环一定会结束
那么返回的m就是a和b的最大公约数
这个地方的输出
调用这个就会在屏幕上输出a和b的最大公约数
我们看求最大公约数的第二种方法
称为欧几里得法也叫辗转相除法 这个思路是这样的
设r=a mod b表示a除以b的余数
就是把a除以b的余数赋值给r
如果r不等于0
则把b作为新的a
r作为新的b 也就是求a和b的最大公约数
等于求b和r的最大公约数
然后重复上面说的过程
一直到r=0为止
这个时候b为所求的最大公约数
这里面可能看起来有点绕
那么大家可以随意找两个整数
按这个方法推演一下就明白这个地方是什么意思了
我们看一下具体程序
这个程序是这样的
这是一个循环
循环的条件是r等于a对b求余
那这个地方这么写有些同学不一定能完全明白
它实际上等同于这样
就是a对b求余
得到的结果赋值给r
然后看这个r
如果不等于0
然后把b赋值给a
r赋值给b
就是刚才说前面说的那个原理
那么这个循环什么时候结束
就是当r等于0的时候
循环结束
循环结束以后
返回的那个b就是a和b的最大公约数
我们看下程序
这个程序我们编译运行一下
比如我们输入的两个数分别输入的是3和8
输出的最大公约数是1
我们再来一个例子
这个最大公约数就是4
第二个例子是判断质数
这个例子在循环结构中讲过了
不同的是这里是用函数实现
大家可以把两个例子互相对照一下
体会函数实现时结构的差别
我们看一下完整程序
这里是main函数
然后这是求最大公约数的函数
在这里定义两个变量x flag
x就是你要判断是不是质数的那个数
flag是一个标记
这里输入x的值
这 是一个 如果x小于1
非法输入
然后返回
这里调用判断函数
然后我们看下就是判断是否是质数的这个函数
它是这样的
从i=2;i 如果等于0 那么就说明整除了 整除了就返回0 就是这个过程在前面例子中讲过了 这个地方就不在赘述了 那么这种情况下返回0 然后呢 如果这个for循环这个里面 if语句没有从来没有成功执行过 那么它将会返回1 所以这个返回1表示这个x是质数 返回0表示不是质数 所以当调用这个函数以后 把返回值赋值给flag之后 我们就可以通过flag来判断 flag等于1的话 那么x是质数 否则的话它不是质数 你注意区别一下用函数实现和不用函数实现的差别 不用函数实现我们在前面的讲解中讲过了 仔细的体会一下这个差异
-作业
-作业
-作业
-作业
-作业
-作业
-作业
-作业
-循环类型
-作业
-程序结构
-函数基础
-作业
-数组基础
-作业
-作业
-作业
-作业
-程序调试
- 文件(上)
- 编程训练