第4讲_函数与结构化程序设计
- 格式:pdf
- 大小:1.00 MB
- 文档页数:20
《C语言程序设计案例式教程(第2版)》课程教学大纲(课程英文名称)
课程编号:
学分:5学分学时:94 (其中:讲课60上机34时)
先修课程:计算机操作系统适用专业课程:计算机
一、课程的性质与目标
本课程使用案例驱动教学,几乎每个案例通过案例描述、知识需求、知识讲解、案例实现四个部分,不仅详细讲解了C语言的相关知识,而且通过有趣实用的案例加强对知识的理解和应用。
通过本书的学习,读者既可以深刻理解C语言理论知识,又能牢固掌握编程实践能力。
二.教学要求
开发环境:
1.Windows 7操作系统及以上Visual Studio 2019
三、课程的主要内容及基本要求
第一章初识C语言
本课程为考试课程,期末考试采用百分制的闭卷考试模式。
学生的考试成绩由平时成绩(30%)和期末考试(70%)组成,其中,平时成绩包括出勤(5%)、作业(5%)、实验和上机成绩(20%)。
六、选用教材和主要参考书
本大纲是根据黑马程序员编著的教材《C语言程序设计案例式教程(第2版)》所设计。
七、大纲说明
本课程的授课模式为:课堂授课+上机,其中,课堂主要采用多媒体的方式进行授课,并且会通过测试题阶段测试学生的掌握程度;上机主要是编写程序,要求学生动手完成指定的程序设计或验证。
撰写人:
执行时间:审定人:
批准人:
端IT教育品牌
黑马程序员
传智教育旗下高
第二章C语言基础知识
第三章运算符与表达式
第五章数组
第六章函数
第七章指针
第九章结构体
第十一章文件。
第四章结构化程序设计的三种结构4.1 顺序结构程序设计一、结构化程序设计的程序结构顺序结构、分支结构/选择结构、循环结构二、C语言语句1、9种控制语句2、表达式语句3、特殊语句三、格式化输出--printf()函数printf()函数的作用:向计算机系统默认的输出设备(一般指终端或显示器)输出一个或多个任意类型的数据。
printf()函数的一般格式printf("格式字符串" [,输出项表]);1、"格式字符串"也称"转换控制字符串",可以包含三种字符(1)格式指示符。
格式指示符的一般形式如下:%[标志][宽度][.精度][F|N|h|L][类型]常用的标志字符如表3-1所示,常用的宽度指示符如表3-2所示,常用的精度指示符如表3-3所示,长度修饰符如表3-4所示,类型转换字符如表3-5所示。
(2)转义字符'\n'就是转义字符,输出时产生一个"换行"操作。
转义字符通常起控制作用(3)普通字符──除格式指示符和转义字符之外的其它字符。
格式字符串中的普通字符,原样输出。
例如printf("radius=%f\n", radius);语句中的"radius="是普通字符。
2.输出项表输出项表是可选的。
如果要输出的数据不止1个,相邻2个之间用逗号分开。
下面的printf()函数都是合法的:(1)printf("I am a student.\n");(2)printf("%d",3+2);(3)printf("a=%f b=%5d\n", a, a+3);必须强调:"格式字符串"中的格式指示符,必须与"输出项表"中、输出项的数据类型一致,否则会引起输出错误3、格式指示符输出不同类型的数据,要使用不同的类型转换字符。
第四讲结构化程序设计与面向对象程序设计在当今的计算机编程领域,结构化程序设计和面向对象程序设计是两种非常重要的编程方法。
它们各自有着独特的特点和优势,适用于不同的应用场景。
接下来,让我们一起深入了解这两种编程设计方法。
结构化程序设计诞生于 20 世纪 60 年代,它的出现是为了解决当时程序设计中存在的混乱和难以维护的问题。
结构化程序设计强调程序的清晰结构和逻辑流程,通过顺序、选择和循环这三种基本控制结构来构建程序。
顺序结构是最基本的,程序按照语句的先后顺序依次执行。
比如,我们先定义变量,然后进行计算,最后输出结果,这就是一个简单的顺序结构。
选择结构则用于根据不同的条件来决定程序的执行路径。
常见的有ifelse 语句和 switch 语句。
假设我们要判断一个数是奇数还是偶数,就可以使用 ifelse 语句,如果这个数除以 2 的余数为 0,就是偶数,否则就是奇数。
循环结构则允许我们重复执行一段代码,直到满足特定的条件。
比如 for 循环和 while 循环,当我们需要计算 1 到 100 的和时,就可以使用循环结构来实现。
结构化程序设计的优点是显而易见的。
它使得程序的逻辑更加清晰,易于理解和调试。
而且,由于程序的结构比较规范,代码的可读性和可维护性都得到了很大的提高。
然而,随着软件规模的不断扩大和复杂性的增加,结构化程序设计也逐渐暴露出一些局限性。
当程序变得非常复杂时,单纯依靠结构化程序设计可能会导致代码的重复度较高,模块之间的耦合度较大,不利于代码的复用和扩展。
为了解决这些问题,面向对象程序设计应运而生。
面向对象程序设计将数据和对数据的操作封装在一起,形成一个个对象。
对象具有自己的属性和方法,可以与其他对象进行交互。
在面向对象程序设计中,最重要的概念包括类、对象、封装、继承和多态。
类是对象的模板,它定义了对象所具有的属性和方法。
比如,我们可以定义一个“汽车”类,这个类包含了汽车的品牌、颜色、速度等属性,以及加速、刹车等方法。
第4讲函数与结构化程序设计3/724/7230%10%28%9%16%5%2%5/72学习目标☐编写自定义的带默认参数和返回值的函数☐应用递归函数解决递推问题☐分析带如下变量的函数输出结果:全局变量、局部变量、静态变量、自动变量☐将复杂问题设计为可重用的模块来实现7/72:8/729/72#include <iostream>#include <cmath>using namespace std;double calArea(double a, double b, double c){if((a+b<=c)||(a+c<=b)||(b+c<=a)||a<=0||b<=0||c<=0){cout <<“ side length error!”; return -1;}double p=(a+b+c)/2;return sqrt(p*(p-a)*(p-b)*(p-c));}int main ( ){double S1,p1,a1=5.0,b1=5.0,c1=4.0;S1 = calArea(a1, b1 , c1); ……return 0;}构成三角形?简单/清晰面积计算10/7211/7212/72函数的例子参数返回值使用函数☐函数是程序设计语言中最重要的部分,每一个程序都要用到函数。
☐即使不定义新的函数, 在每一个完整的C++程序中都必须有一个main()函数。
☐函数来源于已有的库函数或者自己开发。
软件质量13/7216/7217/72☐下面是一个调用和定义一个简单函数myMax的例子,该函数有二个参数,返回值为两个整数的最大值。
编写自己的函数(1)函数原型声明函数实现函数调用#include <iostream>using namespace std;int myMax (int x, int y);int main(){int a ,b ,c;cout<<"Please enter numbers: ";cin>>a>>b;c=myMax (a,b);cout<<"max= "<<c<<endl;return 0;}int myMax (int x,int y){return (x>y ? x:y);}19/7220/7221/72☐下面是一个调用和定义一个简单函数myMax的例子,该函数有二个参数,返回值为两个整数的最大值。
编写自己的函数(1)函数原型声明函数实现函数调用#include <iostream>using namespace std;int myMax (int x, int y);int main(){int a ,b ,c;cout<<"Please enter numbers: ";cin>>a>>b;c=myMax (a,b);cout<<"max= "<<c<<endl;return 0;}int myMax (int x,int y){return (x>y ? x:y);}23/72#include <iostream>return (m>n ? m:n);}1.函数的使用2.函数的声明和调用3.函数的参数传递4.变量属性5.函数的递归调用6.结构化程序设计思想27/72}28/72#include <iostream>}29/72☐调用函数的一个重要的方面是“参数传递”,即进行参数值的复制工作。
☐C++将信息从主调程序传向被调函数的机制的名称叫做“值调用”。
☐对应的参数值放入函数新分配内存的“容器”中。
参数传递——值调用main a 3b 4myMax m 3n 4#include <iostream>using namespace std;int myMax (int x, int y);int main(){int a=3,b=4,c=0;c=myMax (a,b);cout<<"max= "<<c<<endl;return 0;}int myMax (int m,int n ){return (m>n ? m:n);}#include <iostream>}31/72#include <iostream>return (m>n ? m:n);}32/72#include <iostream>}33/72函数参数的类型匹配☐参数一一对应匹配。
☐主调程序的参数类型要与被调函数的参数类型相匹配。
☐如果参数类型不匹配,主调程序的参数转变为函数的参数类型,这与赋值语句的类型转化规则相同。
☐右边程序运行结果?doubleint#include <iostream>using namespace std;int myMax (int x, int y);int main(){double a=3.4,b=3.8,c;c=myMax (a,b);cout<<"max= "<<c<<endl;return 0;}int myMax (int m,int n ){return (m>n ? m:n);} }35/72}{cout <<a<<endl;}36/7237/72重载函数注意事项☐不要将不同功能的函数声明为重载函数,以免出现调用结果的误解、混淆。
int add(int x,int y);int add(int a,int b);编译器不以形参名来区分int add(int x,int y);void add(int x,int y);编译器不以返回值来区分int add(int x,int y){ return x+y; }float add(float x,float y){ return x-y; }☐重载函数的形参必须不同: 个数不同或类型不同。
☐编译程序将根据实参和形参的类型及个数的最佳匹配来选择调用哪一个函数。
39/72内联函数声明☐}40/72内联函数的使用默认形参值的作用☐函数在声明时可以预先给出默认的形参值,调用时如给出实参,则采用实参值,否则采用预先给出的默认形参值int add(int x=5,inty=6){return x+y;}int main(){add(10,20); //10+20add(10); //10+6add(); //5+6}41/7244/7245/72局部变量与全局变量☐在块中说明的标识符是局部的,仅能在本块中和内部的块中存取。
☐当内部块与外部块有同名标识符时,在内部块中屏蔽外部块的同名标识符。
☐函数参数对该函数也是局部的,可以将它看成在块内,即函数体内说明的变量。
☐一个函数内部定义的变量是内部变量,它只在本函数范围内有效:局部变量;☐函数之外定义的变量是外部变量,有效范围从定义变量的位置开始到本源文件结束:全局变量。
float f1(int a) //函数f1}a有效47/72f1(); cout << “after f1: p,q,r=“ << p << q << r;f2(); cout << “after f2: p,q,r=” << p << q << r; }48/72变量的存储期☐存储期是指变量在内存中的存在期间。
这是从变量值存在的时间角度来分析的。
☐存储期可以分为静态存储期(static storage duration)和动态存储期(dynamic storage duration)。
这是由变量的静态存储方式和动态存储方式决定的。
☐静态存储方式是指在程序运行期间,系统对变量分配固定的存储空间。
而动态存储方式则是在程序运行期间,系统对变量动态地分配存储空间。
49/7251/7252/7253/72int f(int a)//定义f函数,a为形参{ auto int b=0;//定义b为自动变量static int c=3; //定义c为静态局部变量b=b+1;c=c+1;return a+b+c;}int main( ){ int a=2,i;for(i=0;i<3;i++)cout<<f(a)<<″ ″; return 0;}写出每次调用结果?}55/7256/721.函数的使用2.函数的声明和调用3.函数的参数传递4.变量属性5.函数递归调用6.结构化程序设计思想59/7260/7261/72☐问题:有5个人坐在一起,问第5个人多少岁?他说比第4个人大两岁。
问第4个人岁数,他说比第3个人大两岁。
问第3个人,又说比第2个人大两岁。
问第2个人,说比第1个人大两岁。
最后问第1个人,他说是10岁。
请问第5个人多大?☐每一个人的年龄都比其前1个人的年龄大两岁。
即age(n)=10 (n=1)age(n)=age(n-1)+2 (n>1)age(5)=age(4)+2age(4)=age(3)+2age(3)=age(2)+2age(2)=age(1)+2age(1)=10函数的递归调用例子(2)62/7263/72运行结果如下:1864/72☐许多问题既可以用递归方法来处理,也可以用非递归方法来处理。
☐函数的递归调用65/72练习3☐用递归方法求sum=12+22+32+…+n 2,n的值由主函数输入67/72摘自《软件工程思想》68/7269/72结构化程序设计——案例☐需解决问题:班级成绩统计分析分数段语文数学英语0-5924160-69891070-79971880-891210990-100891最高分989795最低分442543平均分80.1475.1572.56统计分析根据班级成绩表,统计计算各科分数段人数、最高分、最低分以及平均分?学号姓名语文数学英语2013001张一8985832013002张二7680902013003张三4448952013004张四6496732013005张五7985722013006张六9294902013007张七6925742013008张八9897862013009张九7572722013010张十8588762013011张十一7271632013012张十二746875一级二级三级(省略71/7272/7273/72大型程序组织方法——文件包含☐“文件包含”处理是指一个源文件可以将另外一个源文件的全部内容包含进来,即将另外的文件包含到本文件之中。