C程序设计_2.ppt
《C程序设计_2.ppt》由会员分享,可在线阅读,更多相关《C程序设计_2.ppt(79页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、高级语言程序设计高级语言程序设计(一一)(CProgramming)第二讲:第二讲:C程序设计基础程序设计基础(二二)本章目标本章目标n掌握函数的定义及调用方式掌握函数的定义及调用方式n掌握函数参数传递方式掌握函数参数传递方式n掌握掌握switch多路选择多路选择n掌握一维数组的定义和使用;掌握一维数组的定义和使用;n掌握简单的文件输入掌握简单的文件输入/输出输出模块化程序设计模块化程序设计n将复杂问题分解为简单问题的程序设计方法称为将复杂问题分解为简单问题的程序设计方法称为结构化程序设计,其特点为:结构化程序设计,其特点为:l自顶向下(自顶向下(top-down design););l逐步细
2、化(逐步细化(stepwise refinement););l模块化(模块化(modular programming););n模块化的好处:模块化的好处:l功能分解的需要;功能分解的需要;l代码重用;代码重用;#include main()double radius,area,perimeter;scanf(“%lf”,&radius);area=3.1415929*radius*radius;perimeter=2*radius*3.1415926;printf(“%6.2f%6.2f”,area,perimeter);C程序设计基础4常量定义常量定义n所有常量可以用所有常量可以用#defi
3、ne来定义,即可以给一个来定义,即可以给一个常量命名。如:常量命名。如:#define PI 3.1415926n使用常量定义的好处:使用常量定义的好处:l可提高程序的可读可提高程序的可读性性l程序的可移植性更程序的可移植性更好,可维护性更好好,可维护性更好#include#define PI 3.1415926main()double radius,area,perimeter;scanf(“%lf”,&radius);area=PI*radius*radius;perimeter=2*radius*PI;printf(“Perimeter=%6.2f”,perimeter);实验实验C程序
4、设计基础5常量定义(续)常量定义(续)在在ANSIC中中,类类型型修修饰饰符符:const-其其变变量量值值在在程程序序执执行行中中不不可可以以通通过过赋赋值值等等方方法法对对它它进进行行修修改改(是是定定义义常常量量的的另另一一种种方方法法,用用#define定定义义的的常常量量无无类类型型,而而用用const定定义义的的常常量量有有类类型)。如:型)。如:constfloatPI=3.14159;#include const float PI=3.14159;main()double radius,area,perimeter;scanf(“%lf”,&radius);area=PI*ra
5、dius*radius;perimeter=2*radius*PI;printf(“Perimeter=%6.2f”,perimeter);#includemain()inta,b,sum;scanf(“%d+%d”,&a,&b);sum=a+b;printf(“Sum=%dn”,sum);tmainmainmainscanfprintf标准输入标准输入/输出库函数输出库函数标准(库)函数标准(库)函数q标准标准I/O库函数库函数#include(scanf,printf,getchar,putchar)q标准数学函数标准数学函数#include(sin,cos,sqrt)q问题问题2.1n问
6、题问题:已知一组三角形的三边(如已知一组三角形的三边(如(2.0,2.0,2.0)、(3.0,4.0,5.0)、(2.5,3.1,3.8)),计算其面积。计算三角形面积的公式为:),计算其面积。计算三角形面积的公式为:#include#includemain()doubles;s=(2.0+2.0+2.0)/2;printf(“%fn”,sqrt(s*(s-2.0)*(s-2.0)*(s-2.0);s=(3.0+4.0+5.0)/2;printf(“%fn”,sqrt(s*(s-3.0)*(s-4.0)*(s-5.0);s=(2.5+3.1+3.8)/2;printf(“%fn”,sqrt(s
7、*(s-2.5)*(s-3.1)*(s-3.8);对于这样的有规律的对于这样的有规律的重复计算,可以用更重复计算,可以用更好的方法:好的方法:函数函数来解决来解决doublesqrt(doublex)为标准数学库中函数,为标准数学库中函数,使用前应加上使用前应加上#include定义求三角形面积函数定义求三角形面积函数tri_area()doublea,doubleb,doublecdouble函数名函数名需要传递给函数的数据(参数):数据类型、数据名称需要传递给函数的数据(参数):数据类型、数据名称函数计算结果(返回)类型函数计算结果(返回)类型double函数是如何对数据进行计算函数是如何
8、对数据进行计算(函数体)函数体)doublea,doubleb,doublectri_area计算计算语句语句tri_area函数定义函数定义double tri_area(double a,double b,double c)double s,area;s=(a+b+c)/2.0;area=sqrt(s*(s-a)*(s-b)*(s-c);return area;函数定义头部,其中函数定义头部,其中double为函数类型为函数类型tri_area为函数名为函数名a,b,c为函数参数为函数参数函数体函数体局部变量局部变量函数返回函数返回(return)语语句句,返回计算结果返回计算结果函数定义
9、函数定义n在在ANSI C标准中,函数定义形式为:标准中,函数定义形式为:类型类型 函数名(参数说明)函数名(参数说明)局部变量定义或说明局部变量定义或说明 语句语句0个、一个或多个、一个或多个参数,多个参个参数,多个参数以逗号数以逗号,分隔分隔称为称为形参形参,格式:,格式:数据类型数据类型参数名参数名函数定义(续)函数定义(续)n函数名一般是标识符,一个程序只有一个函数名一般是标识符,一个程序只有一个main函数,函数,其它函数名可随意取,当然最好是有助于记忆的名其它函数名可随意取,当然最好是有助于记忆的名字。字。n局部变量定义或说明局部变量定义或说明可有可无可有可无,在,在ANSI C标
10、准中,标准中,局部变量定义或说明应放在局部变量定义或说明应放在函数体的最前面函数体的最前面。n在在ANSI C标准中,函数(返回值)类型标准中,函数(返回值)类型不允许省略不允许省略,即使是返回整型值(即使是返回整型值(int),当函数无返回值时,应),当函数无返回值时,应其类型说明为其类型说明为void类型。类型。若需要返回值:若需要返回值:return表达式;表达式;若不需要返回值:若不需要返回值:return;或者没有或者没有return语句语句函数定义(续)函数定义(续)*在在C语言中,函数不能嵌套定义。语言中,函数不能嵌套定义。如,下面定义在如,下面定义在C语言中是不充许的:语言中是
11、不充许的:f()g()问题问题2.1:代码实现:代码实现#include#includedoubletri_area(doublea,doubleb,doublec)doubles,area;s=(a+b+c)/2.0;area=sqrt(s*(s-a)*(s-b)*(s-c);return(area);intmain()doublearea;area=tri_area(2.0,2.0,2.0);printf(“%fn”,area);area=tri_area(3.0,4.0,5.0);printf(“%fn”,area);area=tri_area(2.5,3.1,3.8);printf(“
12、%fn”,area);return0;函数调用函数调用实验实验或者:或者:intmain()printf(“%fn”,tri_area(2.0,2.0,2.0);printf(“%fn”,tri_area(3.0,4.0,5.0);printf(“%fn”,tri_area(2.5,3.1,3.8);return0;函数调用函数调用函数调用形式:函数调用形式:函数名(函数名(实参实参表表)其中其中实参个数、类型、排列次序应和形参定义时一实参个数、类型、排列次序应和形参定义时一致致。函数通过函数通过return语句将值返回给调用函数。它有两种语句将值返回给调用函数。它有两种使用形式:使用形式:1
13、)return expr;2)return;注意:使用注意:使用return语句只能返回一个值。语句只能返回一个值。函数调用可以函数调用可以作为单独语句,作为单独语句,也可以出现在也可以出现在表达式中表达式中函数定义与调用(续)函数定义与调用(续)*注意:当一个函数带有返回值时,应注意:当一个函数带有返回值时,应保证函数每个可能执行路径上应有返回值保证函数每个可能执行路径上应有返回值。如。如下面将大写字母转换为小写字母函数:下面将大写字母转换为小写字母函数:char toLower(char c)if(c=A&c=A&c=Z)return c+a A;return c;问题问题2.1:代码实现
14、:代码实现#include#includeintmain()printf(“%fn”,tri_area(2.0,2.0,2.0);printf(“%fn”,tri_area(3.0,4.0,5.0);printf(“%fn”,tri_area(2.5,3.1,3.8);return0;doubletri_area(doublea,doubleb,doublec)doubles,area;s=(a+b+c)/2.0;area=sqrt(s*(s-a)*(s-b)*(s-c);return(area);doubletri_area(doublea,doubleb,doublec);函数原型函数原型
15、实验实验函数原型说明(函数原型说明(prototype):):n在在ANSI C标准中,所有标准中,所有函数调用之前必须要有函数定函数调用之前必须要有函数定义或原型说明义或原型说明,函数原型用以说明函数的返回值类型、函数原型用以说明函数的返回值类型、函数参数类型、个数及次序函数参数类型、个数及次序。函数原型说明有两种形。函数原型说明有两种形式:式:l直接使用函数的头部(函数头部后加分号)直接使用函数的头部(函数头部后加分号)。如,。如,doubletri_area(doublea,doubleb,doublec);l在原型说明中仅给出类型、个数及次序,在原型说明中仅给出类型、个数及次序,无形参
16、无形参变量名变量名。如,。如,doubletri_area(double,double,double);注意:函数原型说明的类型、参数类型、个数及次序注意:函数原型说明的类型、参数类型、个数及次序必须与函数定义时一致,否则会产生错误。必须与函数定义时一致,否则会产生错误。函数参数函数参数void swap(int x,int y)int temp;temp=x;x=y;y=temp;intmain()int a=2,b=3;swap(a,b);return 0;请问请问a和和b是否交换是否交换?不能!不能!调用调用swap后后调用调用swap(a,b)如何通过函数调用改变参数的如何通过函数调用
17、改变参数的值将在后续章节中介绍。值将在后续章节中介绍。拷贝拷贝:传值调用传值调用23ab23xy32xy实验实验函数参数(续)函数参数(续)n注意:注意:C函数的参数传递全部采用传值。传值调用实函数的参数传递全部采用传值。传值调用实际上重新拷贝了一个副本给形参际上重新拷贝了一个副本给形参。传值的好处是传值调用不会改变调传值的好处是传值调用不会改变调用函数实参变量的内容,因此,可用函数实参变量的内容,因此,可避免不必要的副作用。避免不必要的副作用。问题问题2.2:求素数:求素数n读入一个整数,求该整数范围内的所有素数。读入一个整数,求该整数范围内的所有素数。n解题步骤:解题步骤:读入一个整数到读
18、入一个整数到n;n;for(m=2;m=n;i+)for(m=2;m=n;i+)if(mif(m是素数)是素数)输出输出m;m;可定义一个函数可定义一个函数intisprime(intn)来判断一个整数是否为来判断一个整数是否为素数,若是返回素数,若是返回1,否,否则返回则返回0。问题问题2.2:代码实现:代码实现int isprime(int n)int m;if(n=1)return 0;for(m=2;m*m=n;m+)if(n%m=0)/*存在因子,不是素数存在因子,不是素数*/return 0;return 1;主函数主函数#includeintisprime(intn);intma
19、in()intn,m;scanf(“%d”,&n);for(m=2;m=n;m+)if(isprime(m)printf(“%d“,m);return0;实验实验局部变量局部变量n局部变量(局部变量(local variable),又称自动变量:在函数(或块结构)又称自动变量:在函数(或块结构)中定义的变量。中定义的变量。l使用范围:只在定义它的使用范围:只在定义它的函数或块结构内有效函数或块结构内有效。l定义时可加定义时可加auto关键字关键字,也可省略:,也可省略:auto int index;等同于:等同于:int index;l编译程序不对局部(自动)变量给予隐含的初值,故其初编译程序
20、不对局部(自动)变量给予隐含的初值,故其初值不确定。因此,每次使用前,值不确定。因此,每次使用前,必须明确地置初值必须明确地置初值。l局部(自动)变量随函数的调用而存在,函数返回后将消局部(自动)变量随函数的调用而存在,函数返回后将消失,失,由一次调用到下一次调用之间不保持值,每次调用函由一次调用到下一次调用之间不保持值,每次调用函数时都重新初始化数时都重新初始化。l形参是自动变量形参是自动变量,使用范围仅限于相应函数内。,使用范围仅限于相应函数内。计算计算x的幂的幂:#includedoublepower(doublex,intn);intmain()intn,m,i;doublef;sca
21、nf(“%d”,&m);for(i=0;i0)f=f*x;n-;return(f);doublef;doublef;f=1;实验实验如何划分函数如何划分函数n程序中可能有程序中可能有重复出现的相同或相似的计算片段重复出现的相同或相似的计算片段,可以考虑从中抽取出共同的东西可以考虑从中抽取出共同的东西,定义为函数。这定义为函数。这样可以缩短程序代码,提高程序的可读性和易修样可以缩短程序代码,提高程序的可读性和易修改性。改性。n程序中具有程序中具有逻辑独立的片段逻辑独立的片段定义为函数。这样做定义为函数。这样做主要用于分解程序的复杂性。主要用于分解程序的复杂性。#includedoublepowe
22、r(doublex,intn)inti;doublep;p=1;for(i=1;i=n;+i)p=p*x;return(p);intmain()floatx;scanf(“%f”,&x);printf(“Xpower2=%fn”,power(x,2);printf(“Xpower3=%fn”,power(x,3);printf(“Xpower4=%fn”,power(x,4);return0;#includevoidprintPower(doublex,intn)inti;doublep;p=1;for(i=1;i=n;+i)p=p*x;printf(“Xpower%d=%fn”,n,p);i
23、ntmain()floatx;scanf(“%f”,&x);printPower(x,2);printPower(x,3);printPower(x,4);return0;实验实验27问题问题2.3:简易计算器:简易计算器【问题描述问题描述】编程实现简单的交互式计算器,能进行整数的编程实现简单的交互式计算器,能进行整数的+-*/运算。运算。【输入形式输入形式】从键盘读入如下形式的输入行,数据与运算符之间可以从键盘读入如下形式的输入行,数据与运算符之间可以用一个空格用一个空格分隔分隔:120 350 +5 2 /【输出形式输出形式】若是若是/运算,运算,小数点后保留两位有效数字小数点后保留两位有
24、效数字4702.50 28问题问题2.3:问题分析:问题分析n如何读入数据及运算符?如何读入数据及运算符?int data1,data2;char op;scanf(“%d%d%c”,&data1,&data2,&op);29问题问题2.3:算法设计:算法设计int data1,data2,result1;float result2;char op;从标准输入中读入整数从标准输入中读入整数data1,整数,整数data2及运算符及运算符op判断判断op:若为若为+,则,则result1=data1+data2;若为若为-,则,则result1=data1-data2;若为若为*,则,则resu
25、lt1=data1*data2;若为若为/,则,则result2=data1/data2;若若op为为+,-或或*,输出结果,输出结果result1;若若op为为/,输出结果,输出结果result2;op值加运算+减运算乘运算 除运算-*/多路选择多路选择注意:由于注意:由于data1和和data2为整为整数,结果仍为整数。要用数,结果仍为整数。要用强制强制类型类型转换才能得到小数位。转换才能得到小数位。result2=(float)data1/data2;多路选择,可使用多路选择,可使用if-elseif语句实现。在此,语句实现。在此,更适合更适合switch语句。语句。第三讲:程序设计方法
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 _2
限制150内