欢迎来到得力文库 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
得力文库 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    C程序设计_2.ppt

    • 资源ID:82769348       资源大小:1.20MB        全文页数:79页
    • 资源格式: PPT        下载积分:16金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要16金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C程序设计_2.ppt

    高级语言程序设计高级语言程序设计(一一)(CProgramming)第二讲:第二讲:C程序设计基础程序设计基础(二二)本章目标本章目标n掌握函数的定义及调用方式掌握函数的定义及调用方式n掌握函数参数传递方式掌握函数参数传递方式n掌握掌握switch多路选择多路选择n掌握一维数组的定义和使用;掌握一维数组的定义和使用;n掌握简单的文件输入掌握简单的文件输入/输出输出模块化程序设计模块化程序设计n将复杂问题分解为简单问题的程序设计方法称为将复杂问题分解为简单问题的程序设计方法称为结构化程序设计,其特点为:结构化程序设计,其特点为:l自顶向下(自顶向下(top-down design););l逐步细化(逐步细化(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所有常量可以用所有常量可以用#define来定义,即可以给一个来定义,即可以给一个常量命名。如:常量命名。如:#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程序设计基础5常量定义(续)常量定义(续)在在ANSIC中中,类类型型修修饰饰符符:const-其其变变量量值值在在程程序序执执行行中中不不可可以以通通过过赋赋值值等等方方法法对对它它进进行行修修改改(是是定定义义常常量量的的另另一一种种方方法法,用用#define定定义义的的常常量量无无类类型型,而而用用const定定义义的的常常量量有有类类型)。如:型)。如:constfloatPI=3.14159;#include const float PI=3.14159;main()double radius,area,perimeter;scanf(“%lf”,&radius);area=PI*radius*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问题问题:已知一组三角形的三边(如已知一组三角形的三边(如(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*(s-2.5)*(s-3.1)*(s-3.8);对于这样的有规律的对于这样的有规律的重复计算,可以用更重复计算,可以用更好的方法:好的方法:函数函数来解决来解决doublesqrt(doublex)为标准数学库中函数,为标准数学库中函数,使用前应加上使用前应加上#include定义求三角形面积函数定义求三角形面积函数tri_area()doublea,doubleb,doublecdouble函数名函数名需要传递给函数的数据(参数):数据类型、数据名称需要传递给函数的数据(参数):数据类型、数据名称函数计算结果(返回)类型函数计算结果(返回)类型double函数是如何对数据进行计算函数是如何对数据进行计算(函数体)函数体)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)语语句句,返回计算结果返回计算结果函数定义函数定义n在在ANSI C标准中,函数定义形式为:标准中,函数定义形式为:类型类型 函数名(参数说明)函数名(参数说明)局部变量定义或说明局部变量定义或说明 语句语句0个、一个或多个、一个或多个参数,多个参个参数,多个参数以逗号数以逗号,分隔分隔称为称为形参形参,格式:,格式:数据类型数据类型参数名参数名函数定义(续)函数定义(续)n函数名一般是标识符,一个程序只有一个函数名一般是标识符,一个程序只有一个main函数,函数,其它函数名可随意取,当然最好是有助于记忆的名其它函数名可随意取,当然最好是有助于记忆的名字。字。n局部变量定义或说明局部变量定义或说明可有可无可有可无,在,在ANSI C标准中,标准中,局部变量定义或说明应放在局部变量定义或说明应放在函数体的最前面函数体的最前面。n在在ANSI C标准中,函数(返回值)类型标准中,函数(返回值)类型不允许省略不允许省略,即使是返回整型值(即使是返回整型值(int),当函数无返回值时,应),当函数无返回值时,应其类型说明为其类型说明为void类型。类型。若需要返回值:若需要返回值:return表达式;表达式;若不需要返回值:若不需要返回值:return;或者没有或者没有return语句语句函数定义(续)函数定义(续)*在在C语言中,函数不能嵌套定义。语言中,函数不能嵌套定义。如,下面定义在如,下面定义在C语言中是不充许的:语言中是不充许的: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(“%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)return expr;2)return;注意:使用注意:使用return语句只能返回一个值。语句只能返回一个值。函数调用可以函数调用可以作为单独语句,作为单独语句,也可以出现在也可以出现在表达式中表达式中函数定义与调用(续)函数定义与调用(续)*注意:当一个函数带有返回值时,应注意:当一个函数带有返回值时,应保证函数每个可能执行路径上应有返回值保证函数每个可能执行路径上应有返回值。如。如下面将大写字母转换为小写字母函数:下面将大写字母转换为小写字母函数:char toLower(char c)if(c=A&c=A&c=Z)return c+a A;return c;问题问题2.1:代码实现:代码实现#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);函数原型函数原型实验实验函数原型说明(函数原型说明(prototype):):n在在ANSI C标准中,所有标准中,所有函数调用之前必须要有函数定函数调用之前必须要有函数定义或原型说明义或原型说明,函数原型用以说明函数的返回值类型、函数原型用以说明函数的返回值类型、函数参数类型、个数及次序函数参数类型、个数及次序。函数原型说明有两种形。函数原型说明有两种形式:式:l直接使用函数的头部(函数头部后加分号)直接使用函数的头部(函数头部后加分号)。如,。如,doubletri_area(doublea,doubleb,doublec);l在原型说明中仅给出类型、个数及次序,在原型说明中仅给出类型、个数及次序,无形参无形参变量名变量名。如,。如,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)如何通过函数调用改变参数的如何通过函数调用改变参数的值将在后续章节中介绍。值将在后续章节中介绍。拷贝拷贝:传值调用传值调用23ab23xy32xy实验实验函数参数(续)函数参数(续)n注意:注意:C函数的参数传递全部采用传值。传值调用实函数的参数传递全部采用传值。传值调用实际上重新拷贝了一个副本给形参际上重新拷贝了一个副本给形参。传值的好处是传值调用不会改变调传值的好处是传值调用不会改变调用函数实参变量的内容,因此,可用函数实参变量的内容,因此,可避免不必要的副作用。避免不必要的副作用。问题问题2.2:求素数:求素数n读入一个整数,求该整数范围内的所有素数。读入一个整数,求该整数范围内的所有素数。n解题步骤:解题步骤:读入一个整数到读入一个整数到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);intmain()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编译程序不对局部(自动)变量给予隐含的初值,故其初编译程序不对局部(自动)变量给予隐含的初值,故其初值不确定。因此,每次使用前,值不确定。因此,每次使用前,必须明确地置初值必须明确地置初值。l局部(自动)变量随函数的调用而存在,函数返回后将消局部(自动)变量随函数的调用而存在,函数返回后将消失,失,由一次调用到下一次调用之间不保持值,每次调用函由一次调用到下一次调用之间不保持值,每次调用函数时都重新初始化数时都重新初始化。l形参是自动变量形参是自动变量,使用范围仅限于相应函数内。,使用范围仅限于相应函数内。计算计算x的幂的幂:#includedoublepower(doublex,intn);intmain()intn,m,i;doublef;scanf(“%d”,&m);for(i=0;i0)f=f*x;n-;return(f);doublef;doublef;f=1;实验实验如何划分函数如何划分函数n程序中可能有程序中可能有重复出现的相同或相似的计算片段重复出现的相同或相似的计算片段,可以考虑从中抽取出共同的东西可以考虑从中抽取出共同的东西,定义为函数。这定义为函数。这样可以缩短程序代码,提高程序的可读性和易修样可以缩短程序代码,提高程序的可读性和易修改性。改性。n程序中具有程序中具有逻辑独立的片段逻辑独立的片段定义为函数。这样做定义为函数。这样做主要用于分解程序的复杂性。主要用于分解程序的复杂性。#includedoublepower(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);intmain()floatx;scanf(“%f”,&x);printPower(x,2);printPower(x,3);printPower(x,4);return0;实验实验27问题问题2.3:简易计算器:简易计算器【问题描述问题描述】编程实现简单的交互式计算器,能进行整数的编程实现简单的交互式计算器,能进行整数的+-*/运算。运算。【输入形式输入形式】从键盘读入如下形式的输入行,数据与运算符之间可以从键盘读入如下形式的输入行,数据与运算符之间可以用一个空格用一个空格分隔分隔:120 350 +5 2 /【输出形式输出形式】若是若是/运算,运算,小数点后保留两位有效数字小数点后保留两位有效数字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;若为若为*,则,则result1=data1*data2;若为若为/,则,则result2=data1/data2;若若op为为+,-或或*,输出结果,输出结果result1;若若op为为/,输出结果,输出结果result2;op值加运算+减运算乘运算 除运算-*/多路选择多路选择注意:由于注意:由于data1和和data2为整为整数,结果仍为整数。要用数,结果仍为整数。要用强制强制类型类型转换才能得到小数位。转换才能得到小数位。result2=(float)data1/data2;多路选择,可使用多路选择,可使用if-elseif语句实现。在此,语句实现。在此,更适合更适合switch语句。语句。第三讲:程序设计方法-问题分析30多路选择:多路选择:switch语句语句n基本形式:基本形式:switch(表达式)(表达式)case常量表达式常量表达式1:语句:语句1或空;或空;case常量表达式常量表达式2:语句:语句2或空;或空;case常量表达式常量表达式n:语句:语句n或空;或空;default:语句:语句n+1或空;或空;n语义动作为:语义动作为:先计算表达式的值;先计算表达式的值;该值与每一个该值与每一个case后的常量进行比较;后的常量进行比较;若匹配,则控制就转向该常量后的语句;若匹配,则控制就转向该常量后的语句;若不匹配,若有若不匹配,若有default,则转向,则转向default后的语句,否则什么也后的语句,否则什么也不做;不做;S1S2SnSn+1EC1C2Cndefault因此,因此,switch语句特别适合于依据一组常量值来进行判断语句特别适合于依据一组常量值来进行判断的多路选择。的多路选择。第三讲:程序设计方法-问题分析31多路选择:多路选择:switch语句语句(续续)注意:注意:1.常量表达式必须是常量表达式必须是整型整型(if_else if可能根据任意条件来可能根据任意条件来进行多路选择进行多路选择););2.在同一个在同一个switch中中不应出现两个具有同样的常量不应出现两个具有同样的常量;3.default语句如果有,只允许出现一次,语句如果有,只允许出现一次,default可出现在可出现在switch中的任何位置,通常放在最后;中的任何位置,通常放在最后;4.case和和default本身不改变控制流(这与本身不改变控制流(这与pascal中的中的case语语句不同),句不同),中断离开中断离开switch要用要用break;5.case后的语句可以是单个语句,也可以是复合语句(但后的语句可以是单个语句,也可以是复合语句(但不带开头和结尾的花括号)不带开头和结尾的花括号)32#include int main()int data1,data2,result1;float result2;char op;scanf(“%d%d%c”,&data1,&data2,&op);switch(op)case+:result1=data1+data2;case-:result1=data1-data2;case*:result1=data1*data2;case/:result2=(float)data1/data2;default:printf(Input error!n);if(op=+|op=-|op=*)printf(%d“,result1);else if(op=/)printf(“%.2fn“,result2);return 0;测试数据测试数据:120350+1212-352*32/break;break;break;break;break;33问题问题2.3:常见问题:常见问题n在在switch中遗漏中遗漏break#include int main()int data1,data2,result1;float result2;char op;scanf(“%d%c%d”,&data1,&op,&data2);switch(op)case+:result1=data1+data2;break;case-:result1=data1-data2;break;case*:result1=data1*data2;break;case/:result2=(float)data1/data2;break;default:printf(Input error!n);break;if(op=+|op=-|op=*)printf(%d%c%d=%dn“,data1,op,data2,result1);else if(op=/)printf(%d%c%d=%.2fn“,data1,op,data2,result2);return 0;测试数据为测试数据为:120+350结果为结果为:120+350=-230Why?问题问题2.4n问题:问题:“在一行上输入在一行上输入10个整数,在下一行上反个整数,在下一行上反序输出序输出”。n输入样例:输入样例:2332 455 5 67 78 9 10 467 3 23n输出样例:输出样例:23 3 467 10 9 78 67 5 455 2332问题问题2.4:问题分析:问题分析n首先遇到的问题是如何保存输入的数据?首先遇到的问题是如何保存输入的数据?n以目前所学的知识,我们可以设置以目前所学的知识,我们可以设置10个变量来存个变量来存储输入如:储输入如:int data1,data2,data10;n这样做的缺点:这样做的缺点:l程序处理数据非常烦琐,如我们必须依次读入程序处理数据非常烦琐,如我们必须依次读入每个数据(不能用循环);每个数据(不能用循环);l程序不具扩展性,如果我们要处理程序不具扩展性,如果我们要处理100个、个、1000个甚至更多的数据,怎么办?个甚至更多的数据,怎么办?n如何如何 存储类型相同并且紧密相关的一组数据?存储类型相同并且紧密相关的一组数据?使用数组使用数组数组的定义与初始化数组的定义与初始化n数组是变量的有序集合,数组的所有成员(数组数组是变量的有序集合,数组的所有成员(数组元素)都元素)都具有相同的数据类型具有相同的数据类型。n数组定义一般采用如下格式:数组定义一般采用如下格式:类型类型 数组名数组名长度长度;长度为长度为常量表达式常量表达式数组的定义与初始化(续)数组的定义与初始化(续)n例如:例如:int a50;a0 a49a0a1数组元素的下标数组元素的下标是从是从0开始,即数开始,即数组中第一个元素组中第一个元素的下标为的下标为0数组的定义与初始化(续)数组的定义与初始化(续)注意注意:C语言不支持动态数组,即数组的长语言不支持动态数组,即数组的长度度必须在编译时确定下来必须在编译时确定下来,而,而不是在运行中不是在运行中根据需要临时决定根据需要临时决定。但。但C语言提供了动态分语言提供了动态分配存贮函数,利用它可实现动态申请空间。配存贮函数,利用它可实现动态申请空间。intlength;scanf(“%d”,&length);doubleslength;长度必须是长度必须是常量表达式常量表达式实验实验数组的定义与初始化(续)数组的定义与初始化(续)n数组初始化:可以在定义时初始化一个数组。下数组初始化:可以在定义时初始化一个数组。下面是一些数组初始化实例:面是一些数组初始化实例:double sales5=12.25,32.50,16.90,23,45.68;double sales =12.25,32.50,16.90,23,45.68;int list5=6,5,12;相当于:相当于:int list5=6,5,12,0,0以实际元素以实际元素的个数决定的个数决定数组的大小数组的大小实验实验charstring10=h,e,l,l,o,0charstring10=“hello”;charstring=“hello”;注意:注意:用字符串常量初始化一个字符数组时,用字符串常量初始化一个字符数组时,其长度应至少比字符个数多其长度应至少比字符个数多1。数组的定义与初始化(续)数组的定义与初始化(续)hle l0o0 1 24359实验实验数组元素的访问数组元素的访问n初始化数组初始化数组int array10,i;for(i=0;i10;i+)arrayi=1;n读入数组元素读入数组元素int array10,i;for(i=0;i10;i+)scanf(“%d”,&arrayi);注意:注意:不要将循环条件写为不要将循环条件写为i=10。这是初学者常犯的错误。这是初学者常犯的错误。如果一个数组的长度为如果一个数组的长度为N,则遍,则遍历数组的循环常写为:历数组的循环常写为:for(i=0;iN;i+)或或for(i=0;i=N-1;i+)编译器不提供数组编译器不提供数组下标越界检查,下下标越界检查,下标越界时可以通过标越界时可以通过编译,但运行时会编译,但运行时会出错出错格式:数组名格式:数组名下标下标实验实验数组元素的访问(续)数组元素的访问(续)n求数组中最大元素求数组中最大元素maxIndex=0;/*maxIndex记录最大元素的下标记录最大元素的下标*/for(i=0;iN;i+)if(arraymaxIndex arrayi)maxIndex=i;maxElement=arraymaxIndex;实验实验或者:或者:maxElement=array0;for(i=1;iN;i+)if(maxElementarrayi)maxElement=arrayi;数组处理的限制数组处理的限制n在在C中不允许对数组进行整体操作。下面用法是错中不允许对数组进行整体操作。下面用法是错误的:误的:int x10,y10;scanf(“%d”,x);y=x;if(x=y)y=1,2,3,4,5;比较数组比较数组正确做法是:正确做法是:for(i=0;i10;i+)if(xi!=yi)正确做法是:正确做法是:for(i=0;i10;i+)scanf(“%d”,&xi);正确做法是:正确做法是:for(i=0;i10;i+)yi=xi;复制数组复制数组只能在定义数组时整体只能在定义数组时整体初始初始化化,不能整体,不能整体赋值赋值。实验实验问题问题2.4n问题:问题:“在一行上输入在一行上输入10个整数,在下一行上反个整数,在下一行上反序输出序输出”。n输入样例:输入样例:2332 455 5 67 78 9 10 467 3 23n输出样例:输出样例:23 3 467 10 9 78 67 5 455 2332问题问题2.4:解题步骤:解题步骤1、定义保存数据的数组、定义保存数据的数组data10和下标变量和下标变量index;2、index设为数组第一个元素的下标;设为数组第一个元素的下标;3、While index小于小于103.1、读入数据并保存到下标为、读入数据并保存到下标为index的数组元素中;的数组元素中;3.2、index增增1;4、index设为最后一个元素的下标;设为最后一个元素的下标;5、While index大于等于大于等于05.1、打印下标为、打印下标为index的数组元素;的数组元素;5.2、index减减1;问题问题2.4程序实现:程序实现:#includeintmain()intdata10;intindex;for(index=0;index=0;index-)printf(%d,dataindex);return0;实验实验问题问题2.5n问题:统计输入中每个数字字符的出现次数问题:统计输入中每个数字字符的出现次数n分析:分析:l方法一:显然可以使用方法一:显然可以使用10个个int型变量来分别存型变量来分别存储每个数字字符的出现次数。然后在程序中,储每个数字字符的出现次数。然后在程序中,使用使用if_else if来分别统计每个数字字符的出现次来分别统计每个数字字符的出现次数。(该方法太笨拙)数。(该方法太笨拙)问题问题2.5:分析(续):分析(续)n方法二方法二l可以使用数组来存储每个数字字符的出现次数。可以使用数组来存储每个数字字符的出现次数。如:如:int digit10;l如何将输入的数字字符与相应数组下标对应?如何将输入的数字字符与相应数组下标对应?表达式:表达式:c 0可将数字字符可将数字字符c转换为相应整数。因此,下面转换为相应整数。因此,下面语句可统计每个数字字符的出现次数:语句可统计每个数字字符的出现次数:digitc-0+;问题问题2.5:代码实现:代码实现#include int main()int i,c,digit10=0,0,0,0,0,0,0,0,0,0;while(c=getchar()!=EOF)if(c=0&c=9)digitc-0+;for(i=0;i10;i+)printf(“Number of%d:%dn”,i,digiti);return 0;如何将打印整数数组如何将打印整数数组封装成一个函数?封装成一个函数?实验实验例:打印整数数组函数例:打印整数数组函数voidprint(inta10)inti;for(i=0;i10;i+)printf(“%dn”,ai);voidprint(inta,intlength)inti;for(i=0;i=0&c=9)digitc-0+;print(digit,10);return0;数组作为实参,只写数组作为实参,只写数组名,千万不要写数组名,千万不要写成成digit10#includevoidprint(inta,intlength)inti;for(i=0;i=0&c=0&si=9;i+)n=10*n+si 0;return(sign*n);字符数组。空语句条件运算符:条件运算符:?:先计算先计算表达式表达式1,若其值为非零,则,若其值为非零,则整个表达式结果为整个表达式结果为表达式表达式2的值,否的值,否则就为则就为表达式表达式3的值。的值。#include int atoi(char s);main()char s20;scanf(“%s”,s);printf(“%dn”,atoi(s);实验实验问题问题2.7:将字符串颠倒“”方法分析方法分析交换问题问题2.7:代码实现:代码实现void reverse(char s)int c,i,j;for(i=0,j=str_len(s)-1;i j;i+,j-)c=si;si=sj;sj=c;intstr_len(chars)inti=0;while(si!=0)+i;return(i);#include int reverse(char s);int str_len(char s);main()char s20;scanf(“%s”,s);reverse(s);printf(“%sn”,s);当有多个循环变量时,要用逗当有多个循环变量时,要用逗号隔开。号隔开。逗号表达式逗号表达式:如:如e1,e2顺序求顺序求e1和和e2,以,以e2值作为整个表达式值作为整个表达式结果的值。如,结果的值。如,a=(t=3,t+2);结果为结果为5字符数组作为函数参数传递时,字符数组作为函数参数传递时,不需要同时传递数组长度。因为不需要同时传递数组长度。因为字符数组中字符串是以字符数组中字符串是以0结结束的。束的。实验实验问题问题2.8:将文件:将文件in.txt拷贝至新文件拷贝至新文件out.txt中。中。问题分析:问题分析:如何读取、保存文件内容?如何读取、保存文件内容?将标准输入拷贝到标准输出非常简单:将标准输入拷贝到标准输出非常简单:#includeintmain()intc;while(c=getchar()!=EOF)putchar(c);return0;文件文件操作文件操作n文件操作基本过程文件操作基本过程打开文件打开文件读写文件读写文件关闭文件关闭文件首先在程序文件的头部应首先在程序文件的头部应有如下语句:有如下语句:#includestream(流,读写通道)(流,读写通道)程序结束前应程序结束前应该关闭文件该关闭文件!程序程序文件文件文件打开文件打开文件FILE*fp;fp=fopen(文件名,文件使用方式);文件名,文件使用方式);FILE 是是文件中定义的结构数据类型,包含文件有关信息:文件中定义的结构数据类型,包含文件有关信息:读或写工作方式;当前读读或写工作方式;当前读/写位置等等。写位置等等。一般用户不必关心一般用户不必关心。若成功打开指定文件,则若成功打开指定文件,则fopen返回返回指向该文件的指向该文件的FILE类型指针类型指针;若打开文件失败,则返回若打开文件失败,则返回 NULL。文件指针:与打开的文件文件指针:与打开的文件绑定在一起,以后将使用绑定在一起,以后将使用该指针实现对文件的所有该指针实现对文件的所有操作操作文件打开文件(续)打开文件(续)fp=fopen(文件名,文件使用方式);文件名,文件使用方式);文件名:文件名:字符串字符串,可以只写文件名,也可以包含路径。,可以只写文件名,也可以包含路径。只写文件名时,表示文件在只写文件名时,表示文件在当前目录当前目录下,当前目录是指:下,当前目录是指:从从VC运行时,运行时,工程文件和源程序所在目录工程文件和源程序所在目录。双击双击*.exe程序运行时,该程序运行时,该*.exe程序所在目录。程序所在目录。包含路径实例:包含路径实例:“c:temptext.txt”“c:temptext.txt”文件打开文件(续)打开文件(续)fp=fopen(文件名,文件使用方式文件名,文件使用方式);使用方式也是字符串,表示打开文件的方式,字符流方使用方式也是字符串,表示打开文件的方式,字符流方式包括:式包括:“r”:表示读;表示读;“w”:表示写;表示写;“a”:表示添加;表示添加;“r+”:表示读写已有文件;表示读写已有文件;“w+”:表示读写新文件;表示读写新文件;“a+”:表示读及添加;表示读及添加;文件打开文件(续)打开文件(续)n用用“w”或或“a”方式调用方式调用fopen打开一个不存在的文件,系统打开一个不存在的文件,系统会首先会首先自动创建该文件自动创建该文件。然后再把它打开。然后再把它打开。n 用用“w”方式打一个已存在的文件,则方式打一个已存在的文件,则该文件原有内容全部该文件原有内容全部消失消失。n 用用“a”方式打开一个已存在的文件,则方式打开一个已存在的文件,则原文件内容保留不原文件内容保留不变,新添加的内容将加到它的后面去变,新添加的内容将加到它的后面去。n 用用“r”方式打开一个已存在的文件是正常的使用文件,若方式打开一个已存在的文件是正常的使用文件,若用用“r”方式而打开一个尚未存在的文件,则会出错方式而打开一个尚未存在的文件,则会出错,此时,此时

    注意事项

    本文(C程序设计_2.ppt)为本站会员(s****8)主动上传,得力文库 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知得力文库 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于得利文库 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

    © 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

    黑龙江省互联网违法和不良信息举报
    举报电话:0468-3380021 邮箱:hgswwxb@163.com  

    收起
    展开