当前课程知识点:C语言程序设计 >  第22讲 编程训练 >  编程训练 >  函数举例(上)

返回《C语言程序设计》慕课在线视频课程列表

函数举例(上)在线视频

函数举例(上)

这一讲上下两集包括求最大公约数的两种方法、判断质数、斐波那契(Fibonacci)数列、汉诺塔(Hanoi)问题。

返回《C语言程序设计》慕课在线视频列表

函数举例(上)课程教案、知识点、字幕

这一讲讲几个比较典型的函数例子

希望通过这几个例子大家能够熟悉函数的用法

同时巩固所学的知识

这几个例子必须掌握

这是基本要求

第一个例子是求两个正整数的最大公约数

要求用函数实现

在主程序中输入两个正整数

调入编写的函数

并输出最大公约数

求最大公约数有多种方法

本讲介绍两种方法

分别是穷举法和欧几里得法

我们先看一下穷举法

它的思路是这样的

两个整数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是质数

否则的话它不是质数

你注意区别一下用函数实现和不用函数实现的差别

不用函数实现我们在前面的讲解中讲过了

仔细的体会一下这个差异

C语言程序设计课程列表:

第0讲 导言

-简单介绍课程性质等

-关于编程训练

第1讲 C程序框架

-C程序框架

-作业

第2讲 C程序编译环境

-C语言的编译环境

-作业

第3讲 顺序程序的几个例子

-顺序程序的几个例子

-作业

第4讲 常见的编译错误

-常见的编译错误

-作业

-编译错误探讨

第5讲 输入输出精要

-输入输出精要

-作业

-输入输出格式探讨

第6讲 选择结构的典型例子

-选择结构的典型例子

-作业

第7讲 选择结构常见错误

-选择结构常见错误

-作业

第8讲 排除程序错误的常规方法

-排除程序错误的常规方法

-排除错误探讨

第9讲 循环结构基础

-循环结构基础

-作业

-循环类型

第10讲 循环结构程序例子

-循环结构程序例子

-作业

-程序结构

第11讲 函数基础

-函数基础

-作业

第12讲 函数举例

-函数举例(上)

-函数举例(下)

第13讲 变量的作用域与生存期

-变量的作用域与生存期

-变量的使用

第14讲 数组基础

-数组基础

-作业

第15讲 数组应用举例

-数组应用举例(上)

-数组应用举例(下)

第16讲 数组参数传递

-数组参数传递(上)

-数组参数传递(下)

-作业

第17讲 指针变量

-指针变量(上)

-指针变量(下)

-作业

第18讲 字符串

-字符串(上)

-字符串(下)

-作业

第19讲 程序调试

-程序调试

-程序调试的重要性

-程序调试讨论

第20讲 结构体及其应用

-结构体及其应用(上)

-结构体及其应用(下)

第21讲 文件

- 文件(上)

-文件(下)

第22讲 编程训练

- 编程训练

函数举例(上)笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。