《信息学奥赛课课通(C++)》第6单元 函数.ppt

《信息学奥赛课课通(C++)》第6单元 函数.ppt

  1. 1、本文档共67页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第 6 课 函数应用举例 学习目标 1. 熟练应用函数和结构化编程思想解决一些实际问题。 2. 学会函数的单步跟踪,并进一步理解递归函数的执行过程。 例1、孪生素数 【问题描述】 在素数的大家庭中,大小之差为2的两个素数称之为一对“孪生素数”,如3和5、17 和 19 等。请你编程统计出不大于自然数 n 的素数中,孪生素数的对数。 【输入格式】 一行一个正整数 n,1≤n≤2 31 。 【输出格式】 若干行,每行两个整数,之间用一个空格隔开,从小到大输出每一对孪生素数。 【输入样例】 100 【输出样例】 3 5 5 7 11 13 17 19 29 31 41 43 59 61 71 73 【问题分析】 首先,大于 2 的两个连续自然数不可能都是素数,大于 2 的偶数也一定不是素数。所以,从3 开始穷举一个自然数 s,检查 s 和 s+2 是不是都为素数,是则输出这对孪生素数。然后,s=s+2,继续寻找下一对孪生素数。 //p6-6-1 #includeiostream using namespace std; bool prime(int n){ for(int i = 2; i*i = n; i++) if(n % i == 0) return false; return true; } int main(){ int n,i = 3; cin n; while(i = n-2){ if(prime(i) prime(i+2)) cout i “ “ i+2 endl; i += 2; } return 0; } 上机实践,学会单步跟踪函数。 例2、幂次方表示法 问题描述参见教材218页。 【问题分析】 将 n 拆分为若干 2 的幂次的和,再将各个幂次(指数)拆分成若干 2 的幂次的和……明显具有递归思想。所以,定义数组元素 p[0]表示 2 的 0 次方,p[1]表示 2 的 1 次方,p[2]表示 2的 2 次方,……从最接近 n 值的 2 的幂次方开始分解,如果 n 大于或等于当前 2^i ,则 n 减去 2^i ,将 i 分解,……直到 n 为 0。 具体程序参考教材218-219页。 例3、汉诺塔问题 问题描述参见教材219-220页。 【问题分析】 具体分析及程序参考教材220-222页。 实践巩固 //p6-3-1 #includeiostream using namespace std; void print(int i,char ch){ for(int j = 1; j = i; j++) cout ch; cout endl; } int main(){ int n; char ch; cin n ch; for(int i = 1; i = n; i++) print(i,ch); return 0; } 函数参数的传递方式 根据不同的应用需求,函数参数的传递方式,或者说函数参数的调用方式分为三种: (1) 传值(调用):参见例2; (2) 传址(调用):参见例3; (3) 引用(调用):参见例4、例5; 例2、阅读程序,写出程序的运行结果,体会函数的传值(调用)。 //p6-3-2 #includeiostream using namespace std; void swap(int x,int y){ int temp; temp = x; x = y; y = temp; cout x “ “ y endl; } int main(){ int a = 10,b = 50; swap(a,b); cout a “ “ b endl; return 0; } 例3、阅读程序,写出程序的运行结果,体会函数的传址(调用)。 //p6-3-3 #includeiostream using namespace std; void swap(int *x,int *y){// 形式参数的类型定义为指针 int temp; temp = *x; *x = *y; *y = temp; cout *x “ “ *y endl; } int main(){ int a = 10,b = 50; swap(a,b);// 实际参数必

文档评论(0)

一壶清茶 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档